ry = rust + python kitchen sink utils (WIP)
Project description
ry
python bindings for rust crates I wish existed in python
THIS IS A WORK IN PROGRESS
Install
pip install ry
poetry add ry
pdm add ry
rye add ry
Check install: python -m ry
What and why?
This is a collection of pyo3-wrappers for rust crates I wish existed in python.
It all started with me wanting a fast python xxhash
and fnv-64
Who?
- jessekrubin jessekrubin@gmail.com
- possibly you!?
FAQ
(aka: questions that I have been asking myself)
- Q: Why?
- A: I (jesse) needed several hashing functions for python and then kept adding things as I needed them
- Q: Does this have anything to do with the (excellent) package manager
rye
?- A: short answer: no. long answer: no, it does not.
- Q: Why is the repo split into
ry
andryo3
?- A:
ry
is the python package,ryo3
is a rust crate setup to let you "register" functions you may want if you were writing your own pyo3-python bindings library; maybe someday theryo3::libs
module will be split up into separate packages
- A:
Crate bindings
brotli
bzip2
flate2
fnv
shlex
walkdir
which
xxhash
zstd
- TBD:
subprocess.redo
(subprocesses that are lessy finicky and support tee-ing)globset
(technically done, but not yet inry
-- globsters)regex
tokio
(fs + process)tracing
(could be nicer than python's awful logging lib -- currently a part of ry/ryo3 for my dev purposes)reqwest
(async http client / waiting on pyo3 asyncio to stablize and for me to have more time)
API
"""ry api ~ type annotations"""
from os import PathLike
from typing import AnyStr, Iterator, Literal, final
__version__: str
__authors__: str
__build_profile__: str
__build_timestamp__: str
# ==============================================================================
# TYPE ALIASES
# ==============================================================================
JsonPrimitive = None | bool | int | float | str
JsonValue = (
JsonPrimitive
| dict[str, JsonPrimitive | JsonValue]
| list[JsonPrimitive | JsonValue]
)
class FsPath:
def __init__(self, path: str | None = None) -> None: ...
def __str__(self) -> str: ...
def __repr__(self) -> str: ...
def __eq__(self, other: object) -> bool: ...
def __ne__(self, other: object) -> bool: ...
FsPathLike = str | FsPath | PathLike[str]
def pwd() -> str: ...
def cd(path: FsPathLike) -> None: ...
def ls(path: FsPathLike | None = None) -> list[FsPath]: ...
# ==============================================================================
# SLEEP
# ==============================================================================
def sleep(seconds: float) -> float: ...
# ==============================================================================
# FILESYSTEM
# ==============================================================================
def read_text(path: FsPathLike) -> str: ...
def read_bytes(path: FsPathLike) -> bytes: ...
# ==============================================================================
# WHICH
# ==============================================================================
def which(cmd: str, path: None | str = None) -> str | None: ...
def which_all(cmd: str, path: None | str = None) -> list[str]: ...
# ==============================================================================
# WALKDIR
# ==============================================================================
class Walkdir:
files: bool
dirs: bool
def __next__(self) -> str: ...
def __iter__(self) -> Iterator[str]: ...
def walkdir(
path: FsPathLike | None = None,
files: bool = True,
dirs: bool = True,
contents_first: bool = False,
min_depth: int = 0,
max_depth: int | None = None,
follow_links: bool = False,
same_file_system: bool = False,
) -> Walkdir: ...
# ==============================================================================
# SHLEX
# ==============================================================================
def shplit(s: str) -> list[str]: ...
# ==============================================================================
# JSON
# ==============================================================================
def parse_json(
data: bytes | str,
/,
*,
allow_inf_nan: bool = True,
cache_mode: Literal[True, False, "all", "keys", "none"] = "all",
partial_mode: Literal[True, False, "off", "on", "trailing-strings"] = False,
catch_duplicate_keys: bool = False,
lossless_floats: bool = False,
) -> JsonValue: ...
def parse_json_bytes(
data: bytes,
/,
*,
allow_inf_nan: bool = True,
cache_mode: Literal[True, False, "all", "keys", "none"] = "all",
partial_mode: Literal[True, False, "off", "on", "trailing-strings"] = False,
catch_duplicate_keys: bool = False,
lossless_floats: bool = False,
) -> JsonValue: ...
def parse_json_str(
data: str,
/,
*,
allow_inf_nan: bool = True,
cache_mode: Literal[True, False, "all", "keys", "none"] = "all",
partial_mode: Literal[True, False, "off", "on", "trailing-strings"] = False,
catch_duplicate_keys: bool = False,
lossless_floats: bool = False,
) -> JsonValue: ...
# ==============================================================================
# FORMATTING
# ==============================================================================
def fmt_nbytes(nbytes: int) -> str: ...
# ==============================================================================
# FNV
# ==============================================================================
class FnvHasher:
def __init__(self, input: bytes | None = None) -> None: ...
def update(self, input: bytes) -> None: ...
def digest(self) -> int: ...
def hexdigest(self) -> str: ...
def copy(self) -> FnvHasher: ...
def __str__(self) -> str: ...
def __repr__(self) -> str: ...
def fnv1a(input: bytes) -> FnvHasher: ...
# ==============================================================================
# DEV
# ==============================================================================
def anystr_noop(s: AnyStr) -> AnyStr: ...
# ==============================================================================
# BROTLI
# ==============================================================================
def brotli_encode(
input: bytes, quality: int = 11, magic_number: bool = False
) -> bytes: ...
def brotli_decode(input: bytes) -> bytes: ...
def brotli(input: bytes, quality: int = 11, magic_number: bool = False) -> bytes:
"""Alias for brotli_encode"""
# ==============================================================================
# BZIP2
# ==============================================================================
def bzip2_encode(input: bytes, quality: int = 9) -> bytes: ...
def bzip2_decode(input: bytes) -> bytes: ...
def bzip2(input: bytes, quality: int = 9) -> bytes:
"""Alias for bzip2_encode"""
# ==============================================================================
# GZIP
# ==============================================================================
def gzip_encode(input: bytes, quality: int = 9) -> bytes: ...
def gzip_decode(input: bytes) -> bytes: ...
def gzip(input: bytes, quality: int = 9) -> bytes:
"""Alias for gzip_encode"""
# ==============================================================================
# ZSTD
# ==============================================================================
def zstd_encode(input: bytes, level: int = 3) -> bytes: ...
def zstd(input: bytes, level: int = 3) -> bytes:
"""Alias for zstd_encode"""
def zstd_decode(input: bytes) -> bytes: ...
# ==============================================================================
# XXHASH
# ==============================================================================
@final
class Xxh32:
def __init__(self, input: bytes = ..., seed: int | None = ...) -> None: ...
def update(self, input: bytes) -> None: ...
def digest(self) -> bytes: ...
def hexdigest(self) -> str: ...
def intdigest(self) -> int: ...
def copy(self) -> Xxh32: ...
def reset(self, seed: int | None = ...) -> None: ...
@property
def name(self) -> str: ...
@property
def seed(self) -> int: ...
@final
class Xxh64:
def __init__(self, input: bytes = ..., seed: int | None = ...) -> None: ...
def update(self, input: bytes) -> None: ...
def digest(self) -> bytes: ...
def hexdigest(self) -> str: ...
def intdigest(self) -> int: ...
def copy(self) -> Xxh32: ...
def reset(self, seed: int | None = ...) -> None: ...
@property
def name(self) -> str: ...
@property
def seed(self) -> int: ...
@final
class Xxh3:
def __init__(
self, input: bytes = ..., seed: int | None = ..., secret: bytes | None = ...
) -> None: ...
def update(self, input: bytes) -> None: ...
def digest(self) -> bytes: ...
def hexdigest(self) -> str: ...
def intdigest(self) -> int: ...
@property
def name(self) -> str: ...
@property
def seed(self) -> int: ...
def digest128(self) -> bytes: ...
def hexdigest128(self) -> str: ...
def intdigest128(self) -> int: ...
def copy(self) -> Xxh3: ...
def reset(self) -> None: ...
def xxh32(input: bytes | None = None, seed: int | None = None) -> Xxh32: ...
def xxh64(input: bytes | None = None, seed: int | None = None) -> Xxh64: ...
def xxh3(
input: bytes | None = None, seed: int | None = None, secret: bytes | None = None
) -> Xxh3: ...
# xxh32
def xxh32_digest(input: bytes, seed: int | None = None) -> bytes: ...
def xxh32_hexdigest(input: bytes, seed: int | None = None) -> str: ...
def xxh32_intdigest(input: bytes, seed: int | None = None) -> int: ...
# xxh64
def xxh64_digest(input: bytes, seed: int | None = None) -> bytes: ...
def xxh64_hexdigest(input: bytes, seed: int | None = None) -> str: ...
def xxh64_intdigest(input: bytes, seed: int | None = None) -> int: ...
# xxh128
def xxh128_digest(input: bytes, seed: int | None = None) -> bytes: ...
def xxh128_hexdigest(input: bytes, seed: int | None = None) -> str: ...
def xxh128_intdigest(input: bytes, seed: int | None = None) -> int: ...
# xxh3
def xxh3_64_digest(input: bytes, seed: int | None = None) -> bytes: ...
def xxh3_64_intdigest(input: bytes, seed: int | None = None) -> int: ...
def xxh3_64_hexdigest(input: bytes, seed: int | None = None) -> str: ...
DEV
just
is used to run tasks- Do not use the phrase
blazing fast
or any emojis in any PRs or issues or docs - type annotations are required
ruff
used for formatting and linting
SEE ALSO
- utiles (web-map tile utils): https://github.com/jessekrubin/utiles
- jsonc2json (jsonc to json converter): https://github.com/jessekrubin/jsonc2json
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ry-0.0.7.tar.gz
(68.3 kB
view hashes)
Built Distributions
ry-0.0.7-cp312-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.7-cp311-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.7-cp310-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.7-cp39-none-win32.whl
(1.9 MB
view hashes)
Close
Hashes for ry-0.0.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 085a411f06c93529cb04a7b939fc0e0878e489ed90f4ca4d85de7f2580b82d8c |
|
MD5 | c95e743f9f908a772624f4916c93e460 |
|
BLAKE2b-256 | 6286ab95e023fde6232e9d778f7bbda31836dd5476ebde6e9e33acda59f188ee |
Close
Hashes for ry-0.0.7-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec2180e82ef10837ed887999eb29ff2807d1d5570e87023b92449a61ebd1686b |
|
MD5 | c81b5ab0b4c04bcde31f1f38b3b38baa |
|
BLAKE2b-256 | e0fbb0f93c75b1ae893d0a40ac2bd141eded07a230ddc365d5cb458d701e3a1b |
Close
Hashes for ry-0.0.7-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cecd5cc9b02e9235a8896babef9a1895a02d8951efcb9ed7f4a2aac5a13bee0 |
|
MD5 | 1c1755f537a3a66c005a4dc11ae930bb |
|
BLAKE2b-256 | 58cdb6d12d0fb281ea04c8de45c2fb2f2588f472179f7eaf33aa609ea6747501 |
Close
Hashes for ry-0.0.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ade5430e81fc54abe8b1ea260ae69b139dd1bb6851d50a5d7e0b75294a8fcece |
|
MD5 | c6249e924aa8fc0b46eb8a37cfa941b3 |
|
BLAKE2b-256 | 1ea9d6f3808fb2db02659ff22b0f989f9fd738f500758bf73d6407c8821378d2 |
Close
Hashes for ry-0.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17a2cb3a598e5bca0c676881a8b8c8631a6aee68ea7b3179ce014afbf697dec1 |
|
MD5 | 0cc9c8345dc08d0edb880f444e278cb2 |
|
BLAKE2b-256 | 0d0d99c0b6423b0b2d6ce1f4fd2728814e6ab72d1b557e5e784b32dc3f769361 |
Close
Hashes for ry-0.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad753afe63b5f9673f6b1e1165d101e66dfc2e8fc4dd2ffebdce9867c8873285 |
|
MD5 | ac48ed75f7683784bfc94178b5762908 |
|
BLAKE2b-256 | e86894a4e455f9290672c90c2d6f4c6b94b5d01e430a06d66105bf2aa4fd3cfc |
Close
Hashes for ry-0.0.7-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c16af3d4108e15dc0c04e39f4a25bfca3f2237a08ecff22398a0571cdcc980b7 |
|
MD5 | 0a908ade34a5928004798c74afc8fa1d |
|
BLAKE2b-256 | 90b6df33edc0f960a3c0bd700044bee5723c9f1fbc73a33f05ca0372dad1f6e2 |
Close
Hashes for ry-0.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77461d293de01726a16a31c6a90e38f6eb92f5ed189aea11a734054472065334 |
|
MD5 | cdca3b252b6d3504e0c1a29e08121883 |
|
BLAKE2b-256 | d0d0d068021a1ebf3b45d24d99e8c737820bfb2f3b48f4f7f6421b5be3f4482a |
Close
Hashes for ry-0.0.7-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 335ffddf087015b1e28b48acd290191c52bff60b58f6bade99ca455eb72055b1 |
|
MD5 | d1a21ee0addeec99be758f3d8c0b3cb4 |
|
BLAKE2b-256 | e6274bc2b4acddaaf3edfac98f8a2398f301e1a7a218dfc746bc1c541228ed53 |
Close
Hashes for ry-0.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24b2608230e333ad3ed04a5d242cf15878df20a179522e7ffd555c3e342a2db6 |
|
MD5 | 27a4968f8b7706748e733eefff66ea05 |
|
BLAKE2b-256 | 67d4df708d4f146c2220f346e43acc7a2dfc4c49ebd004965d61500afa01fd51 |
Close
Hashes for ry-0.0.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4cccb4338cb67ff7f22488b38960dbc2f9261d5341a263e086da7d032addc5e7 |
|
MD5 | e2c4498d8005347021185339b4617187 |
|
BLAKE2b-256 | b33d563f2c191849e5b02dbd1dc021a590565efaa8950d7282d767f95d269784 |
Close
Hashes for ry-0.0.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a69433393edd0d5dbd76370c79d91cdc44c2ef0b0ac6d0e316affcaa0f4eebe8 |
|
MD5 | 3f53d68eaca0807563a0bf03a4a5f4a2 |
|
BLAKE2b-256 | fb46ca6d8864d4ea6cc2d38ee29f1f32faf41374baadd77437ba38694dffa640 |
Close
Hashes for ry-0.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | df0451d1579716bafdbc27b46d74cbc51668219a1d461fe2edbbf9c8ed75b4a3 |
|
MD5 | be3f70bfca7d6dab628d545a4d2ea4ce |
|
BLAKE2b-256 | 3fcd92d0f1061cb238ccf6f3734d530c9c8246f22db8aad035beedaed48504a5 |
Close
Hashes for ry-0.0.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d37aa22d52c1a79d9841dd3ccca5249b0b96d60ed010fa2f0d8315662477055e |
|
MD5 | 3d2c4fc8d7b1fdd028af191a1ec74721 |
|
BLAKE2b-256 | 50eff40a465ee22f4355bebc0db405fee2970f120fbce835f5be5b79219a8eb1 |
Close
Hashes for ry-0.0.7-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 975215ef6d9ee25d3ca83a9efe3c25ae7bc9379e8e5bd0539e487df9af691143 |
|
MD5 | 5921c8b7d0561e7e30eb32bbaa76a562 |
|
BLAKE2b-256 | ac8dbcdec7afaf00ad9dd83b624281b4603858706e5864d431098911790af5d1 |
Close
Hashes for ry-0.0.7-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d93fef9c288b3ff564fd478cbf0859e4a2aaa00cf732f158f07864641efca03 |
|
MD5 | 61a4f416f89343db08e86b1a056e9533 |
|
BLAKE2b-256 | c81b9c3f27ddbedebdacf87b0dbd42581932e78d2e3cab57c2c0eeb6b5c32a97 |
Close
Hashes for ry-0.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 053e7de1bfc5649198c6145b3e3d2e5022e61231f22ef04b575649f972cb7619 |
|
MD5 | 491a6b157541d44240ad845c84d3b959 |
|
BLAKE2b-256 | afecab7f671c73838ef3eb5172c50fd1bb8195f635095f40b79bb95842d777da |
Close
Hashes for ry-0.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 360cbb29b0ae050be2665102a3558a132e06193e0efaa1b0a1b01fc38b1bcd3a |
|
MD5 | cd1ca04f3ce9ec579ef764bc4be3f3a3 |
|
BLAKE2b-256 | 858b53eec9f5d4b2b9f444acf4b3962c773a3997b1ad4a70a2811c114c4a18d7 |
Close
Hashes for ry-0.0.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c7c825a6a26cbe7b781ce9b03e5d9f9d21f748dc83c5842f77cf04edf4e822b |
|
MD5 | c8c4f144db2bd08282ef236d808d1799 |
|
BLAKE2b-256 | 94331f8dc7e0c0eb5c0d907ee0860c2a8f007f6160d7a426a16360cc1b4b9f1a |
Close
Hashes for ry-0.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5ba48055c98e430a6273f3d109614c94b14960773794751a5c0d3261f0898e14 |
|
MD5 | be4808e2439c870d63d50c24744800e1 |
|
BLAKE2b-256 | 45fbb492a93b9d54988b8e2ee6b166684beff2966f3539a01000febb71ccb6bd |
Close
Hashes for ry-0.0.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8bfe5b0c8f306742c7479ab83ab97879b429da0945163723c24c07d7143e6b2a |
|
MD5 | ab82bcd35151eab5f4932a509192e2c4 |
|
BLAKE2b-256 | 8317c1e46c11a760cee232f5f66bbca430c01be50c68a4fdcb9c454261863808 |
Close
Hashes for ry-0.0.7-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80a97223a8afeab20c4e055ce4999ed9b25669b21e1c9f84a825f42b90341b5e |
|
MD5 | dfa5b50182a28a387b2722ecd0f8cd3e |
|
BLAKE2b-256 | c8234ee42261042c39cb2e6c195e9e1cc1c82b47ae0dc3ae1d1e29076be78f37 |
Close
Hashes for ry-0.0.7-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46f4d6fe41e6c28e3d76f908755cc105e1da95b09f9f55bb9a4e63a7d6e29e47 |
|
MD5 | d88cc3f7fe06e2cb278eabce0a7ef9ab |
|
BLAKE2b-256 | b06771bddbbc2021fec7dc75d1619394679923fc0ecc4044952adada34a8ac19 |
Close
Hashes for ry-0.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 183d340c7b6fb8c204a23fef1bf434221c2686497bc7fcab36a68de4cfc363b6 |
|
MD5 | b35183acab330955b66ec20c84d5a15b |
|
BLAKE2b-256 | 583e06ff397801e1d4c2434c4cee5a5f0aa1f52a4e6c294a44a4bb57aa08a523 |
Close
Hashes for ry-0.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afa57c392dc88768447de9cd10c2486a706c724e4e2dc1f580dbc1b43d84d4a5 |
|
MD5 | 4186ce5b361192565786956d1d0611d6 |
|
BLAKE2b-256 | 04add42c1f93f4ba6e94e968816fef143a405fddc03d82f03218e19d9cb02263 |
Close
Hashes for ry-0.0.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5d567e54d2722184158773c13ad80f4156b0c08abcd43399d721cae7e2d62c5 |
|
MD5 | 524bde8abc52b8f080c205c37d386c36 |
|
BLAKE2b-256 | 658bc2c43b8c490a6df2403f7a4550b887b1b4d5dbe1e1f2541faab2b9e21cc9 |
Close
Hashes for ry-0.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b63b2462b8474ee3027f321f5b2790e53d2eddf931cf2b58c3194a81d1194a9d |
|
MD5 | aada30e38fb0ba2b1e5d30793dcd2683 |
|
BLAKE2b-256 | aca729c12f2b011a5014cf9e656100600e7353b5648ca1429726e235b7bfabf0 |
Close
Hashes for ry-0.0.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09eb8f82c44a4b179d482378cc87e3641fc9a3ef856f4a830524602a60a38128 |
|
MD5 | a3ae424475532109919b5505d1686040 |
|
BLAKE2b-256 | 18f934fbbe67d1cc8610dc399ffda36e73ece01db0641388b8158faf3ddcaf33 |
Close
Hashes for ry-0.0.7-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64635c4e66f4a839cd51a0b8515637e08bede71652b2175cadf413fcb4d61886 |
|
MD5 | 27644223854c68625efe373e3509fada |
|
BLAKE2b-256 | 8c43385b6d285c0c275e0e48fe91e68bbacde15f50be6ef0f99e56b98b7b9c2d |
Close
Hashes for ry-0.0.7-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8980fd590ec6e4bca310fd125778857d7a17204e23be7349533b425346b3f098 |
|
MD5 | e7b24451e9cb1906584e5b848551bb61 |
|
BLAKE2b-256 | faf22de13c0de13a13431fc35187d68f927b669e0fb34ab364d694b9a24a6169 |
Close
Hashes for ry-0.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 052dabba47a59510c0e35db6b552413dc22e36f7114afb6eda756dfe409229c6 |
|
MD5 | a46304f69e9b4f6e7c778aa23565381d |
|
BLAKE2b-256 | 3c331b96ee1b650f0d4b1309d3adb5b27516772968fafe95093429e816e70222 |
Close
Hashes for ry-0.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc20acd2144852582507f35c4dabeefd6eb3dcb22cf72daa70c62906d24eccd4 |
|
MD5 | c0c023b03808f9544a09db3769cbf2bc |
|
BLAKE2b-256 | ee36a0027312246b3d93695c85e8594ba243bb2c3b2f088752f7b808f7a13465 |
Close
Hashes for ry-0.0.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec74f8400bb8c3197fcc95f30d8d7dc6dbdde22a09a3888a695d4fde0e5635d0 |
|
MD5 | 1ad87ec9d80854d48f3030a589f72643 |
|
BLAKE2b-256 | 449c040d3d0259b956052828b989863037e8d07c358c7ee7733d046e42342973 |
Close
Hashes for ry-0.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f1f533f13645e190df9b28b5bcadfa878bc7422173c7d9711a68d0bdcf48190 |
|
MD5 | 081087bc77a8a623963a8463f23a7169 |
|
BLAKE2b-256 | 6b4b0c73fed03933b939c88ddea020dff42fb80744d36920cc6620fc4ca5b0d5 |
Close
Hashes for ry-0.0.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cb4cbf60e5dbc836a39e71d339b02788f47eac4dc2191fa28944fcd5ef1300d |
|
MD5 | dfefba837d972f28a8d614efb45ddb37 |
|
BLAKE2b-256 | d83e1bdb7117750fdfaa47fc63431a2b9ff50e394f88ed937f6a6c65ffd11a69 |
Close
Hashes for ry-0.0.7-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d23969f9f3ea358e9f061f8a01c85db374cd1f0b252e07a03e351ff10c0789c9 |
|
MD5 | 29a7c68122dd18d75b70ed2967275c67 |
|
BLAKE2b-256 | 78f6fa1966566fcdb8272f1148e57aad216c6ef9db13ee8f021b61ba66c891f6 |