Commit Graph

134 Commits

Author SHA1 Message Date
Vinzent Steinberg
a76014227c Fix macros in combination with serde1 feature
Before, the feature would be resolved in the crate where the macro was used,
not in the `average` crate as intended.  Now, the macros are defined depending
on the `serde1` feature, fixing this issue.
2019-07-31 16:22:55 +02:00
Vinzent Steinberg
3853de8481 Fix clippy warnings 2019-07-08 17:32:44 +02:00
Vinzent Steinberg
31a8154e01 Fix serde1 feature and remove unneccessary crate import 2019-07-08 17:32:43 +02:00
Vinzent Steinberg
610f6cae6a Clean up doctests
Also make sure that the macros work when they are imported in isolation.
2019-07-08 17:32:43 +02:00
Vinzent Steinberg
c9829a1279 Clean up tests 2019-07-08 17:32:42 +02:00
Vinzent Steinberg
9401f41558 Use Rust 2018 idioms 2019-07-08 16:04:59 +02:00
Vinzent Steinberg
1bdadfae1b Make code compatible with Rust 2018 2019-07-08 16:04:19 +02:00
Vinzent Steinberg
25d894a2f6 Use custom implementation of binomial coefficient
This lets us get rid of the num-integer dependency and makes the
performance of the code generated by `define_moments` close to that of
`Kurtosis`. Before, it was several times slower.

However, the custom implementation is more vulnerable to integer
overflow. In practise, this should not matter, since it does not make
sense to calculate moments of very high order.
2019-05-22 15:51:11 +02:00
Vinzent Steinberg
c10616c46e Improve concatenate! to support usage outside braces
Fixes #12.
2019-04-25 13:51:33 +02:00
Vinzent Steinberg
547149bfd2 Fix serde support
* Use correct Cargo flags.
* Fix tests.
* Fix histogram serialization.
2019-01-22 14:29:29 +01:00
Vinzent Steinberg
5a6fb296a4 Fix typo 2018-07-27 16:55:02 +02:00
Vinzent Steinberg
8c5121ca08 Suggest correct Serde feature 2018-07-27 16:53:27 +02:00
Vinzent Steinberg
f9dee3bf9b Fix clippy warning 2018-07-27 16:52:01 +02:00
Vinzent Steinberg
bb994f0f22 Improve docs on calculation of arbitrary moments 2018-07-27 16:50:02 +02:00
Vinzent Steinberg
537a00c053 Fix type inference failure on some targets 2018-07-27 15:14:44 +02:00
Vinzent Steinberg
ee110a774f define_histogram: Fix potential issue 2018-07-24 18:58:17 +02:00
Vinzent Steinberg
5807e211dc Clarify core is required for define_histogram 2018-07-24 18:52:40 +02:00
Vinzent Steinberg
56344750a7 Fixes to Histogram
1. Now histograms with more than 31 bins are supported (before there
   were issues with missing implementations on arrays.)
2. The items defined by `define_histogram!` are in their own module, to
   avoid issues with Rust's lack of macro hygiene for items.
