Package cc.redberry.core.combinatorics

Examples of cc.redberry.core.combinatorics.Symmetry


            s[i] = i;
        for (int j = 0; j < data.length; ++j, ++i)
            s[i] = symmetry.newIndexOf(j) + data.from;
        for (; i < indicesTypeStructure.size(); ++i)
            s[i] = i;
        symmetries.addUnsafe(new Symmetry(s, symmetry.isAntiSymmetry()));
            return true;
    }
View Full Code Here


        SimpleTensor st = (SimpleTensor) parse(tensor);
        addSymmetry(st, type, sign, permutation);
    }

    public void addSymmetry(SimpleTensor st, IndexType type, boolean sign, int... permutation) {
        addSymmetry(st, type, new Symmetry(permutation, sign));
    }
View Full Code Here

                        || descriptor.getIndicesTypeStructure().size() != 2)
                    return;
                if (descriptor.getIndicesTypeStructure().get(0) != descriptor.getIndicesTypeStructure().get(1))
                    throw new IllegalArgumentException("Wrong metric.");
                descriptor.addSymmetry(
                        type, new Symmetry(new int[]{1, 0}, false));
                if (metricNames == null)
                    metricNames = new int[]{descriptor.getId()};
                else {
                    metricNames = Arrays.copyOf(metricNames, metricNames.length + 1);
                    metricNames[metricNames.length - 1] = descriptor.getId();
                    Arrays.sort(metricNames);
                }
            } else if (descriptor.getName().equals(kroneckerName)) {
                if (descriptor.getIndicesTypeStructure().size() != 2
                        || (type = descriptor.getIndicesTypeStructure().get(0)) != descriptor.getIndicesTypeStructure().get(1))
                    return;
                if (descriptor.getIndicesTypeStructure().get(0) != descriptor.getIndicesTypeStructure().get(1))
                    throw new IllegalArgumentException("Wrong kronecker.");
                descriptor.addSymmetry(type, new Symmetry(new int[]{1, 0}, false));
                if (kroneckerNames == null)
                    kroneckerNames = new int[]{descriptor.getId()};
                else {
                    kroneckerNames = Arrays.copyOf(kroneckerNames, kroneckerNames.length + 1);
                    kroneckerNames[kroneckerNames.length - 1] = descriptor.getId();
View Full Code Here

        for (i = 1; i < resulting.length + 1; ++i) {
            current = symmetries.get(i).list;
            permutation = new int[size];
            for (j = 0; j < size; ++j)
                permutation[j] = sort.inverse().newIndexOf(current.get(sort.newIndexOf(j)));
            resulting[i - 1] = new Symmetry(permutation, symmetries.get(i).sign);
        }
        SimpleIndices simpleIndices = IndicesFactory.createSimple(indices);
        simpleIndices.getSymmetries().addAllUnsafe(resulting);
        return simpleIndices;
    }
View Full Code Here

        int[] permutation = new int[dimension];
        for (i = 0; i < indices.size(); ++i) {
            int fromIndex = indicesArray[i];
            IndexMappingBufferRecord record = indexMappingBuffer.getMap().get(fromIndex);
            if (record == null)
                return new Symmetry(dimension);
            int newPosition = -1;
            //TODO refactor with sort and binary search
            for (int j = 0; j < dimension; ++j)
                if (indicesArray[j] == record.getIndexName())
                    newPosition = j;
            if (newPosition < 0)
                return new Symmetry(dimension);
            permutation[i] = newPosition;
        }
        return new Symmetry(permutation, sign);
    }
View Full Code Here

        }

        if (symmetryIterator != null) {
            OUT:
            while (symmetryIterator.hasNext()) {
                Symmetry s = symmetryIterator.next();
                IndexMappingBuffer tempBuffer = currentBuffer.clone();
                for (int i = 0; i < size; ++i)
                    if (!tempBuffer.tryMap(fromIndices.get(s.newIndexOf(i)), toIndices.get(i)))
                        continue OUT;
                tempBuffer.addSignum(s.isAntiSymmetry());
                return tempBuffer;
            }
            symmetryIterator = null;
            currentBuffer = null;
            return null;
View Full Code Here

                continue;
            if (typeData.length == 0)//redundant
                continue;
            int cpunt = random.nextInt(4);
            for (i = 0; i < cpunt; ++i)
                descriptor.getSymmetries().addUnsafe(type, new Symmetry(nextPermutation(typeData.length), false));
        }
    }
View Full Code Here

        int dimension = tensor.getIndices().size(type);
        boolean symmetriesAreEmpty = tensor.getIndices().getSymmetries().isEmpty();
        addSymmetry(tensor, type, true, Combinatorics.createTransposition(dimension));
        if (dimension > 2)
            if (symmetriesAreEmpty)
                tensor.getIndices().getSymmetries().addUnsafe(type.getType(), new Symmetry(Combinatorics.createCycle(dimension), dimension % 2 == 0 ? true : false));
            else
                tensor.getIndices().getSymmetries().add(type.getType(), new Symmetry(Combinatorics.createCycle(dimension), dimension % 2 == 0 ? true : false));
    }
View Full Code Here

    public static void setSymmetric(SimpleTensor tensor, IndexType type) {
        int dimension = tensor.getIndices().size(type);
        boolean symmetriesAreEmpty = tensor.getIndices().getSymmetries().isEmpty();
        tensor.getIndices().getSymmetries().addSymmetry(type, Combinatorics.createCycle(dimension));
        if (symmetriesAreEmpty)
            tensor.getIndices().getSymmetries().addUnsafe(type.getType(), new Symmetry(Combinatorics.createTransposition(dimension), false));
        else
            tensor.getIndices().getSymmetries().addSymmetry(type, Combinatorics.createTransposition(dimension));
    }
View Full Code Here

                    IndicesUtils.getNameWithType(_toIndices.get(positionInFrom)));

            if (positionInIndices < 0)
//                 throw new IllegalArgumentException();
//                todo review
                return new Symmetry(dimension);

            permutation[_sortPermutation[i]] = _sortPermutation[positionInIndices];
        }
        for (i = 0; i < dimension; ++i)
            if (permutation[i] == -1)
                permutation[i] = i;

        return new Symmetry(permutation, mapping.getSign()); //this is inverse permutation
    }
View Full Code Here

TOP

Related Classes of cc.redberry.core.combinatorics.Symmetry

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.