Package cc.redberry.core.tensor

Examples of cc.redberry.core.tensor.Tensor


    }

    @Override
    public Tensor toTensor() {
        SimpleTensor[] vars = new SimpleTensor[content.length - 1];
        Tensor temp;
        for (int i = 1; i < content.length; ++i) {
            temp = content[i].toTensor();
            if (!(temp instanceof SimpleTensor) && !(temp instanceof TensorField))
                throw new IllegalArgumentException("Derivative with respect to non simple argument: " + temp);
            vars[i - 1] = (SimpleTensor) temp;
View Full Code Here


            Derivative derivative = (Derivative) tensor;

            //Collecting all indices from derivative vars
            TensorIterator it = derivative.iterator();
            IntArrayList usedIndices = new IntArrayList();
            Tensor current;
            while (it.hasNext()) {
                current = it.next();
                if (Derivative.onVarsIndicator.is(it))
                    usedIndices.addAll(TensorUtils.getAllIndicesNames(current));
            }

            //Creating int set from collected indices
            int[] usedIndicesArray = MathUtils.getSortedDistinct(usedIndices.toArray());

            Tensor target = derivative.getTarget();

            //Calculating used indices for AIM transformation
            int[] targetIndices = IndicesUtils.getSortedDistinctIndicesNames(target.getIndices().getFreeIndices());
            int[] currentUsedIndices = MathUtils.intSetDifference(targetIndices, usedIndices.toArray());
            //Applying AIM transformation
            IndexMappingImpl indexMapping = new IndexMappingImpl(currentUsedIndices);
            ApplyIndexMappingTransformation.INSTANCE.perform(target, indexMapping);
        }
View Full Code Here

        for (int i = 0; i < indicesNames.length; ++i)
            newIndicesNames[i] = indicesNames[permutation[i]];

        //processing new tensor
        IndexMappingImpl im = new IndexMappingImpl(new int[0], indicesNames, newIndicesNames);
        Tensor current = tensor.clone();
        ApplyIndexMappingTransformation.INSTANCE.perform(current, im);
        result.add(current);
    }
View Full Code Here

            LinkedList<Tensor> tCombination = new LinkedList<>();
            u = 0;
            l = 0;
            for (i = 0; i < combination.length; ++i)
                for (int j = 0; j < combination[i]; ++j) {
                    Tensor temp = samples[i].clone();

                    IndexMappingDirect im = new IndexMappingDirect();
                    IntArray termLow = temp.getIndices().getLower();
                    im.add(termLow, Arrays.copyOfRange(lowArray, l, l + termLow.length()));
                    l += termLow.length();

                    IntArray termUp = temp.getIndices().getUpper();
                    im.add(termUp, Arrays.copyOfRange(upArray, u, u + termUp.length()));
                    u += termUp.length();

                    temp = ApplyIndexMappingDirectTransformation.INSTANCE.perform(temp, im);
                    tCombination.add(temp);
                }

            //creating term & processing combinatorics
            Tensor coefficient;
            if (symmetries == null) {
                Symmetrize symmetrize = new Symmetrize(indices,
                        Symmetries.getFullSymmetriesForSortedIndices(totalUpCount, totalLowCount), false);
                Tensor terms = symmetrize.transform(new Product(tCombination));
                if (terms instanceof Sum)
                    for (Tensor t : terms) {
                        result.add(new Product(coefficient = scalarTensorGenerator.next(), t));
                        coefficients.add(coefficient.clone());
                    }
                else {
                    result.add(new Product(coefficient = scalarTensorGenerator.next(), terms));
                    coefficients.add(coefficient.clone());
                }
            } else {
                Symmetrize symmetrize = new Symmetrize(indices,
                        symmetries, true);
                Tensor terms = symmetrize.transform(new Product(tCombination));
                result.add(new Product(coefficient = scalarTensorGenerator.next(), terms));
                coefficients.add(coefficient.clone());
            }
        }
    }
View Full Code Here

    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Derivative))
            return tensor;
        Derivative derivative = (Derivative) tensor;
        Tensor target = derivative.getTarget().clone();
        for (int i = 0; i < derivative.getDerivativeOrder(); ++i) {
            target = getDerivative(target, derivative.getVariation(i));
            if (target == null)
                return TensorNumber.createZERO();
        }
