Skip to content

Bump pyvinecopulib from 0.7.6 to 1.0.0 in /examples - #1949

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/examples/pyvinecopulib-1.0.0
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/examples/pyvinecopulib-1.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 21, 2026

Copy link
Copy Markdown
Contributor

Bumps pyvinecopulib from 0.7.6 to 1.0.0.

Release notes

Sourced from pyvinecopulib's releases.

pyvinecopulib 1.0.0

1.0.0 (2026-09-18)

This release ships the whole vine-modeling stack rather than the copula half of it. Vinedist and the new pyvinecopulib.margins layer put Sklar's theorem on the data scale; pyvinecopulib.torch runs the evaluation cascade on the GPU under autograd; pyvinecopulib.sklearn adds scikit-learn-compatible estimators; and the array-agnostic layer in pyvinecopulib.core hosts custom pair copulas and non-simplified vines. The public API is reorganized into the core, families, utils and margins subpackages, with the pre-reorganization top-level names kept as warning aliases until 2.0.

It also advances all three vendored C++ libraries, so nearly every tll and Kde1d fit moves. Read the migration guide in docs/migrating-to-1.0.md before upgrading from 0.7.x.

Breaking API changes in pyvinecopulib

  • Use one argument order on every estimator: the observations first, then controls, then keyword-only whatever the object cannot infer. Vinecop.from_data took controls fifth, behind structure, so the call carried over from fit bound a controls object as a structure (#326).

    • pv.Vinecop.from_data(u, structure, matrix, var_types, controls) -> pv.Vinecop.from_data(u, controls, structure=..., matrix=..., var_types=...)
    • pv.Bicop.from_data(u, controls, var_types) -> pv.Bicop.from_data(u, controls, var_types=...)
    • pv.core.Kde1d.fit(x, weights) -> pv.core.Kde1d.fit(y, FitControlsKde1d(weights=...)), and likewise select; the kernel knobs and the weights are all FitControlsKde1d, and the observations are y, because x means exogenous covariates everywhere in the Python API (#339)
    • likewise on BicopBase, VinecopBase, VinedistBase and their torch subclasses; MarginBase already read this way
  • Reorganize the public API into the core, families and utils subpackages; the family constants, Kde1d and the utility functions still resolve at the top level, but warn on access and are removed in 2.0 (#207, #292).

    • pyvinecopulib.gaussian -> pyvinecopulib.families.gaussian, and likewise every family constant and group
    • pyvinecopulib.Kde1d -> pyvinecopulib.core.Kde1d
    • pyvinecopulib.wdm -> pyvinecopulib.utils.wdm, and likewise sobol, ghalton, benchmark and pairs_copula_data
  • Default selection_criterion to "aic" instead of "bic" on FitControlsBicop and FitControlsVinecop, matching the C++ and R defaults; pass selection_criterion="bic" to keep the previous selection (#251).

  • Move every tll fit, and so every unqualified Bicop.from_data / Vinecop.from_data that selects one: the interpolation grid's margins are balanced across both sweep orders and iterated to convergence, and hfunc / hinv no longer floor the interpolated density at 1e-4 (#305, vinecopulib#751).

  • Move every Kde1d fit: the plug-in bandwidth shifts by O(1/n), and a bounded fit shifts again under the new endpoint treatment (#312, kde1d#29).

  • Fit a finite Kde1d bound with a local-linear boundary estimator by default; pass boundary_repair=False for the previous transformed fit (#312, kde1d#36).

  • Read a discrete Kde1d's xmin / xmax as the integer support, so both the bounds and the data must be integers and the fitted grid runs half a unit wider at each end (#312, kde1d#37).

  • Label a selected RVineStructure with the conditioned variable on the diagonal, so get_matrix() and order differ for the same model; densities and log-likelihoods do not (#251, vinecopulib#702).

  • Rename the sampling entry points to sample, keeping the released spellings as warning aliases (#297).

    • Bicop.simulate(n) -> Bicop.sample(n), and likewise on Vinecop, RVineStructure and Kde1d
    • pyvinecopulib.simulate_uniform -> pyvinecopulib.utils.sample_uniform
  • Return self from Bicop.fit / .select and Vinecop.fit / .select instead of None, so every estimator in the package composes the same way (#326).

  • Make parameters, num_threads, seeds and randomize_discrete keyword-only on the evaluation methods of Bicop and Vinecop: each class was internally consistent and the two disagreed, Bicop reading (u, parameters, num_threads) where Vinecop read (u, num_threads, parameters), so a call carried between them bound a parameter matrix as a thread count. Bicop(family, rotation, parameters), from_family and parameters_to_tau keep theirs positional, where parameters specifies the model rather than the call. Keyword calls are unaffected (#345).

    • cop.pdf(u, pars) -> cop.pdf(u, parameters=pars)
    • cop.sample(n, False, [1, 2]) -> cop.sample(n, False, seeds=[1, 2])
  • Name the observations u on Bicop / Vinecop's fit / select / from_data, which is what every evaluation method on the same class already called them. Renamed upstream rather than in the binding, whose docstrings are lifted verbatim (vinecopulib#781, #345).

    • cop.fit(data=u) -> cop.fit(u=u), and likewise on select / from_data
  • Drop Vinecop.fit's num_threads argument, which duplicated FitControlsBicop.num_threads (#326).

    • vine.fit(u, controls, num_threads=4) -> vine.fit(u, FitControlsBicop(num_threads=4))
  • Rename Kde1d's quantile to icdf, the name modern SciPy and torch.distributions use for the inverse distribution function, with no alias (#292).

  • Rename Kde1d's edf to npars, the name Bicop and Vinecop already answer for the same quantity, with no alias. It was bound twice -- edf and n_parameters were the same getter -- so one class offered two live names for one number; npars is now the only spelling, on the compiled classes, on MarginBase and on the four contracts (#345).

    • kde.edf -> kde.npars
    • kde.quantile(p) -> kde.icdf(p)
  • Serialize every margin the same way: to_json returns JSON text on SciPyMargin, TorchKde1d and TorchDistributionMargin as it already did on Bicop / Vinecop / Kde1d / Vinedist, and the reader is from_json(json) rather than from_json_payload(payload). A margin's own to_json builds its mapping and hands it to margin_json, which stamps kind and version and runs the shared codec -- so a non-finite parameter still travels as a tagged string and a subclass still reads back. register_margin_json takes a Callable[[str], Any] (#345).

... (truncated)

Changelog

Sourced from pyvinecopulib's changelog.

1.0.0 (2026-09-18)

This release ships the whole vine-modeling stack rather than the copula half of it. Vinedist and the new pyvinecopulib.margins layer put Sklar's theorem on the data scale; pyvinecopulib.torch runs the evaluation cascade on the GPU under autograd; pyvinecopulib.sklearn adds scikit-learn-compatible estimators; and the array-agnostic layer in pyvinecopulib.core hosts custom pair copulas and non-simplified vines. The public API is reorganized into the core, families, utils and margins subpackages, with the pre-reorganization top-level names kept as warning aliases until 2.0.

It also advances all three vendored C++ libraries, so nearly every tll and Kde1d fit moves. Read the migration guide in docs/migrating-to-1.0.md before upgrading from 0.7.x.

Breaking API changes in pyvinecopulib

  • Use one argument order on every estimator: the observations first, then controls, then keyword-only whatever the object cannot infer. Vinecop.from_data took controls fifth, behind structure, so the call carried over from fit bound a controls object as a structure (#326).

    • pv.Vinecop.from_data(u, structure, matrix, var_types, controls) -> pv.Vinecop.from_data(u, controls, structure=..., matrix=..., var_types=...)
    • pv.Bicop.from_data(u, controls, var_types) -> pv.Bicop.from_data(u, controls, var_types=...)
    • pv.core.Kde1d.fit(x, weights) -> pv.core.Kde1d.fit(y, FitControlsKde1d(weights=...)), and likewise select; the kernel knobs and the weights are all FitControlsKde1d, and the observations are y, because x means exogenous covariates everywhere in the Python API (#339)
    • likewise on BicopBase, VinecopBase, VinedistBase and their torch subclasses; MarginBase already read this way
  • Reorganize the public API into the core, families and utils subpackages; the family constants, Kde1d and the utility functions still resolve at the top level, but warn on access and are removed in 2.0 (#207, #292).

    • pyvinecopulib.gaussian -> pyvinecopulib.families.gaussian, and likewise every family constant and group
    • pyvinecopulib.Kde1d -> pyvinecopulib.core.Kde1d
    • pyvinecopulib.wdm -> pyvinecopulib.utils.wdm, and likewise sobol, ghalton, benchmark and pairs_copula_data
  • Default selection_criterion to "aic" instead of "bic" on FitControlsBicop and FitControlsVinecop, matching the C++ and R defaults; pass selection_criterion="bic" to keep the previous selection (#251).

  • Move every tll fit, and so every unqualified Bicop.from_data / Vinecop.from_data that selects one: the interpolation grid's margins are balanced across both sweep orders and iterated to convergence, and hfunc / hinv no longer floor the interpolated density at 1e-4 (#305, vinecopulib#751).

  • Move every Kde1d fit: the plug-in bandwidth shifts by O(1/n), and a bounded fit shifts again under the new endpoint treatment (#312, kde1d#29).

  • Fit a finite Kde1d bound with a local-linear boundary estimator by default; pass boundary_repair=False for the previous transformed fit (#312, kde1d#36).

  • Read a discrete Kde1d's xmin / xmax as the integer support, so both the bounds and the data must be integers and the fitted grid runs half a unit wider at each end (#312, kde1d#37).

  • Label a selected RVineStructure with the conditioned variable on the diagonal, so get_matrix() and order differ for the same model; densities and log-likelihoods do not (#251, vinecopulib#702).

  • Rename the sampling entry points to sample, keeping the released spellings as warning aliases (#297).

    • Bicop.simulate(n) -> Bicop.sample(n), and likewise on Vinecop, RVineStructure and Kde1d
    • pyvinecopulib.simulate_uniform -> pyvinecopulib.utils.sample_uniform
  • Return self from Bicop.fit / .select and Vinecop.fit / .select instead of None, so every estimator in the package composes the same way (#326).

  • Make parameters, num_threads, seeds and randomize_discrete keyword-only on the evaluation methods of Bicop and Vinecop: each class was internally consistent and the two disagreed, Bicop reading (u, parameters, num_threads) where Vinecop read (u, num_threads, parameters), so a call carried between them bound a parameter matrix as a thread count. Bicop(family, rotation, parameters), from_family and parameters_to_tau keep theirs positional, where parameters specifies the model rather than the call. Keyword calls are unaffected (#345).

    • cop.pdf(u, pars) -> cop.pdf(u, parameters=pars)
    • cop.sample(n, False, [1, 2]) -> cop.sample(n, False, seeds=[1, 2])
  • Name the observations u on Bicop / Vinecop's fit / select / from_data, which is what every evaluation method on the same class already called them. Renamed upstream rather than in the binding, whose docstrings are lifted verbatim (vinecopulib#781, #345).

    • cop.fit(data=u) -> cop.fit(u=u), and likewise on select / from_data
  • Drop Vinecop.fit's num_threads argument, which duplicated FitControlsBicop.num_threads (#326).

    • vine.fit(u, controls, num_threads=4) -> vine.fit(u, FitControlsBicop(num_threads=4))
  • Rename Kde1d's quantile to icdf, the name modern SciPy and torch.distributions use for the inverse distribution function, with no alias (#292).

  • Rename Kde1d's edf to npars, the name Bicop and Vinecop already answer for the same quantity, with no alias. It was bound twice -- edf and n_parameters were the same getter -- so one class offered two live names for one number; npars is now the only spelling, on the compiled classes, on MarginBase and on the four contracts (#345).

    • kde.edf -> kde.npars
    • kde.quantile(p) -> kde.icdf(p)
  • Serialize every margin the same way: to_json returns JSON text on SciPyMargin, TorchKde1d and TorchDistributionMargin as it already did on Bicop / Vinecop / Kde1d / Vinedist, and the reader is from_json(json) rather than from_json_payload(payload). A margin's own to_json builds its mapping and hands it to margin_json, which stamps kind and version and runs the shared codec -- so a non-finite parameter still travels as a tagged string and a subclass still reads back. register_margin_json takes a Callable[[str], Any] (#345).

    • margin.to_json() returns str, not dict

... (truncated)

Commits
  • 1765dd0 ci: automate GitHub releases (#346)
  • b526829 refactor(core)!: settle the four contracts, and delete the machinery they rep...
  • 0a4a571 build: track the lockfile, and pin what was pinned everywhere but here (#337)
  • 84f187a build(deps): bump the pins, and follow upstream downstream (#336)
  • 27063ca feat(core): the extension surface a third-party subclass needs (#334)
  • d01c6b6 chore: trim the comments that repeat themselves, and delete the dead ones (#331)
  • b82de8f ci: bump pypa/cibuildwheel from 4.2.0 to 4.2.1 (#333)
  • 4b88390 ci: bump vinecopulib/vinecopulib/.github/actions/install-dependencies from be...
  • 261c56b feat(core)!: one extension-point architecture across all four layers (#326)
  • e177e6e fix: close the Gate 1 and Gate 2 release audits (#320)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [pyvinecopulib](https://github.com/vinecopulib/pyvinecopulib) from 0.7.6 to 1.0.0.
- [Release notes](https://github.com/vinecopulib/pyvinecopulib/releases)
- [Changelog](https://github.com/vinecopulib/pyvinecopulib/blob/main/CHANGELOG.md)
- [Commits](vinecopulib/pyvinecopulib@v0.7.6...v1.0.0)

---
updated-dependencies:
- dependency-name: pyvinecopulib
  dependency-version: 1.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels Sep 21, 2026
@codecov

codecov Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.47%. Comparing base (ca9db44) to head (fd84094).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1949   +/-   ##
=======================================
  Coverage   87.47%   87.47%           
=======================================
  Files         430      430           
  Lines       11159    11159           
=======================================
  Hits         9761     9761           
  Misses       1398     1398           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants