Search in sources :

Example 1 with Poly

use of suite.math.sym.Polynomial.Poly in project suite by stupidsing.

the class DivisiblePolynomial method format.

public Node format(Poly<N> poly) {
    Express ex = new Express();
    OpGroup add = ex.add;
    OpGroup mul = ex.mul;
    Int_Obj<Node> powerFun = p -> {
        Node power = mul.identity();
        for (int i = 0; i < p; i++) power = mul.apply(x, power);
        return power;
    };
    Node sum = format_.apply(n0);
    for (IntObjPair<N> pair : poly.streamlet().sortByKey(Integer::compare)) {
        int p = pair.t0;
        Node power = p < 0 ? mul.inverse(powerFun.apply(-p)) : powerFun.apply(p);
        sum = add.apply(mul.apply(format_.apply(pair.t1), power), sum);
    }
    return sum;
}
Also used : Poly(suite.math.sym.Polynomial.Poly) Ring(suite.math.sym.Sym.Ring) Predicate(java.util.function.Predicate) Pattern(suite.BindArrayUtil.Pattern) OpGroup(suite.math.sym.Express.OpGroup) Fun(suite.util.FunUtil.Fun) Node(suite.node.Node) Opt(suite.adt.Opt) Iterate(suite.util.FunUtil.Iterate) Pair(suite.adt.pair.Pair) Int_Obj(suite.primitive.IntPrimitives.Int_Obj) Fun2(suite.util.FunUtil2.Fun2) Obj_Int(suite.primitive.IntPrimitives.Obj_Int) IntObjPair(suite.primitive.adt.pair.IntObjPair) Fixie3(suite.adt.pair.Fixie_.Fixie3) Field(suite.math.sym.Sym.Field) SwitchNode(suite.node.io.SwitchNode) Int(suite.node.Int) OpGroup(suite.math.sym.Express.OpGroup) Node(suite.node.Node) SwitchNode(suite.node.io.SwitchNode)

Aggregations

Predicate (java.util.function.Predicate)1 Pattern (suite.BindArrayUtil.Pattern)1 Opt (suite.adt.Opt)1 Fixie3 (suite.adt.pair.Fixie_.Fixie3)1 Pair (suite.adt.pair.Pair)1 OpGroup (suite.math.sym.Express.OpGroup)1 Poly (suite.math.sym.Polynomial.Poly)1 Field (suite.math.sym.Sym.Field)1 Ring (suite.math.sym.Sym.Ring)1 Int (suite.node.Int)1 Node (suite.node.Node)1 SwitchNode (suite.node.io.SwitchNode)1 Int_Obj (suite.primitive.IntPrimitives.Int_Obj)1 Obj_Int (suite.primitive.IntPrimitives.Obj_Int)1 IntObjPair (suite.primitive.adt.pair.IntObjPair)1 Fun (suite.util.FunUtil.Fun)1 Iterate (suite.util.FunUtil.Iterate)1 Fun2 (suite.util.FunUtil2.Fun2)1