idaholab / raven

RAVEN is a flexible and multi-purpose probabilistic risk analysis, validation and uncertainty quantification, parameter optimization, model reduction and data knowledge-discovering framework.
https://raven.inl.gov/
Apache License 2.0
217 stars 133 forks source link

[TASK] Implement a multivariate normal distribution in Python #2222

Closed j-bryan closed 8 months ago

j-bryan commented 9 months ago

Issue Description

Is your feature request related to a problem? Please describe. One of the main barriers to running RAVEN without building it is the reliance on key functionalities from Crow. The Crow class for multivariate normal distributions is among the most commonly used Crow classes. Implementing an equivalent class in Python would allow users to run cases that rely on this class without building RAVEN first and would allow for the removal of the relevant Crow files. This would also be another step towards being able to drop the boost RNG code.

Describe the solution you'd like Implement a class in Python that replicates the behavior of the Crow BasicMultivariateNormal class. Note that this class models the multivariate distribution in two ways: (1) a spline-based distribution that is reliant on the BasicMultiDimensionalCartesianSpline crow class, and (2) a PCA-based implementation of the multivariate normal distribution. It may be best to handle these methods separately, with the PCA method being the simpler to convert to Python. The scipy.stats.multivariate_normal class may be of use here.

Describe alternatives you've considered Rely more heavily on the scipy.stats.multivariate_normal class in the implementation at the expense of having to regold 50+ tests.


For Change Control Board: Issue Review

This review should occur before any development is performed as a response to this issue.


For Change Control Board: Issue Closure

This review should occur when the issue is imminently going to be closed.