Package cc.redberry.core.number

Examples of cc.redberry.core.number.Complex


        Tensor toTensor() {
            BigInteger exponent = this.exponent;
            if (minExponent != null && minExponent.value != null) {
                exponent = exponent.subtract(minExponent.value);
                if (diffSigns && minExponent.value.testBit(0))
                    return Tensors.negate(Tensors.pow(tensor, new Complex(exponent)));
            }
            return Tensors.pow(tensor, new Complex(exponent));
        }
View Full Code Here


            }

            pb.put(Tensors.simpleTensor(descriptor.getId(), IndicesFactory.createSimple(descriptor.getSymmetries(), factorIndices)));
        }
        if (random.nextBoolean())
            pb.put(new Complex(1 + nextInt(100)));
        return pb.build();
    }
View Full Code Here

            return atomicComplex.get();
        }

        @Override
        public void put(Tensor tensor) {
            Complex oldVal, newVal, toAdd = (Complex) tensor;
            do {
                oldVal = atomicComplex.get();
                newVal = oldVal.add(toAdd);
            } while (!atomicComplex.compareAndSet(oldVal, newVal));
        }
View Full Code Here

     * @param power    power
     *
     * @return result of argument exponentiation
     */
    public static Tensor pow(Tensor argument, int power) {
        return pow(argument, new Complex(power));
    }
View Full Code Here

        if (complex.isZero() || complex.isInfinite() || complex.isNaN())
            return complex;

        ArrayList<Tensor> indexlessData = new ArrayList<>(powers.size() + indexlessElements.size());

        Complex complex = this.complex;
        for (Map.Entry<Tensor, TensorBuilder> entry : powers.entrySet()) {
            Tensor t = Tensors.pow(entry.getKey(), entry.getValue().build());

            assert !(t instanceof Product);

            if (t instanceof Complex)
                complex = complex.multiply((Complex) t);
            else
                indexlessData.add(t);

        }

        //may be redundant...
        if (complex.isZero() || complex.isInfinite() || complex.isNaN())
            return complex;

        indexlessData.addAll(indexlessElements);

        //Only complex factor
        if (indexlessData.isEmpty() && elements.isEmpty())
            return complex;

        // 1 * (something)
        if (complex.isOne()) {
            if (indexlessData.size() == 1 && elements.isEmpty())
                return indexlessData.get(0);
            if (indexlessData.isEmpty() && elements.size() == 1)
                return elements.get(0);
        }
