v0.17.0-M1June 16, 2019
v0.16.2May 24, 2019
v0.16.1March 25, 2019
- Disabled benchmarked depending on Caliper; waiting for migration to a modern benchmarking framework
- Fixes to polynomials
- Revised integer Euclidean division semantics: remainder is usually nonnegative (and that's important to define polynomial rings over integers)
- The ranges provided to sorting algorithms are now consistent across methods, see https://github.com/non/spire/pull/738 : "All these strategies operate in place on segments of arrays that start and end at specified indices. In the QuickSort implementation, the end index was inclusive, while it was exclusive in MergeSort and InsertionSort. This has been fixed in this changeset to make the end index exclusive in all three implementations, following the convention in the Java Collections library."
👍 This version implements major changes; most importantly, Scala 2.10 has been dropped. The commutative ring tower has been precised: Euclidean division has better semantics, and unique factorization domains have been introduced, generalizing
spire.math.prime. Some species of division with remainder are now described by
TruncatedDivision. An involution typeclass abstracts over complex conjugation. We also revised the use of commutative vs. noncommtutative rings, mostly in the construction of complex numbers/quaternions, and in the definition of modules.
🚚 Preliminary work has been done towards the modularization of Spire. A
platformmodule abstracts over the JVM/JS differences, while
Opthas been moved to the
utilmodule. Other modules are not used yet (
legacy) but will be in the future.
- Removed support for Scala 2.10
- Upgraded SBT version to 1.1.5
- Upgraded to Scala 2.12.6
- Introduced the platform and util modules
- Added a few modules for future modularization: legacy, data
- Introduced unique factorization domains.
- Renamed quot/mod to equot/emod (Euclidean rings).
- Introduced principled truncated division semantics (see https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf ).
- Added return types to public methods
- Version upgrades for Scalacheck, Scalatest, Shapeless, Discipline, Machinist and Scala versions
- Added a docs project using tut, README is compiled under tut.
- Bug fixes to signum
- Fixes to Modules (i.e. generalizations of vector spaces) with respect to commutativity, introduced left and right modules
- Complex numbers and quaternions are now defined on a commutative ring
- Introduced limited range tests for primitive types,
- Involution typeclass
🚀 This version upgrades dependencies to algebra 1.0.0 which supports the cats 1.0 release.
- Upgraded to algebra 1.0.0
- Small bug fixes to intervals, sparse polynomials, complex numbers, big decimals
🛠 This version add laws for gcd/lcm operations, and fixes corner cases for the standard types such as Rational.
- Law tests for gcd/lcm
- gcd/lcm are associative and commutative, the Rational gcd/lcm have been aligned to be compatible with the integer gcd/lcm.
- Corner cases such as gcd(a, 0) are handled correctly
🚀 This release is a major milestone for Spire.
First of all, it introduces a dependency on typelevel/algebra (and thus on typelevel/cats-kernel). This provides immediate compatibility with Cats and Algebird.
Second of all, Spire is now published to the org.typelevel organization (which was previously org.spire-math).
- Added GCDRing, part of the commutative ring hierarchy
- Clarified the laws of EuclideanRing
- Added DivisionRing, a ring in which division is possible (generalization of fields to the noncommutative case; used now by Spire's quaternions).
- Many type classes are now aliases to algebra's type classes
- Algebra provides commutative rings and fields, but the intemediate structures (GCDRing/EuclideanRing) are added by Spire; thus Spire Field differs from algebra Field by extending GCDRing and EuclideanRing.
- The EuclidenRing operations for Field have been corrected; in particular, Float, Double no longer perform truncated division but a /~ b = 0 for nonzero b, as a can always be divided by b in a field.
- Signed now extends Order, thus IsReal only extends Signed.
- IsReal has been replaced by Signed for some operations in e.g. Complex, making them more precise/general.
- Many different efficiency improvements
- Instances for Complex and Quaternion are more precise
- Numeric[Complex[A]] is no longer provided
- Many bug fixes
- Added Eq[Bound[A]] instance
- Added Interval#overlap and supporting machinery
- Improve Polynomial performance
- Support negative roots for Real
- Migrate to newer ScalaCheck
- Fix bugs in root isolation/refinement for Algebraic
- Speed up convergence for Rational#limitTo
- IntervalSeq and IntervalTrie added to spire-extras
- .toReal and .toAlgebraic methods on Rational
- Package restructuring and improvements
- Make Interval serializable
- Deprecate use of SecureJava.fromBytes
- Numerous bug fixes