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 Distribution

changeforest-1.2.1.tar.gz (370.6 kB view details)

Uploaded Source

Built Distributions

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

changeforest-1.2.1-cp314-cp314t-win_amd64.whl (319.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

changeforest-1.2.1-cp314-cp314t-manylinux_2_28_x86_64.whl (510.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp314-cp314t-manylinux_2_28_aarch64.whl (493.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.13+ x86-64

changeforest-1.2.1-cp314-cp314-win_amd64.whl (320.9 kB view details)

Uploaded CPython 3.14Windows x86-64

changeforest-1.2.1-cp314-cp314-manylinux_2_28_x86_64.whl (511.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp314-cp314-manylinux_2_28_aarch64.whl (494.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

changeforest-1.2.1-cp314-cp314-macosx_10_13_x86_64.whl (455.4 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

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

Uploaded CPython 3.13Windows x86-64

changeforest-1.2.1-cp313-cp313-manylinux_2_28_x86_64.whl (510.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp313-cp313-manylinux_2_28_aarch64.whl (493.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

changeforest-1.2.1-cp313-cp313-macosx_11_0_arm64.whl (445.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

changeforest-1.2.1-cp312-cp312-win_amd64.whl (319.8 kB view details)

Uploaded CPython 3.12Windows x86-64

changeforest-1.2.1-cp312-cp312-manylinux_2_28_x86_64.whl (511.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp312-cp312-manylinux_2_28_aarch64.whl (493.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

changeforest-1.2.1-cp311-cp311-win_amd64.whl (318.1 kB view details)

Uploaded CPython 3.11Windows x86-64

changeforest-1.2.1-cp311-cp311-manylinux_2_28_x86_64.whl (511.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp311-cp311-manylinux_2_28_aarch64.whl (493.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

changeforest-1.2.1-cp311-cp311-macosx_11_0_arm64.whl (446.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

changeforest-1.2.1-cp310-cp310-win_amd64.whl (318.2 kB view details)

Uploaded CPython 3.10Windows x86-64

changeforest-1.2.1-cp310-cp310-manylinux_2_28_x86_64.whl (510.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp310-cp310-manylinux_2_28_aarch64.whl (493.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

changeforest-1.2.1-cp310-cp310-macosx_10_12_x86_64.whl (459.0 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

changeforest-1.2.1-cp39-cp39-win_amd64.whl (320.7 kB view details)

Uploaded CPython 3.9Windows x86-64

changeforest-1.2.1-cp39-cp39-manylinux_2_28_x86_64.whl (512.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

changeforest-1.2.1-cp39-cp39-manylinux_2_28_aarch64.whl (494.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

changeforest-1.2.1-cp39-cp39-macosx_11_0_arm64.whl (448.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

changeforest-1.2.1-cp39-cp39-macosx_10_12_x86_64.whl (461.1 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file changeforest-1.2.1.tar.gz.

File metadata

  • Download URL: changeforest-1.2.1.tar.gz
  • Upload date:
  • Size: 370.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for changeforest-1.2.1.tar.gz
Algorithm Hash digest
SHA256 ab2b7d770a62d4528b710d0b760b2ceef618a34967fd12c792704a05b1bc8de1
MD5 acf395d66e0e70535aec5429eea28a69
BLAKE2b-256 52e8a57958e670a5c1fc0325d71f4fa0f116d90dd5c90ebd4ffc6a3b0f66a3dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 a993d6c326c534c703f4647a3ddfa1596a7eb93d32b97c5f31e05a707f6e22e2
MD5 710842e8676ff3681948020cdcd1bb1e
BLAKE2b-256 4fe153046a5a2d0e9a2cf368a99107b2c8cba79140997bf742a67774ca989b71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ea4120aeac87bf17497ee5fda42f695fd177d770be4903292f31f67f06801c3
MD5 31f3410563d92bc18271cdda28f097d7
BLAKE2b-256 5f68070465b1e4e5519027396b75ba3cf934d70d24ded6edb116967172b71128

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bdac276ffe5dfe571c840487a1da5e61e2657fc0c6922d1c97231b1132349f0d
MD5 e33c4c2a8076e69da37fe487c1badacf
BLAKE2b-256 fa2d4a5c6f4a4ff6c979fab034721fa01b051adf7a413784700d664891d76232

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cffc8bfd69214de8d60e7571633d9f8489ed26658b4a9bafeeb9fb61da6fa4f
MD5 8cc9805bc914c11202bd234ce6d7aba2
BLAKE2b-256 535587a53451221147f5cbe2b986c97aa47634095b86201dd0cc108ce99d7fe6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 411ccf5abe294d7e9bf4c85951885b19534e16646039a1ce284dd5972f98dfd7
MD5 362ba76db2fa51b1175dcd1ff0bdf208
BLAKE2b-256 b84b092b6e2d0362fa3ce4afb7962a1ea63ff6033090958748c1fc162940be97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b27bbebea4d8c22e211bdd7e609a19d888648f15cd5319a5c3e9282bd01458c1
MD5 d54493a68d26d88ca9737c5503a36cbe
BLAKE2b-256 9d0035d01cb9a8c7960940d43b1e125f6451826fd39d890fad1485be33adc6b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23ee5159624192e01e1772216c44845adbeee00d7b7d80385f1d2ff05755f81c
MD5 a2db8e4e5c383cd4aaf561d415bbc748
BLAKE2b-256 62291d7b2aee3635225a06ba2bb05faee7515675c1a7146f9284a699497871f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bdaf7e44aac1c30922cbe4277fd98526de8dc22a4a12c9d9476f1f24ad40d15b
MD5 e8b2981e9789241afa7a0788873f5ab7
BLAKE2b-256 6a4361676b98a4c80d6a739e1290f9c587f1a032313bfe250bb1a45f277e249a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cddd39b7ef0cc27d865dc749670395b039232cac1127282a7ad0cdb557bd33ab
MD5 7954b57817a1160df9edf4f16c3687ec
BLAKE2b-256 48c1fa0d7d2599332083ba0707ab5785d8b81a3296a9c7281bf17f2fea7d3c0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 15c92963684f7d87ddc047d4eb7469603bd470503748bbbeafd4216fea27ba45
MD5 bdbf711337b760d0427ebf9e823df5c3
BLAKE2b-256 ef01a82663217f3193233e74ac5ee7cbb5637226645bafb0af89c1e642eadb81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f14841c72f862d177a315b5f71d3afb9d29e7c89b45453fb44935d6e36c6ed73
MD5 9d489723b2b85c108644b2de369718bc
BLAKE2b-256 893a5b6cb76779f1d19be0a083f725e19c49e903af59f830125ac81f7c4a8f07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2fb92175d365e904b84bcbb0bd9d5aad7d1bdc9c929693599857b739900ad017
MD5 2dabe5f9e07bf85a2375cf64e5b65c0d
BLAKE2b-256 abf3ccb3053f283bd7da8f8b5aa148b45a418819110896d2259ee9274fa62108

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5d434e1cf65aba15e7c56603012f898068286eef4854b4f162635bd546211a39
MD5 2f1b32e82b54b4d6a915e054bdd52028
BLAKE2b-256 478d6465ca7897a8d05f6797d9369b77fd39b7ec5a675c29e410f2f1c0d60175

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf2a0dcee75f7cff36eeaca0da80fe3529188a7eda3678396d213ca1bee401ae
MD5 2057996be20442d957fcf87ab389a01f
BLAKE2b-256 20959dd587b3b0afae4e9e40bf93a48f07a597f33d020fa81f64f69d403376de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ed279aff6a0016bdad93a0fa97d5e564d885f5ff2d5a357e6d8a19548b2a44f5
MD5 460210180ae1d2d04abc6b433be081b2
BLAKE2b-256 6f9c4f4b77e632ab879a1b60fde1199187030a48cf1f72d2d185fa2b188bbe31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 424fee1731427aa1c248bb1ce2d131e5c183eb0543c9e0df4991f5920230d081
MD5 41558d50d7368081d7c728893a27aa3f
BLAKE2b-256 e757eb37d2631534b8a3a916980489ddaec0c6c76d348e6731971c68d854bf65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4dcfe56197c4c09713dbb68aef88ab97636863ef131aa40e627237d9d44bc05a
MD5 3946ecb0dc65de988f217d82475acfc5
BLAKE2b-256 fb06b13c4ccdc2e4139b7477c19e74791b56b42b1014049e0ac6d2e4593ff52b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a3af76a285ef6b212ba11daeda2c96dde99b84c964d4c3a7d905464e1bf26fbb
MD5 849da409cee2e2999f52918accfaa85e
BLAKE2b-256 af9ab32bd587cc0d290a77234f401ecdd5359f9472f88c163620a2ec1fe4f4d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89ec5efabe1a4558ce92f4926f0c9341aad6d564dafe98bda1236bbc508a0466
MD5 2e38ca2fbf6ce513018d5957cdb90329
BLAKE2b-256 28669a09e4feac1fe541b0c71294eaf7e6debddb55db3782b2a7168268bca8e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d7f401f077990a2c88341868aa2fa4667a652ddeb25b20ba1461e42a5e4159c6
MD5 1868d5aea5196f9545e995033796e6e7
BLAKE2b-256 c15377b22534bcfd090a1914a1d6fbc63aa595a26b5091421fa9817d939fd76a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fa1507d80ce9dd75065191a4d08160d0f076cc597ad764ec00972548cb72f73a
MD5 161e89495fe9ae96477a42ad98be9a43
BLAKE2b-256 d8c4ef69a9a109614da04caaea03208925bb78c71b9196c7800eeae486e73401

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2dfe35a379170acfbe963f2e1d48f4e99af72e35f4c55f7a2deaa5a0f3197dd0
MD5 7355c449e78d48328b0d00651a12c1fb
BLAKE2b-256 a155406b81d39b23acfd3267949bf1014e206aac60db2ef18edc9d32ea23d82b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2a1752b8e062967be166839819d52b90036e76317c9740f0da4d952e29a30a0e
MD5 285701e9db38ee852da6e973617cb820
BLAKE2b-256 520d534d2f1c202dec67fc7d086a90f7c3076805627998ec77c5bac2fae1dc52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d3b8f7897bc7b3ff36ad030eefae2bd1078cb39e85b019e9eb802a75e62b765b
MD5 d4b64f1e58fe4744ba3288bf7f3a1748
BLAKE2b-256 3a65cc704ebab73b8c85f95b114a53aac0867ed40167b8029d2dae7842ec760b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 777931813e2600c12461aa449fcd5766b7e4135e769fc5fa551c8615736ef9ce
MD5 f5c9375658516e41588eda64be566a34
BLAKE2b-256 2d1daba875aadf2785b55d7bf309ea7eb1df46b2e1191719a8a8419182a6e1de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 84e66bf98d7dc9cc1fb63c4dc756c4b5d2014859089dcf41469608e889e50513
MD5 1c417fa0dc75d548b726be30700d78bb
BLAKE2b-256 d12973b101d7e17d2003c1bf820d801f09407633865a8b496abb7f3ecb15bd01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 adef5950487a7471b1a42ac352bec96399485c9d3ad59bb10692ed4f1698f5bf
MD5 cf37e2b5f8d3416cc12de3a8174cc7f1
BLAKE2b-256 fbef3077cb15c3f6ef80aa3db960dee2ddfdb5bd3cfb2926a59986db86f0f562

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6d604f74f9f975b48613eae2d93903a6c517203ece56a0360410f766c0f2f3e3
MD5 9d6e55d2beb8d120a7c68a012e6a9400
BLAKE2b-256 cfb8cfa67984184f83b2f3ddac8c7229c05038b473793454bd4987065fa3c326

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a78500980d77412486a9dd0181ffef71f54e905344152ab5b184b06efaef6e5
MD5 b7495a6a657234fcd53e6eac311e932c
BLAKE2b-256 ea3e9f153e8954837037f3c5613730ee293398876dca2b2e5f9e2229f21b9ab0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 00eebc26b0553cd3891996c91be8f3fbf97f22bce9f51c4c633f0012198b4a3f
MD5 63f5748fd73af65f4d676ded4620c141
BLAKE2b-256 ad293a666be51eb6d40559a1b640af444379f745ef410c71629566e488d0d4ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: changeforest-1.2.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 320.7 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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6d48de45caa807fbc0ef482561a52a05534af29af6465798df9fbcbc69b739cd
MD5 2405b7b9e1c9b2c83e176ec11dfb3d0b
BLAKE2b-256 33c60aced315e8e62def1f18ea3df7bc36bfd3519d833bb6657ea4d7cc8a7131

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 79629cdc9d54136510e0009bc443591a383c5ba1c9b3c7eabebe520595ee06db
MD5 6284857fbff12f9fc02a49eec8441233
BLAKE2b-256 bd661e8deab6bce6aaab6513ede386c810303418e9fb973148890726172df33a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7c04cbef250f38133d1d354c8b770ae7f39f445a1ba53c438154b74ffad02800
MD5 a3c94566450061558a5810ddd2fa9780
BLAKE2b-256 4d2e36d906b1f6406560b65abb22346d72c42655dc096ef3344c9cecb94ebd77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d407a1d5c450a64864a03fa4448d5c791010e729ad0013c04e5c5e536ce7d8b6
MD5 c5333fe7e55e95f01e0539e620851b58
BLAKE2b-256 b93bb50667ebc13d2a0f4ecdfb5466b9719c4d12c62e4cfaf17599a9ca8a953a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for changeforest-1.2.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 603c5de399262b0e2c0df08083f1b5b89c730db4039f21913cc9cd806281c2a0
MD5 af8dec97c67466d5911e81c6b0014016
BLAKE2b-256 755593771ef3753b1f02f20b6e245ceaf398b3b65961fed230feceeef825d368

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