Skip to content

Commit

Permalink
pre-release commit
Browse files Browse the repository at this point in the history
  • Loading branch information
PoslavskySV committed Jul 24, 2018
1 parent 5d30d50 commit c33dab5
Show file tree
Hide file tree
Showing 12 changed files with 46 additions and 15 deletions.
4 changes: 2 additions & 2 deletions doc/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@
# built documents.
#
# The short X.Y version.
version = '2.4'
version = '2.5'
# The full version, including alpha/beta/rc tags.
release = '2.4'
release = '2.5'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down
2 changes: 2 additions & 0 deletions doc/guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,8 @@ The following table lists some important methods defined by `MultipleFieldExtens
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| ``getGeneratorMinimalPoly(i)`` | Returns minimal polynomial of i-th element represented as polynomial over i-th extension field in extension tower |
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| ``getSubExtension(i)`` | Returns i-th nested extension (that is extension generated by the first ``i`` generators) |
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| ``getGeneratorRep(i)`` | Gives representation of i-th generator as element of equivalent simple field extension generated by primitive element |
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| ``joinAlgebraicElement(poly)`` | Joins algebraic element represented by given minimal poly and returns the result |
Expand Down
2 changes: 1 addition & 1 deletion rings.repl/rings.repl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

ringsVersion=2.4
ringsVersion=2.5
ringsString="Rings ${ringsVersion}: efficient Java/Scala library for polynomial rings."

# CHECK JAVA VERSION
Expand Down
4 changes: 2 additions & 2 deletions rings.scaladsl/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ organization := "cc.redberry"

name := "rings.scaladsl"

version := "2.5-SNAPSHOT"
version := "2.5"

scalaVersion := "2.12.3"

Expand All @@ -15,7 +15,7 @@ moduleName := name.value
resolvers += Resolver.mavenLocal

libraryDependencies ++= Seq(
"cc.redberry" % "rings" % "2.5-SNAPSHOT",
"cc.redberry" % "rings" % "2.5",
"junit" % "junit" % "4.12" % Test,
"com.novocode" % "junit-interface" % "0.11" % Test exclude("junit", "junit-dep")
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,21 +176,32 @@ private[scaladsl] trait Predef {
sPoly <: IUnivariatePolynomial[sPoly],
E](poly: sPoly, variables: Array[String])
: MultipleFieldExtension[Term, mPoly, sPoly, E]
= MultipleFieldExtension(rings.Rings.SplittingField(poly), variables)
= updateCoder[Term, mPoly, sPoly, E](poly.degree(), MultipleFieldExtension(rings.Rings.SplittingField(poly), variables))

/**
* Splitting field of a given polynomial.
*/
def SplittingField[E](poly: UnivariatePolynomial[E], variables: Array[String])
: MultipleFieldExtension[Monomial[E], MultivariatePolynomial[E], UnivariatePolynomial[E], E]
= MultipleFieldExtension(rings.Rings.SplittingField[Monomial[E], MultivariatePolynomial[E], UnivariatePolynomial[E]](poly), variables)
= updateCoder[Monomial[E], MultivariatePolynomial[E], UnivariatePolynomial[E], E](poly.degree(), MultipleFieldExtension(rings.Rings.SplittingField[Monomial[E], MultivariatePolynomial[E], UnivariatePolynomial[E]](poly), variables))

/**
* Splitting field of a given polynomial.
*/
def SplittingFieldZp64(poly: UnivariatePolynomialZp64, variables: Array[String])
: MultipleFieldExtension[MonomialZp64, MultivariatePolynomialZp64, UnivariatePolynomialZp64, Long]
= MultipleFieldExtension(rings.Rings.SplittingField[MonomialZp64, MultivariatePolynomialZp64, UnivariatePolynomialZp64](poly), variables)
= updateCoder[MonomialZp64, MultivariatePolynomialZp64, UnivariatePolynomialZp64, Long](poly.degree(), MultipleFieldExtension(rings.Rings.SplittingField[MonomialZp64, MultivariatePolynomialZp64, UnivariatePolynomialZp64](poly), variables))

private def updateCoder[
Term <: AMonomial[Term],
mPoly <: AMultivariatePolynomial[Term, mPoly],
sPoly <: IUnivariatePolynomial[sPoly],
E](degree: Int, mExt: MultipleFieldExtension[Term, mPoly, sPoly, E]): MultipleFieldExtension[Term, mPoly, sPoly, E] = {
for (i <- 0 until (degree - 1)) {
mExt.coder.withEncoder(MultipleFieldExtension(mExt.getSubExtension(i), mExt.variables.slice(0, i + 1)).coder)
}
mExt
}

object UnivariatePolynomial {
def apply[I, E](cfs: I*)(implicit ring: Ring[E]): UnivariatePolynomial[E] = cfs.headOption match {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,4 +216,15 @@ class Examples3 {
assert(s1 * s2 + s1 * s3 + s2 * s3 == field("25/17"))
assert(s1 + s2 + s3 == field("14/17"))
}

@Test
def testSplittingField1(): Unit = {
import syntax._
// some irreducible polynomial
val poly = UnivariateRing(Q, "x")("17*x^3 - 14*x^2 + 25*x + 15")
// create splitting field as multiple field extension
// s1,s2,s3 are roots of specified poly
implicit val field = SplittingField(poly, Array("s1", "s2", "s3"))
println(field)
}
}
2 changes: 1 addition & 1 deletion rings/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>cc.redberry</groupId>
<artifactId>rings</artifactId>
<version>2.5-SNAPSHOT</version>
<version>2.5</version>
<packaging>jar</packaging>
<name>rings</name>
<url>https://github.com/PoslavskySV/rings/</url>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@ public UnivariatePolynomial<mPoly> getGeneratorMinimalPoly(int iGenerator) {
return minimalPolynomialsOfGenerators[iGenerator].clone();
}

/**
* Returns the i-th extension from the tower
*/
public MultipleFieldExtension<Term, mPoly, sPoly> getSubExtension(int i) {
return tower[i];
}

/**
* Returns representation of i-th generator as element of simple field extension generated by primitive element
* {@link #getPrimitiveElement()}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*
* @since 2.3
*/
public final class GroebnerBasisData {
public final class GroebnerBasesData {

/* **************************************** Katsura **************************************************** */

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ MultivariatePolynomial<Poly> generate(
/* **************************************** Partial fractions **************************************** */

/**
* Computes Leintart's decomposition of given rational expression (see https://arxiv.org/abs/1206.4740)
* Computes Leinart's decomposition of given rational expression (see https://arxiv.org/abs/1206.4740)
*/
public static <Term extends AMonomial<Term>, Poly extends AMultivariatePolynomial<Term, Poly>>
List<Rational<Poly>> LeinartDecomposition(Rational<Poly> fraction) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void test6_katsura() throws Exception {
for (int i = 3; i <= its(8, 9); i++) {
System.out.println(String.format("=> Katsura%s:", i));
List<MultivariatePolynomialZp64> ideal =
GroebnerBasisData.katsura(i)
GroebnerBasesData.katsura(i)
.stream()
.map(p -> p.mapCoefficients(ring, r -> ring.modulus(r.numerator())))
.map(p -> p.setOrdering(GREVLEX))
Expand Down Expand Up @@ -204,7 +204,7 @@ public void test6_cyclic() throws Exception {
for (int i = 5; i <= its(7, 7); i++) {
System.out.println(String.format("=> Cyclic%s:", i));
List<MultivariatePolynomialZp64> ideal =
GroebnerBasisData.cyclic(i)
GroebnerBasesData.cyclic(i)
.stream()
.map(p -> p.mapCoefficients(ring, r -> ring.modulus(r.numerator())))
.map(p -> p.setOrdering(GREVLEX))
Expand Down Expand Up @@ -801,7 +801,7 @@ public void testHilbertGB6() throws Exception {
@Test
public void testHilbertGB7() throws Exception {
List<MultivariatePolynomialZp64> ideal =
mod(GroebnerBasisData.katsura(8).stream().map(p -> p.mapCoefficients(Z, Rational::numerator)).collect(Collectors.toList()), 17);
mod(GroebnerBasesData.katsura(8).stream().map(p -> p.mapCoefficients(Z, Rational::numerator)).collect(Collectors.toList()), 17);

MultivariatePolynomialZp64 factory = ideal.get(0);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public void test2() {
@Ignore
@Test
public void test3() {
List<MultivariatePolynomial<Rational<BigInteger>>> katsura = GroebnerBasisData.katsura(8);
List<MultivariatePolynomial<Rational<BigInteger>>> katsura = GroebnerBasesData.katsura(8);
eliminate(katsura.stream().map(p -> p.mapCoefficients(Zp64(17), r -> r.numerator().longValueExact())).collect(Collectors.toList()), 0)
.stream().sorted(Comparator.comparingInt(AMultivariatePolynomial::nUsedVariables))
.forEach(System.out::println);
Expand Down

0 comments on commit c33dab5

Please sign in to comment.