Package cc.redberry.core.combinatorics.symmetries

Examples of cc.redberry.core.combinatorics.symmetries.Symmetries


    public static Symmetries findIndicesSymmetries(SimpleIndices indices, Tensor tensor) {
        return getSymmetriesFromMappings(indices.getAllIndices().copy(), IndexMappings.createPort(tensor, tensor));
    }

    public static Symmetries getIndicesSymmetriesForIndicesWithSameStates(final int[] indices, Tensor tensor) {
        Symmetries total = findIndicesSymmetries(indices, tensor);
        Symmetries symmetries = SymmetriesFactory.createSymmetries(indices.length);
        int i;
        OUT:
        for (Symmetry s : total) {
            for (i = 0; i < indices.length; ++i)
                if (IndicesUtils.getRawStateInt(indices[i]) != IndicesUtils.getRawStateInt(indices[s.newIndexOf(i)]))
                    continue OUT;
            symmetries.add(s);
        }
        return symmetries;
    }
View Full Code Here


        int[] _sortPermutation = ArraysUtils.quickSortP(sortedIndicesNames);
        return getSymmetryFromMapping1(sortedIndicesNames, _sortPermutation, mapping);
    }

    public static Symmetries getSymmetriesFromMappings(final int[] indices, MappingsPort mappingsPort) {
        Symmetries symmetries = SymmetriesFactory.createSymmetries(indices.length);
        int[] sortedIndicesNames = IndicesUtils.getIndicesNames(indices);
        int[] sortPermutation = ArraysUtils.quickSortP(sortedIndicesNames);
        Mapping buffer;
        while ((buffer = mappingsPort.take()) != null)
            symmetries.add(getSymmetryFromMapping1(sortedIndicesNames, sortPermutation, buffer));
        return symmetries;
    }
View Full Code Here

    public static Symmetries findIndicesSymmetries(SimpleIndices indices, Tensor tensor) {
        return getSymmetriesFromMappings(indices.getAllIndices().copy(), IndexMappings.createPort(tensor, tensor));
    }

    public static Symmetries getIndicesSymmetriesForIndicesWithSameStates(final int[] indices, Tensor tensor) {
        Symmetries total = findIndicesSymmetries(indices, tensor);
        Symmetries symmetries = SymmetriesFactory.createSymmetries(indices.length);
        int i;
        OUT:
        for (Symmetry s : total) {
            for (i = 0; i < indices.length; ++i)
                if (IndicesUtils.getRawStateInt(indices[i]) != IndicesUtils.getRawStateInt(indices[s.newIndexOf(i)]))
                    continue OUT;
            symmetries.add(s);
        }
        return symmetries;
    }
View Full Code Here

        return symmetrizeWithoutCheck(tensor, freeIndices, symmetries, multiplyFactorial);
    }

    public static Tensor symmetrize(Tensor tensor, int[] freeIndicesNames, Permutation[] symmetries, boolean multiplyFactorial) {
        checkConsistensy(freeIndicesNames, symmetries);
        Symmetries symmetries1 = SymmetriesFactory.createSymmetries(symmetries[0].dimension());
        for (Permutation s : symmetries)
            symmetries1.add(s.asSymmetry());
        return symmetrizeWithoutCheck(tensor, freeIndicesNames, symmetries1, multiplyFactorial);
    }
View Full Code Here

        if (!IndicesUtils.equalsRegardlessOrder(tensor.getIndices().getFree(), freeIndicesNames))
            throw new IllegalArgumentException("Specified indices are not equal (regardless order) to the free indices of specified tensor .");

        if (symmetries.dimension() <= 1)
            return tensor;
        Symmetries tensorSymmetries = TensorUtils.findIndicesSymmetries(freeIndicesNames, tensor);
        List<Tensor> generatedTensors = new ArrayList<>();
        List<Permutation> generatedPermutations = new ArrayList<>();

        OUT:
        for (Permutation permutation : symmetries) {
View Full Code Here

        int[] _sortPermutation = ArraysUtils.quickSortP(sortedIndicesNames);
        return getSymmetryFromMapping1(sortedIndicesNames, _sortPermutation, mapping);
    }

    public static Symmetries getSymmetriesFromMappings(final int[] indices, MappingsPort mappingsPort) {
        Symmetries symmetries = SymmetriesFactory.createSymmetries(indices.length);
        int[] sortedIndicesNames = IndicesUtils.getIndicesNames(indices);
        int[] sortPermutation = ArraysUtils.quickSortP(sortedIndicesNames);
        Mapping buffer;
        while ((buffer = mappingsPort.take()) != null)
            symmetries.add(getSymmetryFromMapping1(sortedIndicesNames, sortPermutation, buffer));
        return symmetries;
    }
View Full Code Here

    public static Symmetries findIndicesSymmetries(SimpleIndices indices, Tensor tensor) {
        return getSymmetriesFromMappings(indices.getAllIndices().copy(), IndexMappings.createPort(tensor, tensor));
    }

    public static Symmetries getIndicesSymmetriesForIndicesWithSameStates(final int[] indices, Tensor tensor) {
        Symmetries total = findIndicesSymmetries(indices, tensor);
        Symmetries symmetries = SymmetriesFactory.createSymmetries(indices.length);
        int i;
        OUT:
        for (Symmetry s : total) {
            for (i = 0; i < indices.length; ++i)
                if (IndicesUtils.getRawStateInt(indices[i]) != IndicesUtils.getRawStateInt(indices[s.newIndexOf(i)]))
                    continue OUT;
            symmetries.add(s);
        }
        return symmetries;
    }
View Full Code Here

        return symmetrizeWithoutCheck(tensor, freeIndices, symmetries, multiplyFactorial);
    }

    public static Tensor symmetrize(Tensor tensor, int[] freeIndicesNames, Permutation[] symmetries, boolean multiplyFactorial) {
        checkConsistensy(freeIndicesNames, symmetries);
        Symmetries symmetries1 = SymmetriesFactory.createSymmetries(symmetries[0].dimension());
        for (Permutation s : symmetries)
            symmetries1.add(s.asSymmetry());
        return symmetrizeWithoutCheck(tensor, freeIndicesNames, symmetries1, multiplyFactorial);
    }
View Full Code Here

        if (!IndicesUtils.equalsRegardlessOrder(tensor.getIndices().getFree(), freeIndicesNames))
            throw new IllegalArgumentException("Specified indices are not equal (regardless order) to the free indices of specified tensor .");

        if (symmetries.dimension() <= 1)
            return tensor;
        Symmetries tensorSymmetries = TensorUtils.findIndicesSymmetries(freeIndicesNames, tensor);
        List<Tensor> generatedTensors = new ArrayList<>();
        List<Permutation> generatedPermutations = new ArrayList<>();

        OUT:
        for (Permutation permutation : symmetries) {
View Full Code Here

    }

    public static Tensor symmetrizeUpperLowerIndices(Tensor tensor, boolean multiplyOnSymmetryFactor) {
        Indices indices = IndicesFactory.create(tensor.getIndices().getFree());
        int[] indicesArray = indices.getAllIndices().copy();
        Symmetries symmetries = TensorUtils.getIndicesSymmetriesForIndicesWithSameStates(indicesArray, tensor);
        int lowerCount = indices.getLower().length(), upperCount = indices.getUpper().length();

        IntPermutationsGenerator lowIndicesPermutationsGenerator,
                upperIndicesPermutationGenerator;
        SumBuilder sumBuilder = new SumBuilder();
View Full Code Here

TOP

Related Classes of cc.redberry.core.combinatorics.symmetries.Symmetries

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.