matcher-py


Namematcher-py JSON
Version 0.5.8 PyPI version JSON
download
home_pagehttps://github.com/Lips7/Matcher
SummaryA high-performance matcher designed to solve LOGICAL and TEXT VARIATIONS problems in word matching, implemented in Rust.
upload_time2025-08-23 00:37:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Matcher Rust Implementation with PyO3 Binding

A high-performance matcher designed to solve **LOGICAL** and **TEXT VARIATIONS** problems in word matching, implemented in Rust.

For detailed implementation, see the [Design Document](../DESIGN.md).

## Features

- **Multiple Matching Methods**:
  - Simple Word Matching
  - Regex-Based Matching
  - Similarity-Based Matching
- **Text Normalization**:
  - **Fanjian**: Simplify traditional Chinese characters to simplified ones.
    Example: `蟲艸` -> `虫艹`
  - **Delete**: Remove specific characters.
    Example: `*Fu&*iii&^%%*&kkkk` -> `Fuiiikkkk`
  - **Normalize**: Normalize special characters to identifiable characters.
    Example: `𝜢𝕰𝕃𝙻𝝧 𝙒ⓞᵣℒ𝒟!` -> `hello world!`
  - **PinYin**: Convert Chinese characters to Pinyin for fuzzy matching.
    Example: `西安` -> ` xi  an `, matches `洗按` -> ` xi  an `, but not `先` -> ` xian `
  - **PinYinChar**: Convert Chinese characters to Pinyin.
    Example: `西安` -> `xian`, matches `洗按` and `先` -> `xian`
- **AND OR NOT Word Matching**:
  - Takes into account the number of repetitions of words.
  - Example: `hello&world` matches `hello world` and `world,hello`
  - Example: `无&法&无&天` matches `无无法天` (because `无` is repeated twice), but not `无法天`
  - Example: `hello~helloo~hhello` matches `hello` but not `helloo` and `hhello`
- **Customizable Exemption Lists**: Exclude specific words from matching.
- **Efficient Handling of Large Word Lists**: Optimized for performance.

## Installation

### Use pip

```shell
pip install matcher_py
```

### Install pre-built binary

