Individuals making significant and valuable contributions are given commit-access to a project to contribute as they see fit. A project is more like an open wiki than a standard guarded open source project.
There are a few basic ground-rules for contributors:
--forcepushes or modifying the Git history in any way.
- Non-master branches ought to be used for ongoing work.
- External API changes and significant modifications ought to be subject to an internal pull-request to solicit feedback from other contributors.
- Internal pull-requests to solicit feedback are encouraged for any other non-trivial contribution but left to the discretion of the contributor.
- Contributors should attempt to adhere to the prevailing code-style.
Declaring formal releases remains the prerogative of the project maintainer(s).
Changes to this arrangement
This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.
This contribution policy is based on The level organization Open Open Source Policy.
Contributing to simple-statistics
Simple statistics is a statistics library that can be both used and read. It should help programmers learn statistics and statisticians learn programming. In order to achieve this goal, it must be simple and explanatory.
- Conditional Operator
- ES5 Array methods
eval, and other forms of
- Most micro-optimizations, like alternative for loop forms
- Shortcut branching
/** * harmonic mean * * a mean function typically used to find the average of rates * * this is the reciprocal of the arithmetic mean of the reciprocals * of the input numbers * * This runs on `O(n)`, linear time in respect to the array */
simple-statistics tries to stay away from speaking only in the language of math:
in the source:
- UTF8 can be hard to type, since users need to memorize key combinations or code points
- Mathematical symbols have meanings that are often better communicated by words:
in the form of code, we do not run out of space on the paper, and can afford
to call a variable
Every function has a comment that ideally includes:
- The English, long-form name of the method
- What the method does
- What purpose the method typically serves
- A link to a longer description on Wikipedia, Mathematica, or another web-accessible, non-paywalled source
- The efficiency of the function in terms of Big-O notation, if appropriate
simple-statistics has a testsuite located in
test/. Each test file
covers a specific topic and tries to test against known values:
- Values produced by trusted statistics software like R or scipy
- Common-sense results
Tests can be run in node.js and are run on every commit to GitHub by Travis-CI.
To run tests:
npm install npm test
Simple statistics maintains API documentation with JSDoc syntax
and the documentation.js generator.
Consult the JSDoc and gettings started docs for
hints for how to document each function, or read other documentation comments
src for inspiration.
=, no aligned arguments, spaces are either indents or the 1
space between expressions. No hard tabs.
- All comparisons should be as strict and obvious as possible: prefer
(foo === 0)to
- Straightforward code is more important than most optimizations.
Simple statistics emits errors for incorrect input. Error messages are modeled
after the Python
statistics package. Many of the errors are related to the size
of the input sample, and follow this format:
FUNCTION requires at least N data point(s)
min requires at least one data point
The following should be true of all errors:
- Errors are not sentences, and they do not end in periods.
- When referring to numbers, use APA style - words for numbers under 10
simple-statistics contains a benchmark suite located in the
It's structured as a separate
package.json file, so you'll need to
cd into the
'competitor' libraries noted in SEEALSO.md. To run benchmarks, run
To add more, edit