2018-07-24 18:18:05 +02:00
Vinzent Steinberg
a7dde93df8 More idiomatic serde support
* Follow the suggestions from the Serde docs.
* Rename the feature from `serde` to `serde1`.
* Fix a doctest.
* Mention the feature in the README.
2018-07-11 12:54:37 +02:00
Vinzent Steinberg
34d33ef21a Slightly improve calculation of standardized moment
Also test more of the trivial cases.
2018-07-11 12:37:06 +02:00
Vinzent Steinberg
3e7a66b519 Remove dead code 2018-07-11 12:31:32 +02:00
Vinzent Steinberg
663009f358 Make it possible to calculate an arbitrary number of moments 2018-07-10 17:19:57 +02:00
Vinzent Steinberg
0de183127e Implement merge for Histogram 2018-07-06 13:27:26 +02:00
Vinzent Steinberg
fcbe51f1dd Improve Histogram docs by exporting the Histogram10 special case 2018-07-06 13:08:33 +02:00
Vinzent Steinberg
554d4ca596 Use float-ord instead of quickersort
The latter has been deprecated.
2018-07-06 11:01:41 +02:00
Vinzent Steinberg
ef41836ec5 Small improvements to Histogram docs 2018-07-06 10:52:19 +02:00
Vinzent Steinberg
9f1c28147c Moments: Improve docs 2018-07-06 10:08:18 +02:00
Vinzent Steinberg
7e06374843 histogram: Implement variance
This is useful for error estimates.
2018-03-07 17:45:38 +01:00
Vinzent Steinberg
0259728bb8 Fix constant width histograms for ranges not starting at 0 2018-03-07 17:37:06 +01:00
Vinzent Steinberg
c04ce8887e histogram: Implement AddAssign and MulAssign
Also clarify documentation and name of `min`/`max`.
2018-03-07 17:08:19 +01:00
Vinzent Steinberg
2775f78e8e Expose finding of bin for given sample 2018-03-06 19:31:09 +01:00
Vinzent Steinberg
682fec27fe histogram: Implement min, max and reset 2018-03-06 19:22:42 +01:00
Vinzent Steinberg
08445ba2a3 histogram: Inline default impls 2018-03-06 19:03:46 +01:00
Vinzent Steinberg
d1ab9630af histogram: Implement iteration over bin centers 2018-03-06 18:55:21 +01:00
Vinzent Steinberg
3f22412aa3 Fix clippy warnings 2018-03-06 18:48:08 +01:00
Vinzent Steinberg
86a411143e histogram: Implement iteration of bin widths and normalized bins 2018-03-06 18:27:31 +01:00
Vinzent Steinberg
c64544baa8 Implement iteration of histograms 2018-03-06 17:16:54 +01:00
Vinzent Steinberg
ba93bb4e65 Refactor histograms to use common trait 2018-03-06 16:26:02 +01:00
Vinzent Steinberg
dcb006e6e0 Merge branch 'master' of https://github.com/vks/average 2018-03-06 15:56:09 +01:00
Vinzent Steinberg
3a0dcafd21 Implement histograms
In order for them to have constant size, a macro is provided to crate
the histogram type. This should be replaced by const generics once Rust
has them.
2018-03-06 15:54:30 +01:00
Vinzent Steinberg
87bf71baa4 variable -> growing 2018-03-01 01:54:41 +01:00
Vinzent Steinberg
8b5fb44500 Clarify limitations of quantile algorithm
Refs #10.
2018-03-01 01:33:39 +01:00
Vinzent Steinberg
e4345f5046 impl FromIterator<&f64> and FromIterator<&(f64, f64)>
This allows to write

    let k: Kurtosis = a.iter().collect();

instead of

    let k: Kurtosis = a.iter().map(|x| *x).collect();

but breaks type inference for code like

    let m: Min = (1..6).map(Into::into).collect();

where

    let m: Min = (1..6).map(f64::from).collect();

has to be used instead.

Fixes #8.
2018-02-28 23:44:40 +01:00
Vinzent Steinberg
68a4fa64cb Restore compatibility with stable 2018-01-12 14:23:38 +01:00
Vinzent Steinberg
a6a477d621 Benchmark generic vs. handwritten implementation of kurtosis
Also restore no_std and remove printing left over from debugging.
2018-01-11 19:37:25 +01:00
Vinzent Steinberg
785e2141e0 Moments: Refactor merge to be in-place 2018-01-11 19:30:51 +01:00
Vinzent Steinberg
0d6cf939d1 Clarify type of kurtosis 2018-01-11 19:22:11 +01:00
Vinzent Steinberg
df099b61da Moments::merge: Calculate binomial iteratively 2018-01-11 19:19:56 +01:00
Vinzent Steinberg
9f2a8ee44f Moments: Test merge 2018-01-11 19:16:11 +01:00
Vinzent Steinberg
49ce6c5256 Moments::add: Calculate binomials iteratively 2018-01-11 19:07:57 +01:00