View Full Code Here

        if (tensors.length == 0)
            return Complex.ONE;
        else if (tensors.length == 1)
            return tensors[0];

        Complex complex = Complex.ONE;

        IndexlessWrapper indexlessContainer = new IndexlessWrapper();
        DataWrapper dataContainer = new DataWrapper();
        int i;
        Tensor current;
        Product p;
        for (i = tensors.length - 1; i >= 0; --i) {
            current = tensors[i];
            if (current instanceof Complex)
                complex = complex.multiply((Complex) current);
            else if (current instanceof Product) {
                p = (Product) tensors[i];
                indexlessContainer.add(p.indexlessData);
                dataContainer.add(p.data, p.contentReference.get(), p.indices);
                complex = complex.multiply(p.factor);
            } else if (current.getIndices().size() == 0)
                indexlessContainer.add(current);
            else
                dataContainer.add(current);
            if (complex.isNaN())
                return complex;
        }

        if (complex.isZero() || complex.isNaN() || complex.isInfinite())
            return complex;

        //Processing data with indices
        ProductContent content;
        Indices indices;
        Tensor[] data = dataContainer.list.toArray(new Tensor[dataContainer.list.size()]);
        if (dataContainer.count == 1) {
            content = dataContainer.content;
            indices = dataContainer.indices;
            if (indices == null) {
                assert dataContainer.list.size() == 1;
                indices = IndicesFactory.createSorted(dataContainer.list.get(0).getIndices());
            }
        } else {
            content = null;
            Arrays.sort(data);
            IndicesBuilder builder = new IndicesBuilder();
            for (i = dataContainer.list.size() - 1; i >= 0; --i)
                builder.append(dataContainer.list.get(i));
            try {
                indices = builder.getIndices();
            } catch (InconsistentIndicesException exception) {
                throw new InconsistentIndicesException(exception.getIndex());
            }
        }

        //Processing indexless data
        Tensor[] indexless;
        if (indexlessContainer.count == 0)
            indexless = new Tensor[0];
        else if (indexlessContainer.count == 1)
            indexless = indexlessContainer.list.toArray(new Tensor[indexlessContainer.list.size()]);
        else {
            Map<Tensor, TensorBuilder> powers = new HashMap<>(indexlessContainer.list.size());
            List<Tensor> indexlessArray = new ArrayList<>();
            Tensor tensor;
            for (i = indexlessContainer.list.size() - 1; i >= 0; --i) {
                tensor = indexlessContainer.list.get(i);
                if (TensorUtils.isSymbol(tensor)) {
                    TensorBuilder sb = powers.get(tensor);
                    if (sb == null) {
                        sb = new SumBuilder();
                        powers.put(tensor, sb);
                    }
                    sb.put(Complex.ONE);
                } else if (tensor instanceof Power) {
                    Tensor argument = tensor.get(0);
                    if (TensorUtils.isSymbolOrNumber(argument)) {
                        TensorBuilder sb = powers.get(argument);
                        if (sb == null) {
                            sb = new SumBuilder();
                            powers.put(argument, sb);
                        }
                        sb.put(tensor.get(1));
                    } else
                        indexlessArray.add(tensor);
                } else
                    indexlessArray.add(tensor);
            }

            for (Map.Entry<Tensor, TensorBuilder> entry : powers.entrySet()) {
                Tensor t = Tensors.pow(entry.getKey(), entry.getValue().build());

                assert !(t instanceof Product);

                if (t instanceof Complex)
                    complex = complex.multiply((Complex) t);
                else
                    indexlessArray.add(t);

            }
            //complex may change
            if (complex.isZero() || complex.isNaN() || complex.isInfinite())
                return complex;

            indexless = indexlessArray.toArray(new Tensor[indexlessArray.size()]);
            Arrays.sort(indexless);
        }

        //Constructing result
        if (data.length == 0 && indexless.length == 0)
            return complex;
        if (complex.isOne()) {
            if (data.length == 1 && indexless.length == 0)
                return data[0];
            if (data.length == 0 && indexless.length == 1)
                return indexless[0];
        }
View Full Code Here

            return t;

        List<Tensor> toMultiply = new ArrayList<>(map.size());
        for (SortedMap.Entry<GenPolynomial<BigInteger>, Long> entry : map.entrySet())
            toMultiply.add(Tensors.pow(poly2Tensor(entry.getKey(), varsArray),
                    new Complex(entry.getValue())));
        if (!gcd.equals(java.math.BigInteger.ONE) || !lcm.equals(java.math.BigInteger.ONE))
            toMultiply.add(new Complex(new Rational(gcd, lcm)));

        return Tensors.multiply(toMultiply.toArray(new Tensor[toMultiply.size()]));
    }
View Full Code Here

        for (Monomial<BigInteger> monomial : poly) {
            coefficient = monomial.coefficient();
            exp = monomial.exponent();
            temp.clear();

            temp.add(new Complex(new Rational(coefficient.getVal())));
            for (int i = 0; i < exp.length(); ++i)
                if ((lExp = exp.getVal(i)) != 0)
                    temp.add(Tensors.pow(varsArray[i].simpleTensor, new Complex(lExp)));

            sum.add(Tensors.multiply(temp.toArray(new Tensor[temp.size()])));
        }
        return Tensors.sum(sum.toArray(new Tensor[sum.size()]));
    }
View Full Code Here

            return new DummyIndexMappingProvider(opu);
        if (!(from.get(1) instanceof Complex))
            return IndexMappingProvider.Util.EMPTY_PROVIDER;

        assert to.get(1) instanceof Complex;
        Complex exponent = (Complex) from.get(1);
        if (NumberUtils.isIntegerEven(exponent))
            return new DummyIndexMappingProvider(opu);
        if (NumberUtils.isIntegerOdd(exponent))
            return new MinusIndexMappingProvider(opu);
View Full Code Here

     * @param power    power
     * @return result of argument exponentiation
     * @throws IllegalArgumentException if argument is not scalar
     */
    public static Tensor pow(Tensor argument, int power) {
        return pow(argument, new Complex(power));
    }
View Full Code Here

TOP

Related Classes of cc.redberry.core.number.Complex

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.