This version introduces a switch to nanobind as a backend (#160): i.e., the C++ bindings, now use nanobind instead of pybind11. It allows for considerable performance improvements (~8x speedup in our latest benchmarks) and smaller binaries.
- Removal of the overloaded constructors:
- For all classes, only one constructor is now available.
The reason is that the overloaded constructors were un-Pythonic, error-prone, and could not be properly documented with Sphinx.
They have been replaced by a single constructor for each class, along with factory
from_xzy
methods. - For the
Bicop
class:Bicop.from_family()
: Instantiate from a family, rotation, parameters, and variable types.Bicop.from_data()
: Instantiate from data, as well as optional controls and variable types.Bicop.from_file()
: Instantiate from a file.Bicop.from_json()
: Instantiate from a JSON-like string.
- For the
Vinecop
class:Vinecop.from_dimension()
: Instantiate an empty vine copula of a given dimension.Vinecop.from_data()
: Instantiate from data, as well as an optionalFitControlsVinecop
, anRVineStructure
or matrix, and variable types.Vinecop.from_structure()
: Instantiate from anRVineStructure
or matrix, as well as optional pair-copulas and variable types.Vinecop.from_file()
: Instantiate from a file.Vinecop.from_json()
: Instantiate from a JSON-like string.
- For the
RVineStructure
class:RVineStructure.from_dimension()
: Instantiate a default structure of a given dimension and truncation level.RVineStructure.from_order()
: Instantiate from an order vector.RVineStructure.from_matrix()
: Instantiate from a matrix.RVineStructure.from_file()
: Instantiate from a file.RVineStructure.from_json()
: Instantiate from a JSON-like string.
- For all classes, only one constructor is now available.
The reason is that the overloaded constructors were un-Pythonic, error-prone, and could not be properly documented with Sphinx.
They have been replaced by a single constructor for each class, along with factory
- Expose more structure methods to python (#157)
- Switch to nanobind as a backend (#160)
- New IO methods for
Bicop
andVinecop
classes to use JSON-like strings (#160) - Extensive documentation revamp (#160)
- Adding a benchmark example (#160)
- Convertion of all examples to Jupyter notebooks (#160)
- Install and test source distribution (#164)
These changes originate from the underlying C++ library, vinecopulib
, which powers pyvinecopulib
.
- Use analytical derivatives in discrete pdf/hfuncs (#572)
- Allow for alternative for
"prim"
vs"kruskal"
in MST-based model selection (#577) - Improve the dependencies install script to use it in other projects (#576)
- Add tawn copula (#579)
- Improve doc (#580, #585, #607)
- Allow for the discrete Rosenblatt transform (#581)
- Add
Vinecop::fit()
(#584) - Improve
Bicop::str()
(#588) andVinecop::str()
(#589) - Properly handle discrete variables for the TLL family (#597)
- Weighted pseudo-observations (#602)
- Cross-platform random numbers and add seeds options to
to_pseudo_obs
(#603) - Improve performance by
- aligning with the
R
defaults (e.g.,BOOST_NO_AUTO_PTR
,BOOST_ALLOW_DEPRECATED_HEADERS
,BOOST_MATH_PROMOTE_DOUBLE_POLICY=false
,std::string nonparametric_method = "constant"
for the TLL instead of"quadratic"
,-O3 -march=native
compiler flags) and add benchmarking example (#592, #611, #613), - using
Eigen
element-wise operations instead ofboost
whenever possible (#598, #612), - using binary search in the TLL for
get_indices
(#613).
- aligning with the