Package cc.redberry.core.tensor

Examples of cc.redberry.core.tensor.Fraction


public class ToCommonDenominator implements Transformation {
    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Sum))
            return tensor;
        Fraction result = null;
        TensorIterator iterator = tensor.iterator();
        Tensor current;
        while (iterator.hasNext()) {
            current = iterator.next();
            if (current instanceof Fraction) {
View Full Code Here


        return sumPair(result, tensor.equivalent());
    }

    private Fraction sumPair(Fraction f1, Tensor f2) {
        if (f2 instanceof Fraction) {
            Fraction f2_ = (Fraction) f2;
            Struct s = calcStruct(f1.getDenominator(), f2_.getDenominator());
            return new Fraction(
                    new Sum(
                    s.firstMultiplicand == null ? f1.getNumerator() : new Product(f1.getNumerator(), s.firstMultiplicand),
                    s.secondMultiplicand == null ? f2_.getNumerator() : new Product(f2_.getNumerator(), s.secondMultiplicand)),
                    s.denominator);
        }
        Tensor f = new Product(f1.getDenominator().clone(), f2);
        return new Fraction(new Sum(f1.getNumerator(), f), f1.getDenominator());
    }
View Full Code Here

        TensorIterator iterator = tensor.iterator();
        Tensor current;
        while (iterator.hasNext()) {
            current = iterator.next();
            if (current instanceof Fraction) {
                Fraction frac = (Fraction) current;
                iterator.set(frac.getNumerator());
                denominators.add(frac.getDenominator());
            }
        }
        if (denominators.isEmpty())
            return tensor;
        //TODO run with RemmoveOneFromProduct transformation
        return new Fraction(tensor, denominators.size() == 1 ? denominators.get(0) : new Product(denominators));

    }
View Full Code Here

public class ToFraction implements Transformation {
    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Product))
            return tensor;
        Fraction fraction = null;
        TensorIterator iterator = tensor.iterator();
        Tensor current;
        while (iterator.hasNext()) {
            current = iterator.next();
            if (current instanceof Fraction) {
                fraction = (Fraction) current;
                iterator.remove();
                break;
            }
        }
        if (fraction == null)
            return tensor;
        Tensor numer = new Product(tensor.equivalent(), fraction.getDenominator());
        Tensor denom = fraction.getDenominator();
        return new Fraction(numer, denom);
    }
View Full Code Here

public class ExpandNumeratorSum implements Transformation {
    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Fraction))
            return tensor;
        Fraction fraction = (Fraction) tensor;
        if (!(fraction.getNumerator() instanceof Sum))
            return tensor;
        Sum numerator = (Sum) fraction.getNumerator();
        Sum result = new Sum();
        TensorIterator iterator = numerator.iterator();
        result.add(new Fraction(iterator.next(), fraction.getDenominator()));
        while (iterator.hasNext())
            result.add(new Fraction(iterator.next(), fraction.getDenominator().clone()));
        return result;
    }
View Full Code Here

                denominator.add(firstContent.get(j));
            }

        Tensor summond1 = new Product(firstProduct);
        Tensor summond2 = new Product(secondProduct);
        return new Fraction(new Sum(summond1, summond2), denominator);
    }
View Full Code Here

            } else
                denom.add(firstFracContent.get(i));
        Tensor denominator = is ? first.getDenominator() : new Product(denom.clone(), second.getDenominator());
        Tensor summand1 = is ? first.getNumerator() : new Product(first.getNumerator(), second.getDenominator());
        Tensor summand2 = new Product(second.getNumerator().clone(), denom);
        return new Fraction(new Sum(summand1, summand2), denominator);
    }
