RNG-181: LXM family to support SplittableUniformRandomProvider

Create generic RandomStreams class that can stream objects created with
a seed and splittable source of randomness. The seed uses the stream
position mixed with random bits to ensure it is unique within the stream
(up to a size limit of 2^60). Use this feature to support splits in the
LXM family.

Add isSplittable method to RandomSource to use to identify supported
interfaces.

Use of the splittable interface by other modules requires an exception
in RevAPI for exposing an external class in the API. This is similar to
exposure of UniformRandomProvider and is allowed. The change is
non-breaking for binary and source compatibility (see revapi
java.class.externalClassExposedInAPI).
30 files changed
tree: 7983b9ebc82c00818fae324172eefc1b95a66a63
  1. .github/
  2. commons-rng-client-api/
  3. commons-rng-core/
  4. commons-rng-examples/
  5. commons-rng-sampling/
  6. commons-rng-simple/
  7. dist-archive/
  8. doc/
  9. docs-archive/
  10. siteMods/
  11. src/
  12. .asf.yaml
  13. .gitattributes
  14. .gitignore
  15. CONTRIBUTING.md
  16. LICENSE
  17. NOTICE
  18. pom.xml
  19. README.md
  20. RELEASE-NOTES.txt
  21. SECURITY.md
README.md

Apache Commons RNG

Build Status Coverage Status Quality Gate Status Maven Central Javadocs Code Quality: Java

The Apache Commons RNG project provides pure-Java implementation of pseudo-random generators.

Documentation

More information can be found on the Apache Commons RNG homepage. The Javadoc for each of the modules can be browsed:

Questions related to the usage of Apache Commons RNG should be posted to the user mailing list.

Where can I get the latest release?

You can download source and binaries from our download page.

Alternatively you can pull it from the central Maven repositories, e.g.:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-rng-simple</artifactId>
  <version>1.4</version>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-rng-sampling</artifactId>
  <version>1.4</version>
</dependency>

Contributing

We accept Pull Requests via GitHub. The developer mailing list is the main channel of communication for contributors. There are some guidelines which will make applying PRs easier for us:

  • No tabs! Please use spaces for indentation.
  • Respect the code style.
  • Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
  • Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running mvn.

If you plan to contribute on a regular basis, please consider filing a contributor license agreement. You can learn more about contributing via GitHub in our contribution guidelines.

License

This code is under the Apache Licence v2.

See the NOTICE file for required notices and attributions.

Donations

You like Apache Commons RNG? Then donate back to the ASF to support the development.

Additional Resources