Bugs, Features, and Ideas for Future Work
Note that some exotic types and features may need to go into spire-contrib first to see how widely-used they are.
There is a obviously a balance between ultra-minimal and kitchen-sink approaches, although the math community seems to favor kitchen-sink. In general we are happy to accept new functionality provided that it seems to fit into the overall pattern of what's already there.
These are relatively simple, self-contained tasks. They are relatively straightforward and shouldn't require a lot of overall context to get right. Mostly they relate to plugging small gaps or oversights, or just improving the reader experience.
- Improving tests, port to property-based where possible
- Ensure Javadoc comments for all non-trivial (*) methods
- More sophisticated benchmarking examples
- Export Gen/Arbitrary ScalaCheck instances for Spire types
- Standardize methods/operators across number types
- Verify existing documentation (reading and executing)
These are a bit subtle. They usually relate to problems with the existing design, or shortcomings, or missing pieces. These are a bit harder to take on unless you've used the types, or are willing to do a little bit of back and forth.
- Commutativity problems
- Characterize types in terms of precision/approximation
- Characterize types in terms of presumed vs actual associativity
- General support for infinite sequences, series
- Generalize, expand, and rationalize literal syntax macros
- Better and more uniform approximation contexts
- More work on non/algebra
- Either make FPFilter package private, or clean up and document it
- Look into ways to reduce allocations on SafeLong and Rational
These issues are cases where we can extend an existing strategy out in a new direction. They generally require a bit of context but should be relatively self-contained tasks in many cases.
- Add type class instances for types like Future?
- Iterating over Intervals with steps (a la range)
- Add macro support for zero-cost implicits on literals
- Spire bindings for other libraries
- Support generalized strategies for mean, standard deviation, etc.
- Add larger WELL RNG implementations
- Other stats methods?
- More random distributions
- Use functions to/from Real to make arbitrary instance of Trig, NRoot, etc
- Proxy type for easily wrapping numeric types (possibly using macros)
- Consider adding FixedDecimal, like FixedPoint but constrained to decimal values.
Possible new features
Hello, greenfield! These tasks are relatively unconstrained by the existing design (although they should try to be harmonious where possible). They tend to be a bit involved in terms of needing some up-front design, and motivating examples. Tests are crucial.
- Breeze integration (* see GSOC)
- Algebird integration (* needs 2.10)
- Look into support DFTs and FFTs
- Look into supporting efficient array storage of boxed types
- Consider supporting PartialOrder[A]
- Support concrete Complex/Quaternion types?
- Consider more exotic algebras: Clifford algebras,
- Symbolic numbers a la Sympy, Mathematica, etc (?)
- Work on fleshing out and profiling soc's BigInt type
- Create better BigDecimal type
Adding a new type is a bit more straightforward than adding a new feature, since typically the design space is a bit smaller. Like new features, this work does require writing tests (and possibly benchmarks) to be sure that the new type works well.
- Add Multi-variate polynomials
- Add Skew Field (division ring)
- Add finite fields
- Add jet (dual number) support (for automatic differentiation)
- Add primality testing (e.g. Miller-Rabin, Lucas)
- Add more prime factoring methods (e.g. Dixon, Quadratic Sieve, etc)
- Add continued fractions
- Add ModN/Residue class (possibly with singleton types, e.g. Int(3))
- Add Quad or DoubleDouble implementation