Class Coder<Element,​Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>>

    • Method Detail

      • bindPolynomialVariable

        public Coder<Element,​Term,​Poly> bindPolynomialVariable​(String var,
                                                                           int index)
        Add string -> element mapping
      • withEncoder

        public Coder<Element,​Term,​Poly> withEncoder​(Coder<?,​?,​?> subencoder)
        Add stringifier of inner elements
      • substringifier

        public <K> IStringifier<K> substringifier​(Ring<K> ring)
        Description copied from interface: IStringifier
        Get stringifier for the specified ring of some underlying elements, should never give null (use dummy() for absent stringifier)
        Specified by:
        substringifier in interface IStringifier<Element>
      • decode

        public Element decode​(String string)
        Decode element from its string representation (#parse)
      • encode

        public String encode​(Element element)
        Encode element to its string representation (#stringify)
      • mkCoder

        public static <Element,​Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> Coder<Element,​Term,​Poly> mkCoder​(Ring<Element> baseRing,
                                                                                                                                                                            Map<String,​Element> eVariables,
                                                                                                                                                                            MultivariateRing<Poly> polyRing,
                                                                                                                                                                            Map<String,​Poly> pVariables,
                                                                                                                                                                            SerializableFunction<Poly,​Element> polyToElement)
        Parameters:
        baseRing - the base ring
        eVariables - variables bindings (variableString -> base ring element)
        polyRing - auxiliary polynomial ring, to manage intermediate polynomial expressions
        pVariables - polynomial variables bindings (variableString -> polyRing variable index)
        polyToElement - convert from auxiliary polynomials to basering
      • mkCoder

        public static <E> Coder<E,​?,​?> mkCoder​(Ring<E> ring)
        Create coder for generic ring
        Parameters:
        ring - the ring
      • mkCoder

        public static <E> Coder<E,​?,​?> mkCoder​(Ring<E> ring,
                                                           Map<String,​E> variables)
        Create coder for generic rings
        Parameters:
        ring - the ring
        variables - map string_variable -> ring_element
      • mkPolynomialCoder

        public static <Poly extends IPolynomial<Poly>> Coder<Poly,​?,​?> mkPolynomialCoder​(IPolynomialRing<Poly> ring,
                                                                                                     String... variables)
        Create coder for generic polynomial rings
        Parameters:
        ring - the ring
        variables - variables
      • mkMultipleExtensionCoder

        public static <Term extends AMonomial<Term>,​mPoly extends AMultivariatePolynomial<Term,​mPoly>,​sPoly extends IUnivariatePolynomial<sPoly>> Coder<mPoly,​?,​?> mkMultipleExtensionCoder​(MultipleFieldExtension<Term,​mPoly,​sPoly> field,
                                                                                                                                                                                                                          String... variables)
        Create coder for multiple field extension
        Parameters:
        field - multiple field extension
        variables - string representation of generators
      • mkMultipleExtensionCoder

        public static <Term extends AMonomial<Term>,​mPoly extends AMultivariatePolynomial<Term,​mPoly>,​sPoly extends IUnivariatePolynomial<sPoly>> Coder<mPoly,​?,​?> mkMultipleExtensionCoder​(MultipleFieldExtension<Term,​mPoly,​sPoly> field,
                                                                                                                                                                                                                          Map<String,​mPoly> variables)
        Create coder for multiple field extension
        Parameters:
        field - multiple field extension
        variables - map generator_string -> generator_as_ring_element
      • mkMultivariateCoder

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> Coder<Poly,​Term,​Poly> mkMultivariateCoder​(MultivariateRing<Poly> ring,
                                                                                                                                                                       Map<String,​Poly> variables)
        Create coder for multivariate polynomial rings
        Parameters:
        ring - the ring
        variables - map string_variable -> ring_element
      • mkMultivariateCoder

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> Coder<Poly,​Term,​Poly> mkMultivariateCoder​(MultivariateRing<Poly> ring,
                                                                                                                                                                       String... variables)
        Create coder for multivariate polynomial rings
        Parameters:
        ring - the ring
        variables - polynomial variables
      • mkUnivariateCoder

        public static <Poly extends IUnivariatePolynomial<Poly>> Coder<Poly,​?,​?> mkUnivariateCoder​(IPolynomialRing<Poly> ring,
                                                                                                               Map<String,​Poly> variables)
        Create coder for univariate polynomial rings
        Parameters:
        ring - the ring
        variables - map string_variable -> ring_element
      • mkUnivariateCoder

        public static <Poly extends IUnivariatePolynomial<Poly>> Coder<Poly,​?,​?> mkUnivariateCoder​(IPolynomialRing<Poly> ring,
                                                                                                               String variable)
        Create coder for univariate polynomial rings
        Parameters:
        ring - the ring
        variable - variable string
      • mkRationalsCoder

        public static <E> Coder<Rational<E>,​?,​?> mkRationalsCoder​(Rationals<E> ring,
                                                                              Coder<E,​?,​?> elementsCoder)
        Create coder for rational elements
      • mkNestedCoder

        public static <E,​I> Coder<E,​?,​?> mkNestedCoder​(Ring<E> ring,
                                                                         Map<String,​E> variables,
                                                                         Coder<I,​?,​?> innerCoder,
                                                                         SerializableFunction<I,​E> imageFunc)
        Create coder for nested rings (e.g. fractions over polynomials etc).

        Example:

        
         // GF(17, 3) as polynomials over "t"
         FiniteField gf = Rings.GF(17, 3);
         // parser of univariate polynomials over "t" from GF(17, 3)
         Coder gfParser = Coder.mkUnivariateCoder(gf, mkVars(gf, "t"));
        
         // ring GF(17, 3)[x, y, z]
         MultivariateRing> polyRing = Rings.MultivariateRing(3, gf);
         // parser of multivariate polynomials over GF(17, 3)
         Coder, ?, ?> polyParser = Coder.mkMultivariateCoder(polyRing,
         gfParser, "x", "y", "z");
        
         // field Frac(GF(17, 3)[x, y, z])
         Rationals> fracRing = Rings.Frac(polyRing);
         // parser of elements in Frac(GF(17, 3)[x, y, z])
         Coder>, ?, ?> fracParser =
                      Coder.mkNestedCoder(
                           fracRing,                        // the frac field
                           new HashMap<>(),                 // variables (no any)
                           polyParser,                      // parser of multivariate polynomials
                           p -> new Rational<>(polyRing, p) // convert from polys to fractions
                      );
         
        Parameters:
        ring - the ring
        variables - map string_variable -> ring_element
        innerCoder - coder for underlying ring elements
        imageFunc - mapping from @{code I} to @{code E}
      • parse

        public Element parse​(Tokenizer tokenizer)
        Parse stream of tokens into ring element