View Full Code Here

                listTensor.add(s);

        if (listFrac.isEmpty())
            return tensor;

        Fraction resultFrac = null;
        for (Fraction f : listFrac) {
            if (resultFrac == null) {
                resultFrac = f;
                continue;
            }
            Tensor resultFracN = resultFrac.getNumerator();
            Tensor resultFracD = resultFrac.getDenominator();
            Tensor fD = f.getDenominator();
            Tensor fN = f.getNumerator();

            boolean resultIsProduct = isProduct(resultFracD);
            boolean fIsProduct = isProduct(fD);

            if (!(resultIsProduct || fIsProduct))
                if (TTest.testParity(resultFracD, fD))
                    resultFrac = new Fraction(new Sum(resultFracN, fN), resultFracD);
                else {
                    Tensor summond1 = new Product(resultFracN, fD);
                    Tensor summond2 = new Product(fN, resultFracD.clone());

                    Tensor newNumerator = new Sum(summond1, summond2);
                    Tensor newDenumerator = new Product(resultFracD.clone(), fD);

                    resultFrac = new Fraction(newNumerator, newDenumerator);
                }
            else if (resultIsProduct ^ fIsProduct)
                if (resultIsProduct)
                    resultFrac = getSumWithProductAndSimpleDenominator(resultFrac, f);
                else
                    resultFrac = getSumWithProductAndSimpleDenominator(f, resultFrac);
            else
                if (((Product) resultFracD).size() >= ((Product) fD).size())
                    resultFrac = getSumWithProductDenominator(resultFrac, f);
                else
                    resultFrac = getSumWithProductDenominator(f, resultFrac);


        }

        if (!listTensor.isEmpty()) {
            Tensor simpleSum = new Sum(listTensor);
            Tensor summand1 = new Product(simpleSum, resultFrac.getDenominator().clone());
            Tensor summand2 = resultFrac.getNumerator();
            Tensor result = new Fraction(new Sum(summand1, summand2), resultFrac.getDenominator());
            return result;
        }
        return resultFrac;
    }
View Full Code Here

    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Fraction))
            return tensor;
       
        Fraction fraction = (Fraction) tensor; 
        TensorIterator iterator = fraction.iterator();
        Tensor current;
        while (iterator.hasNext()) {
            current = iterator.next();
           
            if (current instanceof Fraction) {
                Fraction temp = (Fraction) current;
                if (Fraction.onDenominatorIndicator.is(iterator))
                    return new Fraction(new Product(fraction.getNumerator(), temp.getDenominator()), temp.getNumerator());
                else
                    return new Fraction(temp.getNumerator(), new Product(fraction.getDenominator(), temp.getDenominator()));
            }
            if (current instanceof Product) {
                List<Tensor> multiplicands = new ArrayList<>();
                TensorIterator it = current.iterator();
                Tensor current1;
                while (it.hasNext()) {
                    current1 = it.next();
                    if (current1 instanceof Fraction) {
                        Fraction currentFraction = (Fraction) current1;
                        multiplicands.add(currentFraction.getDenominator());
                        it.set(currentFraction.getNumerator());
                    }
                }
                if (multiplicands.isEmpty())
                    return tensor;
                Product newNumerator = new Product();
                if (Fraction.onDenominatorIndicator.is(iterator)) {
                    newNumerator.add(fraction.getNumerator());
                    newNumerator.add(multiplicands);
                    return new Fraction(newNumerator, fraction.getDenominator());
                } else {
                    newNumerator.add(fraction.getDenominator());
                    newNumerator.add(multiplicands);
                    return new Fraction(fraction.getNumerator(), newNumerator);
                }
            }
        }
        return tensor;
    }
View Full Code Here

    @Override
    public Tensor transform(Tensor tensor) {
        if (!(tensor instanceof Fraction))
            return tensor;
        Fraction fraction = (Fraction) tensor;
        if (fraction.getNumerator() instanceof TensorNumber
                && fraction.getDenominator() instanceof TensorNumber) {
            TensorNumber num = (TensorNumber) fraction.getNumerator();
            num.divide((TensorNumber) fraction.getDenominator());
            tensor = null;
            return num;
        }
        return tensor;
    }
View Full Code Here

TOP

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

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.