Skip to main content

Chaine

downloads downloads/month downloads/week

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 pickle or joblib is 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:

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, where 0 will set the log level to ERROR, 1 to INFO (which is the default) and 2 to DEBUG.

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)

Table of built distributions (wheels) for chaine 4.0.1
File Actions
chaine-4.0.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for chaine-4.0.1-cp314-cp314-win_amd64.whl
chaine-4.0.1-cp314-cp314-win32.whl CPython 3.14 CPython 3.14 Windows x86-32 Details for chaine-4.0.1-cp314-cp314-win32.whl
chaine-4.0.1-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details for chaine-4.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
chaine-4.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for chaine-4.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
chaine-4.0.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for chaine-4.0.1-cp314-cp314-macosx_11_0_arm64.whl
chaine-4.0.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for chaine-4.0.1-cp313-cp313-win_amd64.whl
chaine-4.0.1-cp313-cp313-win32.whl CPython 3.13 CPython 3.13 Windows x86-32 Details for chaine-4.0.1-cp313-cp313-win32.whl
chaine-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details for chaine-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
chaine-4.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for chaine-4.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
chaine-4.0.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for chaine-4.0.1-cp313-cp313-macosx_11_0_arm64.whl
chaine-4.0.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for chaine-4.0.1-cp312-cp312-win_amd64.whl
chaine-4.0.1-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details for chaine-4.0.1-cp312-cp312-win32.whl
chaine-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details for chaine-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
chaine-4.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details for chaine-4.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
chaine-4.0.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for chaine-4.0.1-cp312-cp312-macosx_11_0_arm64.whl
chaine-4.0.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for chaine-4.0.1-cp311-cp311-win_amd64.whl
chaine-4.0.1-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details for chaine-4.0.1-cp311-cp311-win32.whl
chaine-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details for chaine-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
chaine-4.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details for chaine-4.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
chaine-4.0.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for chaine-4.0.1-cp311-cp311-macosx_11_0_arm64.whl

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.

Release history Release notifications | RSS feed

This release

4.0.1 This release

20 release files No provenance

2.0.0a1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page