cicirello / rho-mu Goto Github PK
View Code? Open in Web Editor NEWρμ - a Java library of Randomization enHancements and Other Math Utilities
Home Page: https://rho-mu.cicirello.org
License: GNU General Public License v3.0
ρμ - a Java library of Randomization enHancements and Other Math Utilities
Home Page: https://rho-mu.cicirello.org
License: GNU General Public License v3.0
Summary
Add the Gaussian random number generators from Chips-n-Salsa.
Java 17 introduced a RandomGenerator interface that all random number generators implement. Use this to remove redundancy (currently, there are 2 versions of most methods, one that expects a Random and one a SplittableRandom). For each such case, replace with single method that expects a RandomGenerator).
Added benefit is that doing so enables supporting all of the new random number generators introduced in Java 17.
This will be a breaking change requiring bumping major version number.
Summary
The build.yml workflow fails when commenting coverage on PR from fork. Cause is a known issue related to GITHUB_TOKEN. Modify workflow so that it doesn't fail due to this.
Version 3.0.0 introduced a dependency (previously there were no external dependencies). Update build to additionally produce a jar-with-dependencies.
Improve jitpack-build.yml workflow for ahead-of-time jitpack snapshot builds by curling the maven-metadata.xml rather than the directory of the snapshot.
In #121, it is proposed that the sampling methods of RandomIndexer are moved to a new class, and that the existing methods are deprecated in the planned release of 2.5.0. This issue concerns the future removal of those deprecated methods. They should be removed in version 3.0.0. This will be a BREAKING CHANGE. This is part of #119.
Add a class to wrap objects of RandomGenerator.ArbitrarilyJumpableGenerator to add the enhanced functionality of EnhancedRandomGenerator. The new class should be a subclass of the wrapper of RandomGenerator.LeapableGenerator (see #49).
Configure Find Security Bugs static analysis
Refactor the Statistics class (suggestion by Sonatype Lift's technical debt scan).
Bump example programs version of rho mu to 3, and test. Make any necessary changes related to the breaking changes in the library itself.
Add methods for creating streams of Binomial distributed random numbers to the EnhancedRandomGenerator class.
I've been using RefactorFirst indirectly via Sonatype Lift. Configure the refactor-first-maven-plugin in the pom.xml to enable easily running during local builds. See https://github.com/jimbethancourt/RefactorFirst for configuration details.
The README already has an updated UML diagram as a mermaid diagram. But the diagram on the website in the javadocs doesn't include the new RandomSampler class. Update this.
Add a class to wrap objects of RandomGenerator.JumpableGenerator to add the enhanced functionality of EnhancedRandomGenerator. The new class should be a subclass of the wrapper of RandomGenerator.StreamableGenerator (see #44).
The details of the Insertion Sampling algorithm implemented by the sampleInsertion method of RandomIndexer and EnhancedRandomGenerator are described in an article about to appear in the journal Applied Sciences, article titled "Cycle Mutation: Evolving Permutations via Cycle Induction." Reference this article in the javadoc comments of those methods.
Additionally, the composite sampling approach of the sample method of those same classes is a composite of three algorithms, including the above. Check the comments to see if they need editing.
Add a class to wrap objects of RandomGenerator.LeapableGenerator to add the enhanced functionality of EnhancedRandomGenerator. The new class should be a subclass of the wrapper of RandomGenerator.JumpableGenerator (see #47).
Summary
Migrate from JUnit 4 to JUnit Jupiter 5.8.2.
Add an example program that demonstrates the speed of generating random bounded ints of the enhanced nextInt method compared to the approach of the Java API built-in method.
This is part of #74 .
Links in UML diagram currently open new page within space of the diagram. Fix that. It looks bad.
The configuration file for Sonatype Lift includes an unnecessary exclusion for the source code of the test cases. The default exclusions should cover that.
Library currently released via Maven Central and GitHub Packages. Configure builds for JitPack to provide a backup source of artifacts. This will also provide a convenient approach to snapshot builds since JitPack will build the default branch on demand.
Add methods for generating streams of integers with a bound or origin and bound, using the RandomIndexer.nextBiasedInt() methods for ultrafast, but biased, random integer generation. Essentially an option to disable rejection sampling to sacrifice uniformity for speed.
Summary
Create an image that can be used as the social preview for the repository, as well as for the header of the documentation website. Also create a favicon for the documentation website.
Add a class to wrap objects of RandomGenerator.StreamableGenerator to add the enhanced functionality of EnhancedRandomGenerator. The new class should be a subclass of EnhancedRandomGenerator.
Summary
Add automated commenting of test coverage on PRs to CI/CD workflow.
Refactor the MatrixOps class (suggestion by Sonatype Lift's technical debt scan).
Summary
Documentation goes live on the web when merging PR documenting unreleased functionality. Modify docs.yml workflow to deploy docs to web only on release, and workflow dispatch, but not on pushes.
Add methods for generating streams of exponentially distributed random numbers.
Improve maven-publish.yml workflow for ahead-of-time release builds on jitpack by curling the maven-metadata.xml for the new release tag to trigger the build rather than the directory of the latest release. This seems to work more consistently.
Configure SpotBugs static analysis via its Maven plugin.
Add methods for creating streams of Cauchy distributed random numbers to the EnhancedRandomGenerator class.
Refactor test cases in LinearAlgebraTests (suggested by Sonatype Lift's Technical Debt scan).
Create a wrapper class for objects implementing RandomGenerator with that wrapper likewise implementing RandomGenerator. Use methods of rho mu's RandomIndexer and RandomVariates classes where appropriate, and delegate remaining functionality to wrapped object. Add all functionality of RandomIndexer and RandomVariates.
Result will be a drop in replacement for existing Java random number classes but with rho mu's enhancements.
Summary
RandomIndexer originated in another project and has "since" tags that are not relevant, mentioning versions of a different project. Remove these and check other classes for this.
Configure SpotBugs exclusions in XML instead of annotations
Summary
Java 17 introduced a RandomGenerator interface, as well as expanded support for a variety of pseudorandom number generators. Upgrade minimum supported Java version to Java 17 to get access to the new features. This includes:
Refactor test cases in RandomVariatesTests (suggested by Sonatype Lift's Technical Debt scan).
Refactor RandomIndexer class (suggestion by Sonatype Lift's technical debt scan).
Add constructors with seed to EnhancedSplittableGenerator, EnhancedStreamableGenerator, EnhancedRandomGenerator classes. When seeded constructor used, wrap a SplittableRandom object since that class is considered legacy by the JDK and thus will supposedly stick around long term, and it is also the fastest of the only two options currently available that allow the seed to be specified. Note at the present time it is not feasible to provide seeded constructors for the other subclasses of EnhancedRandomGenerator.
Replace use of deprecated set-output in deployment workflow.
Add a class to wrap objects of RandomGenerator.SplittableGenerator to add the enhanced functionality of EnhancedRandomGenerator. The new class should be a subclass of the wrapper of RandomGenerator.StreamableGenerator (see #44).
Refactor test cases in EnhancedRandomGeneratorTests (suggested by Sonatype Lift's Technical Debt Scan).
Adopt the Google Java style. This should include integrating Spotify's fmt-maven-plugin into the build process.
Refactor test cases in RandomIndexerTests (suggested by Sonatype Lift's Technical Debt scan).
Add an example program that demonstrates the very significant speed advantage of the nextBiasedInt method as compared to the enhanced nextInt as well as the Java API built-in nextInt. The nextBiasedInt method trades off uniformity for speed.
This is part of #74 .
Refactor the classes of package org.cicirello.math.rand to use the new functionality of org.cicirello.core v2.4.0 (e.g., ArrayFiller and ArrayMinimumLengthEnforcer). This will require adding a dependency on org.cicirello.core 2.4.0.
Add methods for creating streams of Gaussian distributed random numbers to the EnhancedRandomGenerator class.
The RandomIndexer class currently has a very high weighted method count. Although the various sampling methods (e.g., sample, sampleReservoir, samplePool, sampleInsertion, etc) are somewhat related to the rest of the functionality offered by this class, those methods are a bit different in purpose than the rest. This issue requests the following:
This will also help work toward achieving #119.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.