From e0961f8c3feae92fca4b33f532ca63fffef2966d Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:57:52 +0800 Subject: [PATCH 1/7] DOC add speed example --- .gitignore | 4 +- .readthedocs.yml | 2 +- README.rst | 35 +- doc/conf.py | 17 +- doc/index.rst | 11 +- doc/intuitive.rst | 16 + doc/multioutput.rst | 9 + doc/redundancy.rst | 9 + doc/unsupervised.rst | 9 + doc/user_guide.rst | 13 + examples/README.rst | 6 + examples/plot_speed.py | 204 +++++++ fastcan/_fastcan.py | 6 +- pixi.lock | 1222 ++++++++++++++++++++++++++++++---------- pyproject.toml | 18 +- 15 files changed, 1243 insertions(+), 338 deletions(-) create mode 100644 doc/intuitive.rst create mode 100644 doc/multioutput.rst create mode 100644 doc/redundancy.rst create mode 100644 doc/unsupervised.rst create mode 100644 doc/user_guide.rst create mode 100644 examples/README.rst create mode 100644 examples/plot_speed.py diff --git a/.gitignore b/.gitignore index 049d235..a23ad78 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,6 @@ wheels/ # Used by sphinx doc/_build/ -doc/generated/ \ No newline at end of file +doc/generated/ +doc/auto_examples/ +doc/sg_execution_times.rst \ No newline at end of file diff --git a/.readthedocs.yml b/.readthedocs.yml index edda816..acb46ee 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -11,4 +11,4 @@ python: install: - method: pip path: . - extra_requirements: [doc] \ No newline at end of file + extra_requirements: [docs] \ No newline at end of file diff --git a/README.rst b/README.rst index a6e1947..7f8a68a 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ -FastCan: A Fast Canonical-Correlation-Based Feature Selection Method -==================================================================== +FastCan: A Fast Canonical-Correlation-Based Feature Selection Algorithm +======================================================================= |conda| |Codecov| |CI| |Doc| |PythonVersion| |PyPi| |Black| |ruff| |pixi| .. |conda| image:: https://img.shields.io/conda/vn/conda-forge/fastcan.svg @@ -29,6 +29,16 @@ FastCan: A Fast Canonical-Correlation-Based Feature Selection Method .. |pixi| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json&style=flat-square :target: https://pixi.sh +FastCan is a feature selection method, which has following advantages: + +#. Extremely **fast**. See :ref:`sphx_glr_auto_examples_plot_speed.py`. + +#. Support unsupervised feature selection. + +#. Support multioutput feature selection. + +#. Skip redundant features. + Installation ------------ @@ -41,25 +51,22 @@ Or via conda-forge: * Run ``conda install -c conda-forge fastcan`` -Examples --------- +Getting Started +--------------- >>> from fastcan import FastCan ->>> X = [[ 0.87, -1.34, 0.31 ], -... [-2.79, -0.02, -0.85 ], -... [-1.34, -0.48, -2.55 ], -... [ 1.92, 1.48, 0.65 ]] ->>> y = [0, 1, 0, 1] ->>> selector = FastCan(n_features_to_select=2, verbose=0).fit(X, y) ->>> selector.get_support() -array([ True, True, False]) +>>> X = [[1, 0], [0, 1]] +>>> y = [1, 0] +>>> FastCan(verbose=0).fit(X, y).get_support() +array([ True, False]) +Check :ref:`User Guild ` and :ref:`Examples ` for more information. Citation -------- FastCan is a Python implementation of the following papers. -If you use the `h-correlation` algorithm in your work please cite the following reference: +If you use the `h-correlation` method in your work please cite the following reference: .. code:: bibtex @@ -76,7 +83,7 @@ If you use the `h-correlation` algorithm in your work please cite the following keywords = {Feature selection, Orthogonal least squares, Canonical correlation analysis, Linear discriminant analysis, Multi-label, Multivariate time series, Feature interaction}, } -If you use the `eta-cosine` algorithm in your work please cite the following reference: +If you use the `eta-cosine` method in your work please cite the following reference: .. code:: bibtex diff --git a/doc/conf.py b/doc/conf.py index 140dab9..1205bd0 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -40,6 +40,8 @@ "sphinx.ext.napoleon", # Link to other project's documentation (see mapping below) "sphinx.ext.intersphinx", + "sphinx_gallery.gen_gallery", + "sphinx_design", ] # List of patterns, relative to source directory, that match files and @@ -67,14 +69,7 @@ "sklearn": ("https://scikit-learn.org/stable", None), } -# add substitutions that should be available in every file -rst_prolog = """ -.. |numpy_dtype| replace:: numpy data type -.. _numpy_dtype: https://numpy.org/doc/stable/user/basics.types.html - -.. |sklearn_cython_dtype| replace:: sklearn cython data type -.. _sklearn_cython_dtype: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/utils/_typedefs.pxd - -.. |sphinx_link| replace:: rst Markup Spec -.. _sphinx_link: https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html -""" +sphinx_gallery_conf = { + "examples_dirs": ["../examples"], + "gallery_dirs": ["auto_examples"], +} diff --git a/doc/index.rst b/doc/index.rst index 5af4147..8e98834 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -13,14 +13,21 @@ FastCan Class -~~~~~~~~~~~~~ +------------- .. autosummary:: :toctree: generated/ FastCan +Useful Links +------------ +.. toctree:: -................... + User Guild + Examples + +API Compatibility +----------------- The API of this package is align with scikit-learn. diff --git a/doc/intuitive.rst b/doc/intuitive.rst new file mode 100644 index 0000000..b3f24ec --- /dev/null +++ b/doc/intuitive.rst @@ -0,0 +1,16 @@ +.. currentmodule:: fastcan + +.. _intuitive: + +======================= +Intuitively explanation +======================= + +Let's intuitively understand the two methods, h-correlation and eta-cosine, in :class:`FastCan`. + +The computational speed comparison between h-correlation method and eta-cosine method. + +.. figure:: ./auto_examples/images/sphx_glr_plot_speed_001.png + :target: ./auto_examples/plot_speed.html + :align: center + :scale: 70% diff --git a/doc/multioutput.rst b/doc/multioutput.rst new file mode 100644 index 0000000..54dd3aa --- /dev/null +++ b/doc/multioutput.rst @@ -0,0 +1,9 @@ +.. currentmodule:: fastcan + +.. _multioutput: + +============================== +Multioutput feature selection +============================== + +We can use :class:`FastCan` for multioutput feature selection. \ No newline at end of file diff --git a/doc/redundancy.rst b/doc/redundancy.rst new file mode 100644 index 0000000..3a75035 --- /dev/null +++ b/doc/redundancy.rst @@ -0,0 +1,9 @@ +.. currentmodule:: fastcan + +.. _redundancy: + +================== +Feature redundancy +================== + +:class:`FastCan` can effectively skip the redundant features. \ No newline at end of file diff --git a/doc/unsupervised.rst b/doc/unsupervised.rst new file mode 100644 index 0000000..0a37ac6 --- /dev/null +++ b/doc/unsupervised.rst @@ -0,0 +1,9 @@ +.. currentmodule:: fastcan + +.. _unsupervised: + +============================== +Unsupervised feature selection +============================== + +We can use :class:`FastCan` to do unsupervised feature selection. \ No newline at end of file diff --git a/doc/user_guide.rst b/doc/user_guide.rst new file mode 100644 index 0000000..9de5a90 --- /dev/null +++ b/doc/user_guide.rst @@ -0,0 +1,13 @@ +.. _user_guide: + +========== +User Guide +========== + +.. toctree:: + :numbered: + + intuitive.rst + unsupervised.rst + multioutput.rst + redundancy.rst \ No newline at end of file diff --git a/examples/README.rst b/examples/README.rst new file mode 100644 index 0000000..e6e4b8d --- /dev/null +++ b/examples/README.rst @@ -0,0 +1,6 @@ +.. _examples: + +Examples +======== + +Below is a gallery of examples. \ No newline at end of file diff --git a/examples/plot_speed.py b/examples/plot_speed.py new file mode 100644 index 0000000..191e7da --- /dev/null +++ b/examples/plot_speed.py @@ -0,0 +1,204 @@ +""" +============================== +Computational speed comparison +============================== + +In this examples, we will compare the computational speed of three different feature +selection methods: h-correlation based :class:`fastcan.FastCan`, eta-cosine based +:class:`fastcan.FastCan`, and baseline model based on +``sklearn.cross_decomposition.CCA``. + +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Prepare data +# ------------ +# +# We will generate a random matrix with 3000 samples and 20 variables as feature +# matrix :math:`X` and a random matrix with 3000 samples and 20 variables as target +# matrix :math:`y`. + +import numpy as np + +rng = np.random.default_rng(12345) +X = rng.random((3000, 20)) +y = rng.random((3000, 5)) + +# %% +# Define baseline method +# ---------------------- +# The baseline method can be realised by ``CCA`` in ``scikit-learn``. +# The baseline method will, in greedy manner, select the feature which maximizes the +# canonical correlation between ``np.column_stack((X_selected, X[:, j]))`` and ``y``, +# where ``X_selected`` is the selected features in past iterations. As the number of +# canonical correlation coefficients may be more than one, the feature ranking +# criterion used here is the sum squared of all canonical correlation coefficients. + +from sklearn.cross_decomposition import CCA + + +def baseline(X, y, t): + """Baseline method using CCA from sklearn. + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples, n_outputs) + Target matrix. + + t : int + The parameter is the absolute number of features to select. + + Returns + ------- + indices_ : ndarray of shape (t,), dtype=int + The indices of the selected features. The order of the indices + is corresponding to the feature selection process. + + scores_: ndarray of shape (t,), dtype=float + The sum of the squared correlation of selected features. The order of + the scores is corresponding to the feature selection process. + """ + n_samples, n_features = X.shape + n_targets = y.shape[1] + mask = np.zeros(n_features, dtype=bool) + r2 = np.zeros(n_features, dtype=float) + indices = np.zeros(t, dtype=int) + scores = np.zeros(t, dtype=float) + X_selected = np.zeros((n_samples, 0), dtype=float) + for i in range(t): + n_components = min(i+1, n_targets) + cca = CCA(n_components=n_components) + for j in range(n_features): + if not mask[j]: + X_candidate = np.column_stack((X_selected, X[:, j])) + X_c, y_c = cca.fit_transform(X_candidate, y) + corrcoef = np.diagonal( + np.corrcoef(X_c, y_c, rowvar=False), + offset=n_components + ) + r2[j] = sum(corrcoef**2) + d = np.argmax(r2) + indices[i] = d + scores[i] = r2[d] + mask[d] = True + r2[d] = 0 + X_selected = np.column_stack((X_selected, X[:, d])) + return indices, scores + +# %% +# Elapsed time comparison +# ----------------------- +# Let the three methods select 10 informative features from the feature matrix +# :math:`X`. It can be found that the two FastCan methods are much faster than +# the baseline method. +# +# .. dropdown:: Complexity +# +# The overall computational complexities of the three methods are +# +# #. Baseline: :math:`O[t^3 N n]` +# #. h-correlation: :math:`O[t N n m]` +# #. eta-cosine: :math:`O[t n^2 m]` +# +# * :math:`N` : number of data points +# * :math:`n` : feature dimension +# * :math:`m` : target dimension +# * :math:`t` : number of features to be selected +# +# .. rubric:: References +# +# * `"Canonical-correlation-based fast feature selection for structural +# health monitoring" `_ +# Zhang, S., Wang, T., Worden, K., Sun L., & Cross, E. J. +# Mechanical Systems and Signal Processing, 223:111895 (2025). + +from timeit import timeit + +import matplotlib.pyplot as plt + +from fastcan import FastCan + +n_features_to_select = 10 + +t_h = timeit( + f"s = FastCan({n_features_to_select}, verbose=0).fit(X, y)", + number=10, + globals=globals(), +) +t_eta = timeit( + f"s = FastCan({n_features_to_select}, eta=True, verbose=0).fit(X, y)", + number=10, + globals=globals() +) +t_base = timeit( + f"indices, _ = baseline(X, y, {n_features_to_select})", + number=10, + globals=globals() +) +print(f"Elapsed time using h correlation algorithm: {t_h:.5f} seconds") +print(f"Elapsed time using eta cosine algorithm: {t_eta:.5f} seconds") +print(f"Elapsed time using baseline algorithm: {t_base:.5f} seconds") + +# %% +# Results of selection +# -------------------- +# It can be found that the selected indices of the three methods are exactly the same. + +r_h = FastCan(n_features_to_select, verbose=0).fit(X, y).indices_ +r_eta = FastCan(n_features_to_select, eta=True, verbose=0).fit(X, y).indices_ +r_base, _ = baseline(X, y, n_features_to_select) + +print("The indices of the seleted features:", end="\n") +print(f"h-correlation: {r_h}") +print(f"eta-cosine: {r_eta}") +print(f"Baseline: {r_base}") + +# %% +# Comparison between h-correlation and eta-cosine methods +# ------------------------------------------------------- +# Let's increase the number of features to 100. Then let the h-correlation method +# and eta-cosine method to 1 to 30 features and compare their speed performance. +# There are some interesting findings: +# +# #. h-correlation method is faster when the number of the selected feature is small. +# +# #. The slope for eta-cosine method is much lower than h-correlation method. +# +# But why is it? Briefly speaking, at the preprocessing stage, the eta-cosine method +# requires computing the singular value decomposition (SVD) for +# ``np.column_stack((X, y))``, which dominates its elapsed time. However, in the +# following iterated selection process, the eta-cosine method will be much faster than +# the h-correlation method. + +X = rng.random((3000, 100)) +y = rng.random((3000, 20)) + +n_features_max = 30 + +time_h = np.zeros(n_features_max, dtype=float) +time_eta = np.zeros(n_features_max, dtype=float) +for i in range(n_features_max): + time_h[i] = timeit( + f"s = FastCan({i+1}, verbose=0).fit(X, y)", + number=10, + globals=globals(), + ) + time_eta[i] = timeit( + f"s = FastCan({i+1}, eta=True, verbose=0).fit(X, y)", + number=10, + globals=globals() + ) + +feature_num = np.arange(n_features_max, dtype=int)+1 +plt.plot(feature_num, time_h, label = "h-correlation") +plt.plot(feature_num, time_eta, label = r'$\eta$-cosine') +plt.title("Elapsed Time Comparison") +plt.xlabel("Number of Selected Features") +plt.ylabel("Elapsed Time (s)") +plt.legend(loc="lower right") +plt.show() diff --git a/fastcan/_fastcan.py b/fastcan/_fastcan.py index b4ebb95..0c69a77 100644 --- a/fastcan/_fastcan.py +++ b/fastcan/_fastcan.py @@ -20,10 +20,6 @@ class FastCan(SelectorMixin, BaseEstimator): """Forward feature selector according to the sum of squared canonical correlation coefficients (SSC). - .. note:: - - The numpy data types used for Cython can be found in - |numpy_dtype|_ and |sklearn_cython_dtype|_. Parameters ---------- @@ -56,7 +52,7 @@ class FastCan(SelectorMixin, BaseEstimator): Names of features seen during :term:`fit`. Defined only when `X` has feature names that are all strings. - indices_ : ndarray of shape (n_features_to_select,), dtype=float + indices_ : ndarray of shape (n_features_to_select,), dtype=int The indices of the selected features. The order of the indices is corresponding to the feature selection process. diff --git a/pixi.lock b/pixi.lock index 5607334..35b15a9 100644 --- a/pixi.lock +++ b/pixi.lock @@ -22,8 +22,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda @@ -32,7 +32,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda @@ -51,7 +51,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.0.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda @@ -63,10 +63,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.4-py312hd18ad41_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.5-py312hd18ad41_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.5.2-py312h7a48858_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h7d485d2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda @@ -74,26 +74,37 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.9-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.12-h0f3a69f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/2b/5779cfd48625e013c2dfcf0c246474d5b1f5d061a5f1e476037bf9fff3a3/fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0a/0d/2454f072fae3b5a137c119abf15465d1771319dfe9e4acbb31722a0fff91/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -107,8 +118,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.8.0-hb714fc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1009.2-h5b2de21_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1009.2-h98e843e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools-1010.6-h5b2de21_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1010.6-h98e843e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17-17.0.6-default_hb173f14_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17.0.6-default_he371ed4_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_19.conda @@ -136,12 +147,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/isl-0.26-imath32_h2e86a7b_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-907-h0a3eb4e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-907-h38c89e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-951.9-h0a3eb4e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-951.9-h38c89e5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp17-17.0.6-default_hb173f14_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-18.1.8-hd876a4e_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.0-hf95d169_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-17.0.6-h8f8a49f_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.3-hac325c4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 @@ -169,7 +180,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.0.0-py312hb553811_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda @@ -181,10 +192,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.4-py312he6c0bb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.5-py312he6c0bb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.5.2-py312h9d777eb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py312he82a568_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sigtool-0.1.3-h88f4db0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1300.6.5-h390ca13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda @@ -194,9 +205,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.9-h032dd4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.12-h032dd4e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-h87427d6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -204,18 +215,29 @@ environments: - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/87/63/8271f50f3e7bff8b78e03914c4c2893f2f21bd4db2975c60d11ecfbdd174/fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/d6/e7cd795fc710292c3af3a06d80868ce4b02bfbbf370b7cee11d282815a2a/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -229,8 +251,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.8.0-h2664225_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1009.2-hf67d63f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1009.2-h4208deb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1010.6-hf67d63f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1010.6-h4208deb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17-17.0.6-default_h146c034_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17.0.6-default_h360f5da_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_19.conda @@ -258,12 +280,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/isl-0.26-imath32_h347afa1_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-907-h39a299f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-907-hc81425b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-23_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-23_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-951.9-h39a299f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-951.9-hc81425b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp17-17.0.6-default_h146c034_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-17.0.6-h86353a2_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 @@ -271,7 +293,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-arm64-13.2.0-h5d7a38c_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-23_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm17-17.0.6-h5090b49_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda @@ -291,7 +313,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.0.0-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda @@ -303,10 +325,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.4-py312h42f095d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.5-py312h42f095d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.5.2-py312h387f99c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py312heb3a901_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda @@ -316,9 +338,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.9-hd3a8144_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.12-hd3a8144_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-hfb2fe0b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -326,18 +348,29 @@ environments: - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/bd/cb8fd2dddd68089c112bf42a88afe188b8ace73f94406539857dcc9347a6/fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -360,13 +393,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-23_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-23_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-23_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda @@ -380,7 +413,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-6.0.0-py312h4389bb4_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 @@ -392,10 +425,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.5-h889d299_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.4-py312h881003e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.5-py312h881003e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.5.2-py312h816cc57_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py312h1f4e10d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda @@ -405,29 +438,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.9-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.12-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/9a/b695930e1b4e6929cc60e294489421632a05c105ac8c56ee63ef56a47872/fonttools-4.53.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -744,88 +788,92 @@ packages: timestamp: 1725019034582 - kind: conda name: cctools - version: '1009.2' - build: h5b2de21_0 + version: '1010.6' + build: h5b2de21_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/cctools-1009.2-h5b2de21_0.conda - sha256: ed2de813b2579bb4a3b8a9261399597d9d63f09d8b5af6a3437291782269b9b7 - md5: 3f99045727892099c001bf35bb527857 + url: https://conda.anaconda.org/conda-forge/osx-64/cctools-1010.6-h5b2de21_1.conda + sha256: 3881b38dcb1e6a129617a270396e85a65b4202cf5e02a2d133caaff8643ae489 + md5: 5a08ae55869b0b1eb7fbee910aa30d19 depends: - - cctools_osx-64 1009.2 h98e843e_0 - - ld64 907 h0a3eb4e_0 + - cctools_osx-64 1010.6 h98e843e_1 + - ld64 951.9 h0a3eb4e_1 - libllvm17 >=17.0.6,<17.1.0a0 license: APSL-2.0 license_family: Other purls: [] - size: 21834 - timestamp: 1725634658493 + size: 21528 + timestamp: 1726771688744 - kind: conda name: cctools - version: '1009.2' - build: hf67d63f_0 + version: '1010.6' + build: hf67d63f_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1009.2-hf67d63f_0.conda - sha256: 8431aad7632fbc32f3271fa6db102629187064421b84144159ebc436a3498ad2 - md5: bbb99dc45b37611a733ccd10e8e1abb5 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1010.6-hf67d63f_1.conda + sha256: b85469a1277da76dbbc71639b03014143cec96fe2e86dc11b1c3e299b9d29e2f + md5: f9138a6ffe696dadea9374101856747b depends: - - cctools_osx-arm64 1009.2 h4208deb_0 - - ld64 907 h39a299f_0 + - cctools_osx-arm64 1010.6 h4208deb_1 + - ld64 951.9 h39a299f_1 - libllvm17 >=17.0.6,<17.1.0a0 license: APSL-2.0 license_family: Other purls: [] - size: 21792 - timestamp: 1725634515557 + size: 21681 + timestamp: 1726771723258 - kind: conda name: cctools_osx-64 - version: '1009.2' - build: h98e843e_0 + version: '1010.6' + build: h98e843e_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1009.2-h98e843e_0.conda - sha256: d954362d147acd022389658fe189007f4fd5992d1d4f4e9bd19e8ba230865742 - md5: 1e1f9fb5a75da573f4fea0ec61d2110d + url: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1010.6-h98e843e_1.conda + sha256: e28e55f55af27b66fbf4afc45f521f9a869e4495bd260c7c721dd2ac51e017a1 + md5: ed757b98aaa22a9e38c5a76191fb477c depends: - __osx >=10.13 - - ld64_osx-64 >=907,<908.0a0 + - ld64_osx-64 >=951.9,<951.10.0a0 - libcxx - libllvm17 >=17.0.6,<17.1.0a0 - libzlib >=1.3.1,<2.0a0 - llvm-tools 17.0.* - sigtool constrains: - - cctools 1009.2.* - - ld64 907.* + - ld64 951.9.* + - cctools 1010.6.* - clang 17.0.* license: APSL-2.0 license_family: Other purls: [] - size: 872976 - timestamp: 1725634629348 + size: 1096895 + timestamp: 1726771657226 - kind: conda name: cctools_osx-arm64 - version: '1009.2' - build: h4208deb_0 + version: '1010.6' + build: h4208deb_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1009.2-h4208deb_0.conda - sha256: 8957a06d10509788fca2a647999217cec6ca07fafcb2e93c452dfb0a48828685 - md5: a02818ef5907ab4a9bcbbe068225ab8c + url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1010.6-h4208deb_1.conda + sha256: 7122430e69ab8e38d382553bf7225b0887158341fe6879be4220e4e495b93aac + md5: bca79601bdb3a3dfa4c3917701a79f81 depends: - __osx >=11.0 - - ld64_osx-arm64 >=907,<908.0a0 + - ld64_osx-arm64 >=951.9,<951.10.0a0 - libcxx - libllvm17 >=17.0.6,<17.1.0a0 - libzlib >=1.3.1,<2.0a0 - llvm-tools 17.0.* - sigtool constrains: - - ld64 907.* - - cctools 1009.2.* - clang 17.0.* + - cctools 1010.6.* + - ld64 951.9.* license: APSL-2.0 license_family: Other purls: [] - size: 878145 - timestamp: 1725634483003 + size: 1089821 + timestamp: 1726771687683 - kind: pypi name: certifi version: 2024.8.30 @@ -1280,6 +1328,106 @@ packages: purls: [] size: 7038 timestamp: 1725746591639 +- kind: pypi + name: contourpy + version: 1.3.0 + url: https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl + sha256: b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b + requires_dist: + - numpy>=1.23 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.11.1 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.9' +- kind: pypi + name: contourpy + version: 1.3.0 + url: https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09 + requires_dist: + - numpy>=1.23 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.11.1 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.9' +- kind: pypi + name: contourpy + version: 1.3.0 + url: https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl + sha256: 570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f + requires_dist: + - numpy>=1.23 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.11.1 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.9' +- kind: pypi + name: contourpy + version: 1.3.0 + url: https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6 + requires_dist: + - numpy>=1.23 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.11.1 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.9' - kind: conda name: coverage version: 7.6.1 @@ -1396,6 +1544,20 @@ packages: purls: [] size: 6202 timestamp: 1725746590277 +- kind: pypi + name: cycler + version: 0.12.1 + url: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 + requires_dist: + - ipython ; extra == 'docs' + - matplotlib ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + requires_python: '>=3.8' - kind: conda name: cython version: 3.0.11 @@ -1526,12 +1688,163 @@ packages: name: fastcan version: 0.2.4 path: . - sha256: 96d1cfef00aef925ebfb068afeea309388ae644fd1f1a1c68b15ed4d0db71850 + sha256: 2c2f54120beb74d23d5aaab9dc53c2ea16e9fb4b4cce38c7347cc0e6dedc8a50 requires_dist: - scikit-learn>=1.5.0,<1.6 - - furo ; extra == 'doc' + - furo ; extra == 'docs' + - matplotlib ; extra == 'docs' + - sphinx-gallery ; extra == 'docs' + - sphinx-design ; extra == 'docs' requires_python: '>=3.9' editable: true +- kind: pypi + name: fonttools + version: 4.53.1 + url: https://files.pythonhosted.org/packages/6d/9a/b695930e1b4e6929cc60e294489421632a05c105ac8c56ee63ef56a47872/fonttools-4.53.1-cp312-cp312-win_amd64.whl + sha256: 6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab + requires_dist: + - fs<3,>=2.2.0 ; extra == 'all' + - lxml>=4.0 ; extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'graphite' + - pycairo ; extra == 'interpolatable' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - lxml>=4.0 ; extra == 'lxml' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - matplotlib ; extra == 'plot' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - fs<3,>=2.2.0 ; extra == 'ufo' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - zopfli>=0.1.4 ; extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + requires_python: '>=3.8' +- kind: pypi + name: fonttools + version: 4.53.1 + url: https://files.pythonhosted.org/packages/87/63/8271f50f3e7bff8b78e03914c4c2893f2f21bd4db2975c60d11ecfbdd174/fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl + sha256: d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58 + requires_dist: + - fs<3,>=2.2.0 ; extra == 'all' + - lxml>=4.0 ; extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'graphite' + - pycairo ; extra == 'interpolatable' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - lxml>=4.0 ; extra == 'lxml' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - matplotlib ; extra == 'plot' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - fs<3,>=2.2.0 ; extra == 'ufo' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - zopfli>=0.1.4 ; extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + requires_python: '>=3.8' +- kind: pypi + name: fonttools + version: 4.53.1 + url: https://files.pythonhosted.org/packages/db/2b/5779cfd48625e013c2dfcf0c246474d5b1f5d061a5f1e476037bf9fff3a3/fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f + requires_dist: + - fs<3,>=2.2.0 ; extra == 'all' + - lxml>=4.0 ; extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'graphite' + - pycairo ; extra == 'interpolatable' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - lxml>=4.0 ; extra == 'lxml' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - matplotlib ; extra == 'plot' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - fs<3,>=2.2.0 ; extra == 'ufo' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - zopfli>=0.1.4 ; extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + requires_python: '>=3.8' +- kind: pypi + name: fonttools + version: 4.53.1 + url: https://files.pythonhosted.org/packages/dd/bd/cb8fd2dddd68089c112bf42a88afe188b8ace73f94406539857dcc9347a6/fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8 + requires_dist: + - fs<3,>=2.2.0 ; extra == 'all' + - lxml>=4.0 ; extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'graphite' + - pycairo ; extra == 'interpolatable' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - lxml>=4.0 ; extra == 'lxml' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - matplotlib ; extra == 'plot' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - fs<3,>=2.2.0 ; extra == 'ufo' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - zopfli>=0.1.4 ; extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + requires_python: '>=3.8' - kind: conda name: fortran-compiler version: 1.8.0 @@ -1777,9 +2090,14 @@ packages: timestamp: 1720853997952 - kind: pypi name: idna - version: '3.8' - url: https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl - sha256: 050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac + version: '3.10' + url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.6' - kind: pypi name: imagesize @@ -1899,52 +2217,79 @@ packages: - pkg:pypi/joblib?source=hash-mapping size: 219731 timestamp: 1714665585214 +- kind: pypi + name: kiwisolver + version: 1.4.7 + url: https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl + sha256: 58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb + requires_python: '>=3.8' +- kind: pypi + name: kiwisolver + version: 1.4.7 + url: https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e + requires_python: '>=3.8' +- kind: pypi + name: kiwisolver + version: 1.4.7 + url: https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl + sha256: 48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee + requires_python: '>=3.8' +- kind: pypi + name: kiwisolver + version: 1.4.7 + url: https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl + sha256: 942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a + requires_python: '>=3.8' - kind: conda name: ld64 - version: '907' - build: h0a3eb4e_0 + version: '951.9' + build: h0a3eb4e_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ld64-907-h0a3eb4e_0.conda - sha256: 0f2b77389b12823fa4762bd78506e629719da945a8fb7daf73b13269b49cb1ff - md5: 8143d28ee620bb34946734d489f12215 + url: https://conda.anaconda.org/conda-forge/osx-64/ld64-951.9-h0a3eb4e_1.conda + sha256: d6ce3be8687f7fb607173112901e72262a4608dc351bfcb27012c068a5f25fa6 + md5: 8b8e1a4bd8384bf4b884c9e41636038f depends: - - ld64_osx-64 907 h38c89e5_0 + - ld64_osx-64 951.9 h38c89e5_1 - libllvm17 >=17.0.6,<17.1.0a0 constrains: - - cctools_osx-64 1009.2.* - - cctools 1009.2.* + - cctools_osx-64 1010.6.* + - cctools 1010.6.* license: APSL-2.0 license_family: Other purls: [] - size: 19131 - timestamp: 1725634645503 + size: 18841 + timestamp: 1726771674999 - kind: conda name: ld64 - version: '907' - build: h39a299f_0 + version: '951.9' + build: h39a299f_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-907-h39a299f_0.conda - sha256: cde770bb2778e06b23469f2c9b3ef28711a3cf7bb5f0e4fe4c836c18f454b76f - md5: ae71cd2751bf6bf854bf3211124ade60 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-951.9-h39a299f_1.conda + sha256: 7dc2adcb40f2bc61b7445980c882a690d1bdef5de206970da2779c2bec5fe876 + md5: b2f41d20ec157f81280e89bcb4f7164a depends: - - ld64_osx-arm64 907 hc81425b_0 + - ld64_osx-arm64 951.9 hc81425b_1 - libllvm17 >=17.0.6,<17.1.0a0 constrains: - - cctools 1009.2.* - - cctools_osx-arm64 1009.2.* + - cctools_osx-arm64 1010.6.* + - cctools 1010.6.* license: APSL-2.0 license_family: Other purls: [] - size: 19102 - timestamp: 1725634500545 + size: 18942 + timestamp: 1726771707244 - kind: conda name: ld64_osx-64 - version: '907' - build: h38c89e5_0 + version: '951.9' + build: h38c89e5_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-907-h38c89e5_0.conda - sha256: 35d2bad6530d99bb400e00f5266bd00fad6deb6500b70a9b2b64b23e4a52b988 - md5: 260ac3c6e16dca89750e2d7bf82205e5 + url: https://conda.anaconda.org/conda-forge/osx-64/ld64_osx-64-951.9-h38c89e5_1.conda + sha256: 8370978550dd96479d8ba635a59a97231ccf602d3a189cd2a4cb234947cf61f2 + md5: 423183fc4729ed4b8e167a980aad83ce depends: - __osx >=10.13 - libcxx @@ -1952,23 +2297,24 @@ packages: - sigtool - tapi >=1300.6.5,<1301.0a0 constrains: - - ld 907.* + - ld 951.9.* + - cctools_osx-64 1010.6.* + - cctools 1010.6.* - clang >=17.0.6,<18.0a0 - - cctools 1009.2.* - - cctools_osx-64 1009.2.* license: APSL-2.0 license_family: Other purls: [] - size: 1083769 - timestamp: 1725634567030 + size: 1088909 + timestamp: 1726771576050 - kind: conda name: ld64_osx-arm64 - version: '907' - build: hc81425b_0 + version: '951.9' + build: hc81425b_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-907-hc81425b_0.conda - sha256: 17a8020f43c0858ddf476d3c36131d9293c440a6e9404ad12d304ab5b7b47414 - md5: b51eebfbe3a277d01d68fc996c7c5833 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-951.9-hc81425b_1.conda + sha256: 37b083cbee78393c511f6ddb21a6ce484ebc037bc3f85c2c293fbc0f418616f1 + md5: 99473e66ff9960be2995dd1b5fe04ace depends: - __osx >=11.0 - libcxx @@ -1976,15 +2322,15 @@ packages: - sigtool - tapi >=1300.6.5,<1301.0a0 constrains: - - cctools 1009.2.* + - cctools_osx-arm64 1010.6.* + - cctools 1010.6.* - clang >=17.0.6,<18.0a0 - - cctools_osx-arm64 1009.2.* - - ld 907.* + - ld 951.9.* license: APSL-2.0 license_family: Other purls: [] - size: 1000102 - timestamp: 1725634418144 + size: 1013046 + timestamp: 1726771628233 - kind: conda name: ld_impl_linux-64 version: '2.40' @@ -2026,68 +2372,68 @@ packages: - kind: conda name: libblas version: 3.9.0 - build: 23_linux64_openblas - build_number: 23 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda - sha256: edb1cee5da3ac4936940052dcab6969673ba3874564f90f5110f8c11eed789c2 - md5: 96c8450a40aa2b9733073a9460de972c + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda + sha256: 3097f7913bda527d4fe9f824182b314e130044e582455037fca6f4e97965d83c + md5: 80aea6603a6813b16ec119d00382b772 depends: - libopenblas >=0.3.27,<0.3.28.0a0 - libopenblas >=0.3.27,<1.0a0 constrains: - - liblapacke 3.9.0 23_linux64_openblas - - libcblas 3.9.0 23_linux64_openblas - - liblapack 3.9.0 23_linux64_openblas - blas * openblas + - liblapack 3.9.0 24_linux64_openblas + - libcblas 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 14880 - timestamp: 1721688759937 + size: 14981 + timestamp: 1726668454790 - kind: conda name: libblas version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + build: 24_osxarm64_openblas + build_number: 24 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-23_osxarm64_openblas.conda - sha256: 1c30da861e306a25fac8cd30ce0c1b31c9238d04e7768c381cf4d431b4361e6c - md5: acae9191e8772f5aff48ab5232d4d2a3 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + sha256: 4739f7463efb12e6d71536d8b0285a8de5aaadcc442bfedb9d92d1b4cbc47847 + md5: 35cb711e7bc46ee5f3dd67af99ad1986 depends: - libopenblas >=0.3.27,<0.3.28.0a0 - libopenblas >=0.3.27,<1.0a0 constrains: - - liblapack 3.9.0 23_osxarm64_openblas + - liblapack 3.9.0 24_osxarm64_openblas - blas * openblas - - liblapacke 3.9.0 23_osxarm64_openblas - - libcblas 3.9.0 23_osxarm64_openblas + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 15103 - timestamp: 1721688997980 + size: 15144 + timestamp: 1726668802976 - kind: conda name: libblas version: 3.9.0 - build: 23_win64_mkl - build_number: 23 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-23_win64_mkl.conda - sha256: fd52eb0ec4d0ca5727317dd608c41dacc8ccfc7e21d943b7aafbbf10ae28c97c - md5: 693407a31c27e70c750b5ae153251d9a + url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda + sha256: 8b4cd602ae089d8c5832054ead452d6a1820c8f9c3b190faf3e867f5939810e2 + md5: ea127210707251a33116b437c22b8dad depends: - mkl 2024.1.0 h66d3029_694 constrains: - blas * mkl - - liblapack 3.9.0 23_win64_mkl - - libcblas 3.9.0 23_win64_mkl - - liblapacke 3.9.0 23_win64_mkl + - liblapack 3.9.0 24_win64_mkl + - libcblas 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 5192100 - timestamp: 1721689573083 + size: 5183540 + timestamp: 1726669397923 - kind: conda name: libcblas version: 3.9.0 @@ -2111,63 +2457,63 @@ packages: - kind: conda name: libcblas version: 3.9.0 - build: 23_linux64_openblas - build_number: 23 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda - sha256: 3e7a3236e7e03e308e1667d91d0aa70edd0cba96b4b5563ef4adde088e0881a5 - md5: eede29b40efa878cbe5bdcb767e97310 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda + sha256: 2a52bccc5b03cdf014d856d0b85dbd591faa335ab337d620cd6aded121d7153c + md5: f5b8822297c9c790cec0795ca1fc9be6 depends: - - libblas 3.9.0 23_linux64_openblas + - libblas 3.9.0 24_linux64_openblas constrains: - - liblapacke 3.9.0 23_linux64_openblas - - liblapack 3.9.0 23_linux64_openblas - blas * openblas + - liblapack 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 14798 - timestamp: 1721688767584 + size: 14910 + timestamp: 1726668461033 - kind: conda name: libcblas version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + build: 24_osxarm64_openblas + build_number: 24 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-23_osxarm64_openblas.conda - sha256: c39d944909d0608bd0333398be5e0051045c9451bfd6cc6320732d33375569c8 - md5: bad6ee9b7d5584efc2bc5266137b5f0d + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + sha256: 40dc3f7c44af5cd5a2020386cb30f92943a9d8f7f54321b4d6ae32b2e54af9a4 + md5: c8977086a19233153e454bb2b332a920 depends: - - libblas 3.9.0 23_osxarm64_openblas + - libblas 3.9.0 24_osxarm64_openblas constrains: - - liblapack 3.9.0 23_osxarm64_openblas - - liblapacke 3.9.0 23_osxarm64_openblas + - liblapack 3.9.0 24_osxarm64_openblas - blas * openblas + - liblapacke 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 14991 - timestamp: 1721689017803 + size: 15062 + timestamp: 1726668809379 - kind: conda name: libcblas version: 3.9.0 - build: 23_win64_mkl - build_number: 23 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-23_win64_mkl.conda - sha256: 80b471a22affadc322006399209e1d12eb4ab4e3125ed6d01b4031e09de16753 - md5: 7ffb5b336cefd2e6d1e00ac1f7c9f2c9 + url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda + sha256: 297e858e9a2e6c4d9846fc101607ad31b778d8bde8591f9207e72d728a9f00a7 + md5: a42c7390d3249698c0ffb6040e9396e7 depends: - - libblas 3.9.0 23_win64_mkl + - libblas 3.9.0 24_win64_mkl constrains: - blas * mkl - - liblapack 3.9.0 23_win64_mkl - - liblapacke 3.9.0 23_win64_mkl + - liblapack 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 5191981 - timestamp: 1721689628480 + size: 5174668 + timestamp: 1726669449378 - kind: conda name: libclang-cpp17 version: 17.0.6 @@ -2206,36 +2552,34 @@ packages: timestamp: 1725505540477 - kind: conda name: libcxx - version: 18.1.8 - build: h3ed4263_7 - build_number: 7 + version: 19.1.0 + build: ha82da77_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-18.1.8-h3ed4263_7.conda - sha256: 15b4abaa249f0965ce42aeb4a1a2b1b5df9a1f402e7c5bd8156272fd6cad2878 - md5: e0e7d9a2ec0f9509ffdfd5f48da522fb + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda + sha256: b71167d9b7c8e598b12bbdafefd0139e3c70c6eb258cbda3de3fb422d0098025 + md5: a4c66c0d5b0f268fd27a956145004d27 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 436921 - timestamp: 1725403628507 + size: 520766 + timestamp: 1726782571130 - kind: conda name: libcxx - version: 18.1.8 - build: hd876a4e_7 - build_number: 7 + version: 19.1.0 + build: hf95d169_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-18.1.8-hd876a4e_7.conda - sha256: ca43fcc18bff98cbf456ccc76fe113b2afe01d4156c2899b638fd1bc0323d239 - md5: c346ae5c96382a12563e3b0c403c8c4a + url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.0-hf95d169_0.conda + sha256: 81e6bdf19cf202d769509d116c92046d164c23c91b6f791f439d10f3812629c9 + md5: 0ed117b4cbbf7917dd47b4390e511d2a depends: - __osx >=10.13 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 439306 - timestamp: 1725403678987 + size: 528123 + timestamp: 1726815971547 - kind: conda name: libcxx-devel version: 17.0.6 @@ -2688,63 +3032,63 @@ packages: - kind: conda name: liblapack version: 3.9.0 - build: 23_linux64_openblas - build_number: 23 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda - sha256: 25c7aef86c8a1d9db0e8ee61aa7462ba3b46b482027a65d66eb83e3e6f949043 - md5: 2af0879961951987e464722fd00ec1e0 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.conda + sha256: a15da20c3c0fb5f356e5b4e2f1e87b0da11b9a46805a7f2609bf30f23453831a + md5: fd540578678aefe025705f4b58b36b2e depends: - - libblas 3.9.0 23_linux64_openblas + - libblas 3.9.0 24_linux64_openblas constrains: - - liblapacke 3.9.0 23_linux64_openblas - - libcblas 3.9.0 23_linux64_openblas - blas * openblas + - libcblas 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 14823 - timestamp: 1721688775172 + size: 14911 + timestamp: 1726668467187 - kind: conda name: liblapack version: 3.9.0 - build: 23_osxarm64_openblas - build_number: 23 + build: 24_osxarm64_openblas + build_number: 24 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-23_osxarm64_openblas.conda - sha256: 13799a137ffc80786725e7e2820d37d4c0d59dbb76013a14c21771415b0a4263 - md5: 754ef44f72ab80fd14eaa789ac393a27 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda + sha256: 67fbfd0466eee443cda9596ed22daabedc96b7b4d1b31f49b1c1b0983dd1dd2c + md5: 49a3241f76cdbe705e346204a328f66c depends: - - libblas 3.9.0 23_osxarm64_openblas + - libblas 3.9.0 24_osxarm64_openblas constrains: - blas * openblas - - liblapacke 3.9.0 23_osxarm64_openblas - - libcblas 3.9.0 23_osxarm64_openblas + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 14999 - timestamp: 1721689026268 + size: 15063 + timestamp: 1726668815824 - kind: conda name: liblapack version: 3.9.0 - build: 23_win64_mkl - build_number: 23 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-23_win64_mkl.conda - sha256: 4f4738602d26935f4d4b0154fb23d48c276c87413c3a5e05274809abfcbe1273 - md5: 3580796ab7b7d68143f45d4d94d866b7 + url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda + sha256: 37dfa34e4c37c7bbb20df61e5badbf42d01e75e687c20be72ab13f80be99ceb9 + md5: c69b7b6756a8d58cc8cf17081fffdc5c depends: - - libblas 3.9.0 23_win64_mkl + - libblas 3.9.0 24_win64_mkl constrains: - blas * mkl - - libcblas 3.9.0 23_win64_mkl - - liblapacke 3.9.0 23_win64_mkl + - libcblas 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 5191980 - timestamp: 1721689666180 + size: 5183452 + timestamp: 1726669499566 - kind: conda name: libllvm17 version: 17.0.6 @@ -3228,6 +3572,94 @@ packages: url: https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl sha256: 8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 requires_python: '>=3.7' +- kind: pypi + name: matplotlib + version: 3.9.2 + url: https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - importlib-resources>=3.2.0 ; python_full_version < '3.10' + - meson-python>=0.13.1 ; extra == 'dev' + - numpy>=1.25 ; extra == 'dev' + - pybind11>=2.6 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.9' +- kind: pypi + name: matplotlib + version: 3.9.2 + url: https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - importlib-resources>=3.2.0 ; python_full_version < '3.10' + - meson-python>=0.13.1 ; extra == 'dev' + - numpy>=1.25 ; extra == 'dev' + - pybind11>=2.6 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.9' +- kind: pypi + name: matplotlib + version: 3.9.2 + url: https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl + sha256: ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - importlib-resources>=3.2.0 ; python_full_version < '3.10' + - meson-python>=0.13.1 ; extra == 'dev' + - numpy>=1.25 ; extra == 'dev' + - pybind11>=2.6 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.9' +- kind: pypi + name: matplotlib + version: 3.9.2 + url: https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl + sha256: 5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - importlib-resources>=3.2.0 ; python_full_version < '3.10' + - meson-python>=0.13.1 ; extra == 'dev' + - numpy>=1.25 ; extra == 'dev' + - pybind11>=2.6 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.9' - kind: conda name: meson version: 1.5.1 @@ -3773,23 +4205,131 @@ packages: - pkg:pypi/pathspec?source=hash-mapping size: 41173 timestamp: 1702250135032 +- kind: pypi + name: pillow + version: 10.4.0 + url: https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl + sha256: 673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.8' +- kind: pypi + name: pillow + version: 10.4.0 + url: https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl + sha256: 86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.8' +- kind: pypi + name: pillow + version: 10.4.0 + url: https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl + sha256: 1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.8' +- kind: pypi + name: pillow + version: 10.4.0 + url: https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.8' - kind: conda name: platformdirs - version: 4.3.2 + version: 4.3.6 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.2-pyhd8ed1ab_0.conda - sha256: 3aef5bb863a2db94e47272fd5ec5a5e4b240eafba79ebb9df7a162797cf035a3 - md5: e1a2dfcd5695f0744f1bcd3bbfe02523 + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 depends: - python >=3.8 license: MIT license_family: MIT purls: - pkg:pypi/platformdirs?source=hash-mapping - size: 20623 - timestamp: 1725821846879 + size: 20625 + timestamp: 1726613611845 - kind: conda name: pluggy version: 1.5.0 @@ -3927,6 +4467,15 @@ packages: requires_dist: - colorama>=0.4.6 ; extra == 'windows-terminal' requires_python: '>=3.8' +- kind: pypi + name: pyparsing + version: 3.1.4 + url: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + sha256: a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.6.8' - kind: conda name: pyproject-metadata version: 0.8.0 @@ -3983,6 +4532,7 @@ packages: constrains: - pytest-faulthandler >=2 license: MIT + license_family: MIT purls: - pkg:pypi/pytest?source=hash-mapping size: 258293 @@ -4144,6 +4694,14 @@ packages: - pkg:pypi/build?source=hash-mapping size: 25019 timestamp: 1725676759343 +- kind: pypi + name: python-dateutil + version: 2.9.0.post0 + url: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '!=3.0.*,!=3.1.*,!=3.2.*,>=2.7' - kind: conda name: python_abi version: '3.12' @@ -4272,12 +4830,12 @@ packages: requires_python: '>=3.8' - kind: conda name: ruff - version: 0.6.4 + version: 0.6.5 build: py312h42f095d_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.4-py312h42f095d_0.conda - sha256: ba67bdeb0bd04f99aabe0cc6ce2014058d44cdad0487cd14ae526414d47bb689 - md5: 8e0585cac6fa5db2b428e20f3d57034c + url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.5-py312h42f095d_0.conda + sha256: 9689cce1fe308e885bfa0151821bfb48a49efaf871b356d3921346b43691a879 + md5: 4f0601e870f7e784ce080ba670af51bc depends: - __osx >=11.0 - libcxx >=17 @@ -4290,16 +4848,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6006996 - timestamp: 1725618425532 + size: 6000368 + timestamp: 1726264270948 - kind: conda name: ruff - version: 0.6.4 + version: 0.6.5 build: py312h881003e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.4-py312h881003e_0.conda - sha256: 82c8fc3fecece3fa6db6d88be239ba62b407c09071df7705664cbfaf7550b388 - md5: 302b3f9a3d88d6d535da9d8fe663eb7d + url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.5-py312h881003e_0.conda + sha256: 60385e00c5cb4c1b2b078f9cc6fd25cd211bf6aca2d3cfe0e31fe4b804847f16 + md5: e894013a377088053f0766a4756d518d depends: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -4310,16 +4868,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6455872 - timestamp: 1725619373056 + size: 6464864 + timestamp: 1726265070323 - kind: conda name: ruff - version: 0.6.4 + version: 0.6.5 build: py312hd18ad41_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.4-py312hd18ad41_0.conda - sha256: 64e89828218eb52ba71fee66d74fbc19817ca0f914cb6e9ad3c82423e9f6d40e - md5: bbb52fcabbc926d506bed70d70e44776 + url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.5-py312hd18ad41_0.conda + sha256: 6d9f5eb9be06bf63549a82d62ad36d2dc782f9854b863c0283ca7d6e1999e141 + md5: 1ac542f83e32fbc3da3c765cc2e61ba5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4330,16 +4888,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6554879 - timestamp: 1725618160547 + size: 6557268 + timestamp: 1726264191478 - kind: conda name: ruff - version: 0.6.4 + version: 0.6.5 build: py312he6c0bb9_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.4-py312he6c0bb9_0.conda - sha256: 386e02becf61164e38b896ae9e3782d69aa34e6ef63013afd88284811e1674cd - md5: ff1f5ec398a38d04b42d0d62a962f0b9 + url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.5-py312he6c0bb9_0.conda + sha256: a0d83deaf7d7caed630f9c0ef11f0873c953ca77039b9e02c2eadc964358fb8c + md5: b28ee0fd66b5dd869a3279b26926625e depends: - __osx >=10.13 - libcxx >=17 @@ -4351,8 +4909,8 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6298299 - timestamp: 1725618483850 + size: 6337919 + timestamp: 1726264087517 - kind: conda name: scikit-learn version: 1.5.2 @@ -4374,6 +4932,7 @@ packages: - scipy - threadpoolctl >=3.1.0 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping size: 9581309 @@ -4399,6 +4958,7 @@ packages: - scipy - threadpoolctl >=3.1.0 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping size: 10393222 @@ -4423,6 +4983,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping size: 9215977 @@ -4447,6 +5008,7 @@ packages: - scipy - threadpoolctl >=3.1.0 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/scikit-learn?source=hash-mapping size: 9479906 @@ -4562,21 +5124,21 @@ packages: timestamp: 1724328538557 - kind: conda name: setuptools - version: 73.0.1 + version: 74.1.2 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-73.0.1-pyhd8ed1ab_0.conda - sha256: c9f5e110e3fe5a7c4cd5b9da445c05a1fae000b43ab3a97cb6a501f4267515fc - md5: f0b618d7673d1b2464f600b34d912f6f + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda + sha256: 71a4603248167bacc0aa985697a93aff62f6bcf008edaece09e79e83e43a7e22 + md5: 56c9c11d004428e81d02eeb730fc6336 depends: - python >=3.8 license: MIT license_family: MIT purls: - - pkg:pypi/setuptools?source=hash-mapping - size: 1460460 - timestamp: 1725348602179 + - pkg:pypi/setuptools?source=compressed-mapping + size: 784583 + timestamp: 1726752322559 - kind: conda name: sigtool version: 0.1.3 @@ -4607,6 +5169,12 @@ packages: purls: [] size: 213817 timestamp: 1643442169866 +- kind: pypi + name: six + version: 1.16.0 + url: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl + sha256: 8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' - kind: pypi name: snowballstemmer version: 2.2.0 @@ -4673,6 +5241,62 @@ packages: - sphinx-inline-tabs ; extra == 'docs' - ipython ; extra == 'docs' requires_python: '>=3.7' +- kind: pypi + name: sphinx-design + version: 0.6.1 + url: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl + sha256: b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c + requires_dist: + - sphinx>=6,<9 + - pre-commit>=3,<4 ; extra == 'code-style' + - myst-parser>=2,<4 ; extra == 'rtd' + - myst-parser>=2,<4 ; extra == 'testing' + - pytest~=8.3 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - defusedxml ; extra == 'testing' + - pytest~=8.3 ; extra == 'testing-no-myst' + - pytest-cov ; extra == 'testing-no-myst' + - pytest-regressions ; extra == 'testing-no-myst' + - defusedxml ; extra == 'testing-no-myst' + - furo~=2024.7.18 ; extra == 'theme-furo' + - sphinx-immaterial~=0.12.2 ; extra == 'theme-im' + - pydata-sphinx-theme~=0.15.2 ; extra == 'theme-pydata' + - sphinx-rtd-theme~=2.0 ; extra == 'theme-rtd' + - sphinx-book-theme~=1.1 ; extra == 'theme-sbt' + requires_python: '>=3.9' +- kind: pypi + name: sphinx-gallery + version: 0.17.1 + url: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl + sha256: 0a1142a15a9d63169fe7b12167dc028891fb8db31bfc6d7de03ba0d68d591830 + requires_dist: + - pillow + - sphinx>=5 + - sphinxcontrib-video ; extra == 'animations' + - absl-py ; extra == 'dev' + - graphviz ; extra == 'dev' + - intersphinx-registry ; extra == 'dev' + - ipython ; extra == 'dev' + - joblib ; extra == 'dev' + - jupyterlite-sphinx ; extra == 'dev' + - lxml ; extra == 'dev' + - matplotlib ; extra == 'dev' + - numpy ; extra == 'dev' + - packaging ; extra == 'dev' + - plotly ; extra == 'dev' + - pydata-sphinx-theme ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-coverage ; extra == 'dev' + - seaborn ; extra == 'dev' + - sphinxcontrib-video ; extra == 'dev' + - statsmodels ; extra == 'dev' + - jupyterlite-sphinx ; extra == 'jupyterlite' + - joblib ; extra == 'parallel' + - numpy ; extra == 'recommender' + - graphviz ; extra == 'show-api-usage' + - memory-profiler ; extra == 'show-memory' + requires_python: '>=3.8' - kind: pypi name: sphinxcontrib-applehelp version: 2.0.0 @@ -4992,12 +5616,12 @@ packages: requires_python: '>=3.8' - kind: conda name: uv - version: 0.4.9 + version: 0.4.12 build: h032dd4e_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.9-h032dd4e_0.conda - sha256: b44e44ba5e8dd0a50c46aa34a9b9caed3267c76a21ef76afd39089e1924bd984 - md5: 074b63a449f3bcfa097ec1ef774ffdde + url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.12-h032dd4e_0.conda + sha256: dff85c7e3aa6b93e7cca3757f6264752b21f11e9c4ed3ca47f05f7552eb85de6 + md5: 9a9b6f6d4acc32969b03ba5688c01635 depends: - __osx >=10.13 - libcxx >=17 @@ -5005,16 +5629,16 @@ packages: - __osx >=10.13 license: Apache-2.0 OR MIT purls: [] - size: 8189938 - timestamp: 1726026124489 + size: 8380579 + timestamp: 1726691304456 - kind: conda name: uv - version: 0.4.9 + version: 0.4.12 build: h0f3a69f_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.9-h0f3a69f_0.conda - sha256: 668e4d0fe07910e07d48f8350d2de2718786dfe10ceedcbed9bc53f2728fdf98 - md5: f43ba02ff8f9ab19a47d0038b513b439 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.12-h0f3a69f_0.conda + sha256: 60c7532d8614f381c032a2bcbea90cdf321622bf851a6596ad0a6e7394358530 + md5: 0165cb4468c6a1789c761318649237f8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5023,32 +5647,32 @@ packages: - __glibc >=2.17 license: Apache-2.0 OR MIT purls: [] - size: 8572791 - timestamp: 1726025853886 + size: 8708824 + timestamp: 1726690545270 - kind: conda name: uv - version: 0.4.9 + version: 0.4.12 build: ha08ef0e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.9-ha08ef0e_0.conda - sha256: 8a1382cd280abc1c81334ec8a4b8a8108294d0f53482523768c4136c80c73893 - md5: 2e0e3ac379036222e99b6f809ce7d5e8 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.12-ha08ef0e_0.conda + sha256: a6622c77f6681a991f6b99b5f28ca4b6714bd040eeaf7e17edf461133d8c8cb9 + md5: 510372a1cb003b81a332f8bda54778a7 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 OR MIT purls: [] - size: 8921068 - timestamp: 1726027103971 + size: 9117409 + timestamp: 1726691831519 - kind: conda name: uv - version: 0.4.9 + version: 0.4.12 build: hd3a8144_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.9-hd3a8144_0.conda - sha256: 246cfe4389d7f1d1d9237951b86385de662dbdf2449e927a267dd72d264fc275 - md5: 1d9fa1135f828b7d06d88e18fd2fa40b + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.12-hd3a8144_0.conda + sha256: 33de8782f870f99e62d8fe1c7361b848bc4e1ba228ec9e69429c536c47d4e78d + md5: b3f0ce23fb6a06756bfdb24b6bb5ca06 depends: - __osx >=11.0 - libcxx >=17 @@ -5056,8 +5680,8 @@ packages: - __osx >=11.0 license: Apache-2.0 OR MIT purls: [] - size: 7626912 - timestamp: 1726026371878 + size: 7668214 + timestamp: 1726691530442 - kind: conda name: vc version: '14.3' @@ -5165,21 +5789,21 @@ packages: timestamp: 1660346976440 - kind: conda name: zipp - version: 3.20.1 + version: 3.20.2 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda - sha256: 30762bd25b6fc8714d5520a223ccf20ad4a6792dc439c54b59bf44b60bf51e72 - md5: 74a4befb4b38897e19a107693e49da20 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 depends: - python >=3.8 license: MIT license_family: MIT purls: - pkg:pypi/zipp?source=hash-mapping - size: 21110 - timestamp: 1724731063145 + size: 21409 + timestamp: 1726248679175 - kind: conda name: zlib version: 1.3.1 diff --git a/pyproject.toml b/pyproject.toml index c0e3b5e..3ed3428 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ download = "https://pypi.org/project/fastcan/#files" tracker = "https://github.com/MatthewSZhang/fastcan/issues" [project.optional-dependencies] -doc = ["furo"] +docs = ["furo", "matplotlib", "sphinx_gallery", "sphinx-design"] [tool.pixi.feature.test.dependencies] pytest = "*" @@ -106,12 +106,12 @@ cython-lint = { cmd = "cython-lint .", cwd = "fastcan" } [tool.pixi.feature.type.tasks] type = { cmd = "mypy . --ignore-missing-imports", cwd = "fastcan" } -[tool.pixi.feature.doc.tasks] +[tool.pixi.feature.docs.tasks] doc = { cmd = "$SPHINXBUILD -M $CMD $SOURCEDIR $BUILDDIR $SPHINXOPTS", cwd = "doc", env = { SPHINXBUILD = "sphinx-build", CMD = "html", SOURCEDIR = ".", BUILDDIR = "_build", SPHINXOPTS = "" } } -doc-clean = { cmd = "rm -rf $BUILDDIR generated", cwd = "doc", env = { BUILDDIR = "_build" } } +doc-clean = { cmd = "rm -rf $BUILDDIR generated auto_examples", cwd = "doc", env = { BUILDDIR = "_build" } } [tool.pixi.environments] -default = ["fmt", "lint", "type", "doc", "test", "build"] +default = ["fmt", "lint", "type", "docs", "test", "build"] [tool.black] line-length = 88 @@ -127,6 +127,7 @@ exclude = ''' | build | dist | doc/_build + | doc/auto_examples )/ ''' @@ -146,7 +147,14 @@ lint.ignore = [ # max line length for black line-length = 88 -exclude = [".git", "__pycache__", "dist", "doc/_build", "build"] +exclude = [ + ".git", + "__pycache__", + "dist", + "doc/_build", + "doc/auto_examples", + "build", +] [tool.ruff.lint.per-file-ignores] # It's fine not to put the import at the top of the file in the examples From 1318faa112bfe51dd290c71b49c175a3d9343213 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:12:25 +0800 Subject: [PATCH 2/7] DOC unsupervised init --- doc/conf.py | 1 + doc/unsupervised.rst | 74 +++++++++++++++++++++++++++++++++++++++++- examples/plot_speed.py | 34 ++++++++++++++----- 3 files changed, 99 insertions(+), 10 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index 1205bd0..966449c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -42,6 +42,7 @@ "sphinx.ext.intersphinx", "sphinx_gallery.gen_gallery", "sphinx_design", + "matplotlib.sphinxext.plot_directive", ] # List of patterns, relative to source directory, that match files and diff --git a/doc/unsupervised.rst b/doc/unsupervised.rst index 0a37ac6..7b469ec 100644 --- a/doc/unsupervised.rst +++ b/doc/unsupervised.rst @@ -6,4 +6,76 @@ Unsupervised feature selection ============================== -We can use :class:`FastCan` to do unsupervised feature selection. \ No newline at end of file +We can use :class:`FastCan` to do unsupervised feature selection. +The unsupervised application of :class:`FastCan` tries to select features, which +maximize the sum of the squared canonical correlation (SSC) with the principal +components (PCs) acquired from PCA (principal component analysis) of the feature +matrix :math:`X`. + + >>> from sklearn.decomposition import PCA + >>> from sklearn import datasets + >>> from fastcan import FastCan + >>> iris = datasets.load_iris() + >>> X = iris["data"] + >>> y = iris["target"] + >>> f_names = iris["feature_names"] + >>> t_names = iris["target_names"] + >>> pca = PCA(n_components=2) + >>> X_pcs = pca.fit_transform(X) + >>> selector = FastCan(n_features_to_select=2, verbose=0) + >>> selector.fit(X, X_pcs[:, :2]) + >>> selector.indices_ + array([2, 1], dtype=int32) + +.. note:: + There is no guarantee that this unsupervised :class:`FastCan` will select + the optimal subset of the features, which has the highest SSC with PCs. + Because :class:`FastCan` selects features in a greedy manner, which may lead to + suboptimal results. See the following plots. + +.. plot:: + :context: close-figs + :align: center + + from itertools import combinations + import matplotlib.pyplot as plt + from sklearn.cross_decomposition import CCA + + def ssc(X, y): + """Sum of the squared canonical correlation coefficients. + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples, n_outputs) + Target matrix. + + Returns + ------- + ssc : float + Sum of the squared canonical correlation coefficients. + """ + n_components = min(X.shape[1], y.shape[1]) + cca = CCA(n_components=n_components) + X_c, y_c = cca.fit_transform(X, y) + corrcoef = np.diagonal( + np.corrcoef(X_c, y_c, rowvar=False), + offset=n_components + ) + return sum(corrcoef**2) + + comb = list(combinations([0, 1, 2, 3], 2)) + fig, axs = plt.subplots(ncols=3, nrows=2, figsize=(8, 6), layout="constrained") + for i in range(2): + for j in range(3): + f1_idx = comb[i*3+j][0] + f2_idx = comb[i*3+j][1] + score = ssc(X[:, [f1_idx, f2_idx]], X_pcs) + scatter = axs[i, j].scatter(X[:, f1_idx], X[:, f2_idx], c=y) + axs[i, j].set(xlabel=f_names[f1_idx], ylabel=f_names[f2_idx]) + axs[i, j].set_title(f"SSC: {score:.3f}") + for spine in axs[1, 0].spines.values(): + spine.set_edgecolor('red') + _ = axs[1, 2].legend(scatter.legend_elements()[0], t_names, loc="lower right") + diff --git a/examples/plot_speed.py b/examples/plot_speed.py index 191e7da..e168c1c 100644 --- a/examples/plot_speed.py +++ b/examples/plot_speed.py @@ -39,6 +39,30 @@ from sklearn.cross_decomposition import CCA +def ssc(X, y): + """Sum of the squared canonical correlation coefficients. + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples, n_outputs) + Target matrix. + + Returns + ------- + ssc : float + Sum of the squared canonical correlation coefficients. + """ + n_components = min(X.shape[1], y.shape[1]) + cca = CCA(n_components=n_components) + X_c, y_c = cca.fit_transform(X, y) + corrcoef = np.diagonal( + np.corrcoef(X_c, y_c, rowvar=False), + offset=n_components + ) + return sum(corrcoef**2) + def baseline(X, y, t): """Baseline method using CCA from sklearn. @@ -64,24 +88,16 @@ def baseline(X, y, t): the scores is corresponding to the feature selection process. """ n_samples, n_features = X.shape - n_targets = y.shape[1] mask = np.zeros(n_features, dtype=bool) r2 = np.zeros(n_features, dtype=float) indices = np.zeros(t, dtype=int) scores = np.zeros(t, dtype=float) X_selected = np.zeros((n_samples, 0), dtype=float) for i in range(t): - n_components = min(i+1, n_targets) - cca = CCA(n_components=n_components) for j in range(n_features): if not mask[j]: X_candidate = np.column_stack((X_selected, X[:, j])) - X_c, y_c = cca.fit_transform(X_candidate, y) - corrcoef = np.diagonal( - np.corrcoef(X_c, y_c, rowvar=False), - offset=n_components - ) - r2[j] = sum(corrcoef**2) + r2[j] = ssc(X_candidate, y) d = np.argmax(r2) indices[i] = d scores[i] = r2[d] From 11c7c7932f115d7c053db38670e553b975e13c08 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:03:16 +0800 Subject: [PATCH 3/7] DOC add redundancy --- doc/multioutput.rst | 2 +- doc/redundancy.rst | 28 ++++- doc/unsupervised.rst | 61 ++--------- examples/plot_redundancy.py | 211 ++++++++++++++++++++++++++++++++++++ examples/plot_speed.py | 27 +---- 5 files changed, 250 insertions(+), 79 deletions(-) create mode 100644 examples/plot_redundancy.py diff --git a/doc/multioutput.rst b/doc/multioutput.rst index 54dd3aa..ebb3012 100644 --- a/doc/multioutput.rst +++ b/doc/multioutput.rst @@ -6,4 +6,4 @@ Multioutput feature selection ============================== -We can use :class:`FastCan` for multioutput feature selection. \ No newline at end of file +We can use :class:`FastCan` to handle multioutput feature selection. \ No newline at end of file diff --git a/doc/redundancy.rst b/doc/redundancy.rst index 3a75035..6c1e3b4 100644 --- a/doc/redundancy.rst +++ b/doc/redundancy.rst @@ -6,4 +6,30 @@ Feature redundancy ================== -:class:`FastCan` can effectively skip the redundant features. \ No newline at end of file +:class:`FastCan` can effectively skip the linearly redundant features. +Here a feature :math:`x_r\in \mathbb{R}^{N\times 1}` is linearly +redundant to a set of features :math:`X\in \mathbb{R}^{N\times n}` means that +:math:`x_r` can be obtained from an affine transformation of :math:`X`, given by + +.. math:: + x_r = Xa + b + +where :math:`a\in \mathbb{R}^{n\times 1}` and :math:`b\in \mathbb{R}^{N\times 1}`. +In other words, the feature can be acquired by a linear transformation of :math:`X`, +i.e. :math:`Xa`, and a translation, i.e. :math:`+b`. + +This capability of :class:`FastCan` is benefited from the +`Modified Gram-Schmidt `_, +which gives large rounding-errors when linearly redundant features appears. + +.. rubric:: References + +* `"Canonical-correlation-based fast feature selection for structural + health monitoring" `_ + Zhang, S., Wang, T., Worden, K., Sun L., & Cross, E. J. + Mechanical Systems and Signal Processing, 223:111895 (2025). + +.. rubric:: Examples + +* See :ref:`sphx_glr_auto_examples_plot_redundancy.py` for an example of + feature selection on datasets with redundant features. diff --git a/doc/unsupervised.rst b/doc/unsupervised.rst index 7b469ec..2840f98 100644 --- a/doc/unsupervised.rst +++ b/doc/unsupervised.rst @@ -10,20 +10,16 @@ We can use :class:`FastCan` to do unsupervised feature selection. The unsupervised application of :class:`FastCan` tries to select features, which maximize the sum of the squared canonical correlation (SSC) with the principal components (PCs) acquired from PCA (principal component analysis) of the feature -matrix :math:`X`. +matrix :math:`X`. See the example below. >>> from sklearn.decomposition import PCA >>> from sklearn import datasets >>> from fastcan import FastCan >>> iris = datasets.load_iris() >>> X = iris["data"] - >>> y = iris["target"] - >>> f_names = iris["feature_names"] - >>> t_names = iris["target_names"] >>> pca = PCA(n_components=2) >>> X_pcs = pca.fit_transform(X) - >>> selector = FastCan(n_features_to_select=2, verbose=0) - >>> selector.fit(X, X_pcs[:, :2]) + >>> selector = FastCan(n_features_to_select=2, verbose=0).fit(X, X_pcs[:, :2]) >>> selector.indices_ array([2, 1], dtype=int32) @@ -31,51 +27,12 @@ matrix :math:`X`. There is no guarantee that this unsupervised :class:`FastCan` will select the optimal subset of the features, which has the highest SSC with PCs. Because :class:`FastCan` selects features in a greedy manner, which may lead to - suboptimal results. See the following plots. + suboptimal results. -.. plot:: - :context: close-figs - :align: center - - from itertools import combinations - import matplotlib.pyplot as plt - from sklearn.cross_decomposition import CCA - - def ssc(X, y): - """Sum of the squared canonical correlation coefficients. - Parameters - ---------- - X : array-like of shape (n_samples, n_features) - Feature matrix. - - y : array-like of shape (n_samples, n_outputs) - Target matrix. - - Returns - ------- - ssc : float - Sum of the squared canonical correlation coefficients. - """ - n_components = min(X.shape[1], y.shape[1]) - cca = CCA(n_components=n_components) - X_c, y_c = cca.fit_transform(X, y) - corrcoef = np.diagonal( - np.corrcoef(X_c, y_c, rowvar=False), - offset=n_components - ) - return sum(corrcoef**2) - - comb = list(combinations([0, 1, 2, 3], 2)) - fig, axs = plt.subplots(ncols=3, nrows=2, figsize=(8, 6), layout="constrained") - for i in range(2): - for j in range(3): - f1_idx = comb[i*3+j][0] - f2_idx = comb[i*3+j][1] - score = ssc(X[:, [f1_idx, f2_idx]], X_pcs) - scatter = axs[i, j].scatter(X[:, f1_idx], X[:, f2_idx], c=y) - axs[i, j].set(xlabel=f_names[f1_idx], ylabel=f_names[f2_idx]) - axs[i, j].set_title(f"SSC: {score:.3f}") - for spine in axs[1, 0].spines.values(): - spine.set_edgecolor('red') - _ = axs[1, 2].legend(scatter.legend_elements()[0], t_names, loc="lower right") +.. rubric:: References +* `"Automatic Selection of Optimal Structures for Population-Based + Structural Health Monitoring" `_ + Wang, T., Worden, K., Wagg, D.J., Cross, E.J., Maguire, A.E., Lin, W. + In: Conference Proceedings of the Society for Experimental Mechanics Series. + Springer, Cham. (2023). \ No newline at end of file diff --git a/examples/plot_redundancy.py b/examples/plot_redundancy.py new file mode 100644 index 0000000..339af1a --- /dev/null +++ b/examples/plot_redundancy.py @@ -0,0 +1,211 @@ +""" +=================================================== +Feature selection performance on redundant features +=================================================== + +In this examples, we will compare the performance of feature selectors on the +datasets, which contain redundant features. +Here four types of features should be distinguished: + +* Unuseful features: the features do not contribute to the target +* Dependent informative features: the features contribute to the target and form + the redundant features +* Redundant features: the features are constructed by linear transformation of + dependent informative features +* Independent informative features: the features contribute to the target but + does not contribute to the redundant features. + +.. note:: + If we do not distinguish dependent and independent informative features and use + informative features to form both the target and the redundant features. The task + will be much easier. +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Define dataset generator +# ------------------------ + +import numpy as np + + +def make_redundant( + n_samples, + n_features, + dep_info_ids, + indep_info_ids, + redundant_ids, + random_seed, +): + """Make a dataset with linearly redundant features. + + Parameters + ---------- + n_samples : int + The number of samples. + + n_features : int + The number of features. + + dep_info_ids : list[int] + The indices of dependent informative features. + + indep_info_ids : list[int] + The indices of independent informative features. + + redundant_ids : list[int] + The indices of redundant features. + + random_seed : int + Random seed. + + Returns + ------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples,) + Target vector. + """ + rng = np.random.default_rng(random_seed) + info_ids = dep_info_ids + indep_info_ids + n_dep_info = len(dep_info_ids) + n_info = len(info_ids) + n_redundant = len(redundant_ids) + informative_coef = rng.random(n_info) + redundant_coef = rng.random((n_dep_info, n_redundant)) + + X = rng.random((n_samples, n_features)) + y = np.dot(X[:, info_ids], informative_coef) + + X[:, redundant_ids] = X[:, dep_info_ids]@redundant_coef + return X, y + +# %% +# Define score function +# --------------------- +# This function is used to compute the number of correct features missed by selectors. +# +# * For independent informative features, selectors should select all of them +# * For dependent informative features, selectors only need to select any +# ``n_dep_info``-combination of the set ``dep_info_ids`` + ``redundant_ids``. That +# means if the indices of dependent informative features are :math:`[0, 1]` and the +# indices of the redundant features are :math:`[5]`, then the correctly selected +# indices can be any of :math:`[0, 1]`, :math:`[0, 5]`, and :math:`[1, 5]`. + +def get_n_missed( + dep_info_ids, + indep_info_ids, + redundant_ids, + selected_ids +): + """Get the number of features miss selected.""" + n_redundant = len(redundant_ids) + n_missed_indep = len(np.setdiff1d(indep_info_ids, selected_ids)) + n_missed_dep = len( + np.setdiff1d(dep_info_ids+redundant_ids, selected_ids) + )-n_redundant + if n_missed_dep < 0: + n_missed_dep = 0 + return n_missed_indep+n_missed_dep + +# %% +# Prepare selectors +# ----------------- +# We compare :class:`fastcan.FastCan` with eight selectors of :mod:`sklearn`, which +# include the Select From a Model (SFM) algorithm, the Recursive Feature Elimination +# (RFE) algorithm, the Sequential Feature Selection (SFS) algorithm, and Select K Best +# (SKB) algorithm. +# The list of the selectors are given below: +# +# * fastcan: :class:`fastcan.FastCan` selector +# * skb_reg: is the SKB algorithm ranking features with ANOVA (analysis of variance) +# F-statistic and p-values +# * skb_mir: is the SKB algorithm ranking features mutual information for regression +# * sfm_lsvr: the SFM algorithm with a linear support vector regressor +# * sfm_rfr: the SFM algorithm with a random forest regressor +# * rfe_lsvr: is the RFE algorithm with a linear support vector regressor +# * rfe_rfr: is the RFE algorithm with a random forest regressor +# * sfs_lsvr: is the forward SFS algorithm with a linear support vector regressor +# * sfs_rfr: is the forward SFS algorithm with a random forest regressor + + +from sklearn.ensemble import RandomForestRegressor +from sklearn.feature_selection import ( + RFE, + SelectFromModel, + SelectKBest, + SequentialFeatureSelector, + f_regression, + mutual_info_regression, +) +from sklearn.svm import LinearSVR + +from fastcan import FastCan + +lsvr = LinearSVR(C = 1, dual="auto", max_iter=100000, random_state=0) +rfr = RandomForestRegressor(n_estimators = 10, random_state=0) + + +N_SAMPLES = 1000 +N_FEATURES = 10 +DEP_INFO_IDS = [2, 4, 7, 9] +INDEP_INFO_IDS = [0, 1, 6] +REDUNDANT_IDS = [5, 8] +N_SELECTED = len(DEP_INFO_IDS+INDEP_INFO_IDS) +N_REPEATED = 10 + +selector_dict = { + "fastcan": FastCan(N_SELECTED, verbose=0), + "skb_reg": SelectKBest(f_regression, k=N_SELECTED), + "skb_mir": SelectKBest(mutual_info_regression, k=N_SELECTED), + "sfm_lsvr": SelectFromModel(lsvr, max_features=N_SELECTED, threshold=-np.inf), + "sfm_rfr": SelectFromModel(rfr, max_features=N_SELECTED, threshold=-np.inf), + "rfe_lsvr": RFE(lsvr, n_features_to_select=N_SELECTED, step=1), + "rfe_rfr": RFE(rfr, n_features_to_select=N_SELECTED, step=1), + "sfs_lsvr": SequentialFeatureSelector(lsvr, n_features_to_select=N_SELECTED, cv=2), + "sfs_rfr": SequentialFeatureSelector(rfr, n_features_to_select=N_SELECTED, cv=2), +} + +# %% +# Run test +# -------- + +N_SELECTORS = len(selector_dict) +n_missed = np.zeros((N_REPEATED, N_SELECTORS), dtype=int) + +for i in range(N_REPEATED): + X, y = make_redundant( + n_samples=N_SAMPLES, + n_features=N_FEATURES, + dep_info_ids=DEP_INFO_IDS, + indep_info_ids=INDEP_INFO_IDS, + redundant_ids=REDUNDANT_IDS, + random_seed=i, + ) + for j, selector in enumerate(selector_dict.values()): + result_ids = selector.fit(X, y).get_support(indices=True) + n_missed[i, j] = get_n_missed( + dep_info_ids=DEP_INFO_IDS, + indep_info_ids=INDEP_INFO_IDS, + redundant_ids=REDUNDANT_IDS, + selected_ids=result_ids, + ) + +# %% +# Plot results +# ------------ +# :class:`fastcan.FastCan` correctly selects all informative features with zero missed +# features. + +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize = (8, 5)) +rects = ax.bar(selector_dict.keys(), n_missed.sum(0), width = 0.5) +ax.bar_label(rects, n_missed.sum(0), padding=3) +plt.xlabel("Selector") +plt.ylabel("No. of missed features") +plt.title("Performance of selectors on datasets with linear redundant features") +plt.show() diff --git a/examples/plot_speed.py b/examples/plot_speed.py index e168c1c..b53a495 100644 --- a/examples/plot_speed.py +++ b/examples/plot_speed.py @@ -37,35 +37,12 @@ # canonical correlation coefficients may be more than one, the feature ranking # criterion used here is the sum squared of all canonical correlation coefficients. -from sklearn.cross_decomposition import CCA - -def ssc(X, y): - """Sum of the squared canonical correlation coefficients. - Parameters - ---------- - X : array-like of shape (n_samples, n_features) - Feature matrix. - - y : array-like of shape (n_samples, n_outputs) - Target matrix. - - Returns - ------- - ssc : float - Sum of the squared canonical correlation coefficients. - """ - n_components = min(X.shape[1], y.shape[1]) - cca = CCA(n_components=n_components) - X_c, y_c = cca.fit_transform(X, y) - corrcoef = np.diagonal( - np.corrcoef(X_c, y_c, rowvar=False), - offset=n_components - ) - return sum(corrcoef**2) +from fastcan import ssc def baseline(X, y, t): """Baseline method using CCA from sklearn. + Parameters ---------- X : array-like of shape (n_samples, n_features) From 7075d7a57744ffa3332191e04fd4533eb1b2e8f5 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Sun, 29 Sep 2024 10:11:29 +0800 Subject: [PATCH 4/7] DOC add ols_omp init --- doc/ols_and_omp.rst | 56 +++ doc/user_guide.rst | 3 +- examples/plot_ols_omp.py | 16 + examples/plot_redundancy.py | 2 +- fastcan/__init__.py | 3 +- fastcan/_fastcan.py | 2 +- fastcan/_ssc.py | 47 --- fastcan/_utils.py | 110 ++++++ pixi.lock | 679 +++++++++++++++++++++--------------- pyproject.toml | 1 + tests/test_ols.py | 24 ++ 11 files changed, 614 insertions(+), 329 deletions(-) create mode 100644 doc/ols_and_omp.rst create mode 100644 examples/plot_ols_omp.py delete mode 100644 fastcan/_ssc.py create mode 100644 fastcan/_utils.py create mode 100644 tests/test_ols.py diff --git a/doc/ols_and_omp.rst b/doc/ols_and_omp.rst new file mode 100644 index 0000000..7108ca2 --- /dev/null +++ b/doc/ols_and_omp.rst @@ -0,0 +1,56 @@ +.. currentmodule:: fastcan + +.. _ols_omp: + +=========================== +Comparison with OLS and OMP +=========================== + +:class:`FastCan` has a close relationship with Orthogonal Least Squares (OLS) [1]_ +and Orthogonal Matching Pursuit (OMP) [2]_. +The detailed difference between OLS and OMP can be found in [3]_. +Here, let's briefly compare the three methods. + + +Assume we have a feature matrix :math:`X_s \in \mathbb{R}^{N\times t}`, which constains +:math:`t` selected features, and a target vector :math:`y \in \mathbb{R}^{N\times 1}`. +Then the residual :math:`r` of the least-squares can be found by + +.. math:: + r = y - X_s \beta \;\; \text{where} \;\; \beta = (X_s^\top X_s)^{-1}X_s^\top y + +When evaluating a new feature :math:`x_i` + +* for OMP, the feature which maximizes :math:`r^\top x_i` will be selected +* for OLS, the feature which maximizes :math:`r^\top w_i` will be selected, where + :math:`w_i` is the projection of :math:`x_i` on the orthogonal subspace so that it is + orthogonal to :math:`X_s`, i.e., :math:`X_s^\top w_i = \mathbf{0} \in \mathbb{R}^{N}` +* for :class:`FastCan` (h-correlation algorithm), it is almost same as OLS, but the + difference is that in :class:`FastCan`, :math:`X_s`, :math:`y`, and :math:`x_i` + are centered (i.e., zero mean in each column) before the selection. + +The small change makes the feature ranking criterion of :class:`FastCan` is equivalent +to the sum of squared canonical correlation coefficients, which gives it the following +advantages over OLS and OMP: + +* Affine invariant: if features are polluted by affine transformation, i.e., scaled + and/or added some constants, the selection result given by :class:`FastCan` will be + unchanged. +* Multioutput: as :class:`FastCan` use canonical correlation for feature ranking, it is + naturally support feature seleciton on dataset with multioutput. + + +.. rubric:: References + +.. [1] `"Orthogonal least squares methods and their application to non-linear + system identification" `_ Chen, S., + Billings, S. A., & Luo, W. International Journal of control, 50(5), + 1873-1896 (1989). + +.. [2] `"Matching pursuits with time-frequency dictionaries" + `_ Mallat, S. G., & Zhang, Z. + IEEE Transactions on signal processing, 41(12), 3397-3415 (1993). + +.. [3] `"On the difference between Orthogonal Matching Pursuit and Orthogonal Least + Squares" `_ Blumensath, T., + & Davies, M. E. Technical report, University of Edinburgh, (2007). \ No newline at end of file diff --git a/doc/user_guide.rst b/doc/user_guide.rst index 9de5a90..6f5c907 100644 --- a/doc/user_guide.rst +++ b/doc/user_guide.rst @@ -10,4 +10,5 @@ User Guide intuitive.rst unsupervised.rst multioutput.rst - redundancy.rst \ No newline at end of file + redundancy.rst + ols_and_omp.rst \ No newline at end of file diff --git a/examples/plot_ols_omp.py b/examples/plot_ols_omp.py new file mode 100644 index 0000000..a61f1be --- /dev/null +++ b/examples/plot_ols_omp.py @@ -0,0 +1,16 @@ +""" +====================================================== +FastCan VS. OLS VS. OMP on Affine Transformed Features +====================================================== + +In this examples, we will compare the robustness of the three feature +selection methods on affine transformed features. +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Define OLS +# ---------- + diff --git a/examples/plot_redundancy.py b/examples/plot_redundancy.py index 339af1a..879fb55 100644 --- a/examples/plot_redundancy.py +++ b/examples/plot_redundancy.py @@ -207,5 +207,5 @@ def get_n_missed( ax.bar_label(rects, n_missed.sum(0), padding=3) plt.xlabel("Selector") plt.ylabel("No. of missed features") -plt.title("Performance of selectors on datasets with linear redundant features") +plt.title("Performance of selectors on datasets with linearly redundant features") plt.show() diff --git a/fastcan/__init__.py b/fastcan/__init__.py index cf177b5..37a0ce7 100644 --- a/fastcan/__init__.py +++ b/fastcan/__init__.py @@ -3,9 +3,10 @@ """ from ._fastcan import FastCan -from ._ssc import ssc +from ._utils import ssc, ols __all__ = [ "FastCan", "ssc", + "ols", ] diff --git a/fastcan/_fastcan.py b/fastcan/_fastcan.py index 0c69a77..ab386e4 100644 --- a/fastcan/_fastcan.py +++ b/fastcan/_fastcan.py @@ -59,7 +59,7 @@ class FastCan(SelectorMixin, BaseEstimator): support_ : ndarray of shape (n_features,), dtype=bool The mask of selected features. - scores_: ndarray of shape (n_features_to_select,), dtype=float + scores_ : ndarray of shape (n_features_to_select,), dtype=float The h-correlation/eta-cosine of selected features. The order of the scores is corresponding to the feature selection process. diff --git a/fastcan/_ssc.py b/fastcan/_ssc.py deleted file mode 100644 index d365074..0000000 --- a/fastcan/_ssc.py +++ /dev/null @@ -1,47 +0,0 @@ -"""Sum squared of correlation.""" - -import numpy as np -from sklearn.cross_decomposition import CCA -from sklearn.utils import check_X_y -from sklearn.utils._param_validation import validate_params - - -@validate_params( - { - "X": ["array-like"], - "y": ["array-like"], - }, - prefer_skip_nested_validation=True, -) -def ssc(X, y): - """Sum of the squared canonical correlation coefficients. - - Parameters - ---------- - X : array-like of shape (n_samples, n_features) - Feature matrix. - - y : array-like of shape (n_samples, n_outputs) - Target matrix. - - Returns - ------- - ssc : float - Sum of the squared canonical correlation coefficients. - - Examples - -------- - >>> from fastcan import ssc - >>> X = [[1], [-1], [0]] - >>> y = [[0], [1], [-1]] - >>> ssc(X, y) - np.float64(0.25) - """ - X, y = check_X_y( - X, y, dtype=float, ensure_2d=True, multi_output=True, ensure_min_samples=2 - ) - n_components = min(X.shape[1], y.shape[1]) - cca = CCA(n_components=n_components) - X_c, y_c = cca.fit_transform(X, y) - corrcoef = np.diagonal(np.corrcoef(X_c, y_c, rowvar=False), offset=n_components) - return sum(corrcoef**2) diff --git a/fastcan/_utils.py b/fastcan/_utils.py new file mode 100644 index 0000000..23905cf --- /dev/null +++ b/fastcan/_utils.py @@ -0,0 +1,110 @@ +"""Sum squared of correlation.""" + +from numbers import Integral + +import numpy as np +from sklearn.cross_decomposition import CCA +from sklearn.utils import check_X_y +from sklearn.utils._param_validation import Interval, validate_params + + +@validate_params( + { + "X": ["array-like"], + "y": ["array-like"], + }, + prefer_skip_nested_validation=True, +) +def ssc(X, y): + """Sum of the squared canonical correlation coefficients. + + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples, n_outputs) + Target matrix. + + Returns + ------- + ssc : float + Sum of the squared canonical correlation coefficients. + + Examples + -------- + >>> from fastcan import ssc + >>> X = [[1], [-1], [0]] + >>> y = [[0], [1], [-1]] + >>> ssc(X, y) + np.float64(0.25) + """ + X, y = check_X_y( + X, y, dtype=float, ensure_2d=True, multi_output=True, ensure_min_samples=2 + ) + n_components = min(X.shape[1], y.shape[1]) + cca = CCA(n_components=n_components) + X_c, y_c = cca.fit_transform(X, y) + corrcoef = np.diagonal(np.corrcoef(X_c, y_c, rowvar=False), offset=n_components) + return sum(corrcoef**2) + + +@validate_params( + { + "X": ["array-like"], + "y": ["array-like"], + "t": [Interval(Integral, 1, None, closed="left")], + }, + prefer_skip_nested_validation=True, +) +def ols(X, y, t=1): + """Orthogonal least-squares + + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Feature matrix. + + y : array-like of shape (n_samples,) + Target vector. + + t : int, default=1 + The parameter is the absolute number of features to select. + + Returns + ------- + indices : ndarray of shape (n_features_to_select,), dtype=int + The indices of the selected features. The order of the indices + is corresponding to the feature selection process. + + scores : ndarray of shape (n_features_to_select,), dtype=float + The scores of selected features. The order of + the scores is corresponding to the feature selection process. + """ + X, y = check_X_y( + X, y, dtype=float, ensure_2d=True + ) + n_features = X.shape[1] + w = X / np.linalg.norm(X, axis=0) + v = y / np.linalg.norm(y) + mask = np.zeros(n_features, dtype=bool) + r2 = np.zeros(n_features) + indices = np.zeros(t, dtype=int) + scores = np.zeros(t, dtype=float) + + for i in range(t): + for j in range(n_features): + if not mask[j]: + r = w[:, j] @ v + r2[j] = r**2 + d = np.argmax(r2) + indices[i] = d + scores[i] = r2[d] + if i == t-1: + return indices, scores + mask[d] = True + r2[d] = 0 + for j in range(n_features): + if not mask[j]: + w[:, j] = w[:, j] - w[:, d]*(w[:, d] @ w[:, j]) + w[:, j] /= np.linalg.norm(w[:, j], axis=0) diff --git a/pixi.lock b/pixi.lock index 35b15a9..2fee342 100644 --- a/pixi.lock +++ b/pixi.lock @@ -15,13 +15,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.1-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.11-py312h2ec8cdc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.11-py312h8fd2918_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda @@ -41,7 +41,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.11.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda @@ -59,14 +59,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.5-py312hd18ad41_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.8-py312hd18ad41_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.5.2-py312h7a48858_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h7d485d2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda @@ -74,7 +74,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.12-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.17-h0f3a69f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -85,7 +85,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/2b/5779cfd48625e013c2dfcf0c246474d5b1f5d061a5f1e476037bf9fff3a3/fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/08/07/aa85cc62abcc940b25d14b542cf585eebf4830032a7f6a1395d696bb3231/fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -134,7 +134,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.8.0-h694c41f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.1-py312hb553811_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.8.0-h6a1c779_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.0.11-py312h5861a67_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.0.11-py312h6891801_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/fortran-compiler-1.8.0-h33d1f46_0.conda @@ -168,7 +168,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-18.1.8-h15ab845_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-17.0.6-hbedff68_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda @@ -188,14 +188,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.5-h37a9e06_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.6-h8f8b54e_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.5-py312he6c0bb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.8-py312he6c0bb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.5.2-py312h9d777eb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py312he82a568_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sigtool-0.1.3-h88f4db0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1300.6.5-h390ca13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda @@ -205,7 +205,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.12-h032dd4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.17-h032dd4e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-h87427d6_1.conda @@ -218,7 +218,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/63/8271f50f3e7bff8b78e03914c4c2893f2f21bd4db2975c60d11ecfbdd174/fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/27/b6/f9d365932dcefefdcc794985f8846471e60932070c557e0f66ed195fccec/fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -301,7 +301,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-17.0.6-h5090b49_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda @@ -321,14 +321,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.5-py312h42f095d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.8-py312h42f095d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.5.2-py312h387f99c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py312heb3a901_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1300.6.5-h03f4b80_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda @@ -338,7 +338,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.12-hd3a8144_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.17-hd3a8144_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-hfb2fe0b_1.conda @@ -351,7 +351,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dd/bd/cb8fd2dddd68089c112bf42a88afe188b8ace73f94406539857dcc9347a6/fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/67/9d/cfbfe36e5061a8f68b154454ba2304eb01f40d4ba9b63e41d9058909baed/fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -380,13 +380,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - pypi: . win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.8.0-py312h2e8e312_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.1-py312h4389bb4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.0.11-py312h275cf98_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.0.11-py312h6018fb9_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda @@ -397,13 +398,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-14.1.0-h1383e82_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-14.1.0-h1383e82_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.1.0-h66d3029_694.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.11.2-py312h4389bb4_0.conda @@ -416,20 +418,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-6.0.0-py312h4389bb4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.5-h889d299_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.5-py312h881003e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.8-py312h881003e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.5.2-py312h816cc57_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py312h1f4e10d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.7.0-h91493d7_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda @@ -438,10 +440,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.12-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.17-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_21.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.10-hf48077a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-h0e40799_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-h0e40799_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-xorgproto-2024.1-h0e40799_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -452,7 +458,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/9a/b695930e1b4e6929cc60e294489421632a05c105ac8c56ee63ef56a47872/fonttools-4.53.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b9/0a/a57caaff3bc880779317cb157e5b49dc47fad54effe027016abd355b0651/fonttools-4.54.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/27/48/e791a7ed487dbb9729ef32bb5d1af16693d8925f4366befef54119b2e576/furo-2024.8.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -512,6 +518,26 @@ packages: purls: [] size: 23621 timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 8 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d + md5: 37e16618af5c4851a3f3d66dd0e11141 + depends: + - libgomp >=7.5.0 + - libwinpthread >=12.0.0.r2.ggc561118da + constrains: + - openmp_impl 9999 + - msys2-conda-epoch <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 49468 + timestamp: 1718213032772 - kind: pypi name: alabaster version: 1.0.0 @@ -1561,12 +1587,12 @@ packages: - kind: conda name: cython version: 3.0.11 - build: py312h275cf98_2 - build_number: 2 + build: py312h6018fb9_3 + build_number: 3 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/cython-3.0.11-py312h275cf98_2.conda - sha256: e6f59285710c4e72d6234e0aa1ef8e02654d35d9b7bfc3ef83732202c48ba93b - md5: 07900a70e789a416665e4519baac8fa6 + url: https://conda.anaconda.org/conda-forge/win-64/cython-3.0.11-py312h6018fb9_3.conda + sha256: b1e45f513d777ba081e975f94f661b482e18909db09d7bf87ea4491b477330fc + md5: e9f6ccd6150a36dc80085902b091fc32 depends: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -1574,52 +1600,49 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3185158 - timestamp: 1725379596824 + size: 3203995 + timestamp: 1727456880981 - kind: conda name: cython version: 3.0.11 - build: py312h2ec8cdc_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.11-py312h2ec8cdc_2.conda - sha256: 225ecdcea6c93e17517e511345e966bd924f24b10841e331d372a393afb53e43 - md5: 399d49ab187d0ac77fff457f276d5101 + build: py312h6891801_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/cython-3.0.11-py312h6891801_3.conda + sha256: 673b6be525a81ad77413011882e7744a3475cec32672fbf93a5514077758ac25 + md5: 929a7b64e8a1d730a7c938461b2d5756 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 + - __osx >=10.13 + - libcxx >=17 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3756852 - timestamp: 1725379225702 + size: 3417478 + timestamp: 1727456274391 - kind: conda name: cython version: 3.0.11 - build: py312h5861a67_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/cython-3.0.11-py312h5861a67_2.conda - sha256: 46a6e82ba25d3413c9710b086e3ac9e55d877c2dd8ed783b7753e1ff8cb177af - md5: 0d7278f5f7ff4f003d3c813555879417 + build: py312h8fd2918_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.11-py312h8fd2918_3.conda + sha256: 7a888ddda463a3146949540229c70625fbefb05bcb1352cbff990f205b8392b0 + md5: 21e433caf1bb1e4c95832f8bb731d64c depends: - - __osx >=10.13 - - libcxx >=17 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3404979 - timestamp: 1725379271713 + size: 3752086 + timestamp: 1727456382070 - kind: conda name: cython version: 3.0.11 @@ -1688,7 +1711,7 @@ packages: name: fastcan version: 0.2.4 path: . - sha256: 2c2f54120beb74d23d5aaab9dc53c2ea16e9fb4b4cce38c7347cc0e6dedc8a50 + sha256: efb4f783b99e70e4778500268e221496f8ea904c05ac8b24df433e727d6a2be9 requires_dist: - scikit-learn>=1.5.0,<1.6 - furo ; extra == 'docs' @@ -1699,9 +1722,9 @@ packages: editable: true - kind: pypi name: fonttools - version: 4.53.1 - url: https://files.pythonhosted.org/packages/6d/9a/b695930e1b4e6929cc60e294489421632a05c105ac8c56ee63ef56a47872/fonttools-4.53.1-cp312-cp312-win_amd64.whl - sha256: 6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab + version: 4.54.1 + url: https://files.pythonhosted.org/packages/08/07/aa85cc62abcc940b25d14b542cf585eebf4830032a7f6a1395d696bb3231/fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab requires_dist: - fs<3,>=2.2.0 ; extra == 'all' - lxml>=4.0 ; extra == 'all' @@ -1736,9 +1759,9 @@ packages: requires_python: '>=3.8' - kind: pypi name: fonttools - version: 4.53.1 - url: https://files.pythonhosted.org/packages/87/63/8271f50f3e7bff8b78e03914c4c2893f2f21bd4db2975c60d11ecfbdd174/fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl - sha256: d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58 + version: 4.54.1 + url: https://files.pythonhosted.org/packages/27/b6/f9d365932dcefefdcc794985f8846471e60932070c557e0f66ed195fccec/fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl + sha256: 54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d requires_dist: - fs<3,>=2.2.0 ; extra == 'all' - lxml>=4.0 ; extra == 'all' @@ -1773,9 +1796,9 @@ packages: requires_python: '>=3.8' - kind: pypi name: fonttools - version: 4.53.1 - url: https://files.pythonhosted.org/packages/db/2b/5779cfd48625e013c2dfcf0c246474d5b1f5d061a5f1e476037bf9fff3a3/fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f + version: 4.54.1 + url: https://files.pythonhosted.org/packages/67/9d/cfbfe36e5061a8f68b154454ba2304eb01f40d4ba9b63e41d9058909baed/fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08 requires_dist: - fs<3,>=2.2.0 ; extra == 'all' - lxml>=4.0 ; extra == 'all' @@ -1810,9 +1833,9 @@ packages: requires_python: '>=3.8' - kind: pypi name: fonttools - version: 4.53.1 - url: https://files.pythonhosted.org/packages/dd/bd/cb8fd2dddd68089c112bf42a88afe188b8ace73f94406539857dcc9347a6/fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: 3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8 + version: 4.54.1 + url: https://files.pythonhosted.org/packages/b9/0a/a57caaff3bc880779317cb157e5b49dc47fad54effe027016abd355b0651/fonttools-4.54.1-cp312-cp312-win_amd64.whl + sha256: e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e requires_dist: - fs<3,>=2.2.0 ; extra == 'all' - lxml>=4.0 ; extra == 'all' @@ -2333,20 +2356,21 @@ packages: timestamp: 1726771628233 - kind: conda name: ld_impl_linux-64 - version: '2.40' - build: hf3520f5_7 - build_number: 7 + version: '2.43' + build: h712a8e2_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda - sha256: 764b6950aceaaad0c67ef925417594dd14cd2e22fff864aeef455ac259263d15 - md5: b80f2f396ca2c28b8c14c437a4ed1e74 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + sha256: 0c21387f9a411e3d1f7f2969026bacfece133c8f1e72faea9cde29c0c19e1f3a + md5: 83e1364586ceb8d0739fbc85b5c95837 + depends: + - __glibc >=2.17,<3.0.a0 constrains: - - binutils_impl_linux-64 2.40 + - binutils_impl_linux-64 2.43 license: GPL-3.0-only - license_family: GPL purls: [] - size: 707602 - timestamp: 1718625640445 + size: 669616 + timestamp: 1727304687962 - kind: conda name: libblas version: 3.9.0 @@ -2744,6 +2768,27 @@ packages: purls: [] size: 42063 timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.1.0 + build: h1383e82_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgcc-14.1.0-h1383e82_1.conda + sha256: 727d3659035d7b3c6c07c2cf90e7886ae81fd03229abf3ec9f836d9aeca11d2a + md5: 5464b6bb50d593b8f529d1fbcd58f3b2 + depends: + - _openmp_mutex >=4.5 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + - libgomp 14.1.0 h1383e82_1 + - libgcc-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 665353 + timestamp: 1724805164393 - kind: conda name: libgcc version: 14.1.0 @@ -2930,6 +2975,24 @@ packages: purls: [] size: 1459939 timestamp: 1724801851300 +- kind: conda + name: libgomp + version: 14.1.0 + build: h1383e82_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgomp-14.1.0-h1383e82_1.conda + sha256: c7c2c51397d57c2e4d48f8676d340ddf88067886f849128ba7d6bd24619dbccc + md5: f8aa80643cd3ff1767ea4e6008ed52d1 + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 522202 + timestamp: 1724805108466 - kind: conda name: libgomp version: 14.1.0 @@ -2946,26 +3009,6 @@ packages: purls: [] size: 460218 timestamp: 1724801743478 -- kind: conda - name: libhwloc - version: 2.11.1 - build: default_h8125262_1000 - build_number: 1000 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - sha256: 92728e292640186759d6dddae3334a1bc0b139740b736ffaeccb825fb8c07a2e - md5: 933bad6e4658157f1aec9b171374fde2 - depends: - - libxml2 >=2.12.7,<3.0a0 - - pthreads-win32 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 2379689 - timestamp: 1720461835526 - kind: conda name: libiconv version: '1.17' @@ -2979,23 +3022,6 @@ packages: purls: [] size: 676469 timestamp: 1702682458114 -- kind: conda - name: libiconv - version: '1.17' - build: hcfcfb64_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b - md5: e1eb10b1cca179f2baa3601e4efc8712 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: LGPL-2.1-only - purls: [] - size: 636146 - timestamp: 1702682547199 - kind: conda name: libiconv version: '1.17' @@ -3314,6 +3340,44 @@ packages: purls: [] size: 33601 timestamp: 1680112270483 +- kind: conda + name: libwinpthread + version: 12.0.0.r4.gg4f2fc60ca + build: h57928b3_8 + build_number: 8 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda + sha256: 6d5e158813ab8d553fbb0fedd0abe7bf92970b0be3a9ddf12da0f6cbad78f506 + md5: 03cccbba200ee0523bde1f3dad60b1f3 + depends: + - ucrt + constrains: + - pthreads-win32 <0.0a0 + - msys2-conda-epoch <0.0a0 + license: MIT AND BSD-3-Clause-Clear + purls: [] + size: 35433 + timestamp: 1724681489463 +- kind: conda + name: libxcb + version: 1.17.0 + build: h0e4246c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 + md5: a69bbf778a462da324489976c84cfc8c + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - pthread-stubs + - ucrt >=10.0.20348.0 + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 1208687 + timestamp: 1727279378819 - kind: conda name: libxcrypt version: 4.4.36 @@ -3349,26 +3413,6 @@ packages: purls: [] size: 588990 timestamp: 1721031045514 -- kind: conda - name: libxml2 - version: 2.12.7 - build: h0f24e4e_4 - build_number: 4 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda - sha256: ae78197961b09b0eef4ee194a44e4adc4555c0f2f20c348086b0cd8aaf2f7731 - md5: ed4d301f0d2149b34deb9c4fecafd836 - depends: - - libiconv >=1.17,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 1682090 - timestamp: 1721031296951 - kind: conda name: libxml2 version: 2.12.7 @@ -3662,14 +3706,13 @@ packages: requires_python: '>=3.9' - kind: conda name: meson - version: 1.5.1 - build: pyhd8ed1ab_1 - build_number: 1 + version: 1.5.2 + build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.1-pyhd8ed1ab_1.conda - sha256: c7931432d4987face4c587956b6328126ee53056abccb5fdcb562cc3f60188d9 - md5: 979087ee59bea1355f991a3b738af64e + url: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda + sha256: 8b6aa1ee7a7aaa6073d528b3cc1731cc1c06e8f93788bb753851b4ef596619b5 + md5: 9e677e9cfb20529c3db797105cca1cf9 depends: - ninja >=1.8.2 - python >=3.7 @@ -3678,8 +3721,8 @@ packages: license_family: APACHE purls: - pkg:pypi/meson?source=hash-mapping - size: 650726 - timestamp: 1722578284258 + size: 652094 + timestamp: 1726902724563 - kind: conda name: meson-python version: 0.16.0 @@ -4428,20 +4471,23 @@ packages: size: 499530 timestamp: 1725737996873 - kind: conda - name: pthreads-win32 - version: 2.9.1 - build: hfa6e2cd_3 - build_number: 3 + name: pthread-stubs + version: '0.4' + build: h0e40799_1002 + build_number: 1002 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - sha256: 576a228630a72f25d255a5e345e5f10878e153221a96560f2498040cd6f54005 - md5: e2da8758d7d51ff6aa78a14dfb9dbed4 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b + md5: 3c8f2573569bb816483e5cf57efbbe29 depends: - - vc 14.* - license: LGPL 2 + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT purls: [] - size: 144301 - timestamp: 1537755684331 + size: 9389 + timestamp: 1726802555076 - kind: conda name: pycodestyle version: 2.12.1 @@ -4559,26 +4605,22 @@ packages: timestamp: 1711411153367 - kind: conda name: python - version: 3.12.5 - build: h2ad013b_0_cpython - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda - sha256: e2aad83838988725d4ffba4e9717b9328054fd18a668cff3377e0c50f109e8bd - md5: 9c56c4df45f6571b13111d8df2448692 + version: 3.12.6 + build: h739c21a_1_cpython + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_1_cpython.conda + sha256: 99e0b806062b2a4be3016d9a6d253d85e25b5f9ee6bebe442dec6fd6759288f3 + md5: 5beefd0212cdea661f999f0ec29a2e3a depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.6.2,<3.0a0 + - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 - - libgcc-ng >=12 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.46.0,<4.0a0 - - libuuid >=2.38.1,<3.0a0 - - libxcrypt >=4.4.36 + - libsqlite >=3.46.1,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.3.1,<4.0a0 + - openssl >=3.3.2,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -4587,25 +4629,26 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 31663253 - timestamp: 1723143721353 + size: 12852860 + timestamp: 1727014294263 - kind: conda name: python - version: 3.12.5 - build: h37a9e06_0_cpython + version: 3.12.6 + build: h8f8b54e_1_cpython + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.5-h37a9e06_0_cpython.conda - sha256: c0f39e625b2fd65f70a9cc086fe4b25cc72228453dbbcd92cd5d140d080e38c5 - md5: 517cb4e16466f8d96ba2a72897d14c48 + url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.6-h8f8b54e_1_cpython.conda + sha256: 070ec2aa33efd0590038e72ba4feae40b58e43ea2f550f96b344c52e5c5e361e + md5: 2627fbdbd524916e069afe9b38c61829 depends: - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.2,<3.0a0 + - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 - - libsqlite >=3.46.0,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.3.1,<4.0a0 + - openssl >=3.3.2,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -4614,62 +4657,70 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 12173272 - timestamp: 1723142761765 + size: 13635266 + timestamp: 1727015003612 - kind: conda name: python - version: 3.12.5 - build: h889d299_0_cpython - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.5-h889d299_0_cpython.conda - sha256: 4cef304eb8877fd3094c14b57097ccc1b817b4afbf2223dd45d2b61e44064740 - md5: db056d8b140ab2edd56a2f9bdb203dcd + version: 3.12.6 + build: hc5c86c4_1_cpython + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_1_cpython.conda + sha256: abae02ac635147181e6b7d4b3c8fde89d298d354ed23576853b86bc1384c50f6 + md5: 00836baacdca254f28c54d2543e97514 depends: + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.2,<3.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 - - libsqlite >=3.46.0,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.1,<4.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 15897752 - timestamp: 1723141830317 + size: 31530161 + timestamp: 1727016402403 - kind: conda name: python version: 3.12.6 - build: h739c21a_0_cpython - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_0_cpython.conda - sha256: 7dc75f4a7f800426e39ba219a1202c00b002cd0c792e34e077d3d7c145ef0199 - md5: 1d0f564edfc8121b35a4dc2d25b62863 + build: hce54a09_1_cpython + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_1_cpython.conda + sha256: 67229f7478e6236dcb8a2f5ea2381b865f98728c78fd3b7df2e5288af06d095e + md5: e4b36ee40840b50ef52c5071a3586812 depends: - - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 - libsqlite >=3.46.1,<4.0a0 - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - openssl >=3.3.2,<4.0a0 - - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xorg-libx11 >=1.8.9,<2.0a0 - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 12877861 - timestamp: 1726030796871 + size: 15862400 + timestamp: 1727014062724 - kind: conda name: python-build version: 1.2.2 @@ -4830,12 +4881,12 @@ packages: requires_python: '>=3.8' - kind: conda name: ruff - version: 0.6.5 + version: 0.6.8 build: py312h42f095d_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.5-py312h42f095d_0.conda - sha256: 9689cce1fe308e885bfa0151821bfb48a49efaf871b356d3921346b43691a879 - md5: 4f0601e870f7e784ce080ba670af51bc + url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.8-py312h42f095d_0.conda + sha256: 9213f51d22d30debcee2d86c56f416d24402e989d5acc8aeefbe36ed8d674332 + md5: 609ab65bbb1622c933298f90a16b3d6c depends: - __osx >=11.0 - libcxx >=17 @@ -4848,16 +4899,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6000368 - timestamp: 1726264270948 + size: 6335176 + timestamp: 1727405062904 - kind: conda name: ruff - version: 0.6.5 + version: 0.6.8 build: py312h881003e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.5-py312h881003e_0.conda - sha256: 60385e00c5cb4c1b2b078f9cc6fd25cd211bf6aca2d3cfe0e31fe4b804847f16 - md5: e894013a377088053f0766a4756d518d + url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.8-py312h881003e_0.conda + sha256: ee81b6168c1442dcddab4eaaa43af058aa27efcddde8aff67874be8ad78d5008 + md5: e4a8371b880d5081d7cc896df222cd64 depends: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -4868,16 +4919,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6464864 - timestamp: 1726265070323 + size: 6852016 + timestamp: 1727406055615 - kind: conda name: ruff - version: 0.6.5 + version: 0.6.8 build: py312hd18ad41_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.5-py312hd18ad41_0.conda - sha256: 6d9f5eb9be06bf63549a82d62ad36d2dc782f9854b863c0283ca7d6e1999e141 - md5: 1ac542f83e32fbc3da3c765cc2e61ba5 + url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.8-py312hd18ad41_0.conda + sha256: cfd18f05062fe4b48a1b6e4f93d6d9335fdd7d294a0041f1a61b9dbee59a25e7 + md5: 6e054c0520dcc182c129617d821364e2 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4888,16 +4939,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6557268 - timestamp: 1726264191478 + size: 6938416 + timestamp: 1727404839725 - kind: conda name: ruff - version: 0.6.5 + version: 0.6.8 build: py312he6c0bb9_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.5-py312he6c0bb9_0.conda - sha256: a0d83deaf7d7caed630f9c0ef11f0873c953ca77039b9e02c2eadc964358fb8c - md5: b28ee0fd66b5dd869a3279b26926625e + url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.8-py312he6c0bb9_0.conda + sha256: 4c150a4a85b36cc071120d78d64279938873360a9ab518297379337b06e9bb6e + md5: d0137bde3524b64af752ceca56d693e8 depends: - __osx >=10.13 - libcxx >=17 @@ -4909,8 +4960,8 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6337919 - timestamp: 1726264087517 + size: 6692590 + timestamp: 1727404886046 - kind: conda name: scikit-learn version: 1.5.2 @@ -5124,21 +5175,21 @@ packages: timestamp: 1724328538557 - kind: conda name: setuptools - version: 74.1.2 + version: 75.1.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-74.1.2-pyhd8ed1ab_0.conda - sha256: 71a4603248167bacc0aa985697a93aff62f6bcf008edaece09e79e83e43a7e22 - md5: 56c9c11d004428e81d02eeb730fc6336 + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f depends: - python >=3.8 license: MIT license_family: MIT purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 784583 - timestamp: 1726752322559 + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 - kind: conda name: sigtool version: 0.1.3 @@ -5405,22 +5456,21 @@ packages: timestamp: 1725491044729 - kind: conda name: tbb - version: 2021.13.0 - build: hc790b64_0 + version: 2021.7.0 + build: h91493d7_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda - sha256: 990dbe4fb42f14700c22bd434d8312607bf8d0bd9f922b054e51fda14c41994c - md5: 28496a1e6af43c63927da4f80260348d + url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.7.0-h91493d7_0.tar.bz2 + sha256: c3d607499a6e097f4b8b27048ee7166319fd3dfe98aea9e69a69a3d087b986e3 + md5: f57be598137919e4f7e7d159960d66a1 depends: - - libhwloc >=2.11.1,<2.11.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vs2015_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE purls: [] - size: 151494 - timestamp: 1725532984828 + size: 178574 + timestamp: 1668617991077 - kind: conda name: threadpoolctl version: 3.5.0 @@ -5616,12 +5666,12 @@ packages: requires_python: '>=3.8' - kind: conda name: uv - version: 0.4.12 + version: 0.4.17 build: h032dd4e_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.12-h032dd4e_0.conda - sha256: dff85c7e3aa6b93e7cca3757f6264752b21f11e9c4ed3ca47f05f7552eb85de6 - md5: 9a9b6f6d4acc32969b03ba5688c01635 + url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.17-h032dd4e_0.conda + sha256: 786068d895e18d7b8ad473c95e716da578cbed20a8325d91b9c62faf5eb4acd8 + md5: 9aa9f5bb28984b28d9197c30f4c1f9f1 depends: - __osx >=10.13 - libcxx >=17 @@ -5629,16 +5679,16 @@ packages: - __osx >=10.13 license: Apache-2.0 OR MIT purls: [] - size: 8380579 - timestamp: 1726691304456 + size: 8512317 + timestamp: 1727511290800 - kind: conda name: uv - version: 0.4.12 + version: 0.4.17 build: h0f3a69f_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.12-h0f3a69f_0.conda - sha256: 60c7532d8614f381c032a2bcbea90cdf321622bf851a6596ad0a6e7394358530 - md5: 0165cb4468c6a1789c761318649237f8 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.17-h0f3a69f_0.conda + sha256: 7dfe9427e45962e3a5f38e40d58ad11d37581a840f1c8c2b00f8c88e251b2d0f + md5: 266eba4e5528849f6c00327d2f15a700 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5647,32 +5697,32 @@ packages: - __glibc >=2.17 license: Apache-2.0 OR MIT purls: [] - size: 8708824 - timestamp: 1726690545270 + size: 8830126 + timestamp: 1727510461005 - kind: conda name: uv - version: 0.4.12 + version: 0.4.17 build: ha08ef0e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.12-ha08ef0e_0.conda - sha256: a6622c77f6681a991f6b99b5f28ca4b6714bd040eeaf7e17edf461133d8c8cb9 - md5: 510372a1cb003b81a332f8bda54778a7 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.17-ha08ef0e_0.conda + sha256: 49710a8689af5fb56acfb88ace04bae4faa24d3aca146e414fa5ad263282398a + md5: ecd658017ecc8c843b766f210d3346fd depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 OR MIT purls: [] - size: 9117409 - timestamp: 1726691831519 + size: 9551146 + timestamp: 1727511731459 - kind: conda name: uv - version: 0.4.12 + version: 0.4.17 build: hd3a8144_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.12-hd3a8144_0.conda - sha256: 33de8782f870f99e62d8fe1c7361b848bc4e1ba228ec9e69429c536c47d4e78d - md5: b3f0ce23fb6a06756bfdb24b6bb5ca06 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.17-hd3a8144_0.conda + sha256: d61aaff39fd3e78a740f0cf9927c8213e5d96bdb4f954f13d24f966934c0c118 + md5: ba0fd56a0da38b6aa0beb6a88b76f7c7 depends: - __osx >=11.0 - libcxx >=17 @@ -5680,8 +5730,8 @@ packages: - __osx >=11.0 license: Apache-2.0 OR MIT purls: [] - size: 7668214 - timestamp: 1726691530442 + size: 7766138 + timestamp: 1727511043695 - kind: conda name: vc version: '14.3' @@ -5734,6 +5784,79 @@ packages: purls: [] size: 17241 timestamp: 1725984096440 +- kind: conda + name: xorg-libx11 + version: 1.8.10 + build: hf48077a_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.10-hf48077a_0.conda + sha256: d1d6d2b5d33c35a39f7efacc3d2bc84332f0592d5435628dae89207bddeeaf5e + md5: 97e52b3d384cc7d3be4873bec28f050e + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libxcb >=1.17.0,<2.0a0 + - ucrt >=10.0.20348.0 + - xorg-xorgproto + license: MIT + license_family: MIT + purls: [] + size: 952088 + timestamp: 1727357732462 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h0e40799_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-h0e40799_1.conda + sha256: f44bc6f568a9697b7e1eadc2d00ef5de0fe62efcf5e27e5ecc46f81046082faf + md5: ca66d6f8fe86dd53664e8de5087ef6b1 + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 107925 + timestamp: 1727035280560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: h0e40799_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-h0e40799_1.conda + sha256: 2e443245efe814665938f4f636f56bb157943a01438db7b430f3804bc3d2b14e + md5: 05ee420ec4b42aaafddb5ff495bb724a + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 69635 + timestamp: 1727100170719 +- kind: conda + name: xorg-xorgproto + version: '2024.1' + build: h0e40799_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-xorgproto-2024.1-h0e40799_1.conda + sha256: 78a7211266821fd98c4a250f28dac7f8a6abbf8bff339990c6969d8d0712f11d + md5: de202fa8beaa5f5d4a085a82913143cd + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 569140 + timestamp: 1726846656126 - kind: conda name: xz version: 5.2.6 diff --git a/pyproject.toml b/pyproject.toml index 3ed3428..4dc37a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,6 +81,7 @@ cython = ">=3.0.10,<3.1" scikit-learn = ">=1.5.0,<1.6" [tool.pixi.dependencies] +python = ">=3.12.0,<3.13" scikit-learn = ">=1.5.0,<1.6" [tool.pixi.tasks] diff --git a/tests/test_ols.py b/tests/test_ols.py new file mode 100644 index 0000000..544776a --- /dev/null +++ b/tests/test_ols.py @@ -0,0 +1,24 @@ +"Test ols" + +import numpy as np +from numpy.testing import assert_almost_equal +from sklearn.linear_model import LinearRegression + +from fastcan import ols + + +def test_sum_errs(): + """Test multiple correlation.""" + rng = np.random.default_rng(12345) + X = rng.random((100, 10)) + y = rng.random(100) + + indices, scores = ols(X, y, 5) + + y_hat = LinearRegression(fit_intercept=False)\ + .fit(X[:, indices], y)\ + .predict(X[:, indices]) + e = y-y_hat + # Sum of Error Reduction Ratio + serrs = 1 - np.dot(e, e)/np.dot(y, y) + assert_almost_equal(actual=scores.sum(), desired=serrs) From 06d2f2345e29a70de66c355e1a64a7b8dfbc1ec6 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:03:40 +0800 Subject: [PATCH 5/7] DOC add plot_affinity --- doc/ols_and_omp.rst | 22 +- examples/plot_affinity.py | 105 +++ examples/plot_ols_omp.py | 16 - examples/plot_redundancy.py | 10 +- examples/plot_speed.py | 6 +- fastcan/__init__.py | 2 +- fastcan/_utils.py | 8 +- pixi.lock | 1202 ++++++++++++++++------------------- 8 files changed, 668 insertions(+), 703 deletions(-) create mode 100644 examples/plot_affinity.py delete mode 100644 examples/plot_ols_omp.py diff --git a/doc/ols_and_omp.rst b/doc/ols_and_omp.rst index 7108ca2..b4015bc 100644 --- a/doc/ols_and_omp.rst +++ b/doc/ols_and_omp.rst @@ -14,28 +14,30 @@ Here, let's briefly compare the three methods. Assume we have a feature matrix :math:`X_s \in \mathbb{R}^{N\times t}`, which constains :math:`t` selected features, and a target vector :math:`y \in \mathbb{R}^{N\times 1}`. -Then the residual :math:`r` of the least-squares can be found by +Then the residual :math:`r \in \mathbb{R}^{N\times 1}` of the least-squares can be +found by .. math:: r = y - X_s \beta \;\; \text{where} \;\; \beta = (X_s^\top X_s)^{-1}X_s^\top y -When evaluating a new feature :math:`x_i` +When evaluating a new candidate feature :math:`x_i \in \mathbb{R}^{N\times 1}` -* for OMP, the feature which maximizes :math:`r^\top x_i` will be selected +* for OMP, the feature which maximizes :math:`r^\top x_i` will be selected, * for OLS, the feature which maximizes :math:`r^\top w_i` will be selected, where - :math:`w_i` is the projection of :math:`x_i` on the orthogonal subspace so that it is - orthogonal to :math:`X_s`, i.e., :math:`X_s^\top w_i = \mathbf{0} \in \mathbb{R}^{N}` + :math:`w_i \in \mathbb{R}^{N\times 1}` is the projection of :math:`x_i` on the + orthogonal subspace so that it is orthogonal to :math:`X_s`, i.e., + :math:`X_s^\top w_i = \mathbf{0} \in \mathbb{R}^{t\times 1}`, * for :class:`FastCan` (h-correlation algorithm), it is almost same as OLS, but the difference is that in :class:`FastCan`, :math:`X_s`, :math:`y`, and :math:`x_i` are centered (i.e., zero mean in each column) before the selection. -The small change makes the feature ranking criterion of :class:`FastCan` is equivalent -to the sum of squared canonical correlation coefficients, which gives it the following -advantages over OLS and OMP: +The small difference makes the feature ranking criterion of :class:`FastCan` is +equivalent to the sum of squared canonical correlation coefficients, which gives +it the following advantages over OLS and OMP: -* Affine invariant: if features are polluted by affine transformation, i.e., scaled +* Affine invariance: if features are polluted by affine transformation, i.e., scaled and/or added some constants, the selection result given by :class:`FastCan` will be - unchanged. + unchanged. See :ref:`sphx_glr_auto_examples_plot_affinity.py`. * Multioutput: as :class:`FastCan` use canonical correlation for feature ranking, it is naturally support feature seleciton on dataset with multioutput. diff --git a/examples/plot_affinity.py b/examples/plot_affinity.py new file mode 100644 index 0000000..694b563 --- /dev/null +++ b/examples/plot_affinity.py @@ -0,0 +1,105 @@ +""" +================= +Affine Invariance +================= + +.. currentmodule:: fastcan + +In this examples, we will compare the robustness of the three feature +selection methods on affine transformed features. +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Initialize test +# --------------- +# The three feature selection methods, i.e., OMP, OLS, and :class:`FastCan`, +# will select three features from the 10 features of `diabetes` dataset. It can be +# seen, the three methods select the same features. + +import numpy as np +from sklearn.datasets import load_diabetes +from sklearn.linear_model import OrthogonalMatchingPursuit + +from fastcan import FastCan, ols + +X, y = load_diabetes(return_X_y=True) + +n_selected = 3 +omp_selector = OrthogonalMatchingPursuit(n_nonzero_coefs=n_selected) +fastcan_selector = FastCan(n_features_to_select=n_selected, verbose=0) +(ids_omp,) = omp_selector.fit(X, y).coef_.nonzero() +ids_ols, _ = ols(X, y, n_selected) +ids_fastcan = fastcan_selector.fit(X, y).indices_ + +print("Indices of features selected by:") +print("OMP: ", np.sort(ids_omp)) +print("OLS: ", np.sort(ids_ols)) +print("FastCan: ", np.sort(ids_fastcan)) + + + +# %% +# Affine transformation +# --------------------- +# In this test, the 10 features of ``diabetes`` dataset will be randomly polluted +# by the affine transformation. The three feature selection methods will select +# three features from the polluted features. The more stable the result, the better. + + + +n_features = X.shape[1] +rng = np.random.default_rng() + +ids_omp_all = [] +ids_ols_all = [] +ids_fastcan_all = [] +for i in range(10): + X_affine = X @ np.diag(rng.random(n_features)) + rng.random(n_features) + + (ids_omp,) = omp_selector.fit(X_affine, y).coef_.nonzero() + ids_ols, _ = ols(X_affine, y, n_selected) + ids_fastcan = fastcan_selector.fit(X_affine, y).indices_ + ids_omp_all += ids_omp.tolist() + ids_ols_all += ids_ols.tolist() + ids_fastcan_all += ids_fastcan.tolist() + +# %% +# Plot results +# ------------ +# It can be seen, only :class:`FastCan` has robust results when the feature +# is polluted by the affine transformation. + +import matplotlib.pyplot as plt + +bin_lims = np.arange(n_features+1) +counts_omp, _ = np.histogram(ids_omp_all, bins=bin_lims) +counts_ols, _ = np.histogram(ids_ols_all, bins=bin_lims) +counts_fastcan, _ = np.histogram(ids_fastcan_all, bins=bin_lims) + +fig, axs = plt.subplots(1, 3, figsize=(8, 3)) + +axs[0].bar(bin_lims[:-1], counts_omp) +axs[0].set_xticks(bin_lims[:-1]) +axs[0].set_ylim((0, 11)) +axs[0].set_title("OMP") +axs[0].set_xlabel("Feature Index") +axs[0].set_ylabel("Count of Selected Times") + + +axs[1].bar(bin_lims[:-1], counts_ols) +axs[1].set_xticks(bin_lims[:-1]) +axs[1].set_ylim((0, 11)) +axs[1].set_title("OLS") +axs[1].set_xlabel("Feature Index") + +axs[2].bar(bin_lims[:-1], counts_fastcan) +axs[2].set_xticks(bin_lims[:-1]) +axs[2].set_ylim((0, 11)) +axs[2].set_title("FastCan") +axs[2].set_xlabel("Feature Index") + +plt.tight_layout() +plt.show() diff --git a/examples/plot_ols_omp.py b/examples/plot_ols_omp.py deleted file mode 100644 index a61f1be..0000000 --- a/examples/plot_ols_omp.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -====================================================== -FastCan VS. OLS VS. OMP on Affine Transformed Features -====================================================== - -In this examples, we will compare the robustness of the three feature -selection methods on affine transformed features. -""" - -# Authors: Sikai Zhang -# SPDX-License-Identifier: MIT - -# %% -# Define OLS -# ---------- - diff --git a/examples/plot_redundancy.py b/examples/plot_redundancy.py index 879fb55..deebde3 100644 --- a/examples/plot_redundancy.py +++ b/examples/plot_redundancy.py @@ -3,6 +3,8 @@ Feature selection performance on redundant features =================================================== +.. currentmodule:: fastcan + In this examples, we will compare the performance of feature selectors on the datasets, which contain redundant features. Here four types of features should be distinguished: @@ -88,7 +90,7 @@ def make_redundant( # --------------------- # This function is used to compute the number of correct features missed by selectors. # -# * For independent informative features, selectors should select all of them +# * For independent informative features, selectors should select all of them. # * For dependent informative features, selectors only need to select any # ``n_dep_info``-combination of the set ``dep_info_ids`` + ``redundant_ids``. That # means if the indices of dependent informative features are :math:`[0, 1]` and the @@ -114,13 +116,13 @@ def get_n_missed( # %% # Prepare selectors # ----------------- -# We compare :class:`fastcan.FastCan` with eight selectors of :mod:`sklearn`, which +# We compare :class:`FastCan` with eight selectors of :mod:`sklearn`, which # include the Select From a Model (SFM) algorithm, the Recursive Feature Elimination # (RFE) algorithm, the Sequential Feature Selection (SFS) algorithm, and Select K Best # (SKB) algorithm. # The list of the selectors are given below: # -# * fastcan: :class:`fastcan.FastCan` selector +# * fastcan: :class:`FastCan` selector # * skb_reg: is the SKB algorithm ranking features with ANOVA (analysis of variance) # F-statistic and p-values # * skb_mir: is the SKB algorithm ranking features mutual information for regression @@ -197,7 +199,7 @@ def get_n_missed( # %% # Plot results # ------------ -# :class:`fastcan.FastCan` correctly selects all informative features with zero missed +# :class:`FastCan` correctly selects all informative features with zero missed # features. import matplotlib.pyplot as plt diff --git a/examples/plot_speed.py b/examples/plot_speed.py index b53a495..1b2a05e 100644 --- a/examples/plot_speed.py +++ b/examples/plot_speed.py @@ -3,9 +3,11 @@ Computational speed comparison ============================== +.. currentmodule:: fastcan + In this examples, we will compare the computational speed of three different feature -selection methods: h-correlation based :class:`fastcan.FastCan`, eta-cosine based -:class:`fastcan.FastCan`, and baseline model based on +selection methods: h-correlation based :class:`FastCan`, eta-cosine based +:class:`FastCan`, and baseline model based on ``sklearn.cross_decomposition.CCA``. """ diff --git a/fastcan/__init__.py b/fastcan/__init__.py index 37a0ce7..7f5b080 100644 --- a/fastcan/__init__.py +++ b/fastcan/__init__.py @@ -3,7 +3,7 @@ """ from ._fastcan import FastCan -from ._utils import ssc, ols +from ._utils import ols, ssc __all__ = [ "FastCan", diff --git a/fastcan/_utils.py b/fastcan/_utils.py index 23905cf..27b9174 100644 --- a/fastcan/_utils.py +++ b/fastcan/_utils.py @@ -81,9 +81,7 @@ def ols(X, y, t=1): The scores of selected features. The order of the scores is corresponding to the feature selection process. """ - X, y = check_X_y( - X, y, dtype=float, ensure_2d=True - ) + X, y = check_X_y(X, y, dtype=float, ensure_2d=True) n_features = X.shape[1] w = X / np.linalg.norm(X, axis=0) v = y / np.linalg.norm(y) @@ -100,11 +98,11 @@ def ols(X, y, t=1): d = np.argmax(r2) indices[i] = d scores[i] = r2[d] - if i == t-1: + if i == t - 1: return indices, scores mask[d] = True r2[d] = 0 for j in range(n_features): if not mask[j]: - w[:, j] = w[:, j] - w[:, d]*(w[:, d] @ w[:, j]) + w[:, j] = w[:, j] - w[:, d] * (w[:, d] @ w[:, j]) w[:, j] /= np.linalg.norm(w[:, j], axis=0) diff --git a/pixi.lock b/pixi.lock index 2fee342..30e0857 100644 --- a/pixi.lock +++ b/pixi.lock @@ -9,7 +9,7 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.8.0-py312h7900ff3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda @@ -40,14 +40,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.11.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.12.1-h297d8ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.1-py312h58c1407_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.2-py312h58c1407_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda @@ -55,15 +55,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.0.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.1-pyh2cfa8aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyh7850678_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2.post1-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.8-py312hd18ad41_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.9-py312hd18ad41_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.5.2-py312h7a48858_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h7d485d2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda @@ -71,17 +71,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.17-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.20-h0f3a69f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl @@ -91,7 +91,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0a/0d/2454f072fae3b5a137c119abf15465d1771319dfe9e4acbb31722a0fff91/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/6e/1b8070bbfc467429c7983cd5ffd4ec57e1d501763d974c7caaa0a9a79f4c/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl @@ -104,7 +104,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -114,7 +114,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - pypi: . osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.8.0-py312hb401068_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.8.0-hb714fc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda @@ -122,11 +122,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1010.6-h98e843e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17-17.0.6-default_hb173f14_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17.0.6-default_he371ed4_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-17.0.6-default_he371ed4_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_20.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-17.0.6-h1020d70_2.conda @@ -152,7 +152,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp17-17.0.6-default_hb173f14_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.0-hf95d169_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.1-hf95d169_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-devel-17.0.6-h8f8a49f_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.3-hac325c4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 @@ -165,8 +165,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.27-openmp_h8869122_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-heaf3512_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-18.1.8-h15ab845_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.1-h545e0da_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-17.0.6-hbedff68_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda @@ -176,7 +176,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.12.1-h3c5361c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.1-py312he4d506f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.2-py312he4d506f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda @@ -184,15 +184,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-6.0.0-py312hb553811_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.1-pyh2cfa8aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyh7850678_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.6-h8f8b54e_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.7-h8f8b54e_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2.post1-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.8-py312he6c0bb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.9-py312he6c0bb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.5.2-py312h9d777eb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py312he82a568_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda @@ -202,19 +202,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.17-h032dd4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.20-h032dd4e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-h87427d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl @@ -224,7 +224,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/d6/e7cd795fc710292c3af3a06d80868ce4b02bfbbf370b7cee11d282815a2a/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/45/6d/72ed58d42a12bd9fc288dbff6dd8d03ea973a232ac0538d7f88d105b5251/MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl @@ -237,7 +237,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -247,7 +247,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - pypi: . osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.8.0-py312h81bd7bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.10.0-py312h81bd7bf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.8.0-h2664225_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda @@ -255,11 +255,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1010.6-h4208deb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17-17.0.6-default_h146c034_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17.0.6-default_h360f5da_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-17.0.6-default_h360f5da_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_20.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-17.0.6-h856b3c1_2.conda @@ -285,7 +285,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp17-17.0.6-default_h146c034_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.1-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-17.0.6-h86353a2_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 @@ -298,8 +298,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h01dff8b_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.1-h6cdba0f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-17.0.6-h5090b49_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda @@ -309,7 +309,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.12.1-h420ef59_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.1-py312h801f5e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.2-py312h801f5e3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda @@ -317,15 +317,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.0.0-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.1-pyh2cfa8aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyh7850678_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2.post1-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.8-py312h42f095d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.9-py312h42f095d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.5.2-py312h387f99c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py312heb3a901_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda @@ -335,19 +335,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.17-hd3a8144_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.20-hd3a8144_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-hfb2fe0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl @@ -357,7 +357,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/86/f5/241238f89cdd6461ac9f521af8389f9a48fab97e4f315c69e9e0d52bc919/MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl @@ -370,7 +370,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -380,8 +380,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - pypi: . win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.8.0-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.10.0-py312h2e8e312_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda @@ -398,63 +397,58 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-14.1.0-h1383e82_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-14.1.0-h1383e82_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-1.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/meson-python-0.16.0-pyh0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.1.0-h66d3029_694.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.11.2-py312h4389bb4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.12.1-hc790b64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.1-py312h49bc9c5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312h49bc9c5_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-6.0.0-py312h4389bb4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.1-pyh2cfa8aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyh7850678_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2.post1-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.8-py312h881003e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.9-py312h881003e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.5.2-py312h816cc57_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py312h1f4e10d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.7.0-h91493d7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tokenize-rt-6.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.17-ha08ef0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_21.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_21.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_21.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.10-hf48077a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-h0e40799_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-h0e40799_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-xorgproto-2024.1-h0e40799_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.20-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl @@ -464,7 +458,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/eb/24/a36dc37365bdd358b1e583cc40475593e36ab02cb7da6b3d0b9c05b0da7a/MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl @@ -477,7 +471,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl @@ -518,26 +512,6 @@ packages: purls: [] size: 23621 timestamp: 1650670423406 -- kind: conda - name: _openmp_mutex - version: '4.5' - build: 2_gnu - build_number: 8 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d - md5: 37e16618af5c4851a3f3d66dd0e11141 - depends: - - libgomp >=7.5.0 - - libwinpthread >=12.0.0.r2.ggc561118da - constrains: - - openmp_impl 9999 - - msys2-conda-epoch <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 49468 - timestamp: 1718213032772 - kind: pypi name: alabaster version: 1.0.0 @@ -570,13 +544,12 @@ packages: requires_python: '>=3.6.0' - kind: conda name: black - version: 24.8.0 - build: py312h2e8e312_1 - build_number: 1 + version: 24.10.0 + build: py312h2e8e312_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/black-24.8.0-py312h2e8e312_1.conda - sha256: 54a60a2a352fda5d14e456b731cbb6c7bc5c262949c0c751b120cab3cc827334 - md5: 189c8f8d4ec05fd8dd1bb6c8de214128 + url: https://conda.anaconda.org/conda-forge/win-64/black-24.10.0-py312h2e8e312_0.conda + sha256: 64df9c7e1454386b5ec763e82a40062b47e80700b1bc556878b7aa7b659c3ae1 + md5: 6e943a224409da3599a8ec52944e3c15 depends: - click >=8.0.0 - mypy_extensions >=0.4.3 @@ -589,17 +562,16 @@ packages: license_family: MIT purls: - pkg:pypi/black?source=hash-mapping - size: 415469 - timestamp: 1726155744531 + size: 417913 + timestamp: 1728504045145 - kind: conda name: black - version: 24.8.0 - build: py312h7900ff3_1 - build_number: 1 + version: 24.10.0 + build: py312h7900ff3_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/black-24.8.0-py312h7900ff3_1.conda - sha256: 2d266690fd2905057260761e1676d57951f49b731b1a1ccc8c3be05209339d87 - md5: ca45d7cae24f21605df3c77c94aa2029 + url: https://conda.anaconda.org/conda-forge/linux-64/black-24.10.0-py312h7900ff3_0.conda + sha256: 2b4344d18328b3e8fd9b5356f4ee15556779766db8cb21ecf2ff818809773df6 + md5: 2daba153b913b1b901cf61440ad5e019 depends: - click >=8.0.0 - mypy_extensions >=0.4.3 @@ -612,17 +584,16 @@ packages: license_family: MIT purls: - pkg:pypi/black?source=hash-mapping - size: 389443 - timestamp: 1726154946669 + size: 390571 + timestamp: 1728503839694 - kind: conda name: black - version: 24.8.0 - build: py312h81bd7bf_1 - build_number: 1 + version: 24.10.0 + build: py312h81bd7bf_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.8.0-py312h81bd7bf_1.conda - sha256: 6e8c4d8ef214dabd93573de95a0e84d3e0c738767f2ebc9f36feaa6b7c3652b1 - md5: 558110e79317ee24824e80b65f5c11dc + url: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.10.0-py312h81bd7bf_0.conda + sha256: 7e0cd77935e68717506469463546365637abf3f73aa597a890cb5f5ef3c75caf + md5: 702d7bf6d22135d3e30811ed9c62bb07 depends: - click >=8.0.0 - mypy_extensions >=0.4.3 @@ -636,17 +607,16 @@ packages: license_family: MIT purls: - pkg:pypi/black?source=hash-mapping - size: 391176 - timestamp: 1726155231781 + size: 392801 + timestamp: 1728503954904 - kind: conda name: black - version: 24.8.0 - build: py312hb401068_1 - build_number: 1 + version: 24.10.0 + build: py312hb401068_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/black-24.8.0-py312hb401068_1.conda - sha256: 726d50fb996463d5da72d8d8729ea1a8eee215a24b23038382b17578e48c8939 - md5: 36df523298f9f2ea46f06ddd8f3d4553 + url: https://conda.anaconda.org/conda-forge/osx-64/black-24.10.0-py312hb401068_0.conda + sha256: a1397d32f6d40ff19107bab8c1570f3934ad91a601d1d973b129eabe08b943e6 + md5: e832f4c2afb84e85718008b600944bc0 depends: - click >=8.0.0 - mypy_extensions >=0.4.3 @@ -659,8 +629,8 @@ packages: license_family: MIT purls: - pkg:pypi/black?source=hash-mapping - size: 391785 - timestamp: 1726154996308 + size: 393514 + timestamp: 1728503944080 - kind: conda name: bzip2 version: 1.0.8 @@ -908,27 +878,27 @@ packages: requires_python: '>=3.6' - kind: pypi name: charset-normalizer - version: 3.3.2 - url: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl - sha256: ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b + version: 3.4.0 + url: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer - version: 3.3.2 - url: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 + version: 3.4.0 + url: https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl + sha256: b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer - version: 3.3.2 - url: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl - sha256: 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 + version: 3.4.0 + url: https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl + sha256: de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer - version: 3.3.2 - url: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b + version: 3.4.0 + url: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db requires_python: '>=3.7.0' - kind: conda name: clang @@ -1013,12 +983,12 @@ packages: - kind: conda name: clang_impl_osx-64 version: 17.0.6 - build: h1af8efd_19 - build_number: 19 + build: h1af8efd_20 + build_number: 20 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_19.conda - sha256: 0ecf59b98af464584ce2b87db0fcf8f824a83ae500d2a1dd9b0f0239ec8d7bb0 - md5: 259772eca66f37161379f078ace329e5 + url: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_20.conda + sha256: 0d03b332bc4ea0434c49629089b75d7e936afedc512209c64422b77e347dd813 + md5: 283c3bd01a1c0bffdc05b741bcbed741 depends: - cctools_osx-64 - clang 17.0.6.* @@ -1028,17 +998,17 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17629 - timestamp: 1723069315571 + size: 17537 + timestamp: 1728518728460 - kind: conda name: clang_impl_osx-arm64 version: 17.0.6 - build: he47c785_19 - build_number: 19 + build: he47c785_20 + build_number: 20 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_19.conda - sha256: 2d9c4ead38fc8e90ece918c955bc66db2113a33110a18a588a7deacd057ae18e - md5: 2028783cbf7f9f143dbd722c25334f19 + url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_20.conda + sha256: dfce90c41972777e3014feb4dfcc08fbd23c7a3b89999d39cefc8bd186ee0eb4 + md5: 07260cfe5d46c5b70906f2366c4fad6b depends: - cctools_osx-arm64 - clang 17.0.6.* @@ -1048,40 +1018,40 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17654 - timestamp: 1723069366336 + size: 17744 + timestamp: 1728518774810 - kind: conda name: clang_osx-64 version: 17.0.6 - build: hb91bd55_19 - build_number: 19 + build: hb91bd55_20 + build_number: 20 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_19.conda - sha256: a9a51b57baff32ac86e3a30246a23f806d42f6b78716e62735ef44bf18646a07 - md5: 687f001448d6a4dc367e62f934fb4afe + url: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_20.conda + sha256: 515c94b9c9b4e8e288f843e1d4a8ecf82da7df853551528b36c2963896204f61 + md5: d432db8ffafb3e44e3fb72f892a38329 depends: - - clang_impl_osx-64 17.0.6 h1af8efd_19 + - clang_impl_osx-64 17.0.6 h1af8efd_20 license: BSD-3-Clause license_family: BSD purls: [] - size: 20585 - timestamp: 1723069320351 + size: 20650 + timestamp: 1728518733637 - kind: conda name: clang_osx-arm64 version: 17.0.6 - build: h54d7cd3_19 - build_number: 19 + build: h54d7cd3_20 + build_number: 20 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_19.conda - sha256: d1e7816ec7556c9ab394be1a96c6dc79f95343aa2b8ac1e8154d159c6aff6421 - md5: 4ae0c578b289aa46bd19ee955dabef15 + url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_20.conda + sha256: 7cbf1772dbdb10d04f3cd5d4ecd6e1ff4ce9e9ed5ce2adbd4dfd43d0c52f8bcb + md5: 8f398fd584118b5e8697b45809c7a6d6 depends: - - clang_impl_osx-arm64 17.0.6 he47c785_19 + - clang_impl_osx-arm64 17.0.6 he47c785_20 license: BSD-3-Clause license_family: BSD purls: [] - size: 20557 - timestamp: 1723069371921 + size: 20712 + timestamp: 1728518782329 - kind: conda name: clangxx version: 17.0.6 @@ -1119,75 +1089,75 @@ packages: - kind: conda name: clangxx_impl_osx-64 version: 17.0.6 - build: hc3430b7_19 - build_number: 19 + build: hc3430b7_20 + build_number: 20 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_19.conda - sha256: 316f3fb175932302ea49b6184ec971ea551cceb78f357c536468dff46d9f4bb2 - md5: 5b93950c253f46c500993d7ad972e44e + url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_20.conda + sha256: 2aa6905371ce124f63dba824f51b60bc1d5bd7c07b5df66e9e504e58faa7deaf + md5: 45c09857dbcc3cb3f2ac8685e8a092f4 depends: - - clang_osx-64 17.0.6 hb91bd55_19 + - clang_osx-64 17.0.6 hb91bd55_20 - clangxx 17.0.6.* - libcxx >=17 - libllvm17 >=17.0.6,<17.1.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 17663 - timestamp: 1723069353853 + size: 17587 + timestamp: 1728518746698 - kind: conda name: clangxx_impl_osx-arm64 version: 17.0.6 - build: h50f59cd_19 - build_number: 19 + build: h50f59cd_20 + build_number: 20 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_19.conda - sha256: 23dfbe0c883508683f95d5a299658e56c31356dbd466c8a5d452041ccfb9dbcc - md5: 25f52981f89e4055f306873160502faf + url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_20.conda + sha256: 2845d2442bea4938c223c7c0b731a06853834d9fc57f777e5dfd83f75740727f + md5: 6287a05e64e4a33aa5ffe1e6385484e7 depends: - - clang_osx-arm64 17.0.6 h54d7cd3_19 + - clang_osx-arm64 17.0.6 h54d7cd3_20 - clangxx 17.0.6.* - libcxx >=17 - libllvm17 >=17.0.6,<17.1.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 17743 - timestamp: 1723069398054 + size: 17771 + timestamp: 1728518802934 - kind: conda name: clangxx_osx-64 version: 17.0.6 - build: hb91bd55_19 - build_number: 19 + build: hb91bd55_20 + build_number: 20 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_19.conda - sha256: b1e5b97a47665b238c37bb69194b4038186828352c685dc4821175b618644a42 - md5: 0eafbc533fd9a4bb1e3e77f9be348afb + url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_20.conda + sha256: 25734f5e2ff40e9b159889ac858b85bd4ebf28a2aec25ca2cbe60cf9701c3f88 + md5: c712416dad52256929e432e56f03aca6 depends: - - clang_osx-64 17.0.6 hb91bd55_19 - - clangxx_impl_osx-64 17.0.6 hc3430b7_19 + - clang_osx-64 17.0.6 hb91bd55_20 + - clangxx_impl_osx-64 17.0.6 hc3430b7_20 license: BSD-3-Clause license_family: BSD purls: [] - size: 19318 - timestamp: 1723069358929 + size: 19246 + timestamp: 1728518754526 - kind: conda name: clangxx_osx-arm64 version: 17.0.6 - build: h54d7cd3_19 - build_number: 19 + build: h54d7cd3_20 + build_number: 20 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_19.conda - sha256: b451634909a940c569dfedd8294d505d1a4ac96547d6bb2ee3fd684012e6dc5a - md5: 34d542bc463389905032e48c4b914f99 + url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_20.conda + sha256: 78f2f6efff9f98ab2195cd0ee1e2a765dd284d71668f3dd015ac92c054887c9d + md5: 0a548500862ec82c0375c47217ab593f depends: - - clang_osx-arm64 17.0.6 h54d7cd3_19 - - clangxx_impl_osx-arm64 17.0.6 h50f59cd_19 + - clang_osx-arm64 17.0.6 h54d7cd3_20 + - clangxx_impl_osx-arm64 17.0.6 h50f59cd_20 license: BSD-3-Clause license_family: BSD purls: [] - size: 19290 - timestamp: 1723069403980 + size: 19359 + timestamp: 1728518809333 - kind: conda name: click version: 8.1.7 @@ -1600,6 +1570,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping size: 3203995 @@ -1619,6 +1590,7 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping size: 3417478 @@ -1639,6 +1611,7 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping size: 3752086 @@ -2368,6 +2341,7 @@ packages: constrains: - binutils_impl_linux-64 2.43 license: GPL-3.0-only + license_family: GPL purls: [] size: 669616 timestamp: 1727304687962 @@ -2576,34 +2550,34 @@ packages: timestamp: 1725505540477 - kind: conda name: libcxx - version: 19.1.0 + version: 19.1.1 build: ha82da77_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.0-ha82da77_0.conda - sha256: b71167d9b7c8e598b12bbdafefd0139e3c70c6eb258cbda3de3fb422d0098025 - md5: a4c66c0d5b0f268fd27a956145004d27 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.1-ha82da77_0.conda + sha256: bc2f7cca206fa8a1dfe801c90362a1b6ec2967a75ef60d26e7c7114884c120c0 + md5: 4ed0a90fd6a5bdda4ecf98912329993f depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 520766 - timestamp: 1726782571130 + size: 522850 + timestamp: 1727862893739 - kind: conda name: libcxx - version: 19.1.0 + version: 19.1.1 build: hf95d169_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.0-hf95d169_0.conda - sha256: 81e6bdf19cf202d769509d116c92046d164c23c91b6f791f439d10f3812629c9 - md5: 0ed117b4cbbf7917dd47b4390e511d2a + url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.1-hf95d169_0.conda + sha256: 390ee50a14fe5b6ac87b64eeb0130c7a79853641ae9a8926687556c76a645889 + md5: 2b09d0f92cae6df4b1670adcaca9c38c depends: - __osx >=10.13 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 528123 - timestamp: 1726815971547 + size: 528308 + timestamp: 1727863581528 - kind: conda name: libcxx-devel version: 17.0.6 @@ -2768,27 +2742,6 @@ packages: purls: [] size: 42063 timestamp: 1636489106777 -- kind: conda - name: libgcc - version: 14.1.0 - build: h1383e82_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libgcc-14.1.0-h1383e82_1.conda - sha256: 727d3659035d7b3c6c07c2cf90e7886ae81fd03229abf3ec9f836d9aeca11d2a - md5: 5464b6bb50d593b8f529d1fbcd58f3b2 - depends: - - _openmp_mutex >=4.5 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - msys2-conda-epoch <0.0a0 - - libgomp 14.1.0 h1383e82_1 - - libgcc-ng ==14.1.0=*_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 665353 - timestamp: 1724805164393 - kind: conda name: libgcc version: 14.1.0 @@ -2975,24 +2928,6 @@ packages: purls: [] size: 1459939 timestamp: 1724801851300 -- kind: conda - name: libgomp - version: 14.1.0 - build: h1383e82_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libgomp-14.1.0-h1383e82_1.conda - sha256: c7c2c51397d57c2e4d48f8676d340ddf88067886f849128ba7d6bd24619dbccc - md5: f8aa80643cd3ff1767ea4e6008ed52d1 - depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - msys2-conda-epoch <0.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 522202 - timestamp: 1724805108466 - kind: conda name: libgomp version: 14.1.0 @@ -3009,6 +2944,26 @@ packages: purls: [] size: 460218 timestamp: 1724801743478 +- kind: conda + name: libhwloc + version: 2.11.1 + build: default_h8125262_1000 + build_number: 1000 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda + sha256: 92728e292640186759d6dddae3334a1bc0b139740b736ffaeccb825fb8c07a2e + md5: 933bad6e4658157f1aec9b171374fde2 + depends: + - libxml2 >=2.12.7,<3.0a0 + - pthreads-win32 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2379689 + timestamp: 1720461835526 - kind: conda name: libiconv version: '1.17' @@ -3022,6 +2977,23 @@ packages: purls: [] size: 676469 timestamp: 1702682458114 +- kind: conda + name: libiconv + version: '1.17' + build: hcfcfb64_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b + md5: e1eb10b1cca179f2baa3601e4efc8712 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-only + purls: [] + size: 636146 + timestamp: 1702682547199 - kind: conda name: libiconv version: '1.17' @@ -3340,44 +3312,6 @@ packages: purls: [] size: 33601 timestamp: 1680112270483 -- kind: conda - name: libwinpthread - version: 12.0.0.r4.gg4f2fc60ca - build: h57928b3_8 - build_number: 8 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - sha256: 6d5e158813ab8d553fbb0fedd0abe7bf92970b0be3a9ddf12da0f6cbad78f506 - md5: 03cccbba200ee0523bde1f3dad60b1f3 - depends: - - ucrt - constrains: - - pthreads-win32 <0.0a0 - - msys2-conda-epoch <0.0a0 - license: MIT AND BSD-3-Clause-Clear - purls: [] - size: 35433 - timestamp: 1724681489463 -- kind: conda - name: libxcb - version: 1.17.0 - build: h0e4246c_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 - md5: a69bbf778a462da324489976c84cfc8c - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - pthread-stubs - - ucrt >=10.0.20348.0 - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 1208687 - timestamp: 1727279378819 - kind: conda name: libxcrypt version: 4.4.36 @@ -3413,6 +3347,26 @@ packages: purls: [] size: 588990 timestamp: 1721031045514 +- kind: conda + name: libxml2 + version: 2.12.7 + build: h0f24e4e_4 + build_number: 4 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda + sha256: ae78197961b09b0eef4ee194a44e4adc4555c0f2f20c348086b0cd8aaf2f7731 + md5: ed4d301f0d2149b34deb9c4fecafd836 + depends: + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 1682090 + timestamp: 1721031296951 - kind: conda name: libxml2 version: 2.12.7 @@ -3436,113 +3390,110 @@ packages: - kind: conda name: libzlib version: 1.3.1 - build: h2466b09_1 - build_number: 1 + build: h2466b09_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda - sha256: b13846a54a15243e15f96fec06b526d8155adc6a1ac2b6ed47a88f6a71a94b68 - md5: d4483ca8afc57ddf1f6dded53b36c17f + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other purls: [] - size: 56186 - timestamp: 1716874730539 + size: 55476 + timestamp: 1727963768015 - kind: conda name: libzlib version: 1.3.1 - build: h4ab18f5_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda - sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d - md5: 57d7dc60e9325e3de37ff8dffd18e814 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 depends: - - libgcc-ng >=12 + - __osx >=11.0 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other purls: [] - size: 61574 - timestamp: 1716874187109 + size: 46438 + timestamp: 1727963202283 - kind: conda name: libzlib version: 1.3.1 - build: h87427d6_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda - sha256: 80a62db652b1da0ccc100812a1d86e94f75028968991bfb17f9536f3aa72d91d - md5: b7575b5aa92108dcc9aaab0f05f2dbce + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 depends: - - __osx >=10.13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other purls: [] - size: 57372 - timestamp: 1716874211519 + size: 60963 + timestamp: 1727963148474 - kind: conda name: libzlib version: 1.3.1 - build: hfb2fe0b_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - sha256: c34365dd37b0eab27b9693af32a1f7f284955517c2cc91f1b88a7ef4738ff03e - md5: 636077128927cf79fd933276dc3aed47 + build: hd23fc13_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09 + md5: 003a54a4e32b02f7355b50a837e699da depends: - - __osx >=11.0 + - __osx >=10.13 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other purls: [] - size: 46921 - timestamp: 1716874262512 + size: 57133 + timestamp: 1727963183990 - kind: conda name: llvm-openmp - version: 18.1.8 - build: h15ab845_1 - build_number: 1 + version: 19.1.1 + build: h545e0da_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-18.1.8-h15ab845_1.conda - sha256: 06a245abb6e6d8d6662a35ad162eacb39f431349edf7cea9b1ff73b2da213c58 - md5: ad0afa524866cc1c08b436865d0ae484 + url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.1-h545e0da_0.conda + sha256: 7e15f5ac89e750dadbc6fe81dc2909dd056c7324c72379a8440b57a6174a1146 + md5: 3f3e4a599dd2638a945fc5821090db07 depends: - __osx >=10.13 constrains: - - openmp 18.1.8|18.1.8.* + - openmp 19.1.1|19.1.1.* license: Apache-2.0 WITH LLVM-exception - license_family: APACHE purls: [] - size: 300358 - timestamp: 1723605369115 + size: 305199 + timestamp: 1728517141555 - kind: conda name: llvm-openmp - version: 18.1.8 - build: hde57baf_1 - build_number: 1 + version: 19.1.1 + build: h6cdba0f_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-18.1.8-hde57baf_1.conda - sha256: 7a76e2932ac77e6314bfa1c4ff83f617c8260313bfed1b8401b508ed3e9d70ba - md5: fe89757e3cd14bb1c6ebd68dac591363 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.1-h6cdba0f_0.conda + sha256: f325a123dffba3dbf090ced4d8b05fd9f7c7151180f7bdd5952c146017a20f4c + md5: e509675b5f2dff8cbd7de8f9362bafac depends: - __osx >=11.0 constrains: - - openmp 18.1.8|18.1.8.* + - openmp 19.1.1|19.1.1.* license: Apache-2.0 WITH LLVM-exception - license_family: APACHE purls: [] - size: 276263 - timestamp: 1723605341828 + size: 280398 + timestamp: 1728517150988 - kind: conda name: llvm-tools version: 17.0.6 @@ -3594,28 +3545,28 @@ packages: timestamp: 1701378990823 - kind: pypi name: markupsafe - version: 2.1.5 - url: https://files.pythonhosted.org/packages/0a/0d/2454f072fae3b5a137c119abf15465d1771319dfe9e4acbb31722a0fff91/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 - requires_python: '>=3.7' + version: 3.0.1 + url: https://files.pythonhosted.org/packages/10/6e/1b8070bbfc467429c7983cd5ffd4ec57e1d501763d974c7caaa0a9a79f4c/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729 + requires_python: '>=3.9' - kind: pypi name: markupsafe - version: 2.1.5 - url: https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl - sha256: 823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb - requires_python: '>=3.7' + version: 3.0.1 + url: https://files.pythonhosted.org/packages/45/6d/72ed58d42a12bd9fc288dbff6dd8d03ea973a232ac0538d7f88d105b5251/MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl + sha256: 8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4 + requires_python: '>=3.9' - kind: pypi name: markupsafe - version: 2.1.5 - url: https://files.pythonhosted.org/packages/48/d6/e7cd795fc710292c3af3a06d80868ce4b02bfbbf370b7cee11d282815a2a/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl - sha256: 3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 - requires_python: '>=3.7' + version: 3.0.1 + url: https://files.pythonhosted.org/packages/86/f5/241238f89cdd6461ac9f521af8389f9a48fab97e4f315c69e9e0d52bc919/MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5 + requires_python: '>=3.9' - kind: pypi name: markupsafe - version: 2.1.5 - url: https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl - sha256: 8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 - requires_python: '>=3.7' + version: 3.0.1 + url: https://files.pythonhosted.org/packages/eb/24/a36dc37365bdd358b1e583cc40475593e36ab02cb7da6b3d0b9c05b0da7a/MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl + sha256: a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f + requires_python: '>=3.9' - kind: pypi name: matplotlib version: 3.9.2 @@ -4050,12 +4001,12 @@ packages: timestamp: 1715441052517 - kind: conda name: numpy - version: 2.1.1 + version: 2.1.2 build: py312h49bc9c5_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.1-py312h49bc9c5_0.conda - sha256: de046afaa8eee584d093917adca5d57e932f7c62832adb88987e0d221421891d - md5: d4af528569c6d98497e0d282680a8b43 + url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312h49bc9c5_0.conda + sha256: 5259371a9460bf64d0adf8ccdd0b9f471f6ea0ed6a9bceb11bdc96fcd6b0a649 + md5: 1b500875459c7b3b841f2a2a0490fae3 depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -4071,16 +4022,16 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7023884 - timestamp: 1725412931518 + size: 6918217 + timestamp: 1728241123630 - kind: conda name: numpy - version: 2.1.1 + version: 2.1.2 build: py312h58c1407_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.1-py312h58c1407_0.conda - sha256: 5d7d73f46d929dba57d96e6ef68506a490c89a2599514575c3e33b031e62b244 - md5: 839596d1c1c41f6fc01042e12cb7500c + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.2-py312h58c1407_0.conda + sha256: 598603f9aba1a5f06d11c45fe3d25ffa5d19eb44e99244310693fdaed3538865 + md5: b7e9a46277a1ee0afc6311e7760df0c3 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -4096,16 +4047,16 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 8457863 - timestamp: 1725412270045 + size: 8447869 + timestamp: 1728240376876 - kind: conda name: numpy - version: 2.1.1 + version: 2.1.2 build: py312h801f5e3_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.1-py312h801f5e3_0.conda - sha256: 96cd8d3c9c42d4d6d32b69d4ca11a79a7c6c0a5966089bf75fb29247320b8593 - md5: e42439edb298e477ca6d2643156cb9c4 + url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.2-py312h801f5e3_0.conda + sha256: 7e6840963d5395a59cb0aca32d43fd4e539c00a0677fcad16e4a3ab1f5c7aab7 + md5: 3f9101c02190f155b6525490238fc794 depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -4121,16 +4072,16 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6445118 - timestamp: 1725412326580 + size: 6436873 + timestamp: 1728240394809 - kind: conda name: numpy - version: 2.1.1 + version: 2.1.2 build: py312he4d506f_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.1-py312he4d506f_0.conda - sha256: 3b0d99c992f5662fd2631f43144465ff2ae1cd46a2a68c0622064ceb2d8362b8 - md5: 3592cb7c367e5f64a5bc3fd1166ff4d4 + url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.2-py312he4d506f_0.conda + sha256: 23e0df322c9ca76375d98ff85d4b901477894969dd15db1ceb17c64434c57f82 + md5: f3fd3efe976ed50ae5b5b0921cbf497f depends: - __osx >=10.13 - libblas >=3.9.0,<4.0a0 @@ -4145,8 +4096,8 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7566337 - timestamp: 1725412211245 + size: 7466638 + timestamp: 1728240348311 - kind: conda name: openssl version: 3.3.2 @@ -4471,23 +4422,22 @@ packages: size: 499530 timestamp: 1725737996873 - kind: conda - name: pthread-stubs - version: '0.4' - build: h0e40799_1002 - build_number: 1002 + name: pthreads-win32 + version: 2.9.1 + build: h2466b09_4 + build_number: 4 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b - md5: 3c8f2573569bb816483e5cf57efbbe29 + url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda + sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45 + md5: cf98a67a1ec8040b42455002a24f0b0b depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-or-later purls: [] - size: 9389 - timestamp: 1726802555076 + size: 265827 + timestamp: 1728400965968 - kind: conda name: pycodestyle version: 2.12.1 @@ -4524,13 +4474,13 @@ packages: requires_python: '>=3.6.8' - kind: conda name: pyproject-metadata - version: 0.8.0 - build: pyhd8ed1ab_0 + version: 0.8.1 + build: pyh2cfa8aa_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.0-pyhd8ed1ab_0.conda - sha256: 99f4971944c74150b1daa15c87fcbf3609b2cd3fef0cf2516840a3748250b75b - md5: 573fe09d7bd0cd4bcc210d8369b5ca47 + url: https://conda.anaconda.org/conda-forge/noarch/pyproject-metadata-0.8.1-pyh2cfa8aa_0.conda + sha256: 3dc45c1034b6fba6d1e14f85c0ab3fcef3079b17195ee43292f89de085a3b02e + md5: c503dd01a15639101d4e38c0f0da6249 depends: - packaging >=19.0 - python >=3.7 @@ -4538,17 +4488,17 @@ packages: license_family: MIT purls: - pkg:pypi/pyproject-metadata?source=hash-mapping - size: 13211 - timestamp: 1713446924896 + size: 13371 + timestamp: 1728344821661 - kind: conda name: pyproject_hooks - version: 1.1.0 - build: pyhd8ed1ab_0 + version: 1.2.0 + build: pyh7850678_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.1.0-pyhd8ed1ab_0.conda - sha256: 7431bd1c1273facccae3875218dff1faae5a717a0605326fc0370ea8f780ba40 - md5: 03736d8ced74deece64e54be348ddd3e + url: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyh7850678_0.conda + sha256: 71c3945bacc4c32f65908e41823dfaeb5f3bed51c3782d0eec8f15fcf38c58c3 + md5: 5003da197661e40a2509e9c4651f1eea depends: - python >=3.7 - tomli >=1.1.0 @@ -4556,8 +4506,8 @@ packages: license_family: MIT purls: - pkg:pypi/pyproject-hooks?source=hash-mapping - size: 15301 - timestamp: 1714415314463 + size: 15391 + timestamp: 1727644193632 - kind: conda name: pytest version: 8.3.3 @@ -4605,13 +4555,12 @@ packages: timestamp: 1711411153367 - kind: conda name: python - version: 3.12.6 - build: h739c21a_1_cpython - build_number: 1 + version: 3.12.7 + build: h739c21a_0_cpython subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.6-h739c21a_1_cpython.conda - sha256: 99e0b806062b2a4be3016d9a6d253d85e25b5f9ee6bebe442dec6fd6759288f3 - md5: 5beefd0212cdea661f999f0ec29a2e3a + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 @@ -4629,17 +4578,16 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 12852860 - timestamp: 1727014294263 + size: 12975439 + timestamp: 1728057819519 - kind: conda name: python - version: 3.12.6 - build: h8f8b54e_1_cpython - build_number: 1 + version: 3.12.7 + build: h8f8b54e_0_cpython subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.6-h8f8b54e_1_cpython.conda - sha256: 070ec2aa33efd0590038e72ba4feae40b58e43ea2f550f96b344c52e5c5e361e - md5: 2627fbdbd524916e069afe9b38c61829 + url: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.7-h8f8b54e_0_cpython.conda + sha256: 28172d94f7193c5075c0fc3c4b1bb617c512ffc991f4e2af0dbb6a2916872b76 + md5: 7f81191b1ca1113e694e90e15c27a12f depends: - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 @@ -4657,17 +4605,16 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 13635266 - timestamp: 1727015003612 + size: 13761315 + timestamp: 1728058247482 - kind: conda name: python - version: 3.12.6 - build: hc5c86c4_1_cpython - build_number: 1 + version: 3.12.7 + build: hc5c86c4_0_cpython subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_1_cpython.conda - sha256: abae02ac635147181e6b7d4b3c8fde89d298d354ed23576853b86bc1384c50f6 - md5: 00836baacdca254f28c54d2543e97514 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -4690,17 +4637,16 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 31530161 - timestamp: 1727016402403 + size: 31574780 + timestamp: 1728059777603 - kind: conda name: python - version: 3.12.6 - build: hce54a09_1_cpython - build_number: 1 + version: 3.12.7 + build: hce54a09_0_cpython subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_1_cpython.conda - sha256: 67229f7478e6236dcb8a2f5ea2381b865f98728c78fd3b7df2e5288af06d095e - md5: e4b36ee40840b50ef52c5071a3586812 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.6.3,<3.0a0 @@ -4713,23 +4659,22 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - - xorg-libx11 >=1.8.9,<2.0a0 - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 15862400 - timestamp: 1727014062724 + size: 15987537 + timestamp: 1728057382072 - kind: conda name: python-build - version: 1.2.2 - build: pyhd8ed1ab_0 + version: 1.2.2.post1 + build: pyhff2d567_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2-pyhd8ed1ab_0.conda - sha256: dcf00631f394ee8aaf62beb93129f4c4c324d81bd06c496af8a8ddb1fa52777c - md5: 7309d5de1e4e866df29bcd8ea5550035 + url: https://conda.anaconda.org/conda-forge/noarch/python-build-1.2.2.post1-pyhff2d567_0.conda + sha256: 3bd9d4e762be15a1b23cc2727e8a0a61773a39303bf4da9d549f504336f5d912 + md5: bd5ae3c630d5eed353badb091fd3e603 depends: - colorama - importlib-metadata >=4.6 @@ -4743,8 +4688,8 @@ packages: license_family: MIT purls: - pkg:pypi/build?source=hash-mapping - size: 25019 - timestamp: 1725676759343 + size: 25208 + timestamp: 1728263490046 - kind: pypi name: python-dateutil version: 2.9.0.post0 @@ -4881,12 +4826,12 @@ packages: requires_python: '>=3.8' - kind: conda name: ruff - version: 0.6.8 + version: 0.6.9 build: py312h42f095d_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.8-py312h42f095d_0.conda - sha256: 9213f51d22d30debcee2d86c56f416d24402e989d5acc8aeefbe36ed8d674332 - md5: 609ab65bbb1622c933298f90a16b3d6c + url: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.9-py312h42f095d_0.conda + sha256: 7b7235008612e43bc726d9153ea9178c18a791ac3376b2291bd18106659760ae + md5: 2b61340ecec3ca25736ec649fedd20cc depends: - __osx >=11.0 - libcxx >=17 @@ -4899,16 +4844,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6335176 - timestamp: 1727405062904 + size: 6345226 + timestamp: 1728067495666 - kind: conda name: ruff - version: 0.6.8 + version: 0.6.9 build: py312h881003e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.8-py312h881003e_0.conda - sha256: ee81b6168c1442dcddab4eaaa43af058aa27efcddde8aff67874be8ad78d5008 - md5: e4a8371b880d5081d7cc896df222cd64 + url: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.9-py312h881003e_0.conda + sha256: 7245ce8c79e67e6b875a3ac1eaeb0c79120df5c574a05515568136722de16e5c + md5: 23f21bcb92a63244513e6342a080f25e depends: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -4919,16 +4864,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6852016 - timestamp: 1727406055615 + size: 6866519 + timestamp: 1728068193073 - kind: conda name: ruff - version: 0.6.8 + version: 0.6.9 build: py312hd18ad41_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.8-py312hd18ad41_0.conda - sha256: cfd18f05062fe4b48a1b6e4f93d6d9335fdd7d294a0041f1a61b9dbee59a25e7 - md5: 6e054c0520dcc182c129617d821364e2 + url: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.9-py312hd18ad41_0.conda + sha256: 8059c18ce229c11b15f68b2b83ea4b88b5ced8419f50771ed1280a1941acbf01 + md5: 7ac1f3b194406d4b6cca98e3d15ba7f3 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4939,16 +4884,16 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6938416 - timestamp: 1727404839725 + size: 6955837 + timestamp: 1728067151446 - kind: conda name: ruff - version: 0.6.8 + version: 0.6.9 build: py312he6c0bb9_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.8-py312he6c0bb9_0.conda - sha256: 4c150a4a85b36cc071120d78d64279938873360a9ab518297379337b06e9bb6e - md5: d0137bde3524b64af752ceca56d693e8 + url: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.9-py312he6c0bb9_0.conda + sha256: 9b39feb1bba952d907910c191c58c9549a4194e99d2ac2592a3e7e1c29da829d + md5: acdf4da8a407ca2437a2e0f89d121327 depends: - __osx >=10.13 - libcxx >=17 @@ -4960,8 +4905,8 @@ packages: license_family: MIT purls: - pkg:pypi/ruff?source=hash-mapping - size: 6692590 - timestamp: 1727404886046 + size: 6699477 + timestamp: 1728067495992 - kind: conda name: scikit-learn version: 1.5.2 @@ -5318,9 +5263,9 @@ packages: requires_python: '>=3.9' - kind: pypi name: sphinx-gallery - version: 0.17.1 - url: https://files.pythonhosted.org/packages/ab/98/775349554a03c0b9137dd5f0715601b1e73a4da197539e44ac47ee5472e3/sphinx_gallery-0.17.1-py3-none-any.whl - sha256: 0a1142a15a9d63169fe7b12167dc028891fb8db31bfc6d7de03ba0d68d591830 + version: 0.18.0 + url: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl + sha256: 54317366e77b182672797e5b46ab13cca9a27eafc3142c59dc4c211d4afe3420 requires_dist: - pillow - sphinx>=5 @@ -5456,21 +5401,22 @@ packages: timestamp: 1725491044729 - kind: conda name: tbb - version: 2021.7.0 - build: h91493d7_0 + version: 2021.13.0 + build: hc790b64_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.7.0-h91493d7_0.tar.bz2 - sha256: c3d607499a6e097f4b8b27048ee7166319fd3dfe98aea9e69a69a3d087b986e3 - md5: f57be598137919e4f7e7d159960d66a1 + url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda + sha256: 990dbe4fb42f14700c22bd434d8312607bf8d0bd9f922b054e51fda14c41994c + md5: 28496a1e6af43c63927da4f80260348d depends: + - libhwloc >=2.11.1,<2.11.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - - vs2015_runtime >=14.29.30139 + - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE purls: [] - size: 178574 - timestamp: 1668617991077 + size: 151494 + timestamp: 1725532984828 - kind: conda name: threadpoolctl version: 3.5.0 @@ -5591,21 +5537,21 @@ packages: timestamp: 1604308660817 - kind: conda name: tomli - version: 2.0.1 + version: 2.0.2 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - md5: 5844808ffab9ebdb694585b50ba02a96 + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 depends: - python >=3.7 license: MIT license_family: MIT purls: - pkg:pypi/tomli?source=hash-mapping - size: 15940 - timestamp: 1644342331069 + size: 18203 + timestamp: 1727974767524 - kind: conda name: typing_extensions version: 4.12.2 @@ -5625,33 +5571,32 @@ packages: timestamp: 1717802653893 - kind: conda name: tzdata - version: 2024a - build: h8827d51_1 - build_number: 1 + version: 2024b + build: hc8b5060_0 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - sha256: 7d21c95f61319dba9209ca17d1935e6128af4235a67ee4e57a00908a1450081e - md5: 8bfdead4e0fff0383ae4c9c50d0531bd + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain purls: [] - size: 124164 - timestamp: 1724736371498 + size: 122354 + timestamp: 1728047496079 - kind: conda name: ucrt version: 10.0.22621.0 - build: h57928b3_0 + build: h57928b3_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 - md5: 72608f6cd3e5898229c3ea16deb1ac43 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 constrains: - vs2015_runtime >=14.29.30037 - license: LicenseRef-Proprietary - license_family: PROPRIETARY + license: LicenseRef-MicrosoftWindowsSDK10 purls: [] - size: 1283972 - timestamp: 1666630199266 + size: 559710 + timestamp: 1728377334097 - kind: pypi name: urllib3 version: 2.2.3 @@ -5666,12 +5611,12 @@ packages: requires_python: '>=3.8' - kind: conda name: uv - version: 0.4.17 + version: 0.4.20 build: h032dd4e_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.17-h032dd4e_0.conda - sha256: 786068d895e18d7b8ad473c95e716da578cbed20a8325d91b9c62faf5eb4acd8 - md5: 9aa9f5bb28984b28d9197c30f4c1f9f1 + url: https://conda.anaconda.org/conda-forge/osx-64/uv-0.4.20-h032dd4e_0.conda + sha256: 297886dd189386f11612a983dd0b50c80acd7d02797636f90afcc40edd6a27cc + md5: 227e8a868af667a9c89c66a4753f397d depends: - __osx >=10.13 - libcxx >=17 @@ -5679,16 +5624,16 @@ packages: - __osx >=10.13 license: Apache-2.0 OR MIT purls: [] - size: 8512317 - timestamp: 1727511290800 + size: 8725138 + timestamp: 1728436718175 - kind: conda name: uv - version: 0.4.17 + version: 0.4.20 build: h0f3a69f_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.17-h0f3a69f_0.conda - sha256: 7dfe9427e45962e3a5f38e40d58ad11d37581a840f1c8c2b00f8c88e251b2d0f - md5: 266eba4e5528849f6c00327d2f15a700 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.20-h0f3a69f_0.conda + sha256: 36467e0e3045d070ef7605a26a1695140a46d45fde49b526cf9b71441863b0e4 + md5: 93e4740b5619aec36cffbc5833621108 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5697,32 +5642,32 @@ packages: - __glibc >=2.17 license: Apache-2.0 OR MIT purls: [] - size: 8830126 - timestamp: 1727510461005 + size: 9075352 + timestamp: 1728436022515 - kind: conda name: uv - version: 0.4.17 + version: 0.4.20 build: ha08ef0e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.17-ha08ef0e_0.conda - sha256: 49710a8689af5fb56acfb88ace04bae4faa24d3aca146e414fa5ad263282398a - md5: ecd658017ecc8c843b766f210d3346fd + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.20-ha08ef0e_0.conda + sha256: 11ca2d6dac17a381bcf55e06b7dde345c38a6c1345ecf14fa79c7c0a9349971c + md5: 5c18a45210647660c332ccbd994f03d7 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 OR MIT purls: [] - size: 9551146 - timestamp: 1727511731459 + size: 9855851 + timestamp: 1728437424511 - kind: conda name: uv - version: 0.4.17 + version: 0.4.20 build: hd3a8144_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.17-hd3a8144_0.conda - sha256: d61aaff39fd3e78a740f0cf9927c8213e5d96bdb4f954f13d24f966934c0c118 - md5: ba0fd56a0da38b6aa0beb6a88b76f7c7 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.20-hd3a8144_0.conda + sha256: 7bb191e1d4df69fb95964353ae31c9bad5dfb1f9eef6586ea06eafac4a4ef502 + md5: 9dabbcc8f097e555f3a3097bee6286fa depends: - __osx >=11.0 - libcxx >=17 @@ -5730,133 +5675,60 @@ packages: - __osx >=11.0 license: Apache-2.0 OR MIT purls: [] - size: 7766138 - timestamp: 1727511043695 + size: 8120600 + timestamp: 1728436582685 - kind: conda name: vc version: '14.3' - build: h8a93ad2_21 - build_number: 21 + build: ha32ba9b_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_21.conda - sha256: f14f5238c2e2516e292af43d91df88f212d769b4853eb46d03291793dcf00da9 - md5: e632a9b865d4b653aa656c9fb4f4817c + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 depends: - - vc14_runtime >=14.40.33810 + - vc14_runtime >=14.38.33135 track_features: - vc14 license: BSD-3-Clause license_family: BSD purls: [] - size: 17243 - timestamp: 1725984095174 + size: 17447 + timestamp: 1728400826998 - kind: conda name: vc14_runtime version: 14.40.33810 - build: ha82c5b3_21 - build_number: 21 + build: hcc2c482_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_21.conda - sha256: c3bf51bff7db39ad7e890dbef1b1026df0af36975aea24dea7c5fe1e0b382c40 - md5: b3ebb670caf046e32b835fbda056c4f9 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 depends: - ucrt >=10.0.20348.0 constrains: - - vs2015_runtime 14.40.33810.* *_21 - license: LicenseRef-ProprietaryMicrosoft + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] - size: 751757 - timestamp: 1725984166774 + size: 750719 + timestamp: 1728401055788 - kind: conda name: vs2015_runtime version: 14.40.33810 - build: h3bf8584_21 - build_number: 21 + build: h3bf8584_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_21.conda - sha256: 472410455c381e406ec8c1d3e0342b48ee23122ef7ffb22a09d9763ca5df4d20 - md5: b3f37db7b7ae1c22600fa26a63ed99b3 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 depends: - vc14_runtime >=14.40.33810 license: BSD-3-Clause license_family: BSD purls: [] - size: 17241 - timestamp: 1725984096440 -- kind: conda - name: xorg-libx11 - version: 1.8.10 - build: hf48077a_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.10-hf48077a_0.conda - sha256: d1d6d2b5d33c35a39f7efacc3d2bc84332f0592d5435628dae89207bddeeaf5e - md5: 97e52b3d384cc7d3be4873bec28f050e - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - libxcb >=1.17.0,<2.0a0 - - ucrt >=10.0.20348.0 - - xorg-xorgproto - license: MIT - license_family: MIT - purls: [] - size: 952088 - timestamp: 1727357732462 -- kind: conda - name: xorg-libxau - version: 1.0.11 - build: h0e40799_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-h0e40799_1.conda - sha256: f44bc6f568a9697b7e1eadc2d00ef5de0fe62efcf5e27e5ecc46f81046082faf - md5: ca66d6f8fe86dd53664e8de5087ef6b1 - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 107925 - timestamp: 1727035280560 -- kind: conda - name: xorg-libxdmcp - version: 1.1.3 - build: h0e40799_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-h0e40799_1.conda - sha256: 2e443245efe814665938f4f636f56bb157943a01438db7b430f3804bc3d2b14e - md5: 05ee420ec4b42aaafddb5ff495bb724a - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 69635 - timestamp: 1727100170719 -- kind: conda - name: xorg-xorgproto - version: '2024.1' - build: h0e40799_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-xorgproto-2024.1-h0e40799_1.conda - sha256: 78a7211266821fd98c4a250f28dac7f8a6abbf8bff339990c6969d8d0712f11d - md5: de202fa8beaa5f5d4a085a82913143cd - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 569140 - timestamp: 1726846656126 + size: 17453 + timestamp: 1728400827536 - kind: conda name: xz version: 5.2.6 @@ -5930,37 +5802,37 @@ packages: - kind: conda name: zlib version: 1.3.1 - build: h87427d6_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-h87427d6_1.conda - sha256: 41bd5fef28b2755d637e3a8ea5c84010628392fbcf80c7e3d7370aaced7ee4fe - md5: 3ac9ef8975965f9698dbedd2a4cc5894 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 depends: - - __osx >=10.13 - - libzlib 1.3.1 h87427d6_1 + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 license: Zlib license_family: Other purls: [] - size: 88782 - timestamp: 1716874245467 + size: 77606 + timestamp: 1727963209370 - kind: conda name: zlib version: 1.3.1 - build: hfb2fe0b_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-hfb2fe0b_1.conda - sha256: 87360c2dc662916aac37cf01e53324b4f4f78db6f399220818076752b093ede5 - md5: f27e021db7862b6ddbc1d3578f10d883 + build: hd23fc13_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda + sha256: 219edbdfe7f073564375819732cbf7cc0d7c7c18d3f546a09c2dfaf26e4d69f3 + md5: c989e0295dcbdc08106fe5d9e935f0b9 depends: - - __osx >=11.0 - - libzlib 1.3.1 hfb2fe0b_1 + - __osx >=10.13 + - libzlib 1.3.1 hd23fc13_2 license: Zlib license_family: Other purls: [] - size: 78260 - timestamp: 1716874280334 + size: 88544 + timestamp: 1727963189976 - kind: conda name: zstd version: 1.5.6 From c1abc204e97eb69279a6fc15e79a0ef190ba8880 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:52:12 +0800 Subject: [PATCH 6/7] DOC add multioutput guide --- doc/index.rst | 1 + doc/multioutput.rst | 50 ++++++++++++++++++++++++++++- doc/redundancy.rst | 2 +- doc/user_guide.rst | 1 + examples/plot_fisher.py | 71 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 examples/plot_fisher.py diff --git a/doc/index.rst b/doc/index.rst index 318d9be..7825c01 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -23,6 +23,7 @@ API Reference Useful Links ------------ .. toctree:: + :maxdepth: 2 User Guild Examples diff --git a/doc/multioutput.rst b/doc/multioutput.rst index ebb3012..776b7bc 100644 --- a/doc/multioutput.rst +++ b/doc/multioutput.rst @@ -6,4 +6,52 @@ Multioutput feature selection ============================== -We can use :class:`FastCan` to handle multioutput feature selection. \ No newline at end of file +We can use :class:`FastCan` to handle multioutput feature selection, which means +target ``y`` can be a matrix. For regression, :class:`FastCan` can be used for +MIMO (Multi-Input Multi-Output) data. For classification, it can be used for +multilabel data. Actually, for multiclass classification, which has one output with +multiple categories, multioutput feature selection can also be useful. The multiclass +classification can be converted to multilabel classification by one-hot encoding +target ``y``. The cannonical correaltion coefficient between the features ``X`` and the +one-hot encoded target ``y`` has equivalent relationship with Fisher's criterion in +LDA (Linear Discriminant Analysis) [1]_. Applying :class:`FastCan` to the converted +multioutput data may result in better accuracy in the following classification task +than applying it directly to the original single-label data. See Figure 5 in [2]_. + +Relationship on multiclass data +------------------------------- +Assume the feature matrix is :math:`X \in \mathbb{R}^{N\times n}`, the multiclass +target vector is :math:`y \in \mathbb{R}^{N\times 1}`, and the one-hot encoded target +matrix is :math:`Y \in \mathbb{R}^{N\times m}`. Then, the Fisher's criterion for +:math:`X` and :math:`y` is denoted as :math:`J` and the canonical correaltion +coefficient between :math:`X` and :math:`Y` is denoted as :math:`R`. The relationship +between :math:`J` and :math:`R` is given by + +.. math:: + J = \frac{R^2}{1-R^2} + +or + +.. math:: + R^2 = \frac{J}{1+J} + +It should be noted that the number of the Fisher's criterion and the canonical +correaltion coefficient is not only one. The number of the non-zero canonical +correlation coefficients is no more than :math:`\min (n, m)`, and each canonical correlation +coefficient is one-to-one correspondence to each Fisher's criterion. + +.. rubric:: References + +.. [1] `"Orthogonal least squares based fast feature selection for + linear classification" `_ + Zhang, S., & Lang, Z. Q. Pattern Recognition, 123, 108419 (2022). + +.. [2] `"Canonical-correlation-based fast feature selection for structural + health monitoring" `_ + Zhang, S., Wang, T., Worden, K., Sun L., & Cross, E. J. + Mechanical Systems and Signal Processing, 223, 111895 (2025). + +.. rubric:: Examples + +* See :ref:`sphx_glr_auto_examples_plot_fisher.py` for an example of + the equivalent relationship between CCA and LDA on multiclass data. \ No newline at end of file diff --git a/doc/redundancy.rst b/doc/redundancy.rst index 6c1e3b4..0f6ed29 100644 --- a/doc/redundancy.rst +++ b/doc/redundancy.rst @@ -27,7 +27,7 @@ which gives large rounding-errors when linearly redundant features appears. * `"Canonical-correlation-based fast feature selection for structural health monitoring" `_ Zhang, S., Wang, T., Worden, K., Sun L., & Cross, E. J. - Mechanical Systems and Signal Processing, 223:111895 (2025). + Mechanical Systems and Signal Processing, 223, 111895 (2025). .. rubric:: Examples diff --git a/doc/user_guide.rst b/doc/user_guide.rst index 6f5c907..03ea83d 100644 --- a/doc/user_guide.rst +++ b/doc/user_guide.rst @@ -6,6 +6,7 @@ User Guide .. toctree:: :numbered: + :maxdepth: 1 intuitive.rst unsupervised.rst diff --git a/examples/plot_fisher.py b/examples/plot_fisher.py new file mode 100644 index 0000000..dd0ccc2 --- /dev/null +++ b/examples/plot_fisher.py @@ -0,0 +1,71 @@ +""" +========================= +Fisher's criterion in LDA +========================= + +.. currentmodule:: fastcan + +In this examples, we will demonstrate the cannonical correaltion coefficient +between the features ``X`` and the one-hot encoded target ``y`` has equivalent +relationship with Fisher's criterion in LDA (Linear Discriminant Analysis). +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Prepare data +# ------------ +# We use ``iris`` dataset and transform this multiclass data to multilabel data by +# one-hot encoding. Here, drop="first" is necessary, otherwise, the transformed target +# is not full column rank. + +from sklearn import datasets +from sklearn.preprocessing import OneHotEncoder + + +X, y = datasets.load_iris(return_X_y=True) +# drop="first" is necessary, otherwise, the transformed target is not full column rank +y_enc = OneHotEncoder( + drop="first", + sparse_output=False, +).fit_transform(y.reshape(-1, 1)) + +# %% +# Compute Fisher's criterion +# -------------------------- +# The intermediate product of ``LinearDiscriminantAnalysis`` in ``sklearn`` is +# Fisher's criterion, when ``solver="eigen"``. However, it does not provide an interface +# to export it, so we reproduce it manually. + +import numpy as np +from scipy import linalg +from sklearn.discriminant_analysis import LinearDiscriminantAnalysis +from sklearn.covariance import empirical_covariance + +clf = LinearDiscriminantAnalysis(solver="eigen").fit(X, y) +Sw = clf.covariance_ # within scatter +St = empirical_covariance(X) # total scatter +Sb = St - Sw # between scatter +fishers_criterion, _ = linalg.eigh(Sb, Sw) + +fishers_criterion = np.sort(fishers_criterion)[::-1] +n_nonzero = min(X.shape[1], clf.classes_.shape[0]-1) +# remove the eigenvalues which are close to zero +fishers_criterion = fishers_criterion[:n_nonzero] +# get canonical correlation coefficients from convert Fisher's criteria +r2 = fishers_criterion/(1+fishers_criterion) + +# %% +# Compute SSC +# ----------- +# Compute the sum of squared canonical correlation coefficients (SSC). It can be found +# that the result obtained by :class:`FastCan`/CCA (Canonical Correlation Analysis) is +# the same as LDA. + +from fastcan import FastCan + +ssc = FastCan(4, verbose=0).fit(X, y_enc).scores_.sum() + +print(f"SSC from LDA: {r2.sum():5f}") +print(f"SSC from CCA: {ssc:5f}") From 36a9c99adaa89bf4223140e24e70246d12f3e401 Mon Sep 17 00:00:00 2001 From: SIKAI ZHANG <34108862+MatthewSZhang@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:33:50 +0800 Subject: [PATCH 7/7] DOC add plot_intuitive --- README.rst | 8 +- doc/conf.py | 1 - doc/index.rst | 1 + doc/intuitive.rst | 16 -- doc/user_guide.rst | 1 - examples/plot_affinity.py | 2 +- examples/plot_fisher.py | 3 +- examples/plot_intuitive.py | 190 +++++++++++++++++++++ pixi.lock | 342 ++++++++++++++++++------------------- pyproject.toml | 2 +- 10 files changed, 368 insertions(+), 198 deletions(-) delete mode 100644 doc/intuitive.rst create mode 100644 examples/plot_intuitive.py diff --git a/README.rst b/README.rst index 7f8a68a..2cd8091 100644 --- a/README.rst +++ b/README.rst @@ -33,11 +33,13 @@ FastCan is a feature selection method, which has following advantages: #. Extremely **fast**. See :ref:`sphx_glr_auto_examples_plot_speed.py`. -#. Support unsupervised feature selection. +#. Support unsupervised feature selection. See :ref:`Unsupervised feature selection `. -#. Support multioutput feature selection. +#. Support multioutput feature selection. See :ref:`Multioutput feature selection `. -#. Skip redundant features. +#. Skip redundant features. See :ref:`Feature redundancy `. + +#. Evalaute relative usefulness of features. See :ref:`sphx_glr_auto_examples_plot_intuitive.py`. Installation diff --git a/doc/conf.py b/doc/conf.py index 966449c..1205bd0 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -42,7 +42,6 @@ "sphinx.ext.intersphinx", "sphinx_gallery.gen_gallery", "sphinx_design", - "matplotlib.sphinxext.plot_directive", ] # List of patterns, relative to source directory, that match files and diff --git a/doc/index.rst b/doc/index.rst index 7825c01..29518b8 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -19,6 +19,7 @@ API Reference FastCan ssc + ols Useful Links ------------ diff --git a/doc/intuitive.rst b/doc/intuitive.rst deleted file mode 100644 index b3f24ec..0000000 --- a/doc/intuitive.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. currentmodule:: fastcan - -.. _intuitive: - -======================= -Intuitively explanation -======================= - -Let's intuitively understand the two methods, h-correlation and eta-cosine, in :class:`FastCan`. - -The computational speed comparison between h-correlation method and eta-cosine method. - -.. figure:: ./auto_examples/images/sphx_glr_plot_speed_001.png - :target: ./auto_examples/plot_speed.html - :align: center - :scale: 70% diff --git a/doc/user_guide.rst b/doc/user_guide.rst index 03ea83d..c5e32e2 100644 --- a/doc/user_guide.rst +++ b/doc/user_guide.rst @@ -8,7 +8,6 @@ User Guide :numbered: :maxdepth: 1 - intuitive.rst unsupervised.rst multioutput.rst redundancy.rst diff --git a/examples/plot_affinity.py b/examples/plot_affinity.py index 694b563..dd22245 100644 --- a/examples/plot_affinity.py +++ b/examples/plot_affinity.py @@ -1,6 +1,6 @@ """ ================= -Affine Invariance +Affine invariance ================= .. currentmodule:: fastcan diff --git a/examples/plot_fisher.py b/examples/plot_fisher.py index dd0ccc2..477e35c 100644 --- a/examples/plot_fisher.py +++ b/examples/plot_fisher.py @@ -23,7 +23,6 @@ from sklearn import datasets from sklearn.preprocessing import OneHotEncoder - X, y = datasets.load_iris(return_X_y=True) # drop="first" is necessary, otherwise, the transformed target is not full column rank y_enc = OneHotEncoder( @@ -40,8 +39,8 @@ import numpy as np from scipy import linalg -from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.covariance import empirical_covariance +from sklearn.discriminant_analysis import LinearDiscriminantAnalysis clf = LinearDiscriminantAnalysis(solver="eigen").fit(X, y) Sw = clf.covariance_ # within scatter diff --git a/examples/plot_intuitive.py b/examples/plot_intuitive.py new file mode 100644 index 0000000..e1bf92f --- /dev/null +++ b/examples/plot_intuitive.py @@ -0,0 +1,190 @@ +""" +======================= +Intuitively explanation +======================= + +.. currentmodule:: fastcan + +Let's intuitively understand the two methods, h-correlation and eta-cosine, +in :class:`FastCan`. +""" + +# Authors: Sikai Zhang +# SPDX-License-Identifier: MIT + +# %% +# Select the first feature +# ------------------------ +# For feature selection, it is normally easy to define a criterion to evaluate a +# feature's usefulness, but it is hard to compute the amount of redundancy between +# a new feature and many selected features. Here we use the ``diabetes`` dataset, +# which has 10 features, as an example. If R-squared between a feature (transformed to +# the predicted target by a linear regression model) and the target to describe its +# usefulness, the results are shown in the following figure. It can be seen that +# Feature 2 is the most useful and Feature 8 is the second. However, does that mean +# that the total usefullness of Feature 2 + Feature 8 is the sum of their R-squared +# scores? Probably not, because there may be redundancy between Feature 2 and Feature 8. +# Actually, what we want is a kind of usefulness score which has the **superposition** +# property, so that the usefullness of each feature can be added together without +# redundancy. + + +import matplotlib.pyplot as plt +import numpy as np +from matplotlib.patches import Patch +from sklearn.datasets import load_diabetes +from sklearn.linear_model import LinearRegression + +from fastcan import FastCan + +plt.rcParams['axes.spines.right'] = False +plt.rcParams['axes.spines.top'] = False + +def get_r2(feats, target, feats_selected=None): + """Get R-squared between [feats_selected, feat_i] and target.""" + + n_samples, n_features = feats.shape + if feats_selected is None: + feats_selected = np.zeros((n_samples, 0)) + + lr = LinearRegression() + r2 = np.zeros(n_features) + for i in range(n_features): + feats_i = np.column_stack((feats_selected, feats[:, i])) + r2[i] = lr.fit(feats_i, target).score(feats_i, target) + return r2 + +def plot_bars(ids, r2_left, r2_selected): + """Plot the relative R-squared with a bar plot.""" + legend_selected = Patch(color='tab:green', label='X_selected') + legend_cand = Patch(color='tab:blue', label='x_i: candidates') + legend_best = Patch(color='tab:orange', label='Best candidate') + n_features = len(ids) + n_selected = len(r2_selected) + + left = np.zeros(n_features)+sum(r2_selected) + left_selected = np.cumsum(r2_selected) + left_selected = np.r_[0, left_selected] + left_selected = left_selected[:-1] + left[:n_selected] = left_selected + + label = [""]*n_features + label[np.argmax(r2_left)+n_selected] = f"{max(r2_left):.5f}" + + colors = ["tab:blue"]*(n_features - n_selected) + colors[np.argmax(r2_left)] = "tab:orange" + colors = ["tab:green"]*n_selected + colors + + hbars = plt.barh(ids, width=np.r_[score_selected, r2_left], color=colors, left=left) + plt.axvline(x = sum(r2_selected), color = 'tab:orange', linestyle="--") + plt.bar_label(hbars, label) + plt.yticks(np.arange(n_features)) + plt.xlabel("R-squared between [X_selected, x_i] and y") + plt.ylabel("Feature index") + plt.legend(handles=[legend_selected, legend_cand, legend_best]) + plt.show() + +X, y = load_diabetes(return_X_y=True) + + +id_left = np.arange(X.shape[1]) +id_selected = [] +score_selected = [] + + + +score_0 = get_r2(X, y) + +plot_bars(id_left, score_0, score_selected) + + +# %% +# Select the second feature +# ------------------------- +# Let's compute the R-squared between Feature 2 + Feature i and the target, which is +# shown in the figure below. The bars at the right-hand-side (RHS) of the dashed line is +# the additional R-squared scores based on the scores of Feature 2, which we call +# **relative** usefulness to Feature 2. It is also seen that the bar of Feature 8 +# in this figure is much shorter than the bar in the previous figure. +# Because the redundancy between Feature 2 and Feature 8 is removed. +# Therefore, these bars at RHS can be the desired usefulness score with the +# **superposition** property. + +index = np.argmax(score_0) +id_selected += [id_left[index]] +score_selected += [score_0[index]] +id_left = np.delete(id_left, index) +score_1 = get_r2(X[:, id_left], y, X[:, id_selected])-sum(score_selected) + + +plot_bars(np.r_[id_selected, id_left], score_1, score_selected) + + + +# %% +# Select the third feature +# ------------------------ +# Again, let's compute the R-squared between Feature 2 + Feature 8 + Feature i and +# the target, and the additonal R-squared contributed by the rest of the features is +# shown in following figure. It can be found that after selecting Features 2 and 8, the +# rest of the features can provide a very limited contribution. + +index = np.argmax(score_1) +id_selected += [id_left[index]] +score_selected += [score_1[index]] +id_left = np.delete(id_left, index) +score_2 = get_r2(X[:, id_left], y, X[:, id_selected])-sum(score_selected) + +plot_bars(np.r_[id_selected, id_left], score_2, score_selected) + + + +# %% +# h-correlation and eta-cosine +# ---------------------------- +# ``h-correlation`` is a fast way to compute the value of the bars +# at the RHS of the dashed lines. The fast computational speed is achieved by +# orthogonalization, which removes the redundancy between the features. We use the +# orthogonalization first to makes the rest of features orthogonal to the selected +# features and then compute their additonal R-squared values. ``eta-cosine`` uses +# the samilar idea, but has an additonal preprocessing step to compress the features +# :math:`X \in \mathbb{R}^{N\times n}` and the target +# :math:`X \in \mathbb{R}^{N\times n}` to :math:`X_c \in \mathbb{R}^{(m+n)\times n}` +# and :math:`Y_c \in \mathbb{R}^{(m+n)\times m}`. + +scores = FastCan(3, verbose=0).fit(X, y).scores_ + +print(f"First selected feature's score: {scores[0]:.5f}") +print(f"Second selected feature's score: {scores[1]:.5f}") +print(f"Third selected feature's score: {scores[2]:.5f}") + +# %% +# Relative usefulness +# ------------------- +# The idea about relative usefulness can be very helpful, when we want to +# evaluate features based on some prior knowledges. For example, we have +# some magnetic impedance spectroscopy (MIS) features of cervix tissue in +# pregnant women and we want to evaluate the usefulness of these features +# for predicting spontaneous preterm births (sPTB). The prior knowledge is that +# cervical length (CL) and quantitative fetal fibronectin (fFN) are effective risk +# factors for sPTB, so the redundancy between CL+fFN and MIS features should be +# avoided. Therefore, the relative usefulness of MIS features to CL and fFN should +# be computed. We can use the argument ``indices_include`` to compute the relative +# usefulness. Use the ``diabetes`` dataset as an example. Assuming the prior +# knowledge is that Feature 3 is very important, the relative usefulness of the rest +# features to Feature 3 given in the figure below, which is the same as the +# result from :class:`FastCan`. + +index = 3 +id_selected = [index] +score_selected = [score_0[index]] +id_left = np.arange(X.shape[1]) +id_left = np.delete(id_left, index) +score_1_7 = get_r2(X[:, id_left], y, X[:, id_selected])-sum(score_selected) + +plot_bars(np.r_[id_selected, id_left], score_1_7, score_selected) + +scores = FastCan(2, indices_include=[3], verbose=0).fit(X, y).scores_ + +print(f"First selected feature's score: {scores[0]:.5f}") +print(f"Second selected feature's score: {scores[1]:.5f}") diff --git a/pixi.lock b/pixi.lock index 30e0857..3cec142 100644 --- a/pixi.lock +++ b/pixi.lock @@ -14,7 +14,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.1-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.11-py312h8fd2918_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda @@ -95,13 +95,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl @@ -122,17 +122,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/cctools_osx-64-1010.6-h98e843e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17-17.0.6-default_hb173f14_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-17.0.6-default_he371ed4_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_20.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_21.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_21.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-17.0.6-default_he371ed4_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_20.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_21.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-17.0.6-h1020d70_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-17.0.6-hf2b8a54_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/compilers-1.8.0-h694c41f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.1-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py312h3d0f464_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.8.0-h6a1c779_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.0.11-py312h6891801_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda @@ -228,13 +228,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl @@ -255,17 +255,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1010.6-h4208deb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17-17.0.6-default_h146c034_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-17.0.6-default_h360f5da_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_20.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_21.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_21.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-17.0.6-default_h360f5da_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_20.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_20.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_21.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-17.0.6-h856b3c1_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-17.0.6-h832e737_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compilers-1.8.0-hce30654_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.1-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py312h0bf5046_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.8.0-he8d86c4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cython-3.0.11-py312hde4cb15_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda @@ -361,13 +361,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl @@ -385,7 +385,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.1-py312h4389bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py312h4389bb4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.0.11-py312h6018fb9_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cython-lint-0.16.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda @@ -409,7 +409,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.11.2-py312h4389bb4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.12.1-hc790b64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312h49bc9c5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312hf10105a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda @@ -462,13 +462,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/f3/8fd1ef84f318d404dcd713c54647e616d93396beb28db216e281ba86d728/sphinx_gallery-0.18.0-py3-none-any.whl @@ -983,12 +983,12 @@ packages: - kind: conda name: clang_impl_osx-64 version: 17.0.6 - build: h1af8efd_20 - build_number: 20 + build: h1af8efd_21 + build_number: 21 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_20.conda - sha256: 0d03b332bc4ea0434c49629089b75d7e936afedc512209c64422b77e347dd813 - md5: 283c3bd01a1c0bffdc05b741bcbed741 + url: https://conda.anaconda.org/conda-forge/osx-64/clang_impl_osx-64-17.0.6-h1af8efd_21.conda + sha256: 739050856565443f5568370f9a0a28f803579eb5dbee635c65b83056e52e42c9 + md5: 6ef491cbc462aae64eaa0213e7ae6222 depends: - cctools_osx-64 - clang 17.0.6.* @@ -998,17 +998,17 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17537 - timestamp: 1728518728460 + size: 17526 + timestamp: 1728550487882 - kind: conda name: clang_impl_osx-arm64 version: 17.0.6 - build: he47c785_20 - build_number: 20 + build: he47c785_21 + build_number: 21 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_20.conda - sha256: dfce90c41972777e3014feb4dfcc08fbd23c7a3b89999d39cefc8bd186ee0eb4 - md5: 07260cfe5d46c5b70906f2366c4fad6b + url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-17.0.6-he47c785_21.conda + sha256: e3e2038b22b425f4fd4bae6d50c15be1a6da2075c3ff5072c7f98bff14072b4a + md5: 2417a85d8d37df3df2bd37b6ae0514aa depends: - cctools_osx-arm64 - clang 17.0.6.* @@ -1018,40 +1018,40 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17744 - timestamp: 1728518774810 + size: 17585 + timestamp: 1728550578755 - kind: conda name: clang_osx-64 version: 17.0.6 - build: hb91bd55_20 - build_number: 20 + build: hb91bd55_21 + build_number: 21 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_20.conda - sha256: 515c94b9c9b4e8e288f843e1d4a8ecf82da7df853551528b36c2963896204f61 - md5: d432db8ffafb3e44e3fb72f892a38329 + url: https://conda.anaconda.org/conda-forge/osx-64/clang_osx-64-17.0.6-hb91bd55_21.conda + sha256: 446ff91c60c6266e4e5bcaab20377116ef59e1e3b712da7aa37faad644ae8065 + md5: d94a0f2c03e7a50203d2b78d7dd9fa25 depends: - - clang_impl_osx-64 17.0.6 h1af8efd_20 + - clang_impl_osx-64 17.0.6 h1af8efd_21 license: BSD-3-Clause license_family: BSD purls: [] - size: 20650 - timestamp: 1728518733637 + size: 20624 + timestamp: 1728550493227 - kind: conda name: clang_osx-arm64 version: 17.0.6 - build: h54d7cd3_20 - build_number: 20 + build: h54d7cd3_21 + build_number: 21 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_20.conda - sha256: 7cbf1772dbdb10d04f3cd5d4ecd6e1ff4ce9e9ed5ce2adbd4dfd43d0c52f8bcb - md5: 8f398fd584118b5e8697b45809c7a6d6 + url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-17.0.6-h54d7cd3_21.conda + sha256: f71a0285bba6695a3d1693563d43b4b3f31f611dccf2b8c3be2a480cf1da2b7a + md5: 83a80f491ac81d81f28cb9a46d3f5439 depends: - - clang_impl_osx-arm64 17.0.6 he47c785_20 + - clang_impl_osx-arm64 17.0.6 he47c785_21 license: BSD-3-Clause license_family: BSD purls: [] - size: 20712 - timestamp: 1728518782329 + size: 20608 + timestamp: 1728550586726 - kind: conda name: clangxx version: 17.0.6 @@ -1089,75 +1089,75 @@ packages: - kind: conda name: clangxx_impl_osx-64 version: 17.0.6 - build: hc3430b7_20 - build_number: 20 + build: hc3430b7_21 + build_number: 21 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_20.conda - sha256: 2aa6905371ce124f63dba824f51b60bc1d5bd7c07b5df66e9e504e58faa7deaf - md5: 45c09857dbcc3cb3f2ac8685e8a092f4 + url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-17.0.6-hc3430b7_21.conda + sha256: 68bfcd5f17945497582cb91a44737a94a2600a0dab7f0ef6c9118e1d5fb089de + md5: 9dbdec57445cac0f0c39aefe3d3900bc depends: - - clang_osx-64 17.0.6 hb91bd55_20 + - clang_osx-64 17.0.6 hb91bd55_21 - clangxx 17.0.6.* - libcxx >=17 - libllvm17 >=17.0.6,<17.1.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 17587 - timestamp: 1728518746698 + size: 17588 + timestamp: 1728550507978 - kind: conda name: clangxx_impl_osx-arm64 version: 17.0.6 - build: h50f59cd_20 - build_number: 20 + build: h50f59cd_21 + build_number: 21 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_20.conda - sha256: 2845d2442bea4938c223c7c0b731a06853834d9fc57f777e5dfd83f75740727f - md5: 6287a05e64e4a33aa5ffe1e6385484e7 + url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-17.0.6-h50f59cd_21.conda + sha256: bfdf0b768b36694707fab931ccbe9971bd1b9a258c0806c62596d5c93167e972 + md5: a78eb1ab3aad5251ff9c6da5a99d59be depends: - - clang_osx-arm64 17.0.6 h54d7cd3_20 + - clang_osx-arm64 17.0.6 h54d7cd3_21 - clangxx 17.0.6.* - libcxx >=17 - libllvm17 >=17.0.6,<17.1.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 17771 - timestamp: 1728518802934 + size: 17648 + timestamp: 1728550606508 - kind: conda name: clangxx_osx-64 version: 17.0.6 - build: hb91bd55_20 - build_number: 20 + build: hb91bd55_21 + build_number: 21 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_20.conda - sha256: 25734f5e2ff40e9b159889ac858b85bd4ebf28a2aec25ca2cbe60cf9701c3f88 - md5: c712416dad52256929e432e56f03aca6 + url: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-17.0.6-hb91bd55_21.conda + sha256: 780cd56526c835bb5ca867939b3a8613af4ea67c9c37cc952bfaad438974b098 + md5: cfcbb6790123280b5be7992d392e8194 depends: - - clang_osx-64 17.0.6 hb91bd55_20 - - clangxx_impl_osx-64 17.0.6 hc3430b7_20 + - clang_osx-64 17.0.6 hb91bd55_21 + - clangxx_impl_osx-64 17.0.6 hc3430b7_21 license: BSD-3-Clause license_family: BSD purls: [] - size: 19246 - timestamp: 1728518754526 + size: 19261 + timestamp: 1728550514642 - kind: conda name: clangxx_osx-arm64 version: 17.0.6 - build: h54d7cd3_20 - build_number: 20 + build: h54d7cd3_21 + build_number: 21 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_20.conda - sha256: 78f2f6efff9f98ab2195cd0ee1e2a765dd284d71668f3dd015ac92c054887c9d - md5: 0a548500862ec82c0375c47217ab593f + url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-17.0.6-h54d7cd3_21.conda + sha256: 02bc5ed5f37a6e3d4e244d09e4e5db7bfc9ad2b7342f14a68f2b971511b7afc7 + md5: 594c1db6262e284e928c9d4f28dc8846 depends: - - clang_osx-arm64 17.0.6 h54d7cd3_20 - - clangxx_impl_osx-arm64 17.0.6 h50f59cd_20 + - clang_osx-arm64 17.0.6 h54d7cd3_21 + - clangxx_impl_osx-arm64 17.0.6 h50f59cd_21 license: BSD-3-Clause license_family: BSD purls: [] - size: 19359 - timestamp: 1728518809333 + size: 19257 + timestamp: 1728550613321 - kind: conda name: click version: 8.1.7 @@ -1426,13 +1426,12 @@ packages: requires_python: '>=3.9' - kind: conda name: coverage - version: 7.6.1 - build: py312h024a12e_1 - build_number: 1 + version: 7.6.3 + build: py312h0bf5046_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.1-py312h024a12e_1.conda - sha256: 984f0e7b2ae7fdbb7c34d581c33f049c17aa5ac982246f1f2e63c56b17b50e52 - md5: 6b98fe7947dbc5a91c1e995cf3352002 + url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py312h0bf5046_0.conda + sha256: 68d81f2c75daa0ac59237953824d2e8893534cce501f8c8ed96dbbdd8b74fb75 + md5: 3a5b57249fc1499958ebf89d386e649c depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -1440,74 +1439,67 @@ packages: - python_abi 3.12.* *_cp312 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 363130 - timestamp: 1724954141864 + size: 361418 + timestamp: 1728881325238 - kind: conda name: coverage - version: 7.6.1 - build: py312h4389bb4_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.1-py312h4389bb4_1.conda - sha256: cca6398754855d8ffa8412b58a4439f0f183013ae730962ef9cc8150525f3871 - md5: 49b4e0600c84e7d53aae4c042f1e2e4a + version: 7.6.3 + build: py312h3d0f464_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py312h3d0f464_0.conda + sha256: 40dcfa87533bf460d340afeac1c58bec777d8736e47b0809d54097f96f6408f9 + md5: 9a8b8154f59e9ad0015be83737dce1c8 depends: + - __osx >=10.13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 388697 - timestamp: 1724954338520 + size: 361331 + timestamp: 1728881235576 - kind: conda name: coverage - version: 7.6.1 - build: py312h66e93f0_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.1-py312h66e93f0_1.conda - sha256: 1ad422ed302e3630b26e23238bd1d047674b153c4f0a99e7773faa591aa7eab9 - md5: 5dc6e358ee0af388564bd0eba635cf9e + version: 7.6.3 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py312h4389bb4_0.conda + sha256: 885a40d23d2c95911dc715ee4bf20539dec83cea9f1233c1ddbab1ee7e86876d + md5: 3412a3dae8748afad9d0620555d0a894 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 363627 - timestamp: 1724953903049 + size: 389654 + timestamp: 1728881652204 - kind: conda name: coverage - version: 7.6.1 - build: py312hb553811_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.1-py312hb553811_1.conda - sha256: fd0f5c84ef943618b378592e74010831a7962127e2759ea75437117ad3f00eee - md5: 49f066bb9337fd34a4c9c09f576ce136 + version: 7.6.3 + build: py312h66e93f0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py312h66e93f0_0.conda + sha256: 41f374cfa8cc780ce6c2d0eb3f2dab87430a418ca16d2f44ae3fa748cebb96af + md5: 5150131f8edecd7f23597a65b79d908d depends: - - __osx >=10.13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 362574 - timestamp: 1724954071768 + size: 362490 + timestamp: 1728881287583 - kind: conda name: cxx-compiler version: 1.8.0 @@ -1684,7 +1676,7 @@ packages: name: fastcan version: 0.2.4 path: . - sha256: efb4f783b99e70e4778500268e221496f8ea904c05ac8b24df433e727d6a2be9 + sha256: da75ad97940bb1047c5ae202f44418c774d8f90b82ec9dbac15b4ece67a881ff requires_dist: - scikit-learn>=1.5.0,<1.6 - furo ; extra == 'docs' @@ -3475,6 +3467,7 @@ packages: constrains: - openmp 19.1.1|19.1.1.* license: Apache-2.0 WITH LLVM-exception + license_family: APACHE purls: [] size: 305199 timestamp: 1728517141555 @@ -3491,6 +3484,7 @@ packages: constrains: - openmp 19.1.1|19.1.1.* license: Apache-2.0 WITH LLVM-exception + license_family: APACHE purls: [] size: 280398 timestamp: 1728517150988 @@ -3999,31 +3993,6 @@ packages: purls: [] size: 285150 timestamp: 1715441052517 -- kind: conda - name: numpy - version: 2.1.2 - build: py312h49bc9c5_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312h49bc9c5_0.conda - sha256: 5259371a9460bf64d0adf8ccdd0b9f471f6ea0ed6a9bceb11bdc96fcd6b0a649 - md5: 1b500875459c7b3b841f2a2a0490fae3 - depends: - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 6918217 - timestamp: 1728241123630 - kind: conda name: numpy version: 2.1.2 @@ -4098,6 +4067,31 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7466638 timestamp: 1728240348311 +- kind: conda + name: numpy + version: 2.1.2 + build: py312hf10105a_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py312hf10105a_0.conda + sha256: 81aadbcee02b5cbf74b543c29b0bbb7917431ee07d83351267f1fcad35d787c8 + md5: ff10ff589eedbf2006ccda86d11150a2 + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7048272 + timestamp: 1728665362128 - kind: conda name: openssl version: 3.3.2 @@ -4465,13 +4459,13 @@ packages: requires_python: '>=3.8' - kind: pypi name: pyparsing - version: 3.1.4 - url: https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl - sha256: a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c + version: 3.2.0 + url: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + sha256: 93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84 requires_dist: - railroad-diagrams ; extra == 'diagrams' - jinja2 ; extra == 'diagrams' - requires_python: '>=3.6.8' + requires_python: '>=3.9' - kind: conda name: pyproject-metadata version: 0.8.1 @@ -5184,16 +5178,16 @@ packages: requires_python: '>=3.8' - kind: pypi name: sphinx - version: 8.0.2 - url: https://files.pythonhosted.org/packages/4d/61/2ad169c6ff1226b46e50da0e44671592dbc6d840a52034a0193a99b28579/sphinx-8.0.2-py3-none-any.whl - sha256: 56173572ae6c1b9a38911786e206a110c9749116745873feae4f9ce88e59391d + version: 8.1.3 + url: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl + sha256: 09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2 requires_dist: - - sphinxcontrib-applehelp - - sphinxcontrib-devhelp - - sphinxcontrib-jsmath - - sphinxcontrib-htmlhelp>=2.0.0 + - sphinxcontrib-applehelp>=1.0.7 + - sphinxcontrib-devhelp>=1.0.6 + - sphinxcontrib-htmlhelp>=2.0.6 + - sphinxcontrib-jsmath>=1.0.1 + - sphinxcontrib-qthelp>=1.0.6 - sphinxcontrib-serializinghtml>=1.1.9 - - sphinxcontrib-qthelp - jinja2>=3.1 - pygments>=2.17 - docutils>=0.20,<0.22 @@ -5207,16 +5201,18 @@ packages: - colorama>=0.4.6 ; sys_platform == 'win32' - sphinxcontrib-websupport ; extra == 'docs' - flake8>=6.0 ; extra == 'lint' - - ruff==0.5.5 ; extra == 'lint' - - mypy==1.11.0 ; extra == 'lint' + - ruff==0.6.9 ; extra == 'lint' + - mypy==1.11.1 ; extra == 'lint' - sphinx-lint>=0.9 ; extra == 'lint' - types-colorama==0.4.15.20240311 ; extra == 'lint' - types-defusedxml==0.7.0.20240218 ; extra == 'lint' - - types-docutils==0.21.0.20240724 ; extra == 'lint' - - types-pillow==10.2.0.20240520 ; extra == 'lint' + - types-docutils==0.21.0.20241005 ; extra == 'lint' + - types-pillow==10.2.0.20240822 ; extra == 'lint' - types-pygments==2.18.0.20240506 ; extra == 'lint' - - types-requests>=2.30.0 ; extra == 'lint' + - types-requests==2.32.0.20240914 ; extra == 'lint' + - types-urllib3==1.26.25.14 ; extra == 'lint' - tomli>=2 ; extra == 'lint' + - pyright==1.1.384 ; extra == 'lint' - pytest>=6.0 ; extra == 'lint' - pytest>=8.0 ; extra == 'test' - defusedxml>=0.7.1 ; extra == 'test' diff --git a/pyproject.toml b/pyproject.toml index 4dc37a9..54d5e1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ license = { file = "LICENSE" } dependencies = ["scikit-learn>=1.5.0,<1.6"] -classifiers=[ +classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python",