Blazingly fast Word Matcher
Project description
Matcher Rust Implementation with PyO3 Binding
A high-performance, multi-functional word matcher implemented in Rust.
Designed to solve AND OR NOT and TEXT VARIATIONS problems in word/word_list matching. For detailed implementation, see the Design Document.
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
- Fanjian: Simplify traditional Chinese characters to simplified ones.
Example:
- AND OR NOT Word Matching:
- Takes into account the number of repetitions of words.
- Example:
hello&world
matcheshello world
andworld,hello
- Example:
无&法&无&天
matches无无法天
(because无
is repeated twice), but not无法天
- Example:
hello~helloo~hhello
matcheshello
but nothelloo
andhhello
- Customizable Exemption Lists: Exclude specific words from matching.
- Efficient Handling of Large Word Lists: Optimized for performance.
Installation
Use pip
pip install matcher_py
Install pre-built binary
Visit the release page to download the pre-built binary.
Usage
The msgspec
library is recommended for serializing the matcher configuration due to its performance benefits. You can also use other msgpack serialization libraries like ormsgpack
. All relevant types are defined in extension_types.py.
Explanation of the configuration
Matcher
's configuration is defined by theMatchTableMap = Dict[int, List[MatchTable]]
type, the key ofMatchTableMap
is calledmatch_id
, for eachmatch_id
, thetable_id
inside is required to be unique.SimpleMatcher
's configuration is defined by theSimpleMatchTableMap = Dict[SimpleMatchType, Dict[int, str]]
type, the valueDict[int, str]
's key is calledword_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_simple_match_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 bysimple_match_type
.- We offer transformation methods for text normalization, including
Fanjian
,Normalize
,PinYin
···. - It can handle combination patterns and repeated times sensitive matching, delimited by
&
, such ashello&world&hello
will matchhellohelloworld
andworldhellohello
, but nothelloworld
due to the repeated times ofhello
.
- We offer transformation methods for text normalization, including
Regex
: Supports regex patterns matching.SimilarChar
: Supports similar character matching using regex.["hello,hallo,hollo,hi", "word,world,wrd,🌍", "!,?,~"]
will matchhelloworld!
,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 matchhope, endures, love, lasts, onward.
and你的笑容温暖, 好心情常伴。
.
Regex
: Supports regex matching.["h[aeiou]llo", "w[aeiou]rd"]
will matchhello
,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.DamerauLevenshtein
: Supports similar text matching based on Damerau-Levenshtein distance.Indel
: Supports similar text matching based on Indel distance.Jaro
: Supports similar text matching based on Jaro distance.JaroWinkler
: Supports similar text matching based on Jaro-Winkler distance.
SimpleMatchType
None
: No transformation.Fanjian
: Traditional Chinese to simplified Chinese transformation. Based on FANJIAN.妳好
->你好
現⾝
->现身
Delete
: Delete all punctuation, special characters and white spaces.hello, world!
->helloworld
《你∷好》
->你好
Normalize
: Normalize all English character variations and number variations to basic characters. Based on SYMBOL_NORM, NORM and NUM_NORM.ℋЀ⒈㈠Õ
->he11o
⒈Ƨ㊂
->123
PinYin
: Convert all unicode Chinese characters to pinyin with boundaries. Based on PINYIN.你好
->␀ni␀␀hao␀
西安
->␀xi␀␀an␀
PinYinChar
: Convert all unicode Chinese characters to pinyin without boundaries. Based on PINYIN.你好
->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
.
Delete
is technologically a combination of TextDelete
and WordDelete
, we implement different delete methods for text and word. 'Cause we believe CN_SPECIAL
and EN_SPECIAL
are parts of the word, but not for text. For text_process
and reduce_text_process
functions, users should use TextDelete
instead of WordDelete
.
WordDelete
: Delete all patterns inWHITE_SPACE
.TextDelete
: Delete all patterns in TEXT_DELETE.
Text Process Usage
Here’s an example of how to use the reduce_text_process
and text_process
functions:
from matcher_py import reduce_text_process, text_process
from matcher_py.extension_types import SimpleMatchType
print(reduce_text_process(SimpleMatchType.MatchTextDelete | SimpleMatchType.MatchNormalize, "hello, world!"))
print(text_process(SimpleMatchType.MatchTextDelete, "hello, world!"))
Matcher Basic Usage
Here’s an example of how to use the Matcher
:
import msgspec
import numpy as np
from matcher_py import Matcher
from matcher_py.extension_types import MatchTable, MatchTableType, SimpleMatchType
msgpack_encoder = msgspec.msgpack.Encoder()
matcher = Matcher(
msgpack_encoder.encode({
1: [
MatchTable(
table_id=1,
match_table_type=MatchTableType.Simple(simple_match_type = SimpleMatchType.MatchFanjianDeleteNormalize),
word_list=["hello", "world"],
exemption_simple_match_type=SimpleMatchType.MatchNone,
exemption_word_list=["word"],
)
]
})
)
# Check if a text matches
assert matcher.is_match("hello")
assert not matcher.is_match("hello, word")
# Perform word matching as a dict
assert matcher.word_match(r"hello, world")[1]
# Perform word matching as a string
result = matcher.word_match_as_string("hello")
assert result == """{1:[{\"match_id\":1,\"table_id\":1,\"word\":\"hello\"}]"}"""
# Perform batch processing as a dict using a list
text_list = ["hello", "world", "hello,word"]
batch_results = matcher.batch_word_match(text_list)
print(batch_results)
# Perform batch processing as a string using a list
text_list = ["hello", "world", "hello,word"]
batch_results = matcher.batch_word_match_as_string(text_list)
print(batch_results)
# Perform batch processing as a dict using a numpy array
text_array = np.array(["hello", "world", "hello,word"], dtype=np.dtype("object"))
numpy_results = matcher.numpy_word_match(text_array)
print(numpy_results)
# Perform batch processing as a string using a numpy array
text_array = np.array(["hello", "world", "hello,word"], dtype=np.dtype("object"))
numpy_results = matcher.numpy_word_match_as_string(text_array)
print(numpy_results)
Simple Matcher Basic Usage
Here’s an example of how to use the SimpleMatcher
:
import msgspec
import numpy as np
from matcher_py import SimpleMatcher
from matcher_py.extension_types import SimpleMatchType
msgpack_encoder = msgspec.msgpack.Encoder()
simple_matcher = SimpleMatcher(
msgpack_encoder.encode({SimpleMatchType.MatchNone: {1: "example"}})
)
# Check if a text matches
assert simple_matcher.is_match("example")
# Perform simple processing
results = simple_matcher.simple_process("example")
print(results)
# Perform batch processing using a list
text_list = ["example", "test", "example test"]
batch_results = simple_matcher.batch_simple_process(text_list)
print(batch_results)
# Perform batch processing using a NumPy array
text_array = np.array(["example", "test", "example test"], dtype=np.dtype("object"))
numpy_results = simple_matcher.numpy_simple_process(text_array)
print(numpy_results)
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. 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for matcher_py-0.4.5-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 92be991731c314c87c2a6aad39bb87e312f38f32e5bbae296671d0c44da79e22 |
|
MD5 | d1d3acbdc1a156a13b4b3997f9bc4fd8 |
|
BLAKE2b-256 | 37352afd70fde1e960bb8fec682bee5719101347e18e0db9d921ee422787c2f4 |
Hashes for matcher_py-0.4.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c038adb71509c69d9ecd196403c3bbe399618dffcaf45866c62370e6d4d759b9 |
|
MD5 | 333ac919b5642dc5ef1eb1df955441ba |
|
BLAKE2b-256 | b09ef2bd1019f1511e1026492e60f9a2f1cf01dea02f84ed7b7869ccf960d3fa |
Hashes for matcher_py-0.4.5-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6aeb58a301b90e7333acf1a6a67d0a6f4ebd6083d09c88399fecd02914354128 |
|
MD5 | 47b052f735bf78507032fa0641e12f54 |
|
BLAKE2b-256 | 6a1a8140d61abd64d8a39c31999be3547ba6e7e9ede191955e4083fa61fd8105 |
Hashes for matcher_py-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5074637253fe64a4565c585c30b3587474d34787fdbb7bbbce06c3004b1c137 |
|
MD5 | 6ec361a5270956a815d5b5cd3b7a6bdc |
|
BLAKE2b-256 | b2d7cefa8c0413440b0e12ab78d1581272527c3d606c401764cf0418fa274193 |
Hashes for matcher_py-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d5e47d997ef423353daf2fc2dbcce168b9b6621ae685f33c72c834af87a9af0 |
|
MD5 | 72138c5dfa72a5ae5a3b40b2b17caafc |
|
BLAKE2b-256 | 1985af5bd5303a518750da57737fa6c8295ccc6b49dc1800663687da5e1b13ab |
Hashes for matcher_py-0.4.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e881fa2097005e2c1fc170135e39bc12967a740091a4f33d8d33479848cc225 |
|
MD5 | 28cbfcb70d31f1fd4d9c0f3de01ea566 |
|
BLAKE2b-256 | 92dcad5b7b636112b35b29435a157010ae3a71e904344c0a3385d798e21b1d91 |
Hashes for matcher_py-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d52683630e8837e4d898966624ec2147f6b7eda25140d94d37da03d0b776dd6 |
|
MD5 | 76d2a0702985f3afa381bf96458a2ac8 |
|
BLAKE2b-256 | 8d37997d1132df9891c8c80e9557ac29fb5bf400fd0796b8e9d9384a4f189b3a |
Hashes for matcher_py-0.4.5-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db0a0cfb6050a7a711ba06cdf4f690fb20cc3496cc10bf1e1624a056196a330e |
|
MD5 | 4245755541069d03007306a650e00e8e |
|
BLAKE2b-256 | 65301d7444effc7b40eb12a2ccb1b9eff6758003aef9993721017b77e69f51e9 |
Hashes for matcher_py-0.4.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d3152cbdebc3e60cfff8f27f545c7abad2f795f6332411861f6e9bfbaa3d713 |
|
MD5 | c519924207c2361bdf494f24b549c579 |
|
BLAKE2b-256 | be3ad2eb0e96f4962c3f9ec78d102b0838bc3ee335c795d2547cb3020a07889a |
Hashes for matcher_py-0.4.5-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90cad8b695daaf2beb52a361f4de0bbfd6322728521b560b3df5387cef6e2a5c |
|
MD5 | 36541b1ddf043d0737b83e648c4c79f9 |
|
BLAKE2b-256 | 04d19b897d6cf52c20dbdc10bbc2d77d41ba285aec56f666f10f4b1ba5029730 |
Hashes for matcher_py-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e0dda3523892d38be369d116b71ec750cf0b364536d6464210dcdcadb6dcd88 |
|
MD5 | dd16bf9fcf773439d187256a92dd8457 |
|
BLAKE2b-256 | 3e4dbc97aa2e2c8ee7b1b554e54c46db404da952c7a0deb57fcc31269ff00bd8 |
Hashes for matcher_py-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa554bf8332051d066d364946412fb3f056dbf36c48be07bffc5858123d90ebe |
|
MD5 | fbeddcd1e8c71250cc18b3cc4e31b4a7 |
|
BLAKE2b-256 | 19e8252ccde2e48f61ec5318409a593e51865a422c953e2fac3dd0cf762d22ef |
Hashes for matcher_py-0.4.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6898351a3127f19d579b0dab2a59205a15a0e0c2f06c1dedb519db33ffa5674 |
|
MD5 | d090aa9328491fa0540a5fb3b16a7fa8 |
|
BLAKE2b-256 | aa496baf4161794d3ac70ef2329d3416a3fe8ab69686161d04212d755ab4eb9a |
Hashes for matcher_py-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f09b2bead5df8b93971c7df951b1283a579a32f50cc2d102aeba331b650d800 |
|
MD5 | 89e3ef8c9a68a9b15a65cad86c37e640 |
|
BLAKE2b-256 | ed05df77e8405e9bfed3526742663f9d0a131bcb529ea87c19770ea34a84f441 |
Hashes for matcher_py-0.4.5-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19f9a122fcf427fb89b7a8b703563f9b8fe6a1f8f8ad9660f4cb5f5d7654c528 |
|
MD5 | 36b7dcfc41908776c4301efe64be1868 |
|
BLAKE2b-256 | 60cd1a8dcdaf01b7664a4145ee8b35923725b720cc1c5765b62cb399f5a181f8 |
Hashes for matcher_py-0.4.5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc30b36ec3204bb0f79af695d7a322be3cc3cd85d0ea2b5da56a41e5163a9ad1 |
|
MD5 | 1ef61c53ca62d3dc899747eab4043bb1 |
|
BLAKE2b-256 | 81f395e29285873eccee670f97be5b29a5dafd678bf850145fcf5e9baf24fe20 |
Hashes for matcher_py-0.4.5-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 799409e08fff8e6554206fbf2c18c25365f7a7dd2a94217a2a966d8fb90e3cb8 |
|
MD5 | dfed0e50b866feef188ed9bd729d81f9 |
|
BLAKE2b-256 | 1706329fa3708c466d3d90e161fc2dd28ac1568b9ffdf050734ed634d21407f1 |
Hashes for matcher_py-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d718de0148259c073c0bd6ee349c407a76729a9e4c66426308c8f539147152c9 |
|
MD5 | be34812ce2a184bd2404204a0ba8c94b |
|
BLAKE2b-256 | c50d8149d33b2371bbc93c3f3833f133e24ecc5f9a7688d0dff6c41d62a78c23 |
Hashes for matcher_py-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf4e53121f6689cdab2da8233aea8e967899ae1725620cff879a841111ef5102 |
|
MD5 | 27ce0f55c2d0af5d149e6f06417802ee |
|
BLAKE2b-256 | 7211c53008da4e69ef14039967debead3832f0b1075b5999fe7fbcb2db105729 |
Hashes for matcher_py-0.4.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a383cc83124dfd950d32c410df76458d8acc3f543f1611f5e6a783161328995 |
|
MD5 | acbd7a30dc075c1dcac20accdc833c89 |
|
BLAKE2b-256 | 98133ec83bef733cf3852e12de8c96d6faa53458912afbd98068d2df20820417 |
Hashes for matcher_py-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 184f60c82e2df01f8ef36fc935169b3097b375388276c9ef5715917cd804e93a |
|
MD5 | 0aa1da78437200bfa112c069c6ced6bb |
|
BLAKE2b-256 | 697d78e7c5098084beb0f23e3d318de0ea9c70871f68de2e3d1be20bc1dd92b4 |
Hashes for matcher_py-0.4.5-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2584c9f3d3def61c273b9c7e62d1cb3ddd838122272d4fe2a0deeea665b8c8f4 |
|
MD5 | 304cca69371fa64862fbd7496c286be9 |
|
BLAKE2b-256 | 1c3b3a2aa9a8ff954762f194d9cc7996b10fdb2c4be566c420520bedfca18768 |
Hashes for matcher_py-0.4.5-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09ef4c6d51ed1585e1c20a180abc88119a7ef0f27110a3b0ac849047754b7c3f |
|
MD5 | 86c00e5d58cb3283dc9c19ed7b64a75c |
|
BLAKE2b-256 | efc79324ad865dbed64d8f29f2c0785c58c11539e701085de8214fa24ebfcb82 |
Hashes for matcher_py-0.4.5-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2936f508da942b1ac6c490fc75c3650e6b3029d2a6cffb8cbefd8b7459f72563 |
|
MD5 | 8f7da1e9638d3adaae7d06010b4ae3f5 |
|
BLAKE2b-256 | ed298a7646076480d0cb5e02d31b320b5685669fc6e2cde13f6198771bfa6043 |
Hashes for matcher_py-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82746dce82cf8c69fcf5190834e9cc0ef810a311687a4845896ac5e6b4c7d14b |
|
MD5 | adde00e6419588f9ee27e0cb0bcfa9a6 |
|
BLAKE2b-256 | 862e9c433d364e73821455cfdca5c6cc6db34250be1335bcedb322449ce4ff05 |
Hashes for matcher_py-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee026606231dce38644b22664e23fb72daec7e020330c0418f080c0cd9a7a355 |
|
MD5 | 34d16eabcfa739ae29813120774973ec |
|
BLAKE2b-256 | 3727f3b0ed73a0f4a179d678eec3d5133ba07c1fa3c95e93ab436401cca24f58 |
Hashes for matcher_py-0.4.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f18374242b05f8d189841f93998ab01d23f3afec674a0f741ead73f93eade43 |
|
MD5 | 52f2bba90f8a200582d6a94deaf3b1e0 |
|
BLAKE2b-256 | 1f76d37682582dd4ae95e3f5d5600cc18ec4f42045f9dc4065c1c4bb703d003d |
Hashes for matcher_py-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cc76f3dd33984ae829a4b5809b753e689f760cdb8d57fb7099dbbb52b5d809b |
|
MD5 | 6dc810def056487f5ae2ce9dab434812 |
|
BLAKE2b-256 | af4716bb16375455828d35d64cd37daeac8c264832615cf0d1227e4fe129d558 |
Hashes for matcher_py-0.4.5-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06fcab8f16fd94d990b0ad33107950a306f7d6662e0715cff7f5ae55229912a8 |
|
MD5 | 1c0f73e02d8d290ed3d395ce4f909d4e |
|
BLAKE2b-256 | e770b857eba6e91c0e169d3ce489a7a46172bd226984b42843766588fbd70cda |
Hashes for matcher_py-0.4.5-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3027d3a9780d83536deb9f8f3e551c62b3a6f638dfa455e95a7a81f6bc8a714c |
|
MD5 | afb2e48abbf9022487118431b0fde7c2 |
|
BLAKE2b-256 | 933b0b95ba4f2e408d492a0f31c1138ef98d37aa5ca87301ce4987e5bdd9cc44 |
Hashes for matcher_py-0.4.5-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bcdf4bf2b6b62f15f5254daa2b25182c95ced73dc487f8d512f976310a5ea03 |
|
MD5 | 12f27157a7e8e53f703eb02b46be8a55 |
|
BLAKE2b-256 | c1a82d77c41250d0e9a24e0fbad33c0f01e3e0e8e353d065617a303fc10e897d |
Hashes for matcher_py-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29c7e21351638b09396a9e436cc2d038e72d343aa4f66107eb4025b5ff2d523c |
|
MD5 | 6ee43cb2d3d5160e8b0185e5b54e9d6b |
|
BLAKE2b-256 | c979699df3186ea211c0eb161675bdab21effaeb5bd733f5e02a505fb3e75934 |
Hashes for matcher_py-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fb95c055a28bd3a95326222a6f1279a67d34a1d284edfb9196ef0060257460e |
|
MD5 | f449024cbbf98aef02deff6ccf5186c1 |
|
BLAKE2b-256 | 533279a61ee2c3416e735687d20534a6b965ddca1cf521cd7a971e657b7ce09f |
Hashes for matcher_py-0.4.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 792069d1a74a5228c5f32cba3e1d05602dc3c7ebd3401e1985ee71efda18e37e |
|
MD5 | 9c38f3f3dbc87c58cdcd16d081efa462 |
|
BLAKE2b-256 | 77bcd7684eed2eaaec89611ddc21b49b3f48bd3b0f7ce55389464ef4c851a9ac |
Hashes for matcher_py-0.4.5-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a31bf1333869dc3e61ad57ec534caa15d73df19572e7de79de423c5c30a3ccd5 |
|
MD5 | fadbc3a28470ce94cbd1eedee8bae300 |
|
BLAKE2b-256 | b0e5bf523d01bbdc63b34819f2e57bcaa4047dfaefb0650186a09b61bae9eeeb |