Skip to content

Latest commit

 

History

History
263 lines (202 loc) · 10.4 KB

CHANGES.md

File metadata and controls

263 lines (202 loc) · 10.4 KB

Changes

Release notes are now published on GitHub.

Version 0.16.1-SNAPSHOT (not released)

  • 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 typelevel#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."

Version 0.16.0

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 platform module abstracts over the JVM/JS differences, while Opt has been moved to the util module. Other modules are not used yet (data, 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

Version 0.15.0

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

Version 0.14.1

This version add laws for gcd/lcm operations, and fixes corner cases for the standard types such as Rational.

Additions:

  • Law tests for gcd/lcm

Changes:

  • 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

Version 0.14.0

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).

Additions:

  • 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).

Changes:

  • 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

Fixes:

  • Instances for Complex and Quaternion are more precise
  • Numeric[Complex[A]] is no longer provided
  • Many bug fixes

Version 0.13.0

Additions:

  • Added Eq[Bound[A]] instance
  • Added Interval#overlap and supporting machinery

Changes:

  • Improve Polynomial performance
  • Support negative roots for Real
  • Migrate to newer ScalaCheck

Fixes:

  • Fix bugs in root isolation/refinement for Algebraic
  • Speed up convergence for Rational#limitTo

Version 0.12.0

Additions:

  • IntervalSeq and IntervalTrie added to spire-extras
  • .toReal and .toAlgebraic methods on Rational

Changes:

  • Package restructuring and improvements
  • Make Interval serializable
  • Deprecate use of SecureJava.fromBytes

Fixes:

  • Numerous bug fixes

Version 0.11.0

Spire has two new core maintainers: Rüdiger Klaehn and Denis Rosset.

The spire-scalacheck-binding package has been renamed to spire-laws. The spire-extras package has been introduced, for types that are less widely-used (but still useful).

Additions:

  • Added spire.math.Merging for merging arrays
  • Added qcombine (for generic Monoids)
  • More benchmarks (Rational, SafeLong, ...)
  • Scalastyle plugin and code clean up
  • Scoverage plugin and coverage tracking
  • Type class instances for java.math.BigInteger
  • Useful .as syntax for converting literals

Changes:

  • Move FixedPoint into extras
  • Improve Rational implemenation (clearer structure, faster)

Fixes:

  • Improved equality (===) support
  • Lots of documentation bug fixes and typo correction
  • Fixed unary - for unsigned int/long
  • Clean up Arbitrary/Gen instances
  • Drastically-improved test coverage for SafeLong, Rational, etc.
  • Fixed bugs around ceil method

Version 0.10.1

(Version 0.10.0 was aborted due to errors during the release.)

Fixes:

  • Major refactor/improvements to Algebraic (Tom Switzer)
  • Remove unneeded imports (Kenji Yoshida)
  • Fix SBT build (Kenji Yoshida)
  • Update README to display correct mailing list (Pablo Pita)
  • Remove superfluous Interval#min param (Siddhartha Gadgil)
  • Fix code examples in README (Kevin Meredith)
  • Add support for pattern matching SafeLong (Kevin Meredith)
  • Improve Opt and add tests (Alec Zorab)
  • Fix tail recursion with Opt (Kenji Yoshida)
  • Remove ApproximationContext entirely (Erik Osheim)
  • Update sbt, scala and library versions (Kazuhiro Sera)
  • Fix hashCode/equals for polynomials (Erik Osheim)
  • Add pretty stringifcation to polynomials (Rüdiger Klaehn)
  • Many new polynomial tests (Rüdiger Klaehn)
  • Fix cooperative equality on Rational (Erik Osheim)
  • Create DESIGN.md for implementation docs (Rüdiger Klaehn)
  • Improve Interval tests, fix bugs (Denis Rosset)
  • Add PCG-based Generator (Alexey Romanov)
  • Fix Float/Double GCD bugs (Tom Switzer)
  • Improve SafeLong test coverage (Erik Osheim)
  • Improve Rational test coverage, fix bugs (Rüdiger Klaehn)
  • Many Rational efficiency improvements (Rüdiger Klaehn)
  • Add scoverage support (Rüdiger Klaehn)
  • Fix ULong bugs (Erik Osheim)

Version 0.9.1

  • Interval bug fixes (Denis Rosset)
  • Efficiency improvements for Rational (Rüdiger Klaehn)
  • Improve and document NumberTag (Tom Switzer)
  • Add support and tests for partial actions (Denis Rosset)
  • Add Opt[_] type for unboxed optional values (Denis Rosset)
  • Add Gitter chat room to README (Erik Osheim)
  • Fix bug with root-finding for Long values (Erik Osheim)

Version 0.9.0

The project now builds with Scala 2.11.4 by default.

This was a major update with many additions, changes, and bug fixes.

Additions:

  • Added and reworked group actions (Denis Rosset)
  • Add Lattices and Heyting algebras (Erik Osheim)
  • More useful symbolic operators (Erik Osheim)
  • Introduce Exponential[A] distribution (Erik Osheim)
  • Introduce NumberTag[A] type class (Erik Osheim)

Fixes:

  • Fix typos (Ben Barnard)
  • Fix possible overflow for Complex norm (William Waites)
  • Reduce macro warnings building Spire (Erik Osheim & Tom Switzer)
  • Add missing Number implicits (Erik Osheim)
  • Replace sys.error with proper Exceptions (Tom Switzer)
  • Fix Rational(0D) constructor bug (Tom Switzer)
  • Fix Trilean bug (Erik Osheim)
  • Fix SafeLong bugs (Erik Osheim)
  • Fix Jet bugs (Robert Garden & Erik Osheim)
  • Fix Interval parsing (Ruediger Klaehn)

Changes:

  • Major interval improvements and bug fixes (Denis Rosset)
  • Improve Gaussian[A] distribution using Ziggurat (Erik Osheim)
  • Use aggreate instead of fold to enable parallelism (Adam Pingel)
  • Clarified and improved partial orders (Denis Rosset)
  • Improve Checked arithmetic macros (Tom Switzer & Erik Osheim)
  • Remove almost all closure allocations in SafeLong (Erik Osheim)
  • Made type classes universal traits where possible
  • Update library dependency versions

Version 0.8.2

The project now builds for 2.11.2 by default.

Additions:

  • added Well1024a, Well19937a, Well19937c, Well44497a, and Well44497b generators (Dušan Kysel)
  • added Ziggurat generator for random variables with Gaussian and Exponential distributions (Dušan Kysel)
  • added PartialOrder[A] (Denis Rosset)
  • added free algebras (Tom Switzer)
  • added optional unicode operators (Erik Osheim)
  • added Trilean, a three-valued logic type (Erik Osheim)
  • added segmented sieve for prime generation (Erik Osheim)
  • added Random[A] monad (Erik Osheim)

Fixes:

  • specialized GroupAction (Tom Switzer)
  • improved Well512a implementation (Dušan Kysel)
  • Interval[A] bug fixes (Denis Rosset and Erik Osheim)
  • major improvements to FpFilter and related machinery (Tom Switzer)
  • standardized numeric conversions (Erik Osheim)

Changes:

  • renamed BooleanAlgebra[A] -> Bool[A] (Erik Osheim)
  • migrated to machinist for ops support (Erik Osheim)
  • refactored spire.random package structure (Erik Osheim)

(Versions 0.8.0 and 0.8.1 were skipped due to release problems.)

Version 0.7.5

(Need to reconstruct these notes for versions 0.7.5 and earlier.)