Visit the [release page](https://github.com/Lips7/Matcher/releases) to download the pre-built binary.

## Usage

All relevant types are defined in [extension_types.py](./python/matcher_py/extension_types.py).

### Explanation of the configuration

* `Matcher`'s configuration is defined by the `MatchTableMap = Dict[int, List[MatchTable]]` type, the key of `MatchTableMap` is called `match_id`, **for each `match_id`, the `table_id` inside is required to be unique**.
* `SimpleMatcher`'s configuration is defined by the `SimpleTable = Dict[ProcessType, Dict[int, str]]` type, the value `Dict[int, str]`'s key is called `word_id`, **`word_id` is required to be globally unique**.

#### MatchTable

* `table_id`: The unique ID of the match table.
* `match_table_type`: The type of the match table.
* `word_list`: The word list of the match table.
* `exemption_process_type`: The type of the exemption simple match.
* `exemption_word_list`: The exemption word list of the match table.

For each match table, word matching is performed over the `word_list`, and exemption word matching is performed over the `exemption_word_list`. If the exemption word matching result is True, the word matching result will be False.

#### MatchTableType

* `Simple`: Supports simple multiple patterns matching with text normalization defined by `process_type`.
  * It can handle combination patterns and repeated times sensitive matching, delimited by `&` and `~`, such as `hello&world&hello` will match `hellohelloworld` and `worldhellohello`, but not `helloworld` due to the repeated times of `hello`.
* `Regex`: Supports regex patterns matching.
  * `SimilarChar`: Supports similar character matching using regex.
    * `["hello,hallo,hollo,hi", "word,world,wrd,🌍", "!,?,~"]` will match `helloworld!`, `hollowrd?`, `hi🌍~` ··· any combinations of the words split by `,` in the list.
  * `Acrostic`: Supports acrostic matching using regex **(currently only supports Chinese and simple English sentences)**.
    * `["h,e,l,l,o", "你,好"]` will match `hope, endures, love, lasts, onward.` and `你的笑容温暖, 好心情常伴。`.
  * `Regex`: Supports regex matching.
    * `["h[aeiou]llo", "w[aeiou]rd"]` will match `hello`, `world`, `hillo`, `wurld` ··· any text that matches the regex in the list.
* `Similar`: Supports similar text matching based on distance and threshold.
  * `Levenshtein`: Supports similar text matching based on Levenshtein distance.

#### ProcessType

* `None`: No transformation.
* `Fanjian`: Traditional Chinese to simplified Chinese transformation. Based on [FANJIAN](../matcher_rs/process_map/FANJIAN.txt).
  * `妳好` -> `你好`
  * `現⾝` -> `现身`
* `Delete`: Delete all punctuation, special characters and white spaces. Based on [TEXT_DELETE](../matcher_rs/process_map/TEXT-DELETE.txt) and `WHITE_SPACE`.
  * `hello, world!` -> `helloworld`
  * `《你∷好》` -> `你好`
* `Normalize`: Normalize all English character variations and number variations to basic characters. Based on [NORM](../matcher_rs//process_map/NORM.txt) and [NUM_NORM](../matcher_rs//process_map/NUM-NORM.txt).
  * `ℋЀ⒈㈠Õ` -> `he11o`
  * `⒈Ƨ㊂` -> `123`
* `PinYin`: Convert all unicode Chinese characters to pinyin with boundaries. Based on [PINYIN](../matcher_rs/process_map/PINYIN.txt).
  * `你好` -> ` ni  hao `
  * `西安` -> ` xi  an `
* `PinYinChar`: Convert all unicode Chinese characters to pinyin without boundaries. Based on [PINYIN](../matcher_rs/process_map/PINYIN.txt).
  * `你好` -> `nihao`
  * `西安` -> `xian`

You can combine these transformations as needed. Pre-defined combinations like `DeleteNormalize` and `FanjianDeleteNormalize` are provided for convenience.

Avoid combining `PinYin` and `PinYinChar` due to that `PinYin` is a more limited version of `PinYinChar`, in some cases like `xian`, can be treat as two words `xi` and `an`, or only one word `xian`.

### Text Process Usage

Here’s an example of how to use the `reduce_text_process` and `text_process` functions:

```python
from matcher_py import reduce_text_process, text_process
from matcher_py.extension_types import ProcessType

print(reduce_text_process(ProcessType.MatchDeleteNormalize, "hello, world!"))
print(text_process(ProcessType.MatchDelete, "hello, world!"))
```

### Matcher Basic Usage

Here’s an example of how to use the `Matcher`:

```python
import json

from matcher_py import Matcher
from matcher_py.extension_types import MatchTable, MatchTableType, ProcessType, RegexMatchType, SimMatchType

matcher = Matcher(
    json.dumps({
        1: [
            MatchTable(
                table_id=1,
                match_table_type=MatchTableType.Simple(process_type = ProcessType.MatchFanjianDeleteNormalize),
                word_list=["hello", "world"],
                exemption_process_type=ProcessType.MatchNone,
                exemption_word_list=["word"],
            ),
            MatchTable(
                table_id=2,
                match_table_type=MatchTableType.Regex(
                  process_type = ProcessType.MatchFanjianDeleteNormalize,
                  regex_match_type=RegexMatchType.Regex
                ),
                word_list=["h[aeiou]llo"],
                exemption_process_type=ProcessType.MatchNone,
                exemption_word_list=[],
            )
        ],
        2: [
            MatchTable(
                table_id=3,
                match_table_type=MatchTableType.Similar(
                  process_type = ProcessType.MatchFanjianDeleteNormalize,
                  sim_match_type=SimMatchType.MatchLevenshtein,
                  threshold=0.5
                ),
                word_list=["halxo"],
                exemption_process_type=ProcessType.MatchNone,
                exemption_word_list=[],
            )
        ]
    }).encode()
)
# Check if a text matches
assert matcher.is_match("hello")
assert not matcher.is_match("word")
# Perform process as a list
result = matcher.process("hello")
assert result == [{'match_id': 1,
  'table_id': 2,
  'word_id': 0,
  'word': 'h[aeiou]llo',
  'similarity': 1.0},
 {'match_id': 1,
  'table_id': 1,
  'word_id': 0,
  'word': 'hello',
  'similarity': 1.0},
 {'match_id': 2,
  'table_id': 3,
  'word_id': 0,
  'word': 'halxo',
  'similarity': 0.6}]
# Perform word matching as a dict
assert matcher.word_match(r"hello, world")[1] == [{'match_id': 1,
  'table_id': 2,
  'word_id': 0,
  'word': 'h[aeiou]llo',
  'similarity': 1.0},
 {'match_id': 1,
  'table_id': 1,
  'word_id': 0,
  'word': 'hello',
  'similarity': 1.0},
 {'match_id': 1,
  'table_id': 1,
  'word_id': 1,
  'word': 'world',
  'similarity': 1.0}]
# Perform word matching as a string
result = matcher.word_match_as_string("hello")
assert result == """{"2":[{"match_id":2,"table_id":3,"word_id":0,"word":"halxo","similarity":0.6}],"1":[{"match_id":1,"table_id":2,"word_id":0,"word":"h[aeiou]llo","similarity":1.0},{"match_id":1,"table_id":1,"word_id":0,"word":"hello","similarity":1.0}]}"""
```

### Simple Matcher Basic Usage

Here’s an example of how to use the `SimpleMatcher`:

```python
import json

from matcher_py import SimpleMatcher
from matcher_py.extension_types import ProcessType

simple_matcher = SimpleMatcher(
    json.dumps(
        {
            ProcessType.MatchNone: {
                1: "hello&world",
                2: "word&word~hello"
            },
            ProcessType.MatchDelete: {
                3: "hallo"
            }
        }
    ).encode()
)
# Check if a text matches
assert simple_matcher.is_match("hello^&!#*#&!^#*()world")
# Perform simple processing
result = simple_matcher.process("hello,world,word,word,hallo")
assert result == [{'word_id': 1, 'word': 'hello&world'}, {'word_id': 3, 'word': 'hallo'}]
```

## Contributing

Contributions to `matcher_py` are welcome! If you find a bug or have a feature request, please open an issue on the [GitHub repository](https://github.com/Lips7/Matcher). If you would like to contribute code, please fork the repository and submit a pull request.

## License

`matcher_py` is licensed under the MIT OR Apache-2.0 license.

## More Information

For more details, visit the [GitHub repository](https://github.com/Lips7/Matcher).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Lips7/Matcher",
    "name": "matcher-py",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Foster Guo <f975793771@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/8d/04/f7cd3b110e2385eb4aea5b268750d6d2fd964e012ca9b40b564d165385c1/matcher_py-0.5.8.tar.gz",
    "platform": null,
    "description": "# Matcher Rust Implementation with PyO3 Binding\n\nA high-performance matcher designed to solve **LOGICAL** and **TEXT VARIATIONS** problems in word matching, implemented in Rust.\n\nFor detailed implementation, see the [Design Document](../DESIGN.md).\n\n## Features\n\n- **Multiple Matching Methods**:\n  - Simple Word Matching\n  - Regex-Based Matching\n  - Similarity-Based Matching\n- **Text Normalization**:\n  - **Fanjian**: Simplify traditional Chinese characters to simplified ones.\n    Example: `\u87f2\u8278` -> `\u866b\u8279`\n  - **Delete**: Remove specific characters.\n    Example: `*Fu&*iii&^%%*&kkkk` -> `Fuiiikkkk`\n  - **Normalize**: Normalize special characters to identifiable characters.\n    Example: `\ud835\udf22\ud835\udd70\ud835\udd43\ud835\ude7b\ud835\udf67 \ud835\ude52\u24de\u1d63\u2112\ud835\udc9f!` -> `hello world!`\n  - **PinYin**: Convert Chinese characters to Pinyin for fuzzy matching.\n    Example: `\u897f\u5b89` -> ` xi  an `, matches `\u6d17\u6309` -> ` xi  an `, but not `\u5148` -> ` xian `\n  - **PinYinChar**: Convert Chinese characters to Pinyin.\n    Example: `\u897f\u5b89` -> `xian`, matches `\u6d17\u6309` and `\u5148` -> `xian`\n- **AND OR NOT Word Matching**:\n  - Takes into account the number of repetitions of words.\n  - Example: `hello&world` matches `hello world` and `world,hello`\n  - Example: `\u65e0&\u6cd5&\u65e0&\u5929` matches `\u65e0\u65e0\u6cd5\u5929` (because `\u65e0` is repeated twice), but not `\u65e0\u6cd5\u5929`\n  - Example: `hello~helloo~hhello` matches `hello` but not `helloo` and `hhello`\n- **Customizable Exemption Lists**: Exclude specific words from matching.\n- **Efficient Handling of Large Word Lists**: Optimized for performance.\n\n## Installation\n\n### Use pip\n\n```shell\npip install matcher_py\n```\n\n### Install pre-built binary\n\nVisit the [release page](https://github.com/Lips7/Matcher/releases) to download the pre-built binary.\n\n## Usage\n\nAll relevant types are defined in [extension_types.py](./python/matcher_py/extension_types.py).\n\n### Explanation of the configuration\n\n* `Matcher`'s configuration is defined by the `MatchTableMap = Dict[int, List[MatchTable]]` type, the key of `MatchTableMap` is called `match_id`, **for each `match_id`, the `table_id` inside is required to be unique**.\n* `SimpleMatcher`'s configuration is defined by the `SimpleTable = Dict[ProcessType, Dict[int, str]]` type, the value `Dict[int, str]`'s key is called `word_id`, **`word_id` is required to be globally unique**.\n\n#### MatchTable\n\n* `table_id`: The unique ID of the match table.\n* `match_table_type`: The type of the match table.\n* `word_list`: The word list of the match table.\n* `exemption_process_type`: The type of the exemption simple match.\n* `exemption_word_list`: The exemption word list of the match table.\n\nFor each match table, word matching is performed over the `word_list`, and exemption word matching is performed over the `exemption_word_list`. If the exemption word matching result is True, the word matching result will be False.\n\n#### MatchTableType\n\n* `Simple`: Supports simple multiple patterns matching with text normalization defined by `process_type`.\n  * It can handle combination patterns and repeated times sensitive matching, delimited by `&` and `~`, such as `hello&world&hello` will match `hellohelloworld` and `worldhellohello`, but not `helloworld` due to the repeated times of `hello`.\n* `Regex`: Supports regex patterns matching.\n  * `SimilarChar`: Supports similar character matching using regex.\n    * `[\"hello,hallo,hollo,hi\", \"word,world,wrd,\ud83c\udf0d\", \"!,?,~\"]` will match `helloworld!`, `hollowrd?`, `hi\ud83c\udf0d~` \u00b7\u00b7\u00b7 any combinations of the words split by `,` in the list.\n  * `Acrostic`: Supports acrostic matching using regex **(currently only supports Chinese and simple English sentences)**.\n    * `[\"h,e,l,l,o\", \"\u4f60,\u597d\"]` will match `hope, endures, love, lasts, onward.` and `\u4f60\u7684\u7b11\u5bb9\u6e29\u6696, \u597d\u5fc3\u60c5\u5e38\u4f34\u3002`.\n  * `Regex`: Supports regex matching.\n    * `[\"h[aeiou]llo\", \"w[aeiou]rd\"]` will match `hello`, `world`, `hillo`, `wurld` \u00b7\u00b7\u00b7 any text that matches the regex in the list.\n* `Similar`: Supports similar text matching based on distance and threshold.\n  * `Levenshtein`: Supports similar text matching based on Levenshtein distance.\n\n#### ProcessType\n\n* `None`: No transformation.\n* `Fanjian`: Traditional Chinese to simplified Chinese transformation. Based on [FANJIAN](../matcher_rs/process_map/FANJIAN.txt).\n  * `\u59b3\u597d` -> `\u4f60\u597d`\n  * `\u73fe\u2f9d` -> `\u73b0\u8eab`\n* `Delete`: Delete all punctuation, special characters and white spaces. Based on [TEXT_DELETE](../matcher_rs/process_map/TEXT-DELETE.txt) and `WHITE_SPACE`.\n  * `hello, world!` -> `helloworld`\n  * `\u300a\u4f60\u2237\u597d\u300b` -> `\u4f60\u597d`\n* `Normalize`: Normalize all English character variations and number variations to basic characters. Based on [NORM](../matcher_rs//process_map/NORM.txt) and [NUM_NORM](../matcher_rs//process_map/NUM-NORM.txt).\n  * `\u210b\u0400\u2488\u3220\u00d5` -> `he11o`\n  * `\u2488\u01a7\u3282` -> `123`\n* `PinYin`: Convert all unicode Chinese characters to pinyin with boundaries. Based on [PINYIN](../matcher_rs/process_map/PINYIN.txt).\n  * `\u4f60\u597d` -> ` ni  hao `\n  * `\u897f\u5b89` -> ` xi  an `\n* `PinYinChar`: Convert all unicode Chinese characters to pinyin without boundaries. Based on [PINYIN](../matcher_rs/process_map/PINYIN.txt).\n  * `\u4f60\u597d` -> `nihao`\n  * `\u897f\u5b89` -> `xian`\n\nYou can combine these transformations as needed. Pre-defined combinations like `DeleteNormalize` and `FanjianDeleteNormalize` are provided for convenience.\n\nAvoid combining `PinYin` and `PinYinChar` due to that `PinYin` is a more limited version of `PinYinChar`, in some cases like `xian`, can be treat as two words `xi` and `an`, or only one word `xian`.\n\n### Text Process Usage\n\nHere\u2019s an example of how to use the `reduce_text_process` and `text_process` functions:\n\n```python\nfrom matcher_py import reduce_text_process, text_process\nfrom matcher_py.extension_types import ProcessType\n\nprint(reduce_text_process(ProcessType.MatchDeleteNormalize, \"hello, world!\"))\nprint(text_process(ProcessType.MatchDelete, \"hello, world!\"))\n```\n\n### Matcher Basic Usage\n\nHere\u2019s an example of how to use the `Matcher`:\n\n```python\nimport json\n\nfrom matcher_py import Matcher\nfrom matcher_py.extension_types import MatchTable, MatchTableType, ProcessType, RegexMatchType, SimMatchType\n\nmatcher = Matcher(\n    json.dumps({\n        1: [\n            MatchTable(\n                table_id=1,\n                match_table_type=MatchTableType.Simple(process_type = ProcessType.MatchFanjianDeleteNormalize),\n                word_list=[\"hello\", \"world\"],\n                exemption_process_type=ProcessType.MatchNone,\n                exemption_word_list=[\"word\"],\n            ),\n            MatchTable(\n                table_id=2,\n                match_table_type=MatchTableType.Regex(\n                  process_type = ProcessType.MatchFanjianDeleteNormalize,\n                  regex_match_type=RegexMatchType.Regex\n                ),\n                word_list=[\"h[aeiou]llo\"],\n                exemption_process_type=ProcessType.MatchNone,\n                exemption_word_list=[],\n            )\n        ],\n        2: [\n            MatchTable(\n                table_id=3,\n                match_table_type=MatchTableType.Similar(\n                  process_type = ProcessType.MatchFanjianDeleteNormalize,\n                  sim_match_type=SimMatchType.MatchLevenshtein,\n                  threshold=0.5\n                ),\n                word_list=[\"halxo\"],\n                exemption_process_type=ProcessType.MatchNone,\n                exemption_word_list=[],\n            )\n        ]\n    }).encode()\n)\n# Check if a text matches\nassert matcher.is_match(\"hello\")\nassert not matcher.is_match(\"word\")\n# Perform process as a list\nresult = matcher.process(\"hello\")\nassert result == [{'match_id': 1,\n  'table_id': 2,\n  'word_id': 0,\n  'word': 'h[aeiou]llo',\n  'similarity': 1.0},\n {'match_id': 1,\n  'table_id': 1,\n  'word_id': 0,\n  'word': 'hello',\n  'similarity': 1.0},\n {'match_id': 2,\n  'table_id': 3,\n  'word_id': 0,\n  'word': 'halxo',\n  'similarity': 0.6}]\n# Perform word matching as a dict\nassert matcher.word_match(r\"hello, world\")[1] == [{'match_id': 1,\n  'table_id': 2,\n  'word_id': 0,\n  'word': 'h[aeiou]llo',\n  'similarity': 1.0},\n {'match_id': 1,\n  'table_id': 1,\n  'word_id': 0,\n  'word': 'hello',\n  'similarity': 1.0},\n {'match_id': 1,\n  'table_id': 1,\n  'word_id': 1,\n  'word': 'world',\n  'similarity': 1.0}]\n# Perform word matching as a string\nresult = matcher.word_match_as_string(\"hello\")\nassert result == \"\"\"{\"2\":[{\"match_id\":2,\"table_id\":3,\"word_id\":0,\"word\":\"halxo\",\"similarity\":0.6}],\"1\":[{\"match_id\":1,\"table_id\":2,\"word_id\":0,\"word\":\"h[aeiou]llo\",\"similarity\":1.0},{\"match_id\":1,\"table_id\":1,\"word_id\":0,\"word\":\"hello\",\"similarity\":1.0}]}\"\"\"\n```\n\n### Simple Matcher Basic Usage\n\nHere\u2019s an example of how to use the `SimpleMatcher`:\n\n```python\nimport json\n\nfrom matcher_py import SimpleMatcher\nfrom matcher_py.extension_types import ProcessType\n\nsimple_matcher = SimpleMatcher(\n    json.dumps(\n        {\n            ProcessType.MatchNone: {\n                1: \"hello&world\",\n                2: \"word&word~hello\"\n            },\n            ProcessType.MatchDelete: {\n                3: \"hallo\"\n            }\n        }\n    ).encode()\n)\n# Check if a text matches\nassert simple_matcher.is_match(\"hello^&!#*#&!^#*()world\")\n# Perform simple processing\nresult = simple_matcher.process(\"hello,world,word,word,hallo\")\nassert result == [{'word_id': 1, 'word': 'hello&world'}, {'word_id': 3, 'word': 'hallo'}]\n```\n\n## Contributing\n\nContributions to `matcher_py` are welcome! If you find a bug or have a feature request, please open an issue on the [GitHub repository](https://github.com/Lips7/Matcher). If you would like to contribute code, please fork the repository and submit a pull request.\n\n## License\n\n`matcher_py` is licensed under the MIT OR Apache-2.0 license.\n\n## More Information\n\nFor more details, visit the [GitHub repository](https://github.com/Lips7/Matcher).\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A high-performance matcher designed to solve LOGICAL and TEXT VARIATIONS problems in word matching, implemented in Rust.",
    "version": "0.5.8",
    "project_urls": {
        "Homepage": "https://github.com/Lips7/Matcher",
        "changelog": "https://github.com/Lips7/Matcher/blob/master/CHANGELOG.md",
        "repository": "https://github.com/Lips7/Matcher"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "57ba11d600326ca15cb185858dfb1a88d77864e5f3a4dae18fb973bbabe5ae23",
                "md5": "115bc1d1aef8f66f0f4a07f7b1caa261",
                "sha256": "019535bc7c8807de7c658822065f9eea6b22e2fd2c11ab8e61ccddff20a0e226"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "115bc1d1aef8f66f0f4a07f7b1caa261",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1650151,
            "upload_time": "2025-08-23T00:37:07",
            "upload_time_iso_8601": "2025-08-23T00:37:07.814665Z",
            "url": "https://files.pythonhosted.org/packages/57/ba/11d600326ca15cb185858dfb1a88d77864e5f3a4dae18fb973bbabe5ae23/matcher_py-0.5.8-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c416fda07741a376d2de73328ec83605da65859776fb0c214659fb1076408da3",
                "md5": "28ff1aec2f70fbf94ce2a1ee3ab91e2a",
                "sha256": "1888ca39b3bb184bd8533b7bdf72f8aca5bc14df14276b678254383b8d0a0fd6"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "28ff1aec2f70fbf94ce2a1ee3ab91e2a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1791867,
            "upload_time": "2025-08-23T00:37:09",
            "upload_time_iso_8601": "2025-08-23T00:37:09.560695Z",
            "url": "https://files.pythonhosted.org/packages/c4/16/fda07741a376d2de73328ec83605da65859776fb0c214659fb1076408da3/matcher_py-0.5.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7717b381dc6fd72cd828a9ea27ccdc54b4ac163f0f991792496615584f19a4ca",
                "md5": "2a3396a5777b026aaeebd5f3b10dc47e",
                "sha256": "c9e26d32fd5e3389a9626b6e2958e8f134e443d7874069117c8398d1ed2977f0"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2a3396a5777b026aaeebd5f3b10dc47e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1845262,
            "upload_time": "2025-08-23T00:37:10",
            "upload_time_iso_8601": "2025-08-23T00:37:10.984870Z",
            "url": "https://files.pythonhosted.org/packages/77/17/b381dc6fd72cd828a9ea27ccdc54b4ac163f0f991792496615584f19a4ca/matcher_py-0.5.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c1b7a3ad5ccf6440072dcc991097424c4799a8ed74f13d7e1b6c1ad3b388da9b",
                "md5": "2dc73ba62382c2ac39fb450cb0c47a47",
                "sha256": "aeef52a5184b890237e0138b550331214b901705753ef30cae94a66881de7ad7"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2dc73ba62382c2ac39fb450cb0c47a47",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 2002352,
            "upload_time": "2025-08-23T00:37:12",
            "upload_time_iso_8601": "2025-08-23T00:37:12.589447Z",
            "url": "https://files.pythonhosted.org/packages/c1/b7/a3ad5ccf6440072dcc991097424c4799a8ed74f13d7e1b6c1ad3b388da9b/matcher_py-0.5.8-cp310-cp310-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f29181b73fb1c2cc1be7e3af6a87178f3fa89fe0c33a26d8ea94aa32d3a10040",
                "md5": "22ccb14bf47d3e736ef17eb977bbbd7a",
                "sha256": "9ab926d30f5570cf0903d18ff6474b3a7eed6b67765767343e1e2cd923056535"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "22ccb14bf47d3e736ef17eb977bbbd7a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 2025713,
            "upload_time": "2025-08-23T00:37:13",
            "upload_time_iso_8601": "2025-08-23T00:37:13.956073Z",
            "url": "https://files.pythonhosted.org/packages/f2/91/81b73fb1c2cc1be7e3af6a87178f3fa89fe0c33a26d8ea94aa32d3a10040/matcher_py-0.5.8-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "15ac122fe8321ce797161eb79c85f910ebd88a3f26cdec301b9314ebe33eb696",
                "md5": "544054b2089cbecaf54c495353a523c1",
                "sha256": "9bead819fdb8f527ea3960dae817bd47f6fcd9f677289dc5c605e153d5e47aea"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "544054b2089cbecaf54c495353a523c1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1756443,
            "upload_time": "2025-08-23T00:37:15",
            "upload_time_iso_8601": "2025-08-23T00:37:15.208614Z",
            "url": "https://files.pythonhosted.org/packages/15/ac/122fe8321ce797161eb79c85f910ebd88a3f26cdec301b9314ebe33eb696/matcher_py-0.5.8-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b099bdf2f5939ae0ec22e250b88c7e16aad9e340e1ae8785c52e33f8b58f692",
                "md5": "4d974e94f858fc361d8e89e057d4866e",
                "sha256": "3379baea9aef222ad216fe3ecd647cea9cd3175cb127230e4a76833978108ac6"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4d974e94f858fc361d8e89e057d4866e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1649873,
            "upload_time": "2025-08-23T00:37:16",
            "upload_time_iso_8601": "2025-08-23T00:37:16.349641Z",
            "url": "https://files.pythonhosted.org/packages/5b/09/9bdf2f5939ae0ec22e250b88c7e16aad9e340e1ae8785c52e33f8b58f692/matcher_py-0.5.8-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ba1422c4d98d8e2cfd285d15d806033eddc43598b2b252b2ac9a52356c86ddc1",
                "md5": "544261e1b39c5b8c626f534e32d1580c",
                "sha256": "7f929a34a169e8ae9f55e8a9d8e7156da9af047132617cd9163500e2baeecebd"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "544261e1b39c5b8c626f534e32d1580c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1791567,
            "upload_time": "2025-08-23T00:37:17",
            "upload_time_iso_8601": "2025-08-23T00:37:17.681931Z",
            "url": "https://files.pythonhosted.org/packages/ba/14/22c4d98d8e2cfd285d15d806033eddc43598b2b252b2ac9a52356c86ddc1/matcher_py-0.5.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f65dd5d0fb1b3194da6d2f44e5d88ec338adaed612de19414e5495afc921191f",
                "md5": "0968b5ff7f46ae080483cdf340a1310d",
                "sha256": "923e2d3eb0a8d5dcf30dae1195e44fac4a6f854180405bfc800ef129071c512e"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0968b5ff7f46ae080483cdf340a1310d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1844965,
            "upload_time": "2025-08-23T00:37:19",
            "upload_time_iso_8601": "2025-08-23T00:37:19.123710Z",
            "url": "https://files.pythonhosted.org/packages/f6/5d/d5d0fb1b3194da6d2f44e5d88ec338adaed612de19414e5495afc921191f/matcher_py-0.5.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f22dcaac39fa9a2e1bc5ae09834298374c00d510a1df948d5da4cb7679afb0e6",
                "md5": "43d3d6212b3381da2b0cbce3e1ab149e",
                "sha256": "f48bc1c523394ca473452a998548a9afe29ce14356f372532d85e3ea4f851de2"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "43d3d6212b3381da2b0cbce3e1ab149e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 2002023,
            "upload_time": "2025-08-23T00:37:20",
            "upload_time_iso_8601": "2025-08-23T00:37:20.405100Z",
            "url": "https://files.pythonhosted.org/packages/f2/2d/caac39fa9a2e1bc5ae09834298374c00d510a1df948d5da4cb7679afb0e6/matcher_py-0.5.8-cp311-cp311-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c2bbe98ffe4710aeac538174097dc392d1007b56183d5a54c5fbfd05a0124f8e",
                "md5": "54b83867dc9f93604a17ad568aa1e936",
                "sha256": "75bc37f944000a2576fd043bde37bde454ec6ac104db6dcf27f39d4d646006a5"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "54b83867dc9f93604a17ad568aa1e936",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 2025756,
            "upload_time": "2025-08-23T00:37:21",
            "upload_time_iso_8601": "2025-08-23T00:37:21.820266Z",
            "url": "https://files.pythonhosted.org/packages/c2/bb/e98ffe4710aeac538174097dc392d1007b56183d5a54c5fbfd05a0124f8e/matcher_py-0.5.8-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3cc9ad627a823dff5ed2d29f3e8438e84f21e36bd610aec80cf3663b5993ffba",
                "md5": "dc9512f0344a142ea915dee78de05b79",
                "sha256": "51a741cab23e4280890a3f05cf0b8ab361e399e80f1ea1f4ff9dc8ac3cc69746"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "dc9512f0344a142ea915dee78de05b79",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1756431,
            "upload_time": "2025-08-23T00:37:22",
            "upload_time_iso_8601": "2025-08-23T00:37:22.949604Z",
            "url": "https://files.pythonhosted.org/packages/3c/c9/ad627a823dff5ed2d29f3e8438e84f21e36bd610aec80cf3663b5993ffba/matcher_py-0.5.8-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ffe5f13f03e9a4f3357e0c3337f65faef22c200b44ca18c943fbcfd0038439a1",
                "md5": "dcb86312767af69750c580d07458adc0",
                "sha256": "f20cbf6647d734949ca13a9e22360aead8a450e3ff9e93fcafe22694cd5d2295"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "dcb86312767af69750c580d07458adc0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1649147,
            "upload_time": "2025-08-23T00:37:24",
            "upload_time_iso_8601": "2025-08-23T00:37:24.385761Z",
            "url": "https://files.pythonhosted.org/packages/ff/e5/f13f03e9a4f3357e0c3337f65faef22c200b44ca18c943fbcfd0038439a1/matcher_py-0.5.8-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d8d06dfbf775344bd4e5d6b8b717f6350effb16655dc8743505983daeec2d10f",
                "md5": "087a6cdc0f96f3a998272abe9f6f05c6",
                "sha256": "373b71535ec6d1a38d0a3b909811f54e23804353b5ef25d945676f38522cc7b3"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "087a6cdc0f96f3a998272abe9f6f05c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1789785,
            "upload_time": "2025-08-23T00:37:25",
            "upload_time_iso_8601": "2025-08-23T00:37:25.438202Z",
            "url": "https://files.pythonhosted.org/packages/d8/d0/6dfbf775344bd4e5d6b8b717f6350effb16655dc8743505983daeec2d10f/matcher_py-0.5.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "445c29acf72b6299f35d8967129a04e5e33678a262530c31a456a0f0a37ad934",
                "md5": "f0c94fb0c8d0baf4d0241b70082a9302",
                "sha256": "38b3c736ea118a184b0c1d0506534f2e7ea93ecd2cad57094e8a16a0146c21f3"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f0c94fb0c8d0baf4d0241b70082a9302",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1844418,
            "upload_time": "2025-08-23T00:37:26",
            "upload_time_iso_8601": "2025-08-23T00:37:26.860798Z",
            "url": "https://files.pythonhosted.org/packages/44/5c/29acf72b6299f35d8967129a04e5e33678a262530c31a456a0f0a37ad934/matcher_py-0.5.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "951978e211fc61ad43d468dec6096c6070d579278ebdc5a9aa02dcd25b5ff03f",
                "md5": "37d3052c26078e022277b15deea29dd7",
                "sha256": "de9ae4a0d67e4f447f705789e4f9f7a0f3e3c743e6a38c76851456c1d0ae5d47"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "37d3052c26078e022277b15deea29dd7",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 2000539,
            "upload_time": "2025-08-23T00:37:28",
            "upload_time_iso_8601": "2025-08-23T00:37:28.239872Z",
            "url": "https://files.pythonhosted.org/packages/95/19/78e211fc61ad43d468dec6096c6070d579278ebdc5a9aa02dcd25b5ff03f/matcher_py-0.5.8-cp312-cp312-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d728cd5808c8606d8435dec0a67683152c680d5a05687fb86c2c4b1ea9906167",
                "md5": "c756cee4daa412b2a5c17a250cb60cb6",
                "sha256": "84137cbf72e22c92d6ff98e723429682cd0dae458d3d2a59f5f3e08ec060ecb7"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c756cee4daa412b2a5c17a250cb60cb6",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 2025213,
            "upload_time": "2025-08-23T00:37:29",
            "upload_time_iso_8601": "2025-08-23T00:37:29.326203Z",
            "url": "https://files.pythonhosted.org/packages/d7/28/cd5808c8606d8435dec0a67683152c680d5a05687fb86c2c4b1ea9906167/matcher_py-0.5.8-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "036683e3d6637b4fdded6a464eaf0c5fd907589d77276331e435ef9dfb5e1ff6",
                "md5": "8a6a728cb531ecc74d10db29bfc48a38",
                "sha256": "c1ffd3e089d0050f2592b01cefd790c9104826b83b80c447a951ab2ee50b711d"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8a6a728cb531ecc74d10db29bfc48a38",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1756597,
            "upload_time": "2025-08-23T00:37:30",
            "upload_time_iso_8601": "2025-08-23T00:37:30.700024Z",
            "url": "https://files.pythonhosted.org/packages/03/66/83e3d6637b4fdded6a464eaf0c5fd907589d77276331e435ef9dfb5e1ff6/matcher_py-0.5.8-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6e4cc7df5d25a9e4053548e27d7f2a58253660731bbf1af6e46d395b5d2f6da6",
                "md5": "acc5f7831647b5348cb39244ab9cfe11",
                "sha256": "766db24b7a0b26e6eacbe1f54d474939fa76319de7b63308a1fb45cd18962d69"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "acc5f7831647b5348cb39244ab9cfe11",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1649225,
            "upload_time": "2025-08-23T00:37:31",
            "upload_time_iso_8601": "2025-08-23T00:37:31.729828Z",
            "url": "https://files.pythonhosted.org/packages/6e/4c/c7df5d25a9e4053548e27d7f2a58253660731bbf1af6e46d395b5d2f6da6/matcher_py-0.5.8-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "654ad133a778e8df64d4fe6f91f41a26ece732d5749c57c11b14f927fd95e3e8",
                "md5": "4877af92d949ecb3f2b7aa163ba496ae",
                "sha256": "a52beb5c42babda70cb42d0d8ea149687cfdaabd48dc9dc89ac5dcdb3fa1a198"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "4877af92d949ecb3f2b7aa163ba496ae",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1789205,
            "upload_time": "2025-08-23T00:37:33",
            "upload_time_iso_8601": "2025-08-23T00:37:33.180264Z",
            "url": "https://files.pythonhosted.org/packages/65/4a/d133a778e8df64d4fe6f91f41a26ece732d5749c57c11b14f927fd95e3e8/matcher_py-0.5.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5d7e03b24f23591c55ce40e7a91374b8db148b7b23326e26fca04968b9995925",
                "md5": "a638d74a8bf67d3d1ca558291f785560",
                "sha256": "b48bb62466b18f9a033e1c6a435ba5b6c621c55955f536ea347573f408df5286"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a638d74a8bf67d3d1ca558291f785560",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1844413,
            "upload_time": "2025-08-23T00:37:34",
            "upload_time_iso_8601": "2025-08-23T00:37:34.622215Z",
            "url": "https://files.pythonhosted.org/packages/5d/7e/03b24f23591c55ce40e7a91374b8db148b7b23326e26fca04968b9995925/matcher_py-0.5.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e99209626d0125a5a8264782d1d9b8cc5f71905ae745a3da35ae10303acfe802",
                "md5": "29387a345ca386de506735b1d4db3e3f",
                "sha256": "0c0c7768a73e8b82d13425944b9b5c6ab55359e7581e296adf42a77fc51586ce"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "29387a345ca386de506735b1d4db3e3f",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 2000271,
            "upload_time": "2025-08-23T00:37:35",
            "upload_time_iso_8601": "2025-08-23T00:37:35.819742Z",
            "url": "https://files.pythonhosted.org/packages/e9/92/09626d0125a5a8264782d1d9b8cc5f71905ae745a3da35ae10303acfe802/matcher_py-0.5.8-cp313-cp313-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "756cfb0257173392c5785c1a1f7ebb1ac5d645d2a2a5e4238f9f248bd708a1ff",
                "md5": "b1ca7266b2083d19741f538a296d5b06",
                "sha256": "1edf6e9e04c07391b4f671a63e225b5bb59e42c7fa18ee7705da3ea2815e1483"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b1ca7266b2083d19741f538a296d5b06",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 2025403,
            "upload_time": "2025-08-23T00:37:36",
            "upload_time_iso_8601": "2025-08-23T00:37:36.899525Z",
            "url": "https://files.pythonhosted.org/packages/75/6c/fb0257173392c5785c1a1f7ebb1ac5d645d2a2a5e4238f9f248bd708a1ff/matcher_py-0.5.8-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fead889d3888a8392778e1ff9f9b03c80d498673a8fdc6b6b603825096d62cc8",
                "md5": "e1583be81e6529db5f44014efa9a51b7",
                "sha256": "5ebf4f0197a1aa483fca82dbad7655eb52102385ff3cc5dda45d27d757198f35"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e1583be81e6529db5f44014efa9a51b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1756751,
            "upload_time": "2025-08-23T00:37:38",
            "upload_time_iso_8601": "2025-08-23T00:37:38.267770Z",
            "url": "https://files.pythonhosted.org/packages/fe/ad/889d3888a8392778e1ff9f9b03c80d498673a8fdc6b6b603825096d62cc8/matcher_py-0.5.8-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f0127653a9170eddd0e1ac9f83ec1061d3ea0065cc5f1cab78083d55610548c",
                "md5": "2690d9a38f21624cc86071f189462c03",
                "sha256": "4219d036e401df4cf8f7a1dec5279dea2247cca375279e77c45127f076617cc7"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "2690d9a38f21624cc86071f189462c03",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1650251,
            "upload_time": "2025-08-23T00:37:39",
            "upload_time_iso_8601": "2025-08-23T00:37:39.293284Z",
            "url": "https://files.pythonhosted.org/packages/7f/01/27653a9170eddd0e1ac9f83ec1061d3ea0065cc5f1cab78083d55610548c/matcher_py-0.5.8-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7e5f304e3bde66671133aed2adc96b1fcbed22652d38a2caa30a61156d1a852f",
                "md5": "ee6133c9658afd2baad0ae8981709b10",
                "sha256": "2d2dd66d34e8fa772ab07c616b79039d7aac1450eab9802076a727a800717bf8"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ee6133c9658afd2baad0ae8981709b10",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1792209,
            "upload_time": "2025-08-23T00:37:40",
            "upload_time_iso_8601": "2025-08-23T00:37:40.640366Z",
            "url": "https://files.pythonhosted.org/packages/7e/5f/304e3bde66671133aed2adc96b1fcbed22652d38a2caa30a61156d1a852f/matcher_py-0.5.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "867d405047a04080a2397055175097025a3556cf841b0dbcb9e7d03ce73e8744",
                "md5": "968599129f992459fcf4de3bc62be540",
                "sha256": "ebed732b2f8c4486e001c27da07dcc81820b36a6ae1c549fbfb5847f7fcae0e6"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "968599129f992459fcf4de3bc62be540",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1845773,
            "upload_time": "2025-08-23T00:37:41",
            "upload_time_iso_8601": "2025-08-23T00:37:41.900621Z",
            "url": "https://files.pythonhosted.org/packages/86/7d/405047a04080a2397055175097025a3556cf841b0dbcb9e7d03ce73e8744/matcher_py-0.5.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e6b8af371ee94ab14b1f35f3d45ab5dd27d6bbb5ff30cede7610524fa8930e4e",
                "md5": "84fb0b5c3965251fdf814b35d4a0c642",
                "sha256": "076c32223c079cc2dc966e6d153eaf2fef79cbf5635ad62371f4bfa4bbfe7c95"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "84fb0b5c3965251fdf814b35d4a0c642",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2002836,
            "upload_time": "2025-08-23T00:37:42",
            "upload_time_iso_8601": "2025-08-23T00:37:42.976336Z",
            "url": "https://files.pythonhosted.org/packages/e6/b8/af371ee94ab14b1f35f3d45ab5dd27d6bbb5ff30cede7610524fa8930e4e/matcher_py-0.5.8-cp38-cp38-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9678faee687180cdc14fd6ce97d4ce2ced3af029ed1a8e31c45400f3d979d849",
                "md5": "ae5a1488e01fe22b03b518a7c5a2d65d",
                "sha256": "31b2a870e9e23fe16556c444026fc40caf8fc537d48672ee1cb0f6fe057c027c"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ae5a1488e01fe22b03b518a7c5a2d65d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 2025874,
            "upload_time": "2025-08-23T00:37:44",
            "upload_time_iso_8601": "2025-08-23T00:37:44.048258Z",
            "url": "https://files.pythonhosted.org/packages/96/78/faee687180cdc14fd6ce97d4ce2ced3af029ed1a8e31c45400f3d979d849/matcher_py-0.5.8-cp38-cp38-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "74dc9c0aa866d61de702b8085f1be02772471a8f393aa71906fcefe3ad3e58fd",
                "md5": "9dae5cc0778a6501913bcbd617ca99af",
                "sha256": "49c0e104ab9053380abe802b85d8630055e30799cd88ac0c23f0f4f0aa20a370"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9dae5cc0778a6501913bcbd617ca99af",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1756552,
            "upload_time": "2025-08-23T00:37:45",
            "upload_time_iso_8601": "2025-08-23T00:37:45.612246Z",
            "url": "https://files.pythonhosted.org/packages/74/dc/9c0aa866d61de702b8085f1be02772471a8f393aa71906fcefe3ad3e58fd/matcher_py-0.5.8-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "12207037237db15ffbd8c7d40f85c32dd5449d9c43b76f6ebefd090f0db712d3",
                "md5": "ff4678c2285023c716e8e4bd14284dba",
                "sha256": "14c752e22e0f6e2d1d3ef3179ca12b7c3dd740885a09370f856fb9c0f5785d4d"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ff4678c2285023c716e8e4bd14284dba",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1650331,
            "upload_time": "2025-08-23T00:37:47",
            "upload_time_iso_8601": "2025-08-23T00:37:47.340477Z",
            "url": "https://files.pythonhosted.org/packages/12/20/7037237db15ffbd8c7d40f85c32dd5449d9c43b76f6ebefd090f0db712d3/matcher_py-0.5.8-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "90912eb6b402586a04dcd525717e317f5273b0391b2641c671fdd69c551a5a91",
                "md5": "d1eed63889f85cb323597d059714905b",
                "sha256": "353ed76debb4020f1418fc79814e3130e76ad79fd1ba22acabb29a68ad7f85d8"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "d1eed63889f85cb323597d059714905b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1792043,
            "upload_time": "2025-08-23T00:37:48",
            "upload_time_iso_8601": "2025-08-23T00:37:48.398277Z",
            "url": "https://files.pythonhosted.org/packages/90/91/2eb6b402586a04dcd525717e317f5273b0391b2641c671fdd69c551a5a91/matcher_py-0.5.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "49ff0326a3491f1c0c7ae2294032b8133e1ff7fba20d001c8589c8211043c8e8",
                "md5": "e069046a5653ed22a33bb012d2c816a0",
                "sha256": "176274d74514e9edec6fe8363c667e78fd6181b1cdf78612cfa762dbec75df14"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e069046a5653ed22a33bb012d2c816a0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1845566,
            "upload_time": "2025-08-23T00:37:49",
            "upload_time_iso_8601": "2025-08-23T00:37:49.462369Z",
            "url": "https://files.pythonhosted.org/packages/49/ff/0326a3491f1c0c7ae2294032b8133e1ff7fba20d001c8589c8211043c8e8/matcher_py-0.5.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "54b8f1fe040376c470638988902d9c537edc005048bfcfaec6de7d42f8e94e58",
                "md5": "2944301f4edf83a59eb8a8871553eaa3",
                "sha256": "ae7e30b3cc4dc1e77245141a51768dd700afe596ac946e84cea4b8dbcca1c980"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2944301f4edf83a59eb8a8871553eaa3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 2002800,
            "upload_time": "2025-08-23T00:37:50",
            "upload_time_iso_8601": "2025-08-23T00:37:50.685489Z",
            "url": "https://files.pythonhosted.org/packages/54/b8/f1fe040376c470638988902d9c537edc005048bfcfaec6de7d42f8e94e58/matcher_py-0.5.8-cp39-cp39-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0f5ce1eee732b86f2cbee1cac6e224bb7129d59934bd1fedc964c3a55c54d9a1",
                "md5": "bbd3c98cb7eb255bc3f07f908c42d6f9",
                "sha256": "114787e01b79e60b3f3b84ba77c2d1a23e9f6cb6f0d8ba7c3f46dd0b3ffa5566"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bbd3c98cb7eb255bc3f07f908c42d6f9",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 2025946,
            "upload_time": "2025-08-23T00:37:51",
            "upload_time_iso_8601": "2025-08-23T00:37:51.789834Z",
            "url": "https://files.pythonhosted.org/packages/0f/5c/e1eee732b86f2cbee1cac6e224bb7129d59934bd1fedc964c3a55c54d9a1/matcher_py-0.5.8-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3131be219debf3eadee24478c433b1a8e3df81dc336c69e1fc9f574f3d4c60e4",
                "md5": "3e96ab14e425fa6e8ce48d8e3dbd4c1b",
                "sha256": "6d51efcd300c4b4d52b057ff2acbf17307bab5aed0d763164949bc510b986c3f"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3e96ab14e425fa6e8ce48d8e3dbd4c1b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1756536,
            "upload_time": "2025-08-23T00:37:52",
            "upload_time_iso_8601": "2025-08-23T00:37:52.877441Z",
            "url": "https://files.pythonhosted.org/packages/31/31/be219debf3eadee24478c433b1a8e3df81dc336c69e1fc9f574f3d4c60e4/matcher_py-0.5.8-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8d04f7cd3b110e2385eb4aea5b268750d6d2fd964e012ca9b40b564d165385c1",
                "md5": "28fa5d759a9e3c59f876b323db7358f5",
                "sha256": "c9b737eb61d3a08e8e285f5bd7a08f5f7ee4675a8d9c7ad3a98561cf51a137d7"
            },
            "downloads": -1,
            "filename": "matcher_py-0.5.8.tar.gz",
            "has_sig": false,
            "md5_digest": "28fa5d759a9e3c59f876b323db7358f5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 317255,
            "upload_time": "2025-08-23T00:37:54",
            "upload_time_iso_8601": "2025-08-23T00:37:54.235961Z",
            "url": "https://files.pythonhosted.org/packages/8d/04/f7cd3b110e2385eb4aea5b268750d6d2fd964e012ca9b40b564d165385c1/matcher_py-0.5.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-23 00:37:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Lips7",
    "github_project": "Matcher",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "matcher-py"
}
        
Elapsed time: 2.98041s