View Full Code Here

    private Tensor getDerivative(Tensor target, SimpleTensor var) {
        if (target instanceof Sum) {
            Sum sum = (Sum) target;
            TensorIterator it = sum.iterator();
            Tensor current, derivative;
            Sum res = new Sum();
            while (it.hasNext()) {
                current = it.next();
                derivative = getDerivative(current, var);
                if (derivative == null)
                    continue;// it.remove();
                else
                    res.add(derivative);//if (derivative != current)
                //it.set(derivative);
            }
            if (res.isEmpty())
                return null;
            return res.equivalent();
        } else if (target instanceof Product) {
            Product product = (Product) target;
            Tensor derivative;
            List<Tensor> resultProducts = new ArrayList<>();
            for (int i = 0; i < product.size(); ++i) {
                derivative = getDerivative(product.getElements().get(i), var);
                if (derivative == null)
                    continue;
                Product clone = (Product) product.clone();
                clone.getElements().remove(i);
                if (!isOne(derivative))
                    clone.add(derivative);
                resultProducts.add(clone.equivalent());
            }
            if (resultProducts.isEmpty())
                return null;
            if (resultProducts.size() == 1)
                return resultProducts.get(0);
            return new Sum(resultProducts);
        } else if (target.getClass() == SimpleTensor.class) {
            SimpleTensor sp = (SimpleTensor) target;
            if (sp.getName() != var.getName())
                return null;
            if (sp.getIndices().size() == 0)
                return TensorNumber.createONE();
            Product kroneckers = new Product();
            Indices targetIndices = sp.getIndices();
            Indices varIndices = var.getIndices();
            for (int i = 0; i < sp.getIndices().size(); ++i)
                kroneckers.add(CC.createMetricOrKronecker(targetIndices.get(i), varIndices.get(i)));
            return kroneckers.equivalent();
        } else if (target.getClass() == TensorField.class) {
            TensorField field = (TensorField) target;
            Tensor[] args = field.getArgs();
            for (int i = 0; i < args.length; ++i)
                if (getDerivative(args[i], var) != null)
                    return Derivative.createFromInversed(target,var);
            return null;
        } else if (target instanceof AbstractScalarFunction) {
            AbstractScalarFunction func = (AbstractScalarFunction) target;
            Tensor der = getDerivative(func.getInnerTensor(), var);
            if (der == null)
                return null;
            if (isOne(der))
                return func.derivative();
            return new Product(func.derivative(), der);
View Full Code Here

    @Override
    public PatternSplit split(Tensor tensor) {
        if (tensor instanceof Product) {
            TensorIterator it = tensor.iterator();
            Tensor current;
            Product factored = new Product();
            while (it.hasNext()) {
                current = it.next();
                if (splitPattern.factorOut(current)) {
                    factored.add(current);
View Full Code Here

            wrapper.write();
            return newSum;
        } else if (tensor instanceof Product) {
            Product p = new Product();
            TensorIterator iterator = tensor.iterator();
            Tensor current;
            Tensor temp = null;
            int[] lower = ind.getLower().copy();
            int[] upper = ind.getUpper().copy();
            int[] total = new int[length * 2];
            while (iterator.hasNext()) {
                current = iterator.next();
View Full Code Here


        //renaming indices of toCollect tensor
        new RenameContractedIndices(factorsIndicesNames.toArray()).transform(split.term, split.factoredOut);

        Tensor toCollect = split.term;
        Tensor collectedTensor = term;


        IntArrayList uncontractedIndicesToCollect = TensorUtils.getContractedIndicesNames(split.term, split.factoredOut);
        IntArrayList uncontractedIndicesCollected = TensorUtils.getContractedIndicesNames(term, factors.getElements().get(0));
View Full Code Here

    @Override
    public Tensor tensorEquvivalent() {
        if (!initialized)
            return pairProduct(factoredOut, term);
        TensorIterator it = factors.iterator();
        Tensor equivalent;
        Tensor current;
        while (it.hasNext()) {
            current = it.next();
            equivalent = current.equivalent();
            if (current != equivalent)
                it.set(equivalent);
        }
        return pairProduct(Transformations.calculateNumbers(factors), term.equivalent());
    }
View Full Code Here

TOP

Related Classes of cc.redberry.core.tensor.Tensor

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.