rustfst-python


Namerustfst-python JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/Garvys/rustfst
SummaryLibrary for constructing, combining, optimizing, and searching weighted finite-state transducers (FSTs). Re-implementation of OpenFst in Rust.
upload_time2024-04-27 15:02:46
maintainerNone
docs_urlNone
authorAlexandre Caulier, Emrick Sinitambirivoutin
requires_python>=3.7
licenseApache License, Version 2.0
keywords fst openfst graph transducer acceptor shortest-path minimize determinize wfst
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rustfst

[![License: MIT/Apache-2.0](https://img.shields.io/crates/l/rustfst.svg)](#license)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[![macOS](https://svgshare.com/i/ZjP.svg)](https://svgshare.com/i/ZjP.svg)
[![Linux](https://svgshare.com/i/Zhy.svg)](https://svgshare.com/i/Zhy.svg)
[![Github tag](https://badgen.net/github/tag/garvys/rustfst)](https://github.com/garvys/rustfst/tags/)


#### Rust
![rustc >= 1.51.0](https://img.shields.io/badge/rustc-%3E%3D1.51.0-brightgreen)
[![Native Linux test status](https://github.com/Garvys/rustfst/workflows/Native/badge.svg)](https://github.com/Garvys/rustfst/actions)
[![Documentation](https://docs.rs/rustfst/badge.svg)](https://docs.rs/rustfst)
[![](https://tokei.rs/b1/github/Garvys/rustfst)](https://github.com/Garvys/rustfst)
#### Python
[![PyPI version](https://badge.fury.io/py/rustfst-python.svg)](https://badge.fury.io/py/rustfst-python)
[![PyPI download month](https://img.shields.io/pypi/dm/rustfst-python.svg)](https://pypi.python.org/pypi/rustfst-python/)
[![PyPI pyversions](https://img.shields.io/pypi/pyversions/rustfst-python.svg)](https://pypi.python.org/pypi/rustfst-python/)


<!-- cargo-sync-readme start -->

Rust implementation of Weighted Finite States Transducers.

Rustfst is a library for constructing, combining, optimizing, and searching weighted
finite-state transducers (FSTs). Weighted finite-state transducers are automata where
each transition has an input label, an output label, and a weight.
The more familiar finite-state acceptor is represented as a transducer
with each transition's input and output label equal. Finite-state acceptors
are used to represent sets of strings (specifically, regular or rational sets);
finite-state transducers are used to represent binary relations between pairs of
strings (specifically, rational transductions). The weights can be used to represent
the cost of taking a particular transition.

FSTs have key applications in speech recognition and synthesis, machine translation,
optical character recognition, pattern matching, string processing, machine learning,
information extraction and retrieval among others. Often a weighted transducer is used to
represent a probabilistic model (e.g., an n-gram model, pronunciation model). FSTs can be
optimized by determinization and minimization, models can be applied to hypothesis sets
(also represented as automata) or cascaded by finite-state composition, and the best
results can be selected by shortest-path algorithms.

![fst](https://raw.githubusercontent.com/Garvys/rustfst-images-doc/master/images/project_in.svg?sanitize=true)

## Overview

For a basic [example](#example) see the section below.

Some simple and commonly encountered types of FSTs can be easily
created with the macro [`fst`] or the functions
[`acceptor`](utils::acceptor) and
[`transducer`](utils::transducer).

For more complex cases you will likely start with the
[`VectorFst`](fst_impls::VectorFst) type, which will be imported
in the [`prelude`] along with most everything else you need.
[`VectorFst<TropicalWeight>`](fst_impls::VectorFst) corresponds
directly to the OpenFST `StdVectorFst`, and can be used to load
its files using [`read`](fst_traits::SerializableFst::read) or
[`read_text`](fst_traits::SerializableFst::read_text).

Because "iteration" over an FST can mean many different things,
there are a variety of different iterators.  To iterate over state
IDs you may use
[`states_iter`](fst_traits::StateIterator::states_iter), while to
iterate over transitions out of a state, you may use
[`get_trs`](fst_traits::CoreFst::get_trs).  Since it is common to
iterate over both, this can be done using
[`fst_iter`](fst_traits::FstIterator::fst_iter) or
[`fst_into_iter`](fst_traits::FstIntoIterator::fst_into_iter).  It
is also very common to iterate over paths accepted by an FST,
which can be done with
[`paths_iter`](fst_traits::Fst::paths_iter), and as a convenience
for generating text,
[`string_paths_iter`](fst_traits::Fst::string_paths_iter).
Alternately, in the case of a linear FST, you may retrieve the
only possible path with
[`decode_linear_fst`](utils::decode_linear_fst).

Note that iterating over paths is not the same thing as finding
the *shortest* path or paths, which is done with
[`shortest_path`](algorithms::shortest_path) (for a single path)
or
[`shortest_path_with_config`](algorithms::shortest_path_with_config)
(for N-shortest paths).

For the complete list of algorithms, see the [`algorithms`] module.

You may now be wondering, especially if you have previously used
such linguist-friendly tools as
[pyfoma](https://github.com/mhulden/pyfoma), "what if I just want
to *transduce some text*???"  The unfriendly answer is that
rustfst is a somewhat lower-level library, designed for
implementing things like speech recognizers.  The somewhat more
helpful answer is that you would do this by constructing an
[`acceptor`](utils::acceptor) for your input, which you will
[`compose`](algorithms::compose) with a
[`transducer`](utils::transducer), then
[`project`](algorithms::project) the result [to itsoutput](algorithms::ProjectType::ProjectOutput), and finally
[iterate over the paths](fst_traits::Fst::string_paths_iter) in
the resulting FST.

## References

Implementation heavily inspired from Mehryar Mohri's, Cyril Allauzen's and Michael Riley's work :
- [Weighted automata algorithms](https://cs.nyu.edu/~mohri/pub/hwa.pdf)
- [The design principles of a weighted finite-state transducer library](https://core.ac.uk/download/pdf/82101846.pdf)
- [OpenFst: A general and efficient weighted finite-state transducer library](https://link.springer.com/chapter/10.1007%2F978-3-540-76336-9_3)
- [Weighted finite-state transducers in speech recognition](https://repository.upenn.edu/cgi/viewcontent.cgi?article=1010&context=cis_papers)

The API closely resembles that of OpenFST, with some
simplifications and changes to make it more idiomatic in Rust, notably
the use of `Tr` instead of `Arc`.  See [Differences fromOpenFST](#differences-from-openfst) for more information.

## Example

```rust
use anyhow::Result;
use rustfst::prelude::*;
use rustfst::algorithms::determinize::{DeterminizeType, determinize};
use rustfst::algorithms::rm_epsilon::rm_epsilon;

fn main() -> Result<()> {
    // Creates a empty wFST
    let mut fst = VectorFst::<TropicalWeight>::new();

    // Add some states
    let s0 = fst.add_state();
    let s1 = fst.add_state();
    let s2 = fst.add_state();

    // Set s0 as the start state
    fst.set_start(s0)?;

    // Add a transition from s0 to s1
    fst.add_tr(s0, Tr::new(3, 5, 10.0, s1))?;

    // Add a transition from s0 to s2
    fst.add_tr(s0, Tr::new(5, 7, 18.0, s2))?;

    // Set s1 and s2 as final states
    fst.set_final(s1, 31.0)?;
    fst.set_final(s2, 45.0)?;

    // Iter over all the paths in the wFST
    for p in fst.paths_iter() {
         println!("{:?}", p);
    }

    // A lot of operations are available to modify/optimize the FST.
    // Here are a few examples :

    // - Remove useless states.
    connect(&mut fst)?;

    // - Optimize the FST by merging states with the same behaviour.
    minimize(&mut fst)?;

    // - Copy all the input labels in the output.
    project(&mut fst, ProjectType::ProjectInput);

    // - Remove epsilon transitions.
    rm_epsilon(&mut fst)?;

    // - Compute an equivalent FST but deterministic.
    fst = determinize(&fst)?;

    Ok(())
}
```

## Differences from OpenFST

Here is a non-exhaustive list of ways in which Rustfst's API
differs from OpenFST:

- The default epsilon symbol is `<eps>` and not `<epsilon>`.
- Functions and methods follow Rust naming conventions,
  e.g. `add_state` rather than `AddState`, but are otherwise mostly
  equivalent, except that:
- Transitions are called `Tr` and not `Arc`, because `Arc` has a
  rather different and well-established meaning in Rust, and rustfst
  uses it (`std::sync::Arc`, that is) to reference-count symbol
  tables.  All associated functions also use `tr`.
- Final states are not indicated by a final weight of `zero`.  You
  can test for finality using [`is_final`](fst_traits::CoreFst::is_final), and
  [`final_weight`](fst_traits::CoreFst::final_weight) returns an [`Option`].  This
  requires some care when converting OpenFST code.
- Transitions can be accessed directly as a slice rather than requiring
  an iterator.
- Semiring operations are expressed as plain old methods rather
  than strange C++ things.  So write `w1.plus(w2)` rather than
  `Plus(w1, w2)`, for instance.
- Weights have in-place operations for ⊕
  ([`plus_assign`](Semiring::plus_assign)) and ⊗
  ([`times_assign`](Semiring::times_assign)).
- Most of the type aliases (which would be trait aliases in Rust) such
  as `StdArc`, `StdFst`, and so forth, are missing, but type inference
  allows us to avoid explicit type arguments in most cases, such as
  when calling [`Tr::new`], for instance.
- State IDs are unsigned, with [`NO_STATE_ID`] used for a missing value.
  They are also 32 bits by default (presumably, 4 billion states
  is enough for most applications).  This means you must take care to
  cast them to [`usize`] when using them as indices, and vice-versa,
  preferably checking for overflows
- Symbol IDs are also unsigned and 32-bits, with [`NO_LABEL`] used
  for a missing value.
- Floating-point weights are not generic, so are always single-precision.

<!-- cargo-sync-readme end -->

## Benchmark with OpenFST

I did a benchmark some time ago on almost every linear fst algorithm and compared the results with `OpenFst`. You can find the results here :

- [Benchmark at the C++ level](https://github.com/Garvys/rustfst/blob/master/bench_results/bench_funct_80.md)
- [Benchmark at the CLI level](https://github.com/Garvys/rustfst/blob/master/bench_results/bench_cli_80.md)

Spoiler alert: `Rustfst` is faster on all those algorithms 😅

## Documentation

The documentation of the last released version is available here :
https://docs.rs/rustfst

## Release process
1. Use the script `update_version.sh` to update the version of every package.
2. Push 
3. Push a new tag with the prefix `rustfst-v`

Example :
```bash
./update_version.sh 0.9.1-alpha.6
git commit -am "Release 0.9.1-alpha.6"
git push
git tag -a rustfst-v0.9.1-alpha.6 -m "Release rustfst 0.9.1-alpha.6"  
git push --tags
```

Optionally, if this is a major release, create a GitHub release in the UI.

## Projects contained in this repository
This repository contains two main projects:
- `rustfst` is the Rust re-implementation.
  - Crate available on crates.io [here](https://crates.io/crates/rustfst)
  - Documentation available on docs.rs [here](https://docs.rs/rustfst/latest/rustfst/)
- `rustfst-python` is the python binding of `rustfst`.
  - Package available on Pypi [here](https://pypi.org/project/rustfst-python/)
  - Documentation available on Github Pages [here](https://garvys.github.io/rustfst)

## License
   
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

## Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Garvys/rustfst",
    "name": "rustfst-python",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "fst openfst graph transducer acceptor shortest-path minimize determinize wfst",
    "author": "Alexandre Caulier, Emrick Sinitambirivoutin",
    "author_email": "alexandre.caulier.a@gmail.com, emrick.sinitambirivoutin@sonos.com",
    "download_url": null,
    "platform": null,
    "description": "# Rustfst\n\n[![License: MIT/Apache-2.0](https://img.shields.io/crates/l/rustfst.svg)](#license)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[![macOS](https://svgshare.com/i/ZjP.svg)](https://svgshare.com/i/ZjP.svg)\n[![Linux](https://svgshare.com/i/Zhy.svg)](https://svgshare.com/i/Zhy.svg)\n[![Github tag](https://badgen.net/github/tag/garvys/rustfst)](https://github.com/garvys/rustfst/tags/)\n\n\n#### Rust\n![rustc >= 1.51.0](https://img.shields.io/badge/rustc-%3E%3D1.51.0-brightgreen)\n[![Native Linux test status](https://github.com/Garvys/rustfst/workflows/Native/badge.svg)](https://github.com/Garvys/rustfst/actions)\n[![Documentation](https://docs.rs/rustfst/badge.svg)](https://docs.rs/rustfst)\n[![](https://tokei.rs/b1/github/Garvys/rustfst)](https://github.com/Garvys/rustfst)\n#### Python\n[![PyPI version](https://badge.fury.io/py/rustfst-python.svg)](https://badge.fury.io/py/rustfst-python)\n[![PyPI download month](https://img.shields.io/pypi/dm/rustfst-python.svg)](https://pypi.python.org/pypi/rustfst-python/)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/rustfst-python.svg)](https://pypi.python.org/pypi/rustfst-python/)\n\n\n<!-- cargo-sync-readme start -->\n\nRust implementation of Weighted Finite States Transducers.\n\nRustfst is a library for constructing, combining, optimizing, and searching weighted\nfinite-state transducers (FSTs). Weighted finite-state transducers are automata where\neach transition has an input label, an output label, and a weight.\nThe more familiar finite-state acceptor is represented as a transducer\nwith each transition's input and output label equal. Finite-state acceptors\nare used to represent sets of strings (specifically, regular or rational sets);\nfinite-state transducers are used to represent binary relations between pairs of\nstrings (specifically, rational transductions). The weights can be used to represent\nthe cost of taking a particular transition.\n\nFSTs have key applications in speech recognition and synthesis, machine translation,\noptical character recognition, pattern matching, string processing, machine learning,\ninformation extraction and retrieval among others. Often a weighted transducer is used to\nrepresent a probabilistic model (e.g., an n-gram model, pronunciation model). FSTs can be\noptimized by determinization and minimization, models can be applied to hypothesis sets\n(also represented as automata) or cascaded by finite-state composition, and the best\nresults can be selected by shortest-path algorithms.\n\n![fst](https://raw.githubusercontent.com/Garvys/rustfst-images-doc/master/images/project_in.svg?sanitize=true)\n\n## Overview\n\nFor a basic [example](#example) see the section below.\n\nSome simple and commonly encountered types of FSTs can be easily\ncreated with the macro [`fst`] or the functions\n[`acceptor`](utils::acceptor) and\n[`transducer`](utils::transducer).\n\nFor more complex cases you will likely start with the\n[`VectorFst`](fst_impls::VectorFst) type, which will be imported\nin the [`prelude`] along with most everything else you need.\n[`VectorFst<TropicalWeight>`](fst_impls::VectorFst) corresponds\ndirectly to the OpenFST `StdVectorFst`, and can be used to load\nits files using [`read`](fst_traits::SerializableFst::read) or\n[`read_text`](fst_traits::SerializableFst::read_text).\n\nBecause \"iteration\" over an FST can mean many different things,\nthere are a variety of different iterators.  To iterate over state\nIDs you may use\n[`states_iter`](fst_traits::StateIterator::states_iter), while to\niterate over transitions out of a state, you may use\n[`get_trs`](fst_traits::CoreFst::get_trs).  Since it is common to\niterate over both, this can be done using\n[`fst_iter`](fst_traits::FstIterator::fst_iter) or\n[`fst_into_iter`](fst_traits::FstIntoIterator::fst_into_iter).  It\nis also very common to iterate over paths accepted by an FST,\nwhich can be done with\n[`paths_iter`](fst_traits::Fst::paths_iter), and as a convenience\nfor generating text,\n[`string_paths_iter`](fst_traits::Fst::string_paths_iter).\nAlternately, in the case of a linear FST, you may retrieve the\nonly possible path with\n[`decode_linear_fst`](utils::decode_linear_fst).\n\nNote that iterating over paths is not the same thing as finding\nthe *shortest* path or paths, which is done with\n[`shortest_path`](algorithms::shortest_path) (for a single path)\nor\n[`shortest_path_with_config`](algorithms::shortest_path_with_config)\n(for N-shortest paths).\n\nFor the complete list of algorithms, see the [`algorithms`] module.\n\nYou may now be wondering, especially if you have previously used\nsuch linguist-friendly tools as\n[pyfoma](https://github.com/mhulden/pyfoma), \"what if I just want\nto *transduce some text*???\"  The unfriendly answer is that\nrustfst is a somewhat lower-level library, designed for\nimplementing things like speech recognizers.  The somewhat more\nhelpful answer is that you would do this by constructing an\n[`acceptor`](utils::acceptor) for your input, which you will\n[`compose`](algorithms::compose) with a\n[`transducer`](utils::transducer), then\n[`project`](algorithms::project) the result [to itsoutput](algorithms::ProjectType::ProjectOutput), and finally\n[iterate over the paths](fst_traits::Fst::string_paths_iter) in\nthe resulting FST.\n\n## References\n\nImplementation heavily inspired from Mehryar Mohri's, Cyril Allauzen's and Michael Riley's work :\n- [Weighted automata algorithms](https://cs.nyu.edu/~mohri/pub/hwa.pdf)\n- [The design principles of a weighted finite-state transducer library](https://core.ac.uk/download/pdf/82101846.pdf)\n- [OpenFst: A general and efficient weighted finite-state transducer library](https://link.springer.com/chapter/10.1007%2F978-3-540-76336-9_3)\n- [Weighted finite-state transducers in speech recognition](https://repository.upenn.edu/cgi/viewcontent.cgi?article=1010&context=cis_papers)\n\nThe API closely resembles that of OpenFST, with some\nsimplifications and changes to make it more idiomatic in Rust, notably\nthe use of `Tr` instead of `Arc`.  See [Differences fromOpenFST](#differences-from-openfst) for more information.\n\n## Example\n\n```rust\nuse anyhow::Result;\nuse rustfst::prelude::*;\nuse rustfst::algorithms::determinize::{DeterminizeType, determinize};\nuse rustfst::algorithms::rm_epsilon::rm_epsilon;\n\nfn main() -> Result<()> {\n    // Creates a empty wFST\n    let mut fst = VectorFst::<TropicalWeight>::new();\n\n    // Add some states\n    let s0 = fst.add_state();\n    let s1 = fst.add_state();\n    let s2 = fst.add_state();\n\n    // Set s0 as the start state\n    fst.set_start(s0)?;\n\n    // Add a transition from s0 to s1\n    fst.add_tr(s0, Tr::new(3, 5, 10.0, s1))?;\n\n    // Add a transition from s0 to s2\n    fst.add_tr(s0, Tr::new(5, 7, 18.0, s2))?;\n\n    // Set s1 and s2 as final states\n    fst.set_final(s1, 31.0)?;\n    fst.set_final(s2, 45.0)?;\n\n    // Iter over all the paths in the wFST\n    for p in fst.paths_iter() {\n         println!(\"{:?}\", p);\n    }\n\n    // A lot of operations are available to modify/optimize the FST.\n    // Here are a few examples :\n\n    // - Remove useless states.\n    connect(&mut fst)?;\n\n    // - Optimize the FST by merging states with the same behaviour.\n    minimize(&mut fst)?;\n\n    // - Copy all the input labels in the output.\n    project(&mut fst, ProjectType::ProjectInput);\n\n    // - Remove epsilon transitions.\n    rm_epsilon(&mut fst)?;\n\n    // - Compute an equivalent FST but deterministic.\n    fst = determinize(&fst)?;\n\n    Ok(())\n}\n```\n\n## Differences from OpenFST\n\nHere is a non-exhaustive list of ways in which Rustfst's API\ndiffers from OpenFST:\n\n- The default epsilon symbol is `<eps>` and not `<epsilon>`.\n- Functions and methods follow Rust naming conventions,\n  e.g. `add_state` rather than `AddState`, but are otherwise mostly\n  equivalent, except that:\n- Transitions are called `Tr` and not `Arc`, because `Arc` has a\n  rather different and well-established meaning in Rust, and rustfst\n  uses it (`std::sync::Arc`, that is) to reference-count symbol\n  tables.  All associated functions also use `tr`.\n- Final states are not indicated by a final weight of `zero`.  You\n  can test for finality using [`is_final`](fst_traits::CoreFst::is_final), and\n  [`final_weight`](fst_traits::CoreFst::final_weight) returns an [`Option`].  This\n  requires some care when converting OpenFST code.\n- Transitions can be accessed directly as a slice rather than requiring\n  an iterator.\n- Semiring operations are expressed as plain old methods rather\n  than strange C++ things.  So write `w1.plus(w2)` rather than\n  `Plus(w1, w2)`, for instance.\n- Weights have in-place operations for \u2295\n  ([`plus_assign`](Semiring::plus_assign)) and \u2297\n  ([`times_assign`](Semiring::times_assign)).\n- Most of the type aliases (which would be trait aliases in Rust) such\n  as `StdArc`, `StdFst`, and so forth, are missing, but type inference\n  allows us to avoid explicit type arguments in most cases, such as\n  when calling [`Tr::new`], for instance.\n- State IDs are unsigned, with [`NO_STATE_ID`] used for a missing value.\n  They are also 32 bits by default (presumably, 4 billion states\n  is enough for most applications).  This means you must take care to\n  cast them to [`usize`] when using them as indices, and vice-versa,\n  preferably checking for overflows\n- Symbol IDs are also unsigned and 32-bits, with [`NO_LABEL`] used\n  for a missing value.\n- Floating-point weights are not generic, so are always single-precision.\n\n<!-- cargo-sync-readme end -->\n\n## Benchmark with OpenFST\n\nI did a benchmark some time ago on almost every linear fst algorithm and compared the results with `OpenFst`. You can find the results here :\n\n- [Benchmark at the C++ level](https://github.com/Garvys/rustfst/blob/master/bench_results/bench_funct_80.md)\n- [Benchmark at the CLI level](https://github.com/Garvys/rustfst/blob/master/bench_results/bench_cli_80.md)\n\nSpoiler alert: `Rustfst` is faster on all those algorithms \ud83d\ude05\n\n## Documentation\n\nThe documentation of the last released version is available here :\nhttps://docs.rs/rustfst\n\n## Release process\n1. Use the script `update_version.sh` to update the version of every package.\n2. Push \n3. Push a new tag with the prefix `rustfst-v`\n\nExample :\n```bash\n./update_version.sh 0.9.1-alpha.6\ngit commit -am \"Release 0.9.1-alpha.6\"\ngit push\ngit tag -a rustfst-v0.9.1-alpha.6 -m \"Release rustfst 0.9.1-alpha.6\"  \ngit push --tags\n```\n\nOptionally, if this is a major release, create a GitHub release in the UI.\n\n## Projects contained in this repository\nThis repository contains two main projects:\n- `rustfst` is the Rust re-implementation.\n  - Crate available on crates.io [here](https://crates.io/crates/rustfst)\n  - Documentation available on docs.rs [here](https://docs.rs/rustfst/latest/rustfst/)\n- `rustfst-python` is the python binding of `rustfst`.\n  - Package available on Pypi [here](https://pypi.org/project/rustfst-python/)\n  - Documentation available on Github Pages [here](https://garvys.github.io/rustfst)\n\n## License\n   \nLicensed under either of\n- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license (LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n",
    "bugtrack_url": null,
    "license": "Apache License, Version 2.0",
    "summary": "Library for constructing, combining, optimizing, and searching weighted finite-state transducers (FSTs). Re-implementation of OpenFst in Rust.",
    "version": "1.0.0",
    "project_urls": {
        "Documentation": "https://garvys.github.io/rustfst/",
        "Homepage": "https://github.com/Garvys/rustfst",
        "Source": "https://github.com/Garvys/rustfst"
    },
    "split_keywords": [
        "fst",
        "openfst",
        "graph",
        "transducer",
        "acceptor",
        "shortest-path",
        "minimize",
        "determinize",
        "wfst"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bf8b2877a9e441c99a78469ed911e59dfce6a32d79d1f1ffbe36c68894428e86",
                "md5": "33d74f77bf9f6675916e401358ba006d",
                "sha256": "78d0a26720f364c62816aa55f34d9b1c9f60fb37bb2fed343375e7a892a727e1"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "33d74f77bf9f6675916e401358ba006d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1382425,
            "upload_time": "2024-04-27T15:02:46",
            "upload_time_iso_8601": "2024-04-27T15:02:46.566451Z",
            "url": "https://files.pythonhosted.org/packages/bf/8b/2877a9e441c99a78469ed911e59dfce6a32d79d1f1ffbe36c68894428e86/rustfst_python-1.0.0-cp310-cp310-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "601d63562ddfc23407038ee0ee2bab46148d7edc8bd8317ad9e9d40863549d4a",
                "md5": "cb47b01d0ded509463153c5ea80bbbc9",
                "sha256": "bc129e8e9475ebc29a28961dacb620592384c61e4b4895dd7c0e34b2bae7d62f"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cb47b01d0ded509463153c5ea80bbbc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 746690,
            "upload_time": "2024-04-27T15:02:48",
            "upload_time_iso_8601": "2024-04-27T15:02:48.708405Z",
            "url": "https://files.pythonhosted.org/packages/60/1d/63562ddfc23407038ee0ee2bab46148d7edc8bd8317ad9e9d40863549d4a/rustfst_python-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f1c5fce8b9fe181dc9e87379c3da0b807adb71eb090fb847b56050156ccfc1bb",
                "md5": "5b9cfd0fc3a66b507fd4afcb0eb4c16a",
                "sha256": "c66fd1438a73057fac49db4cb626362eefb6d1629858a6d0f55f8626a30915a8"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5b9cfd0fc3a66b507fd4afcb0eb4c16a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 670498,
            "upload_time": "2024-04-27T15:02:50",
            "upload_time_iso_8601": "2024-04-27T15:02:50.507479Z",
            "url": "https://files.pythonhosted.org/packages/f1/c5/fce8b9fe181dc9e87379c3da0b807adb71eb090fb847b56050156ccfc1bb/rustfst_python-1.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "44751a9c86ab65a42b6c84bdaf2bad3742fe48c13136dac28f5e4985770635cf",
                "md5": "9cf0cb5378edbf877d6a8d99ed061f3a",
                "sha256": "e78a4375a24dad8d602d21ab01cdf81b7d792e03db6e4f3f46a73087ddfc5647"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9cf0cb5378edbf877d6a8d99ed061f3a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 765249,
            "upload_time": "2024-04-27T14:56:38",
            "upload_time_iso_8601": "2024-04-27T14:56:38.478318Z",
            "url": "https://files.pythonhosted.org/packages/44/75/1a9c86ab65a42b6c84bdaf2bad3742fe48c13136dac28f5e4985770635cf/rustfst_python-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cfea620a46a38af2bd1c1f2122fc2c323044eef076fa80fd5f22b8b8566051f5",
                "md5": "43626c746ae171327a1a97782504dbe7",
                "sha256": "dd18fa1f739cd0c59e52c0d66f896cd0e489e994ed7f6075fe35c6446f772fd6"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "43626c746ae171327a1a97782504dbe7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 761803,
            "upload_time": "2024-04-27T14:56:40",
            "upload_time_iso_8601": "2024-04-27T14:56:40.772635Z",
            "url": "https://files.pythonhosted.org/packages/cf/ea/620a46a38af2bd1c1f2122fc2c323044eef076fa80fd5f22b8b8566051f5/rustfst_python-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "12649fa4b6eb5c945eb75eb923b7f224219a0fedba03065243ce97c2a06d2e5a",
                "md5": "501fbf0cf32ffe1ab4e69b9a39086bfd",
                "sha256": "2bb0234fff723d8b9c8ddd6d1190306ae025c2e766bbef9f8cb75527226d3de0"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "501fbf0cf32ffe1ab4e69b9a39086bfd",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 798287,
            "upload_time": "2024-04-27T14:56:42",
            "upload_time_iso_8601": "2024-04-27T14:56:42.998103Z",
            "url": "https://files.pythonhosted.org/packages/12/64/9fa4b6eb5c945eb75eb923b7f224219a0fedba03065243ce97c2a06d2e5a/rustfst_python-1.0.0-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a6d1dc4393f8fcfd4c2ce77e65eeba25f45eeb0542fca70e0f62a35141f2ade9",
                "md5": "b888343cd59eec8ab02e1fcf0b353a4b",
                "sha256": "dfb906176373e0206c2de95b97062039d64e8863ab0bc11d19b43cf7504a152f"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "b888343cd59eec8ab02e1fcf0b353a4b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 1382427,
            "upload_time": "2024-04-27T15:02:52",
            "upload_time_iso_8601": "2024-04-27T15:02:52.473509Z",
            "url": "https://files.pythonhosted.org/packages/a6/d1/dc4393f8fcfd4c2ce77e65eeba25f45eeb0542fca70e0f62a35141f2ade9/rustfst_python-1.0.0-cp311-cp311-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b3802f928fb1c405f86ad53dba6bf53184125babb2357230ceebbeb4cf05c75c",
                "md5": "06ebd5840cf6a541a8c5524d08bc84d8",
                "sha256": "59dcf782594ee78843ce50903bf3347609d69b66c62acc0a44be23a79e567292"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "06ebd5840cf6a541a8c5524d08bc84d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 746688,
            "upload_time": "2024-04-27T15:02:54",
            "upload_time_iso_8601": "2024-04-27T15:02:54.317619Z",
            "url": "https://files.pythonhosted.org/packages/b3/80/2f928fb1c405f86ad53dba6bf53184125babb2357230ceebbeb4cf05c75c/rustfst_python-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "87a7f36243892ffdfb7a28a3423f07e265c1f11aff10f9bb4ecd0fe339823f73",
                "md5": "84607a695ef047e29c35b91849049f4c",
                "sha256": "08af63dca32022b04e9e2daf2bfbc2307958f8349e2373eae2fae276a25f913c"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "84607a695ef047e29c35b91849049f4c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 670499,
            "upload_time": "2024-04-27T15:02:55",
            "upload_time_iso_8601": "2024-04-27T15:02:55.655799Z",
            "url": "https://files.pythonhosted.org/packages/87/a7/f36243892ffdfb7a28a3423f07e265c1f11aff10f9bb4ecd0fe339823f73/rustfst_python-1.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8639153e4462567ea34f77ed34ab8df5ec2bb1b11e41462fe846308e3e07b26a",
                "md5": "1d6f3bdfc4868ff4914e02ca4ed42495",
                "sha256": "6948cc3c4071b95f0e1214ec9179436fe4f8d10442b8f0905ac08049fa7bec47"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1d6f3bdfc4868ff4914e02ca4ed42495",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 765249,
            "upload_time": "2024-04-27T14:56:45",
            "upload_time_iso_8601": "2024-04-27T14:56:45.087744Z",
            "url": "https://files.pythonhosted.org/packages/86/39/153e4462567ea34f77ed34ab8df5ec2bb1b11e41462fe846308e3e07b26a/rustfst_python-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b7aae8d8be12a384d038930cdaa778f4e628892365688df0ae533629ec2eca24",
                "md5": "71e3d5b3c14786a735df892dad573ca1",
                "sha256": "01539465eeb7c17fd482c77fffa46026b48ef104698b1f574f30e2110c0d8f0a"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "71e3d5b3c14786a735df892dad573ca1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 761803,
            "upload_time": "2024-04-27T14:56:46",
            "upload_time_iso_8601": "2024-04-27T14:56:46.870707Z",
            "url": "https://files.pythonhosted.org/packages/b7/aa/e8d8be12a384d038930cdaa778f4e628892365688df0ae533629ec2eca24/rustfst_python-1.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ba335a19d72ff52ad6cf7b23b08fe9f48d3aac469980887b17ee51e8ef2f287",
                "md5": "a291810d3d0d939a37c3b2d838d4e7fd",
                "sha256": "ebda00fe3191da28549c49f63deb5213e8142ac92af32b3e89ccdece54cf23f8"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a291810d3d0d939a37c3b2d838d4e7fd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 798289,
            "upload_time": "2024-04-27T14:56:48",
            "upload_time_iso_8601": "2024-04-27T14:56:48.185762Z",
            "url": "https://files.pythonhosted.org/packages/6b/a3/35a19d72ff52ad6cf7b23b08fe9f48d3aac469980887b17ee51e8ef2f287/rustfst_python-1.0.0-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ab71f462df23f29d8593219298560cbe5bbdf693e1f9c4757fed60245d79bc4",
                "md5": "5ccee4daaaff3bf5294703fb6e4fe612",
                "sha256": "a87bc08eca0a31b2b53170bf2bc7a79a840e0bcabb67e16d3563c77bb848025b"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5ccee4daaaff3bf5294703fb6e4fe612",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 726467,
            "upload_time": "2024-04-27T15:02:57",
            "upload_time_iso_8601": "2024-04-27T15:02:57.408266Z",
            "url": "https://files.pythonhosted.org/packages/6a/b7/1f462df23f29d8593219298560cbe5bbdf693e1f9c4757fed60245d79bc4/rustfst_python-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f63b1d6afcfe3f262b97f16da6760bf68049da292a5477499605fbdb342f575",
                "md5": "97506999abb60c9ff009abc36e815827",
                "sha256": "768f6fcb6c2a920257567396138e510321de6d4119384d11d0f660e0cdb14374"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "97506999abb60c9ff009abc36e815827",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 765251,
            "upload_time": "2024-04-27T14:56:50",
            "upload_time_iso_8601": "2024-04-27T14:56:50.275954Z",
            "url": "https://files.pythonhosted.org/packages/3f/63/b1d6afcfe3f262b97f16da6760bf68049da292a5477499605fbdb342f575/rustfst_python-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "40b0c2f4a99990674b2bccf04e83ddfcb6ebec028482b9df9909f74527ddfd3a",
                "md5": "5813bc4146cd60aef09e562cea2b9ac3",
                "sha256": "debf64ae37fa17d7c94d630a516e734a89c2d447b47524238f83e976b31b88f9"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "5813bc4146cd60aef09e562cea2b9ac3",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 761804,
            "upload_time": "2024-04-27T14:56:51",
            "upload_time_iso_8601": "2024-04-27T14:56:51.655468Z",
            "url": "https://files.pythonhosted.org/packages/40/b0/c2f4a99990674b2bccf04e83ddfcb6ebec028482b9df9909f74527ddfd3a/rustfst_python-1.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eda01b2667a68634edd334704f8db664eaddf2dd9a0da532e315806126f85fca",
                "md5": "310a223394c013533f5effcc47523b6a",
                "sha256": "67841c7d1a4d91d3bd6b4732d2b213d659ca28babd24a09494f57529e7d95f9e"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "310a223394c013533f5effcc47523b6a",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 798289,
            "upload_time": "2024-04-27T14:56:53",
            "upload_time_iso_8601": "2024-04-27T14:56:53.697586Z",
            "url": "https://files.pythonhosted.org/packages/ed/a0/1b2667a68634edd334704f8db664eaddf2dd9a0da532e315806126f85fca/rustfst_python-1.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a155e1dee04d53a32541bb58d574e41788cf69b35d28e372920d88dfa60a9437",
                "md5": "59b662eaec4bf13ee4b09a72e7e8f2af",
                "sha256": "f304311d9909d142191215f8a2297a06f12c07aca25761f4fdfd9c3f482f9ed6"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "59b662eaec4bf13ee4b09a72e7e8f2af",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1382420,
            "upload_time": "2024-04-27T15:02:58",
            "upload_time_iso_8601": "2024-04-27T15:02:58.711615Z",
            "url": "https://files.pythonhosted.org/packages/a1/55/e1dee04d53a32541bb58d574e41788cf69b35d28e372920d88dfa60a9437/rustfst_python-1.0.0-cp38-cp38-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dd55e3d39c25f5fa4d259c6634f7814dcb3ec1cb146dc76fe04d7fd39a4bf284",
                "md5": "81059ce01bd5c3e270d705f1c30224e0",
                "sha256": "e79c8a922e2fd6f8aa4702cd81afa4214059ef4a555952a8a26dbc490f0cb294"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "81059ce01bd5c3e270d705f1c30224e0",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 746682,
            "upload_time": "2024-04-27T15:03:00",
            "upload_time_iso_8601": "2024-04-27T15:03:00.167033Z",
            "url": "https://files.pythonhosted.org/packages/dd/55/e3d39c25f5fa4d259c6634f7814dcb3ec1cb146dc76fe04d7fd39a4bf284/rustfst_python-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "69bf645b5d69402d741de21e8420ee7793500a205b8d873f71f72368219dae5a",
                "md5": "b465f3b04c3dcf0459da78982110c6c8",
                "sha256": "3248b3f7deb21b5a47dec55161050515daed4a4fdece332658fd176d179719c0"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b465f3b04c3dcf0459da78982110c6c8",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 670495,
            "upload_time": "2024-04-27T15:03:01",
            "upload_time_iso_8601": "2024-04-27T15:03:01.824598Z",
            "url": "https://files.pythonhosted.org/packages/69/bf/645b5d69402d741de21e8420ee7793500a205b8d873f71f72368219dae5a/rustfst_python-1.0.0-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2e34cf2af42a110e0eaab376f60c98ecacc584028f9491369db8f0d7ac72dda",
                "md5": "f9eee692c5374ba48b23f37f5c4160b1",
                "sha256": "a29cdb26271e074856cdd861774e564817776fd337ea7e90a1e0e9895d6b0807"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f9eee692c5374ba48b23f37f5c4160b1",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 765244,
            "upload_time": "2024-04-27T14:56:55",
            "upload_time_iso_8601": "2024-04-27T14:56:55.076080Z",
            "url": "https://files.pythonhosted.org/packages/b2/e3/4cf2af42a110e0eaab376f60c98ecacc584028f9491369db8f0d7ac72dda/rustfst_python-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cabd9b6330005769e10267024d4c5c57f83e8266dfd1234c2004ea2911ae93d8",
                "md5": "41bd83ea519153d419fc4bbeded8ef72",
                "sha256": "aeca0584e55c9339f48ba6180805864999f8ed2be1c838b73f2a7671d7a6b1ed"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "41bd83ea519153d419fc4bbeded8ef72",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 761799,
            "upload_time": "2024-04-27T14:56:57",
            "upload_time_iso_8601": "2024-04-27T14:56:57.108303Z",
            "url": "https://files.pythonhosted.org/packages/ca/bd/9b6330005769e10267024d4c5c57f83e8266dfd1234c2004ea2911ae93d8/rustfst_python-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "17e3255117b2328f135575b47af34144c261703eccbcf23e472ccf16357c1801",
                "md5": "44a6817cc15349fa2d9c336734fd6627",
                "sha256": "3a63ab6bb7d829953d8c08714d2d49c0c5ac6f545897d1aa569c132c8aeafd73"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "44a6817cc15349fa2d9c336734fd6627",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 798284,
            "upload_time": "2024-04-27T14:56:58",
            "upload_time_iso_8601": "2024-04-27T14:56:58.963668Z",
            "url": "https://files.pythonhosted.org/packages/17/e3/255117b2328f135575b47af34144c261703eccbcf23e472ccf16357c1801/rustfst_python-1.0.0-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "660e0d8614f7f6d36faeb851c2e1af5ef422a2281f0d76f12192a5d4a369eb8b",
                "md5": "88015dd9b504e341d0e60fbde792e207",
                "sha256": "add876dc7022555451cc49797a162359ad4d5c6ecd859acc408ac66179ade54a"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-macosx_10_9_universal2.whl",
            "has_sig": false,
            "md5_digest": "88015dd9b504e341d0e60fbde792e207",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1382420,
            "upload_time": "2024-04-27T15:03:03",
            "upload_time_iso_8601": "2024-04-27T15:03:03.527166Z",
            "url": "https://files.pythonhosted.org/packages/66/0e/0d8614f7f6d36faeb851c2e1af5ef422a2281f0d76f12192a5d4a369eb8b/rustfst_python-1.0.0-cp39-cp39-macosx_10_9_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c5732d650dd403751eb46e3b0a0e699b87af9a2589e507e3bf452ae100ee0eac",
                "md5": "82aefc7ab97a8b77287163d394d3f5e9",
                "sha256": "b30525d2f81614afe4e1dfa74e8baccc7f7b7c1f6c9dd17eb69fe04bbb23b71f"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "82aefc7ab97a8b77287163d394d3f5e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 746684,
            "upload_time": "2024-04-27T15:03:05",
            "upload_time_iso_8601": "2024-04-27T15:03:05.591976Z",
            "url": "https://files.pythonhosted.org/packages/c5/73/2d650dd403751eb46e3b0a0e699b87af9a2589e507e3bf452ae100ee0eac/rustfst_python-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e5f0246fadfe662196d5a4dfa98455c10df7701406a133e3afc9ab9983d1b1d",
                "md5": "29e851bc990b204112346d27f6f878e0",
                "sha256": "aa0ea3594b256833293b51f313b0e0a691e5822c8183a8522b6a044ef31df737"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "29e851bc990b204112346d27f6f878e0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 670493,
            "upload_time": "2024-04-27T15:03:07",
            "upload_time_iso_8601": "2024-04-27T15:03:07.003325Z",
            "url": "https://files.pythonhosted.org/packages/6e/5f/0246fadfe662196d5a4dfa98455c10df7701406a133e3afc9ab9983d1b1d/rustfst_python-1.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8800d70b45b557dc21fcaccd2d099be9f60eff1eebd6f21eb31e95729f17b54e",
                "md5": "1a99344bba59286c1328b077c909a4c4",
                "sha256": "b4aaa5d05c530aa65795e25a9e3f1c037b6f958002b4a83cd59e06aa050d84d0"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1a99344bba59286c1328b077c909a4c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 765244,
            "upload_time": "2024-04-27T14:57:00",
            "upload_time_iso_8601": "2024-04-27T14:57:00.912015Z",
            "url": "https://files.pythonhosted.org/packages/88/00/d70b45b557dc21fcaccd2d099be9f60eff1eebd6f21eb31e95729f17b54e/rustfst_python-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a0b008c62cee02f35b8b710b2828d42a14b30982763cd152ec350d92c6be5da0",
                "md5": "026b11b406cd6ef836291134ccb15a30",
                "sha256": "74798bf5924cb703d9843e505f1cb7b8e31f539aceeb94c775022d507433930a"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "026b11b406cd6ef836291134ccb15a30",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 761799,
            "upload_time": "2024-04-27T14:57:02",
            "upload_time_iso_8601": "2024-04-27T14:57:02.988491Z",
            "url": "https://files.pythonhosted.org/packages/a0/b0/08c62cee02f35b8b710b2828d42a14b30982763cd152ec350d92c6be5da0/rustfst_python-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "078340bfa68c03e0546255fa31dff2de4735c52db92e869f5653fd080b0fad1f",
                "md5": "3991a42e35a457fd4504cf632bd5b96b",
                "sha256": "d66be47511830201a848a8f493303ab17c47d26801f6a4cd6acedd8cc6f5bd35"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3991a42e35a457fd4504cf632bd5b96b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 798284,
            "upload_time": "2024-04-27T14:57:04",
            "upload_time_iso_8601": "2024-04-27T14:57:04.559415Z",
            "url": "https://files.pythonhosted.org/packages/07/83/40bfa68c03e0546255fa31dff2de4735c52db92e869f5653fd080b0fad1f/rustfst_python-1.0.0-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4f090f74268d75fb20cbc9b3bf9b292ca73549584fa5bccf09e2cdf476cb7bce",
                "md5": "22c96f6e84235430d1a0fd460d799beb",
                "sha256": "5cc118bfa6ef0589257cf6723b618f9f1354f43c2b1c4b9fdfbeeebfbd2cc878"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "22c96f6e84235430d1a0fd460d799beb",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 726473,
            "upload_time": "2024-04-27T15:03:08",
            "upload_time_iso_8601": "2024-04-27T15:03:08.330600Z",
            "url": "https://files.pythonhosted.org/packages/4f/09/0f74268d75fb20cbc9b3bf9b292ca73549584fa5bccf09e2cdf476cb7bce/rustfst_python-1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8a1334a61ec6c838bd8c3230ebb06f74c79cb8def2dbcf487bb5a0e3162c35bb",
                "md5": "f8f8b2408c47fa0a43d4cf2f0cb8d58e",
                "sha256": "227a6b7c82b091b23a957815893d894e6bb9f90f660f7c5dd282c6b558dc3507"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f8f8b2408c47fa0a43d4cf2f0cb8d58e",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 765255,
            "upload_time": "2024-04-27T14:57:06",
            "upload_time_iso_8601": "2024-04-27T14:57:06.039890Z",
            "url": "https://files.pythonhosted.org/packages/8a/13/34a61ec6c838bd8c3230ebb06f74c79cb8def2dbcf487bb5a0e3162c35bb/rustfst_python-1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2b7378a8094f40055b78d640925a559d1444f481ff951c228c0ba591bacb09b1",
                "md5": "62baad61997156899446d186e3b4bd0d",
                "sha256": "c29327fb6ad451a9a9eae91214f6cca10784336cae783782a6b887d16080848f"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "62baad61997156899446d186e3b4bd0d",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": ">=3.7",
            "size": 761809,
            "upload_time": "2024-04-27T14:57:08",
            "upload_time_iso_8601": "2024-04-27T14:57:08.069715Z",
            "url": "https://files.pythonhosted.org/packages/2b/73/78a8094f40055b78d640925a559d1444f481ff951c228c0ba591bacb09b1/rustfst_python-1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fcb3a0b50399b899d4f530a5d82d6672ab8eb3d46257d84c88706ab663173a21",
                "md5": "442f9aa28f80574c999ee0756b0e8bc7",
                "sha256": "1465c53edcd5b6b10e88737b689f7036adf63166b8835cd3f2193760c7c30b43"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "442f9aa28f80574c999ee0756b0e8bc7",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 746695,
            "upload_time": "2024-04-27T15:03:10",
            "upload_time_iso_8601": "2024-04-27T15:03:10.272429Z",
            "url": "https://files.pythonhosted.org/packages/fc/b3/a0b50399b899d4f530a5d82d6672ab8eb3d46257d84c88706ab663173a21/rustfst_python-1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f734d2fc8f4c0088617df3adf64f0bcb560d0c0b0dde9d64802ad2562f9b8331",
                "md5": "ef3b1c2b25d45efadf8fb85654ca3346",
                "sha256": "d833dd53d5e63a3c05c5e9a0514fc6bcbddceb2cfd16e40926dd869e03a1152f"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ef3b1c2b25d45efadf8fb85654ca3346",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 765254,
            "upload_time": "2024-04-27T14:57:09",
            "upload_time_iso_8601": "2024-04-27T14:57:09.591797Z",
            "url": "https://files.pythonhosted.org/packages/f7/34/d2fc8f4c0088617df3adf64f0bcb560d0c0b0dde9d64802ad2562f9b8331/rustfst_python-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "12ae826c97b5478e4b7b2516d77d4a87fbf3160d550fc2cd58e1cb8d3e3f2f57",
                "md5": "8c9334aa038bf7d4adf6e6fa284bafad",
                "sha256": "7f99bfd7f5979516d9888fe5442281ef74fa4b76c771d8416e2a263f4e0ed39d"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "8c9334aa038bf7d4adf6e6fa284bafad",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 761809,
            "upload_time": "2024-04-27T14:57:10",
            "upload_time_iso_8601": "2024-04-27T14:57:10.959459Z",
            "url": "https://files.pythonhosted.org/packages/12/ae/826c97b5478e4b7b2516d77d4a87fbf3160d550fc2cd58e1cb8d3e3f2f57/rustfst_python-1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c99fcb9f2e1b2726c552ac97b14b7f96c0233d590c926973bd74957539c4716a",
                "md5": "4c6aa2b91dda77667b1a2167cee7d85b",
                "sha256": "b2b2dacc8fd6957e3f04ae6e8adfe6241ff70b44b4849230abc7cd27b29cb307"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4c6aa2b91dda77667b1a2167cee7d85b",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 746695,
            "upload_time": "2024-04-27T15:03:12",
            "upload_time_iso_8601": "2024-04-27T15:03:12.082093Z",
            "url": "https://files.pythonhosted.org/packages/c9/9f/cb9f2e1b2726c552ac97b14b7f96c0233d590c926973bd74957539c4716a/rustfst_python-1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1a34176d284889c65bd7caca93f4f5043cbe2396e4b298d218a0e1a0f68c1b27",
                "md5": "a5fd98df0739f9eee1c0c5f0b65900bc",
                "sha256": "00568cb0af1100932ca28df255b60469e3328bb5db4611f03d1fa6f9ef9338e0"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a5fd98df0739f9eee1c0c5f0b65900bc",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 765256,
            "upload_time": "2024-04-27T14:57:12",
            "upload_time_iso_8601": "2024-04-27T14:57:12.313361Z",
            "url": "https://files.pythonhosted.org/packages/1a/34/176d284889c65bd7caca93f4f5043cbe2396e4b298d218a0e1a0f68c1b27/rustfst_python-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9603584219be126b84899c5d2e2cd4488b17516725c557431ac07f4a41066938",
                "md5": "728052eb55e9ee64af2cc1920c9630ae",
                "sha256": "7ff6da268c54740ee53bbbd425be31e55c6c3a4c5eb6330e34a5197cfa14dc80"
            },
            "downloads": -1,
            "filename": "rustfst_python-1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "728052eb55e9ee64af2cc1920c9630ae",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 761809,
            "upload_time": "2024-04-27T14:57:13",
            "upload_time_iso_8601": "2024-04-27T14:57:13.908396Z",
            "url": "https://files.pythonhosted.org/packages/96/03/584219be126b84899c5d2e2cd4488b17516725c557431ac07f4a41066938/rustfst_python-1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-27 15:02:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Garvys",
    "github_project": "rustfst",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "rustfst-python"
}
        
Elapsed time: 0.24378s