Skip to main content

Random Forests for Change Point Detection

Project description

Random Forests for Change Point Detection

Change point detection aims to identify structural breaks in the probability distribution of a time series. Existing methods either assume a parametric model for within-segment distributions or are based on ranks or distances and thus fail in scenarios with a reasonably large dimensionality.

changeforest implements a classifier-based algorithm that consistently estimates change points without any parametric assumptions, even in high-dimensional scenarios. It uses the out-of-bag probability predictions of a random forest to construct a classifier log-likelihood ratio that gets optimized using a computationally feasible two-step method.

See [1] for details.

changeforest is available as rust crate, a Python package (on PyPI and conda-forge), and an R package (on conda-forge , linux and MacOS only). See below for their respective user guides.

If you use this code, please consider citing

@article{londschien2023random,
  title={Random forests for change point detection},
  author={Londschien, Malte and B{\"u}hlmann, Peter and Kov{\'a}cs, Solt},
  journal={Journal of Machine Learning Research},
  volume={24},
  number={216},
  pages={1--45},
  year={2023}
}

Python

Installation

To install from conda-forge (recommended), run

conda install -c conda-forge changeforest

To install from PyPI, run

pip install changeforest

Example

In the following example, we perform random forest-based change point detection on a simulated dataset with n=600 observations and covariance shifts at t=200, 400.

In [1]: import numpy as np
   ...: 
   ...: Sigma = np.full((5, 5), 0.7)
   ...: np.fill_diagonal(Sigma, 1)
   ...: 
   ...: rng = np.random.default_rng(12)
   ...: X = np.concatenate(
   ...:     (
   ...:         rng.normal(0, 1, (200, 5)),
   ...:         rng.multivariate_normal(np.zeros(5), Sigma, 200, method="cholesky"),
   ...:         rng.normal(0, 1, (200, 5)),
   ...:     ),
   ...:     axis=0,
   ...: )

The simulated dataset X coincides with the change in covariance (CIC) setup described in [1]. Observations in the first and last segments are independently drawn from a standard multivariate Gaussian distribution. Observations in the second segment are i.i.d. normal with mean zero and unit variance, but with a covariance of ρ = 0.7 between coordinates. This is a challenging scenario.

In [2]: from changeforest import changeforest
   ...: 
   ...: result = changeforest(X, "random_forest", "bs")
   ...: result
Out[2]: 
                    best_split max_gain p_value
(0, 600]                   400   14.814   0.005
 ¦--(0, 400]               200   59.314   0.005
 ¦   ¦--(0, 200]             6    -1.95    0.67
 ¦   °--(200, 400]         393   -8.668    0.81
 °--(400, 600]             412   -9.047    0.66

In [3]: result.split_points()
Out[3]: [200, 400]

changeforest correctly identifies the change points at t=200 and t=400. The changeforest function returns a BinarySegmentationResult. We use its plot method to investigate the gain curves maximized by the change point estimates:

In [4]: result.plot().show()

Change point estimates are marked in red.

For method="random_forest" and method="knn", the changeforest algorithm uses a two-step approach to find an optimizer of the gain. This fits a classifier for three split candidates at the segment's 1/4, 1/2 and 3/4 quantiles, computes approximate gain curves using the resulting classifier log-likelihood ratios and selects the overall optimizer as a second guess. We can investigate the gain curves from the optimizer using the plot method of OptimizerResult. The initial guesses are marked in blue.

In [5]: result.optimizer_result.plot().show()

One can observe that the approximate gain curves are piecewise linear, with maxima around the true underlying change points.

The BinarySegmentationResult returned by changeforest is a tree-like object with attributes start, stop, best_split, max_gain, p_value, is_significant, optimizer_result, model_selection_result, left, right and segments. These can be interesting to investigate the output of the algorithm further.

The changeforest algorithm can be tuned with hyperparameters. See here for their descriptions and default values. In Python, the parameters can be specified with the Control class, which can be passed to changeforest. The following will build random forests with 50 trees:

In [6]: from changeforest import Control
   ...: changeforest(X, "random_forest", "bs", Control(random_forest_n_estimators=50))
Out[6]: 
                    best_split max_gain p_value
(0, 600]                   416    7.463    0.01
 ¦--(0, 416]               200   43.935   0.005
 ¦   ¦--(0, 200]           193  -14.993   0.945
 ¦   °--(200, 416]         217    -9.13   0.085
 °--(416, 600]             591   -12.07       1 

The changeforest algorithm still detects change points at t=200, but is slightly off with t=416.

Due to the nature of the change, method="change_in_mean" is unable to detect any change points at all:

In [7]: changeforest(X, "change_in_mean", "bs")
Out[7]: 
          best_split max_gain p_value
(0, 600]         589    8.625  

R

To install from conda-forge, run

conda install -c conda-forge r-changeforest

See here for a detailed description on installing the changeforest R package with conda.

Example

In the following example, we perform random forest-based change point detection on a simulated dataset with n=600 observations and covariance shifts at t=200, 400.

> library(MASS)

> set.seed(0)
> Sigma = matrix(0.7, nrow=5, ncol=5)
> diag(Sigma) = 1
> mu = rep(0, 5)
> X = rbind(
    mvrnorm(n=200, mu=mu, Sigma=diag(5)),
    mvrnorm(n=200, mu=mu, Sigma=Sigma),
    mvrnorm(n=200, mu=mu, Sigma=diag(5))
)

The simulated dataset X coincides with the change in covariance (CIC) setup described in [1]. Observations in the first and last segments are independently drawn from a standard multivariate Gaussian distribution. Observations in the second segment are i.i.d. normal with mean zero and unit variance, but with a covariance of ρ = 0.7 between coordinates. This is a challenging scenario.

> library(changeforest)

> result = changeforest(X, "random_forest", "bs")
> result
                 name best_split  max_gain p_value is_significant
1 (0, 600]                   410  13.49775   0.005           TRUE
2  ¦--(0, 410]               199  61.47201   0.005           TRUE
3  ¦    ¦--(0, 199]          192 -22.47364   0.955          FALSE
4  ¦    °--(199, 410]        396  11.50559   0.190          FALSE
5  °--(410, 600]             416 -23.52932   0.965          FALSE

> result$split_points()
[1] 199 410

changeforest correctly identifies the change point around t=200 but is slightly off at t=410. The changeforest function returns an object of class binary_segmentation_result. We use its plot method to investigate the gain curves maximized by the change point estimates:

> plot(result)

Change point estimates are marked in red.

For method="random_forest" and method="knn", the changeforest algorithm uses a two-step approach to find an optimizer of the gain. This fits a classifier for three split candidates at the segment's 1/4, 1/2 and 3/4 quantiles computes approximate gain curves using the resulting classifier log-likelihood ratios and selects the overall optimizer as a second guess. We can investigate the gain curves from the optimizer using the plot method of optimizer_result. The initial guesses are marked in blue.

> plot(result$optimizer_result)

One can observe that the approximate gain curves are piecewise linear, with maxima around the true underlying change points.

The binary_segmentation_result object returned by changeforest is a tree-like object with attributes start, stop, best_split, max_gain, p_value, is_significant, optimizer_result, model_selection_result, left, right and segments. These can be interesting to investigate the output of the algorithm further.

The changeforest algorithm can be tuned with hyperparameters. See here for their descriptions and default values. In R, the parameters can be specified with the Control class, which can be passed to changeforest. The following will build random forests with 20 trees:

> changeforest(X, "random_forest", "bs", Control$new(random_forest_n_estimators=20))
                         name best_split   max_gain p_value is_significant
1 (0, 600]                            15  -6.592136   0.010           TRUE
2  ¦--(0, 15]                          6 -18.186534   0.935          FALSE
3  °--(15, 600]                      561  -4.282799   0.005           TRUE
4      ¦--(15, 561]                  116  -8.084126   0.005           TRUE
5      ¦    ¦--(15, 116]              21 -17.780523   0.130          FALSE
6      ¦    °--(116, 561]            401  11.782002   0.005           TRUE
7      ¦        ¦--(116, 401]        196  22.792401   0.150          FALSE
8      ¦        °--(401, 561]        554 -16.338703   0.800          FALSE
9      °--(561, 600]                 568  -5.230075   0.120          FALSE    

The changeforest algorithm still detects the change point around t=200 but also returns false positives.

Due to the nature of the change, method="change_in_mean" is unable to detect any change points at all:

> changeforest(X, "change_in_mean", "bs")
      name best_split max_gain p_value is_significant
1 (0, 600]        498 17.29389      NA          FALSE

References

[1] M. Londschien, P. Bühlmann and S. Kovács (2023). "Random Forests for Change Point Detection" Journal of Machine Learning Research

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

changeforest-1.2.0-cp314-cp314t-win_amd64.whl (319.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

changeforest-1.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl (501.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl (494.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl (444.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

changeforest-1.2.0-cp314-cp314t-macosx_10_13_x86_64.whl (454.7 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

changeforest-1.2.0-cp314-cp314-win_amd64.whl (320.7 kB view details)

Uploaded CPython 3.14Windows x86-64

changeforest-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl (501.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl (494.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp314-cp314-macosx_11_0_arm64.whl (445.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

changeforest-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl (455.5 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

changeforest-1.2.0-cp313-cp313-win_amd64.whl (320.3 kB view details)

Uploaded CPython 3.13Windows x86-64

changeforest-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl (502.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl (494.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp313-cp313-macosx_11_0_arm64.whl (445.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

changeforest-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl (455.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

changeforest-1.2.0-cp312-cp312-win_amd64.whl (319.7 kB view details)

Uploaded CPython 3.12Windows x86-64

changeforest-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl (502.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl (494.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (444.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

changeforest-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl (455.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

changeforest-1.2.0-cp311-cp311-win_amd64.whl (318.0 kB view details)

Uploaded CPython 3.11Windows x86-64

changeforest-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl (500.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl (494.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (447.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

changeforest-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl (459.0 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

changeforest-1.2.0-cp310-cp310-win_amd64.whl (318.1 kB view details)

Uploaded CPython 3.10Windows x86-64

changeforest-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl (501.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl (494.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp310-cp310-macosx_11_0_arm64.whl (447.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

changeforest-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl (459.1 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

changeforest-1.2.0-cp39-cp39-win_amd64.whl (320.6 kB view details)

Uploaded CPython 3.9Windows x86-64

changeforest-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl (503.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

changeforest-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl (495.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

changeforest-1.2.0-cp39-cp39-macosx_11_0_arm64.whl (448.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

changeforest-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl (461.2 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file changeforest-1.2.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 354421a7951e026448da90d9c7d2c7d3c72428e7a3c236773f83af110f41e7bc
MD5 7e328d55834e370749c1840f368fc425
BLAKE2b-256 68e981b16c896ed453c10bc1bf3a33c82f02fdba39c18d18e5623ce2b08a74f1

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e25ccb4182f7de10a6388c2d4ac73d85f9dc141e4b711d2f61b7eb0d8c0ead13
MD5 cff634b77b91dc3adb9aa1536aee4eaf
BLAKE2b-256 8e5daf903cda0ada09f1a00d6d99db69b9c1f5544207131d5a1b8d8ec94daa76

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 783230f4270c60456c0d851c9d9a5fe965d8ebf559a8bd8b96c5c547352eddac
MD5 e5a175a6b99194cdb28b2fe59c8d41f6
BLAKE2b-256 6d874f3584e1a85739018bd543fe0a131b1cc374d028f211cd3954ec1596e2a2

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b26981ed3a623ba97aede3ccf554da72f2e45c26c8bc3d4dd91a6e41cb01dd9
MD5 34745c179c5209e5d60bfb24ead46dfa
BLAKE2b-256 7223b55f46e96750125a97363b754a7d47f5f30825079addbce05411f765c3ca

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 222d4e81ce522605dd0f34c2f182e41d6b2a7a44e0f32bf9971fb0967855d2ae
MD5 6be7b22558783a89a80f424cab573dfd
BLAKE2b-256 7037af69a85332e78e6204b50ddceaea9b0d623534fce44f4e82b749fe7b03b6

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 54727689512921882d2653f1c88d65250e262578a14bad2ccaad0f2abce91e7f
MD5 e7c64e95e6fba1cc6c2c4f678e907293
BLAKE2b-256 f09a38ae57dc87682af406bbb61cb6be1bd44527ed38fb2b364cb95af173e3e6

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8366fc8a1441478d395216ab1a0627b43b1c085986f5dd3075711b639c9f915d
MD5 c1a87821b7da42fa696a8eb5bb596fbf
BLAKE2b-256 e8a59ce66c01d526f0ce088920ac8bfb8df312e1cd4f22c9dc6201a912e48c2a

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ce4b30d1ea22bb42584c1a7818314cf0cd50c8a58f251dc0bde9a0125c899f87
MD5 df8f0473e7493857a5bb5f402180a566
BLAKE2b-256 d994a05bdae2826203e20c2fa80f66e711a2788950788b46a59c2bb9bc8ad67d

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e378eb3c545e37cd094d83463dfdf06b15bfa50e0141d589eecd0b2d41451971
MD5 0e8f5a8afaf7a5b3c4f9999f16c0b761
BLAKE2b-256 2e215567c6889ba91e56673e7cdb910574807ca672155b7bdbc4686b3e6992d6

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1636f2cbe9c9ec12e7662a5cef35966a8e20767a186264ea7c6200c439419c52
MD5 5534c48a478b9066ea4b8a379c850813
BLAKE2b-256 d7a3f041f6aad636abae3e6c3fc5c8c03dfeb70d876b2500d689f687101ad812

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e9541786e4144ede79fac4cdc8390c2450eb763015b169aef1ddaace4b541e42
MD5 8179acca6c55d035f1bdd36fb4d9b0cd
BLAKE2b-256 f6b6663cef07143560125a9d5c2efcc84bcfd31e18fa7c8ea30217e07b176f91

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ed06045b40567b587163c96ab77a9781b5cc16b94c84125c833e4af4e5e578cb
MD5 8acf3d373b26791a9e2f97d85f649c14
BLAKE2b-256 1f00ea731f9a6329c6f57da9824047c841257fa454dba75f64b6a3c1339f41a2

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f3c0fb38c0f5122eb34967b021b31db7460586bb48f7509f45036ab3a29fc6db
MD5 9cf4e22d6092c83b18726bbbd1e73174
BLAKE2b-256 f3b4f521af216813a49a9bad66ef62fd9b72f64521ffe88c0cdfff7ee0e8cd4f

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5f387d96dc50660dee2b1a520870a17a43c5be1b4aa4184db28968d244f2aaf
MD5 e57c26c15686744a762ed81f71fb56e2
BLAKE2b-256 b726b6f8095432a4372af8ec6005a08b63e6846c8b095e340934344db03f3ac4

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3a03b3e8ba5c997610c5bed874cf8f2973bfd4de6a8a012ed91011c09bce4e40
MD5 75cc6f5af6ae4a973d68239a3d889093
BLAKE2b-256 7a0f0bc271ba10b4675be2a993f0473b4a8620f50c2213ae419e70d2acb1710a

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 843dc1cee7bcdf21fe673f3e6b16c6f43621333afd62e5a0b99276640c240d9d
MD5 d1a436aa3f1a4ff9c2b580f503ae61a4
BLAKE2b-256 011c6c5ea6c45f5c7ad11d04fde0572827eeb5b80af181b9917ea57612a65b84

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e5f7ddfaacf2a4b1d5d724cbcf4064d6e041a4d2af3078056466549ec7c40b0d
MD5 559cffdd1b16db9dbd3ee1da84560590
BLAKE2b-256 be283477dad34c820ef7869b54a1dad149474955ad3cca1e8ffd4ebc82becee5

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 55c87045ff7e179d2d75b696ef41e69ad0fb15b735ab308e053278d9c1d77fed
MD5 d413a2a583c1cff9b648fd1e04c4f186
BLAKE2b-256 436d4e684ac8e3e85bba7563982e832e7b9c57746e3e62173b1d7c80954601ae

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88d3781a2f13ef64e192a8adda524a748d3ab3d59f8b6cbfc73d1f4152c6916a
MD5 591315359a3e58d9561d5604935d07e8
BLAKE2b-256 8c0e3b313d5a06fe7b770ecde33802d875256cd020db1e67d14838baaaa261d0

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 26133e0a401db86c410ecea20f820b56c2553029d522389cdae735f3434d08b0
MD5 9a96c1823c61d8585c218442f29314ff
BLAKE2b-256 2921ea8c34e715a04521d8fb26036df5b041c1d5067f7a68e22d7ac093b75850

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f78b15fb818c5a3c1433c713eebede06d0412c9309891cde9d890bb81776e859
MD5 fc9ea7a85d642be6953ddaa94e5af52a
BLAKE2b-256 a8f9e2d825d2ef7d8833601bac98328d92018331a6ef57d0ab34827fdd4a9500

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 50cba5a04bf796dc7d26f51719d0000b4a8d193a62727f4c76d0a648bbb289ea
MD5 e4a7bb5c5be394128749473f1446820d
BLAKE2b-256 d12988107b53a5bea34ee4feb0600a7f37798831bd6274d47dfb7fbe7916f915

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ea6d8d77ab15f515b5b4f0fedf591272c016dbb060b844c8dcfe52586c2b47de
MD5 962bbfeda9980ebc03048bec52fb3b5f
BLAKE2b-256 e90a7f9e83849b25444e8213c4de5e25c164e5d998dfb3d1833f98a28e96d5e5

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe43b963a708bbf3bc0f544d1234de9563fb45f680d88f002d3f312c7a14796e
MD5 8c4493e1ccdcaf8443607ff28dd31a98
BLAKE2b-256 04a67f55bb948be088dbed97e9f376e179692b43ab84f7f522bae5e69a5f2c4d

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b91f8d5bf5cf5f84c8db0ed35f420d468f8f8de8f689cf0d96fae9f3671da590
MD5 e4c7fd17ec2ee3e903ab24d45ca2d6a0
BLAKE2b-256 60d044157edf2bfef9dec90026650031f3e6a5f2941aff869f1e03c8f2cd7061

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f1e3e71dd5c0c76bd148891f10edaa35725f849ae86574da17e262b6214b6189
MD5 1851129d531435a437dd44c5582e450d
BLAKE2b-256 2c7fda5531133fcc5648c48fc21556eeae952c70dae9ee451848b30e21f4d153

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9e8d8a0aa0bcfddd403bdd13ed47e8b4e414cd17fa45ce9f26286ec462cb43d
MD5 0d05079724e4afedeb9c2d30c0c72c19
BLAKE2b-256 f756ccf6eab2436f0b37f5b76e68aa66469f85248e65e4d0a508c9be9df5e2fe

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3067390b7ad4eb54de899e4f2eeb43e05ca8abc70562ba879aca223303dbf6d4
MD5 3a8df77fbefad722f3a9b18ae939e28c
BLAKE2b-256 657b93564b97901d566430caf5cb290129b28931bfb921fa33ddd0e26d31ebbf

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67c039e6962370b7944eed79d385cde65ba00709196fe23a09990893193f464d
MD5 2dabbcd8f51a2418b96e98835073d33c
BLAKE2b-256 26e23dd59cb573314ec41137a93bd79c6480149c3ca14107939c3f7082ec89d2

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0d5d927206a15c7b4286850f14adcfc454b283516f88c36c8b13dc34c45183bd
MD5 9c0cf267a924cc40e11e9b66b9f9eadb
BLAKE2b-256 529a7222b8a0776d3232648128d0d603b86b49379b37636a5beb4ea5fcd22c6c

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: changeforest-1.2.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 320.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for changeforest-1.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6f10f77a6b72eca7b4ebde5ee30a5a5bd4a0b2c899b915b826bac65acf5f6ff8
MD5 2b2e93f9bc8b12e9679a662ab8086f52
BLAKE2b-256 0d5b0e73967df62c17f1fc1d6c94768fc78237337dfe258eecb2fab4360b6d2a

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 618e117a062f1ae6aee29cdd700be386f8ba260cdf9f159cad6eb1967c4423c1
MD5 cbab8dfe3d882f8a568df5276d1d881f
BLAKE2b-256 ae7b0e153372f4dfe9e631d4584935e0a85f186ae0d0e080721afca5c70d38a0

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 73473049a671fb4be058acf418cd997d4662f6ee0c8e8c35b0f396ff002b6b59
MD5 0d85ebf1720313021f35f1d860068f05
BLAKE2b-256 bebe3f84d88d36c90116585b5dd6739dd45a55e3c766de4c1b10804f89a4639b

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e8719caedfd6bdec2c51014de2429575d5b103e190b898cfb7282cbf7131950
MD5 8d1837195f676c06fc9ff2f32349578b
BLAKE2b-256 310433c10ea5435494aff8b59ce47f844f21387b0813417412ad4faad114fbc2

See more details on using hashes here.

File details

Details for the file changeforest-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for changeforest-1.2.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 99eb39ff4b6d0f6beacfbfb8a750aec5282040450eb10dfcbfc85a98b0363898
MD5 288cbb65997605baf42dc051da2139d6
BLAKE2b-256 200ba82385d0d92518791f3db039558f8c27b47dc5c7eee6cddc2b08f6feae2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page