Element - type of resulting elementsTerm - underlying polynomial termsPoly - underlying multivariate polynomialspublic class Coder<Element,Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> extends Object implements IParser<Element>, IStringifier<Element>, Serializable
IStringifier.SimpleStringifier<E>| Modifier and Type | Field and Description |
|---|---|
protected Ring<Element> |
baseRing
the base ring
|
protected Map<Element,String> |
bindings
toString bindings
|
protected Map<String,Element> |
eVariables
map variableName -> Element (if it is a polynomial variable)
|
protected MultivariateRing<Poly> |
polyRing
auxiliary polynomial ring
|
protected SerializableFunction<Poly,Element> |
polyToElement
convert polynomial to base ring elements
|
protected Map<String,Integer> |
pVariables
map variableName -> variableIndex (if it is a polynomial variable)
|
protected Map<Ring<?>,Coder<?,?,?>> |
subcoders
inner coders
|
DUMMY| Modifier and Type | Method and Description |
|---|---|
Coder<Element,Term,Poly> |
bind(String var,
Element el)
Add string -> element mapping
|
Coder<Element,Term,Poly> |
bindAlias(String var,
Element el)
Add string -> element mapping
|
Coder<Element,Term,Poly> |
bindPolynomialVariable(String var,
int index)
Add string -> element mapping
|
Element |
decode(String string)
Decode element from its string representation (#parse)
|
String |
encode(Element element)
Encode element to its string representation (#stringify)
|
Map<Element,String> |
getBindings()
Map of bindings
|
<Oth> Coder<Oth,?,?> |
map(Ring<Oth> ring,
Function<Element,Oth> func)
Maps this coder to a given type via mapper
func which just applies to each parsed element as well as to
bindings (for IStringifier.stringify(Object)). |
static <E> Coder<E,?,?> |
mkCoder(Ring<E> ring)
Create coder for generic ring
|
static <E> Coder<E,?,?> |
mkCoder(Ring<E> ring,
Map<String,E> variables)
Create coder for generic rings
|
static <Element,Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
mkCoder(Ring<Element> baseRing,
Map<String,Element> eVariables,
MultivariateRing<Poly> polyRing,
Map<String,Poly> pVariables,
SerializableFunction<Poly,Element> polyToElement) |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtensionCoder(MultipleFieldExtension<Term,mPoly,sPoly> field,
Map<String,mPoly> variables)
Create coder for multiple field extension
|
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtensionCoder(MultipleFieldExtension<Term,mPoly,sPoly> field,
String... variables)
Create coder for multiple field extension
|
static <E> Coder<MultivariatePolynomial<E>,Monomial<E>,MultivariatePolynomial<E>> |
mkMultivariateCoder(MultivariateRing<MultivariatePolynomial<E>> ring,
Coder<E,?,?> cfCoder,
Map<String,MultivariatePolynomial<E>> variables)
Create coder for multivariate polynomial rings
|
static <E> Coder<MultivariatePolynomial<E>,Monomial<E>,MultivariatePolynomial<E>> |
mkMultivariateCoder(MultivariateRing<MultivariatePolynomial<E>> ring,
Coder<E,?,?> cfCoder,
String... variables)
Create parser for multivariate polynomial rings
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
mkMultivariateCoder(MultivariateRing<Poly> ring,
Map<String,Poly> variables)
Create coder for multivariate polynomial rings
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
mkMultivariateCoder(MultivariateRing<Poly> ring,
String... variables)
Create coder for multivariate polynomial rings
|
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.
|
static <Poly extends IPolynomial<Poly>> |
mkPolynomialCoder(IPolynomialRing<Poly> ring,
String... variables)
Create coder for generic polynomial rings
|
static <E> Coder<Rational<E>,?,?> |
mkRationalsCoder(Rationals<E> ring,
Coder<E,?,?> elementsCoder)
Create coder for rational elements
|
static <Poly extends IUnivariatePolynomial<Poly>> |
mkUnivariateCoder(IPolynomialRing<Poly> ring,
Map<String,Poly> variables)
Create coder for univariate polynomial rings
|
static <Poly extends IUnivariatePolynomial<Poly>> |
mkUnivariateCoder(IPolynomialRing<Poly> ring,
String variable)
Create coder for univariate polynomial rings
|
static <E> Coder<UnivariatePolynomial<E>,?,?> |
mkUnivariateCoder(IPolynomialRing<UnivariatePolynomial<E>> ring,
Coder<E,?,?> cfCoder,
Map<String,UnivariatePolynomial<E>> variables)
Create coder for univariate polynomial rings
|
static <E> Coder<UnivariatePolynomial<E>,?,?> |
mkUnivariateCoder(IPolynomialRing<UnivariatePolynomial<E>> ring,
Coder<E,?,?> cfCoder,
String variable)
Create coder for univariate polynomial rings
|
Element |
parse(String string)
Parse string
|
Element |
parse(Tokenizer tokenizer)
Parse stream of tokens into ring element
|
<K> IStringifier<K> |
substringifier(Ring<K> ring)
Get stringifier for the specified ring of some underlying elements, should never give null (use dummy() for
absent stringifier)
|
Coder<Element,Term,Poly> |
withEncoder(Coder<?,?,?> subencoder)
Add stringifier of inner elements
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitdefaultVar, defaultVar, defaultVars, dummy, encloseMathParenthesisInSumIfNeeded, getBinding, getBinding, hasMulDivPlusMinus, hasPlusMinus, mkPolyStringifier, mkPolyStringifier, mkStringifier, needParenthesisInSum, stringify, stringifyprotected final Map<String,Element> eVariables
protected final MultivariateRing<Poly extends AMultivariatePolynomial<Term,Poly>> polyRing
protected final Map<String,Integer> pVariables
protected final SerializableFunction<Poly extends AMultivariatePolynomial<Term,Poly>,Element> polyToElement
public Coder<Element,Term,Poly> bindAlias(String var, Element el)
public Coder<Element,Term,Poly> bindPolynomialVariable(String var, int index)
public Coder<Element,Term,Poly> withEncoder(Coder<?,?,?> subencoder)
public <K> IStringifier<K> substringifier(Ring<K> ring)
IStringifiersubstringifier in interface IStringifier<Element>public Map<Element,String> getBindings()
IStringifiergetBindings in interface IStringifier<Element>public String encode(Element element)
public <Oth> Coder<Oth,?,?> map(Ring<Oth> ring, Function<Element,Oth> func)
func which just applies to each parsed element as well as to
bindings (for IStringifier.stringify(Object)).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)
baseRing - the base ringeVariables - variables bindings (variableString -> base ring element)polyRing - auxiliary polynomial ring, to manage intermediate polynomial expressionspVariables - polynomial variables bindings (variableString -> polyRing variable index)polyToElement - convert from auxiliary polynomials to baseringpublic static <E> Coder<E,?,?> mkCoder(Ring<E> ring)
ring - the ringpublic static <E> Coder<E,?,?> mkCoder(Ring<E> ring, Map<String,E> variables)
ring - the ringvariables - map string_variable -> ring_elementpublic static <Poly extends IPolynomial<Poly>> Coder<Poly,?,?> mkPolynomialCoder(IPolynomialRing<Poly> ring, String... variables)
ring - the ringvariables - variablespublic static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> Coder<mPoly,?,?> mkMultipleExtensionCoder(MultipleFieldExtension<Term,mPoly,sPoly> field, String... variables)
field - multiple field extensionvariables - string representation of generatorspublic 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)
field - multiple field extensionvariables - map generator_string -> generator_as_ring_elementpublic static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> Coder<Poly,Term,Poly> mkMultivariateCoder(MultivariateRing<Poly> ring, Map<String,Poly> variables)
ring - the ringvariables - map string_variable -> ring_elementpublic static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> Coder<Poly,Term,Poly> mkMultivariateCoder(MultivariateRing<Poly> ring, String... variables)
ring - the ringvariables - polynomial variablespublic static <E> Coder<MultivariatePolynomial<E>,Monomial<E>,MultivariatePolynomial<E>> mkMultivariateCoder(MultivariateRing<MultivariatePolynomial<E>> ring, Coder<E,?,?> cfCoder, Map<String,MultivariatePolynomial<E>> variables)
ring - the ringcfCoder - coder for coefficient ring elementsvariables - map string_variable -> ring_elementpublic static <E> Coder<MultivariatePolynomial<E>,Monomial<E>,MultivariatePolynomial<E>> mkMultivariateCoder(MultivariateRing<MultivariatePolynomial<E>> ring, Coder<E,?,?> cfCoder, String... variables)
ring - the ringcfCoder - coder of coefficient ring elementsvariables - polynomial variablespublic static <Poly extends IUnivariatePolynomial<Poly>> Coder<Poly,?,?> mkUnivariateCoder(IPolynomialRing<Poly> ring, Map<String,Poly> variables)
ring - the ringvariables - map string_variable -> ring_elementpublic static <Poly extends IUnivariatePolynomial<Poly>> Coder<Poly,?,?> mkUnivariateCoder(IPolynomialRing<Poly> ring, String variable)
ring - the ringvariable - variable stringpublic static <E> Coder<UnivariatePolynomial<E>,?,?> mkUnivariateCoder(IPolynomialRing<UnivariatePolynomial<E>> ring, Coder<E,?,?> cfCoder, Map<String,UnivariatePolynomial<E>> variables)
ring - the ringcfCoder - coder of coefficient ring elementsvariables - map string_variable -> ring_elementpublic static <E> Coder<UnivariatePolynomial<E>,?,?> mkUnivariateCoder(IPolynomialRing<UnivariatePolynomial<E>> ring, Coder<E,?,?> cfCoder, String variable)
ring - the ringcfCoder - coder of coefficient ring elementsvariable - string variablepublic static <E> Coder<Rational<E>,?,?> mkRationalsCoder(Rationals<E> ring, Coder<E,?,?> elementsCoder)
public static <E,I> Coder<E,?,?> mkNestedCoder(Ring<E> ring, Map<String,E> variables, Coder<I,?,?> innerCoder, SerializableFunction<I,E> imageFunc)
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
);
ring - the ringvariables - map string_variable -> ring_elementinnerCoder - coder for underlying ring elementsimageFunc - mapping from @{code I} to @{code E}Copyright © 2022. All rights reserved.