Chaine
Chaine is a modern, fast and lightweight Python library implementing linear-chain conditional random fields. Use it for sequence labeling tasks like named entity recognition or part-of-speech tagging.
The main goals of this project are:
- Usability: Designed with special focus on usability and a beautiful high-level API.
- Efficiency: Performance critical parts are written in C and thus blazingly fast. Loading a model from disk and retrieving feature weights for inference is optimized for both speed and memory.
- Persistency: No
pickleorjoblibis used for serialization. A trained model will be compatible with all versions for eternity, because the underlying C library will not change. I promise. - Compatibility: There are wheels for Linux, macOS and Windows. No compiler needed.
- Minimalism: No code bloat, no external dependencies.
Install the latest stable version from PyPI:
pip install chaine
Table of contents
Algorithms
You can train models using the following methods:
- Limited-Memory BFGS (Nocedal 1980)
- Orthant-Wise Limited-Memory Quasi-Newton (Andrew et al. 2007)
- Stochastic Gradient Descent (Shalev et al. 2007)
- Averaged Perceptron (Collins 2002)
- Passive Aggressive (Crammer et al. 2006)
- Adaptive Regularization of Weight Vectors (Mejer et al. 2010)
Please refer to the paper by Lafferty et al. for a general introduction to conditional random fields or the respective chapter in Speech and Language Processing.
Usage
Training and using a conditional random field for inference is easy as:
>>> import chaine
>>> tokens = [[{"index": 0, "text": "John"}, {"index": 1, "text": "Lennon"}]]
>>> labels = [["B-PER", "I-PER"]]
>>> model = chaine.train(tokens, labels)
>>> model.predict(tokens)
[['B-PER', 'I-PER']]
You can control verbosity with the argument
verbose, where0will set the log level toERROR,1toINFO(which is the default) and2toDEBUG.
Features
One token in a sequence is represented as a dictionary with describing feature names as keys and respective values of type string, integer, float or boolean:
{
"text": "John",
"num_characters": 4,
"relative_index": 0.0,
"is_number": False,
}
One sequence is represented as a list of feature dictionaries:
[
{"text": "John", "num_characters": 4},
{"text": "Lennon", "num_characters": 6}
]
One data set is represented as an iterable of a list of feature dictionaries:
[
[
{"text": "John", "num_characters": 4},
{"text": "Lennon", "num_characters": 6}
],
[
{"text": "Paul", "num_characters": 4},
{"text": "McCartney", "num_characters": 9}
],
...
]
This is the expected input format for training. For inference, you can also process a single sequence rather than a batch of multiple sequences.
Generators
Depending on the size of your data set, it probably makes sense to use generators. Something like this would be totally fine for both training and inference:
([extract_features(token) for token in tokens] for tokens in dataset)
Assuming dataset is a generator as well, only one sequence is loaded into memory at a time.
Training
You can either use the high-level function to train a model (which also loads and returns it):
>>> import chaine
>>> chaine.train(tokens, labels)
or the lower-level Trainer class:
>>> from chaine import Trainer
>>> trainer = Trainer()
A Trainer object has a method train() to learn states and transitions from the given data set. You have to provide a filepath to serialize the model to:
>>> trainer.train(tokens, labels, model_filepath="model.chaine")
Hyperparameters
Before training a model, you might want to find out the ideal hyperparameters first. You can just set the respective argument to True:
>>> import chaine
>>> model = chaine.train(tokens, labels, optimize_hyperparameters=True)
This might be very memory and time consuming, because 5-fold cross validation for each of the 10 trials for each of the algorithms is performed.
or use the HyperparameterOptimizer class and have more control over the optimization process:
>>> from chaine import HyperparameterOptimizer
>>> from chaine.optimization import L2SGDSearchSpace
>>> optimizer = HyperparameterOptimizer(trials=50, folds=3, spaces=[L2SGDSearchSpace()])
>>> optimizer.optimize_hyperparameters(tokens, labels, sample_size=1000)
This will make 50 trials with 3-fold cross validation for the Stochastic Gradient Descent algorithm and return a sorted list of hyperparameters with evaluation stats. The given data set is downsampled to 1000 instances.
Example of a hyperparameter optimization report
[
{
"hyperparameters": {
"algorithm": "lbfgs",
"min_freq": 0,
"all_possible_states": true,
"all_possible_transitions": true,
"num_memories": 8,
"c1": 0.9,
"c2": 0.31,
"epsilon": 0.00011,
"period": 17,
"delta": 0.00051,
"linesearch": "Backtracking",
"max_linesearch": 31
},
"stats": {
"mean_precision": 0.4490952380952381,
"stdev_precision": 0.16497993418839532,
"mean_recall": 0.4554858934169279,
"stdev_recall": 0.20082402876210334,
"mean_f1": 0.45041435392087253,
"stdev_f1": 0.17914435056760908,
"mean_time": 0.3920876979827881,
"stdev_time": 0.0390961164333519
}
},
{
"hyperparameters": {
"algorithm": "lbfgs",
"min_freq": 5,
"all_possible_states": true,
"all_possible_transitions": false,
"num_memories": 9,
"c1": 1.74,
"c2": 0.09,
"epsilon": 0.0008600000000000001,
"period": 1,
"delta": 0.00045000000000000004,
"linesearch": "StrongBacktracking",
"max_linesearch": 34
},
"stats": {
"mean_precision": 0.4344436335328176,
"stdev_precision": 0.15542689556199216,
"mean_recall": 0.4385174258109041,
"stdev_recall": 0.19873733310765845,
"mean_f1": 0.43386496201052716,
"stdev_f1": 0.17225578421967264,
"mean_time": 0.12209572792053222,
"stdev_time": 0.0236177196325414
}
},
{
"hyperparameters": {
"algorithm": "lbfgs",
"min_freq": 2,
"all_possible_states": true,
"all_possible_transitions": true,
"num_memories": 1,
"c1": 0.91,
"c2": 0.4,
"epsilon": 0.0008400000000000001,
"period": 13,
"delta": 0.00018,
"linesearch": "MoreThuente",
"max_linesearch": 43
},
"stats": {
"mean_precision": 0.41963433149859447,
"stdev_precision": 0.16363544501259455,
"mean_recall": 0.4331173486012196,
"stdev_recall": 0.21344965207006913,
"mean_f1": 0.422038027332145,
"stdev_f1": 0.18245844823319127,
"mean_time": 0.2586916446685791,
"stdev_time": 0.04341208573100539
}
},
{
"hyperparameters": {
"algorithm": "l2sgd",
"min_freq": 5,
"all_possible_states": true,
"all_possible_transitions": true,
"c2": 1.68,
"period": 2,
"delta": 0.00047000000000000004,
"calibration_eta": 0.0006900000000000001,
"calibration_rate": 2.9000000000000004,
"calibration_samples": 1400,
"calibration_candidates": 25,
"calibration_max_trials": 23
},
"stats": {
"mean_precision": 0.2571428571428571,
"stdev_precision": 0.43330716823151716,
"mean_recall": 0.01,
"stdev_recall": 0.022360679774997897,
"mean_f1": 0.01702127659574468,
"stdev_f1": 0.038060731531911314,
"mean_time": 0.15442829132080077,
"stdev_time": 0.051750737506044905
}
}
]
Inference
The high-level function chaine.train() returns a Model object. You can load an already trained model from disk by initializing a Model object with the model's filepath:
>>> from chaine import Model
>>> model = Model("model.chaine")
You can predict labels for a batch of sequences:
>>> tokens = [
... [{"index": 0, "text": "John"}, {"index": 1, "text": "Lennon"}],
... [{"index": 0, "text": "Paul"}, {"index": 1, "text": "McCartney"}],
... [{"index": 0, "text": "George"}, {"index": 1, "text": "Harrison"}],
... [{"index": 0, "text": "Ringo"}, {"index": 1, "text": "Starr"}]
... ]
>>> model.predict(tokens)
[['B-PER', 'I-PER'], ['B-PER', 'I-PER'], ['B-PER', 'I-PER'], ['B-PER', 'I-PER']]
or only for a single sequence:
>>> model.predict_single(tokens[0])
['B-PER', 'I-PER']
If you are interested in the model's probability distribution for a given sequence, you can:
>>> model.predict_proba_single(tokens[0])
[[{'B-PER': 0.99, 'I-PER': 0.01}, {'B-PER': 0.01, 'I-PER': 0.99}]]
Use the
model.predict_proba()method for a batch of sequences.
Weights
After loading a trained model, you can inspect the learned transition and state weights:
>>> model = Model("model.chaine")
>>> model.transitions
[{'from': 'B-PER', 'to': 'I-PER', 'weight': 1.430506540616852e-06}]
>>> model.states
[{'feature': 'text:John', 'label': 'B-PER', 'weight': 9.536710877105517e-07}, ...]
You can also dump both transition and state weights as JSON:
>>> model.dump_states("states.json")
>>> model.dump_transitions("transitions.json")
Credits
This project makes use of and is partially based on:
Metadata
Release files for chaine 4.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 20.9 MB
Release files / chaine-4.0.1-cp314-cp314-win_amd64.whl
| Download URL | chaine-4.0.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 627.8 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cb53c5d54dbc0605600875e36efe130a25a56918e79b4126d1f8593bbeb4bbf9
|
|
BLAKE2b-256 checksum How to use checksums |
4088eca7dc34055b67c80c315d61a29e699d32265122ef6c691be02e69787d25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp314-cp314-win32.whl
| Download URL | chaine-4.0.1-cp314-cp314-win32.whl |
|---|---|
| Size | 605.5 kB |
| Tags | CPython 3.14 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
958bf783c6a8b539fe9b6252df5ca252d5ccde84f4c6c737880eeddfae254ecf
|
|
BLAKE2b-256 checksum How to use checksums |
7b88d97fa118f850e0a737c58e772f50448a07ef78838bb4d30b3b580e0b8f47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | chaine-4.0.1-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
c00751571754c7f18496daada506668e0e2288f66c9a0eff88408a192900feb7
|
|
BLAKE2b-256 checksum How to use checksums |
171f3607f62b08bd74caaf23a0e437a461af2a400b957a9d32d05a760b3b2901
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | chaine-4.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.14 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
80208a5b38fb5137159c3ce3818eca38661c5eaac62b3525d1d36659730d75fe
|
|
BLAKE2b-256 checksum How to use checksums |
38f223a62220e8ace0d7793ec0041ce48702f1559c1fbc7a8b2ed99d457b8c10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | chaine-4.0.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 447.8 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8e3d758c9379101ca8478900a810ca246d1d59b33aad1f431bed8e945e88d770
|
|
BLAKE2b-256 checksum How to use checksums |
f3eca42031b22deaf6bd8997b5f9c2b664caba8d7e49eb8dc13135e6df148e1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp313-cp313-win_amd64.whl
| Download URL | chaine-4.0.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 614.4 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2bbd765fe291d6fc64e7124a4d5e2e1fffd57ca45def74bb6ce86b080d895228
|
|
BLAKE2b-256 checksum How to use checksums |
e170b61518784cf9f1bdff7c3d4e54bc9f28cfbefe6e3c4cbf27e5b0fc9d218b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp313-cp313-win32.whl
| Download URL | chaine-4.0.1-cp313-cp313-win32.whl |
|---|---|
| Size | 593.5 kB |
| Tags | CPython 3.13 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
4ecb7651567a2f6f416882f9d43776488a71bb1fbff712fc0654a966b06571d1
|
|
BLAKE2b-256 checksum How to use checksums |
b414e6fe0c327cc0898d5c73f37453204046c7ba07d0bb3b379bd34d70ce0637
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | chaine-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
0d18878dfbd85cfba73f9b98d19b5557de4e31346f2b46ae57a12d7fc32c8f2d
|
|
BLAKE2b-256 checksum How to use checksums |
13a5ad0ca5a5cebccf20ae3e1b7ed69869d188c6fb946f4734f1c1d47623d234
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | chaine-4.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
2bfac81f009b6773bea9493953a5e47b7510b176eb318ccb55a458db5e0a2c1c
|
|
BLAKE2b-256 checksum How to use checksums |
9a26f5885e7a0ee3ee43799079790f46f7e2e26d9a9fc6b28e06b5013721115f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | chaine-4.0.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 444.4 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
94fb083f02ae1874d4bfb129446d5c28ce3e702f2d603b7e95bcd4c0e39e303a
|
|
BLAKE2b-256 checksum How to use checksums |
b6276a745343dea12924c0b5712f6179a21919505e4aa35255f751f96df4571d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp312-cp312-win_amd64.whl
| Download URL | chaine-4.0.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 614.0 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7f050663b52089f93404458d7240b305e833a9df286aafee59a8da00de3c9723
|
|
BLAKE2b-256 checksum How to use checksums |
9cbfd90b254f16e1404233144d3a2c9fe07b1753b91f3a220a20b5410f8b9e25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp312-cp312-win32.whl
| Download URL | chaine-4.0.1-cp312-cp312-win32.whl |
|---|---|
| Size | 593.5 kB |
| Tags | CPython 3.12 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
3e6135041a1af0cb051605558f22cf606c2e668211faff9c6a9fb498b9abcc7d
|
|
BLAKE2b-256 checksum How to use checksums |
8a2fc2eb5b00e04607f16a0b4618168398f8a20762d32219d5995454a75b4705
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | chaine-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
15898cfc8c393f358ee4f577dcb19f30deca8fa7901505cf091316c74131f058
|
|
BLAKE2b-256 checksum How to use checksums |
5364a001218c922c10501032dfaf9e95050e332a36166cfdb0cc01272ea3fe26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | chaine-4.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
113e2dce9642f27bf8c8fc59ec133f2b211d06db50782dd32e76cae3158fdbd1
|
|
BLAKE2b-256 checksum How to use checksums |
e9a8616c024d0eb86fc0ad7893b2b649ba9989eb69e64fa672092af26b3c4418
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | chaine-4.0.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 444.7 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
39c2157d5af68e817b5c61c83bcd4b6926fbaaa78c45909e0b6f332ea0bb1b7d
|
|
BLAKE2b-256 checksum How to use checksums |
17c2aea0a8325f74f72a2809334bec87518a650edd340a472692e1e815157ba5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp311-cp311-win_amd64.whl
| Download URL | chaine-4.0.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 614.4 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
111b75f71eebaf174072841f3e4d2a8724f0c27a58024889e74538d943d0cdad
|
|
BLAKE2b-256 checksum How to use checksums |
4ef21cd8ffd89166d6c2fbfa8d350d5fd2f823fa76177c1f203c50093a7bd4fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp311-cp311-win32.whl
| Download URL | chaine-4.0.1-cp311-cp311-win32.whl |
|---|---|
| Size | 594.1 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
0f7cdc01927bc90dd861a1fae239c5f6f7c0b78e531cb62cbd7acf19b49d6524
|
|
BLAKE2b-256 checksum How to use checksums |
feefa2c5e4b44d2485c6140854547cd71c596835e20a0a0e6c2f292ef2646eac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | chaine-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
530f74f6d56a8a865d8dcd637d76d2aaa00771d646feb063cce2591df302f4c7
|
|
BLAKE2b-256 checksum How to use checksums |
08c856280f3334e8bb7163523a5c7f593aba2c3224cc0574858b4564c8cd323c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | chaine-4.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1f19ccf150c7f80c094c4889fde371864ffdf24c960fb28f2784fd95d644dfec
|
|
BLAKE2b-256 checksum How to use checksums |
4e8557a52029b6de6ae5ce7eb097f7d315bc370b1f654ab2a2423e200d7ffd30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chaine-4.0.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | chaine-4.0.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 444.9 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9868c27ad03694bcbe5971eda9d70ce43f7b33c8fe0a20a23eb592638d8a6b05
|
|
BLAKE2b-256 checksum How to use checksums |
c05aea3d84a219570789b7f0d903564d68604f2aab34be64557608614096dd78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for chaine 4.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.