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.8.tar.gz
(68.5 kB
view hashes)
Built Distributions
ry-0.0.8-cp312-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.8-cp311-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.8-cp310-none-win32.whl
(1.9 MB
view hashes)
ry-0.0.8-cp39-none-win32.whl
(1.9 MB
view hashes)
Close
Hashes for ry-0.0.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d8c5a7cb02d4e07f19828d011bc3f4fad58358455f722db19256233d9877ac9 |
|
MD5 | fc6d9d231a594d1c857c27507e08167f |
|
BLAKE2b-256 | 0315122f2542bc4f9b855210da78416242c0358ebda2b6d7ef8bec5063a22c20 |
Close
Hashes for ry-0.0.8-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1313f6869d3237bf2776af8e052e3e0e76dbfe749a49d37d538eecd54ebb7f3 |
|
MD5 | 899cad6d2cef8d70f4e62771ff19022a |
|
BLAKE2b-256 | 3953c4fea7084c9aaacaa4bc3bdd3ecbde2ab800a0c076264f3967bb3f9f0d42 |
Close
Hashes for ry-0.0.8-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0914b3c595ec679eb2dbde9e59d326a748912968b89ab4633edd944cae4987ae |
|
MD5 | f1354c210d07878d0b88915f07d07306 |
|
BLAKE2b-256 | 262381e808c227d7dd954568b45c7cf4ae241c0eebfdab331bd6a84d92a60901 |
Close
Hashes for ry-0.0.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3eca877ec7791f96b09f4b0a4343e5e49895f6e1ebdfb710e67e0a2c2d1025be |
|
MD5 | b6bd5608b21f05290c539c68d655ffc6 |
|
BLAKE2b-256 | 5627a4e6fec7410b5ef2dc50cfc232db6ce96196d6cdce20aaf9d63e57dab894 |
Close
Hashes for ry-0.0.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 51c481cf07023c3a5886d364d84ade61041fe5638abab3162570980b3d4b48d4 |
|
MD5 | 175c2fe40103fddd1f1465b16145bcc4 |
|
BLAKE2b-256 | e23b2f6cf1b6752ccd9d729591f78f230a3580799f14cbb090d8f9b7802b28a0 |
Close
Hashes for ry-0.0.8-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe3c65902b0aa88175a593b896f6fabee92d0192720c9ac3ba8857cea94d4736 |
|
MD5 | 29a38627b7201af1de15f45bfb14b8fa |
|
BLAKE2b-256 | ea4a844a2d9921e5d6e70befa8ac28a5f81ae306a089be7858049c32ae306798 |
Close
Hashes for ry-0.0.8-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 503d78652ada390f4fcf99e453bb54f84e85c88c58911a45669b431b401f2081 |
|
MD5 | a1c864c9a18082a7d84b16ac8dd80428 |
|
BLAKE2b-256 | 1a7916e83d5c3ce70353e33c10177b8ee40e0f2a720f7fa7dfb5eab6a61cec41 |
Close
Hashes for ry-0.0.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d98d5c1d1b9da4d5d8a4b3535801de638ac6433f1c8d8b10e08c3f6b346eb2bb |
|
MD5 | 825a40955f5acaa283416d1df89bc0be |
|
BLAKE2b-256 | a4334ceb8bb99f2f54372c305564e3c8c7133f4aaccebdbb5259682bb7ec89a7 |
Close
Hashes for ry-0.0.8-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4cb92bd33053b35d5da1074d6a93c4ad66e5ab9486f63355bbdc5ca4da7701b9 |
|
MD5 | a0921271b57bd3c522b6649907679eea |
|
BLAKE2b-256 | da52f887ff33bec75abdbd5e2258c2fc402e438b3e640318c197ea5c122e4fda |
Close
Hashes for ry-0.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef1415c7da2a8f04d5cdb4a1fd31122426f82a92b54e5c2a6c5fddfe1a014e1b |
|
MD5 | a232d32acaa219c15356e59d781020b6 |
|
BLAKE2b-256 | 36555bb6aaffb86649fd05e088eac4d62abb9b6633b6a976499cea68094c9d78 |
Close
Hashes for ry-0.0.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b8cbde05ea0b6cd45dbd04245583316966f1112637ebcc8972a323209fe1994 |
|
MD5 | d9171f1c589f79e2b54ccc0bd28601a4 |
|
BLAKE2b-256 | 296fec90434c799e17cd0bb9fb461e7b0a2103b1889ac5957e8d31fa54b03cd5 |
Close
Hashes for ry-0.0.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c823185e2581526dc509a81566bc67d896c026e452201f0190a6fc0e505d315d |
|
MD5 | f54909cbf672b50c145ce379756e0c31 |
|
BLAKE2b-256 | b75ffdac8861dcd09d331dc10baaebb67fa6c1eff4c0130cd550dccd3e0fa0ad |
Close
Hashes for ry-0.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cd450ca88993df97e7908d03d5bd622e54f8833ff96fd143039ddbb337b5a71 |
|
MD5 | b2c377ae7158d3a1aea8ebc16d3931eb |
|
BLAKE2b-256 | 2433f7697ee76df51d5b9e9af493d3a6d898720ea094e7a47a4b9319e3c9d93d |
Close
Hashes for ry-0.0.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a93b1131aababce3a0c67aebc4b3c0f4b13e4e0cd425cd9c0ead84c1799f8ba6 |
|
MD5 | 94511c998278e31cda319fcdf28c834a |
|
BLAKE2b-256 | 5ad71be8dc0b9acc2e099a709851287810f23fc810ce5468545e5db0798ab6dc |
Close
Hashes for ry-0.0.8-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a05679b7cabac9bdd372f05d0ec8ed5d2afa891b24811497afecd69e11e0f0a8 |
|
MD5 | cc04bfe85a8613bc259ec721db85ca8c |
|
BLAKE2b-256 | c66c1a1334d173544ce301f567cfa6080c28ca97818379d0c1ec748d09b1690c |
Close
Hashes for ry-0.0.8-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5063c1d8b39f75415f1e6b1c73a402de164f89d22a441ecc4908683a848bca1d |
|
MD5 | e24ed3a751edf488ad870ae9f539bb6e |
|
BLAKE2b-256 | 789f3557cbc99454519d5621ba7ff9c26204c7f14b54cde142e7287a3d7a2cfb |
Close
Hashes for ry-0.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b7935d23dadb118945bb1ea965a057dd7c0894c966d01af36de4bc3ec23630d |
|
MD5 | 0514a5d9ed88fa4122ee9c4dd3f71433 |
|
BLAKE2b-256 | 24d6231787b72a3413f776abfc9e9a80ba9b7524f8946b060750e63f69b8abcb |
Close
Hashes for ry-0.0.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f5a803826bec1df08eaa8cd024bf7565c300b910c2e48fa295c7a134856c102 |
|
MD5 | 1d625ffbee76193e074ccb47de5305e5 |
|
BLAKE2b-256 | 74b043be52e67fd7e838f7f39e50ebb374d05405433976e0b005c8c719e83e81 |
Close
Hashes for ry-0.0.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ad414202409bf42b885bf19211ffb75452e54d5a3e067d491f5190b7ba6bfad |
|
MD5 | cbbc74fe6610a843607f424af39d646d |
|
BLAKE2b-256 | d6866a5cdaddd88c25bba6f8319d6ce9061e026d56e649d1cde14646e7e97d9c |
Close
Hashes for ry-0.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fe681f6875ba19bbbe6467139ffd416b0dd51fccdd716ffefdce151963ea0b8 |
|
MD5 | 7f73b4877dc638e80f9b8c4624bca148 |
|
BLAKE2b-256 | 953212dac84ee94d9e8a9377bf9a87774eb0cbba0c133b9f4eb0fd05eda1b903 |
Close
Hashes for ry-0.0.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fbb69c153c728422750e14670183fd99fcdc66a0a0fb1a0650332ee952a30dc |
|
MD5 | a814af028e9bcbed78da00daaef52ad5 |
|
BLAKE2b-256 | 2f5a045b56b80eccff105a72cfc826325275b257f6fc5574e7ebab59ade987a0 |
Close
Hashes for ry-0.0.8-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59165ff6bd88276d22633c842280ad747ef40e2f881cd02410d56935df15e6b6 |
|
MD5 | cb297bfd830ed0c5eb3c9a67c9b7936d |
|
BLAKE2b-256 | 42900b21153adc82c4bb92bb1d8037537fb2652e83af11854713342bf43200fc |
Close
Hashes for ry-0.0.8-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea5f8218c9dc6cd72aa5670268f9eb5db8d31edd2eeb049ada7ad4a70c707319 |
|
MD5 | d4b18c0fdbaa756856ad6f1830a81a4f |
|
BLAKE2b-256 | d94e872b91d0d2ee04d519a30d6be5661bf0bf9a1ab900115bd64cec023ef5df |
Close
Hashes for ry-0.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd7ca0303768da460bb96dc4c177002a19f7de8809dafca2c35fc36b5823953a |
|
MD5 | 55f279b46ac293681268cc02cf37f10f |
|
BLAKE2b-256 | a7892a4b493f30f79dc617f66b7ec9cc7da6c08d9dfbe58ae799945e2aef6dea |
Close
Hashes for ry-0.0.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb316a1dce97227d929322392c9ba53171599cde8f6d26571055980e47ee621f |
|
MD5 | 76da37243ef6cc5dcfd644f3dffe15b9 |
|
BLAKE2b-256 | b6ff5b95c45cec61078472a321de51703bd96b07c98c92444f07b487eb9ab3ad |
Close
Hashes for ry-0.0.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f2e25943bbd0df10d58200d76ef2b360892ae3a311a139899c2bcc21618011e |
|
MD5 | 856466824e6d10929fd59d2f402e9758 |
|
BLAKE2b-256 | f193b0d03bc05d2e883233f00f98f0801d85c07f08d4784efe33a724712b52df |
Close
Hashes for ry-0.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fecb80c4da00029d3eb7028cb932d0fa1e1764046b752ed2ec14b02cf823e048 |
|
MD5 | 1934db4cf09dfa390c6dfefe41e39729 |
|
BLAKE2b-256 | 8ec43b907e352541d7560132d590c48906e1bf25a85f8618acfd976577c589c9 |
Close
Hashes for ry-0.0.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a44c48f81041dc12cb94037dd860c013f075d37059cc9ef97e6717dca102d7c |
|
MD5 | e51a7238cb9b7f0233b5c1a2105d2e82 |
|
BLAKE2b-256 | d9c94af0edd0d58d84ccb16400e5994461de19fa236cedcad42ad0b2f617d8c8 |
Close
Hashes for ry-0.0.8-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d8846b66a84021c6678304b250ca3e1ba563a7efc6c750a7d2bb2f8e09865405 |
|
MD5 | 00420ab22676353df156389b06f0ce80 |
|
BLAKE2b-256 | 159d5067e7f8519508cced5e226972e618e17275093b3a234307404fe493454b |
Close
Hashes for ry-0.0.8-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4563bd07d2720fb200cbbd7487ca06916982edec1375e1c76562fa5d9b4f297e |
|
MD5 | 1f26c644debbbac7c7368861144be228 |
|
BLAKE2b-256 | ee2d41ba8c2ac473101ae83e3d005fd5fd49694205bd8cc21139f1281131c389 |
Close
Hashes for ry-0.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ae5594d25b9eb49d2fea45c5b3ef040becdb48da5c89d6b3585a0d71330d61e |
|
MD5 | cb040e89deae5357a483f87135ad11e5 |
|
BLAKE2b-256 | 6aa96fb01caf4eacff915dffe60bcc908e73ec94ef179c9f9274d633f309cf33 |
Close
Hashes for ry-0.0.8-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47160cf24b66eb5a725ecc1250c2076535603052bcea8e87e0d91013b7f7c0e1 |
|
MD5 | 07af6b942895450a534c5f828af39f47 |
|
BLAKE2b-256 | 1e43a77d739f49f99194616aa3ec6e4f9380eac71da0d9947481a0e6499d8423 |
Close
Hashes for ry-0.0.8-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb25dc21f76399a911e8c7e5cded5f3c1e41d66f6dad8f721efdd70fb6a08bfb |
|
MD5 | c114c6dbeaead665b22a9f48cf1987c4 |
|
BLAKE2b-256 | 51ec9163e2f146057ec2055ee81988df1d12e282a8b9f0e05b24134a9030f141 |
Close
Hashes for ry-0.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 140cc5737b4d03def79a13a612164b9d005addea54572947e7bda421c512a76d |
|
MD5 | 36fb4cd878020f7a5cddce5490b21620 |
|
BLAKE2b-256 | a742b5d9fdaacdf0fd9d095e7cff6a32eecd3cbc60fed8cb61638e9610969b21 |
Close
Hashes for ry-0.0.8-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6a4bc6cc499160bfe32ba1b9d3f5db519c8c9d7e879edbfb1a6c503e033c7464 |
|
MD5 | fbf1f06bfe3a40e29570193d5dddd4bf |
|
BLAKE2b-256 | 69d1dfe11ee33e57b796af2fd961161638a82a8f1cb9978c6c06ded37f5aa312 |
Close
Hashes for ry-0.0.8-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbe6d6e5792ff8287c8b5070b9f5d1bc6bef9d8b0a3ff765a43e39f27e2b7c02 |
|
MD5 | cee580c38eaf5b9e07300fe41388ae00 |
|
BLAKE2b-256 | 7c0091b1f37d744cf194c63abf6722d42af9cb440e353ca9fcb6d37f48a00301 |