Skip to main content

ry = rust + python kitchen sink utils (WIP)

Project description

ry

PyPI PyPI - Python Version PyPI - Wheel PyPI - Downloads PyPI - Status PyPI - License

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?

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 and ryo3?
    • 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 the ryo3::libs module will be split up into separate packages

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 in ry -- 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"""

from collections.abc import Iterator
from os import PathLike
from typing import Any, AnyStr, Literal, final

__version__: str
__authors__: str
__build_profile__: str
__build_timestamp__: str
__pkg_name__: str
__description__: str

# ==============================================================================
# TYPE ALIASES
# ==============================================================================
JsonPrimitive = None | bool | int | float | str
JsonValue = (
  JsonPrimitive
  | dict[str, JsonPrimitive | JsonValue]
  | list[JsonPrimitive | JsonValue]
)


# ==============================================================================
# RY03-CORE
# ==============================================================================

class FsPath:
  def __init__(self, path: PathLike[str] | str | None = None) -> None: ...

  def __fspath__(self) -> str: ...

  def __str__(self) -> str: ...

  def __repr__(self) -> str: ...

  def __eq__(self, other: object) -> bool: ...

  def __ne__(self, other: object) -> bool: ...

  def read_text(self) -> str: ...

  def read_bytes(self) -> bytes: ...

  def absolute(self) -> FsPath: ...

  @property
  def parent(self) -> FsPath: ...


FsPathLike = str | FsPath | PathLike[str]


def pwd() -> str: ...


def home() -> str: ...


def cd(path: FsPathLike) -> None: ...


def ls(path: FsPathLike | None = None) -> list[FsPath]: ...


def quick_maths() -> Literal[3]:
  """Performs quick-maths

  Implements the algorithm for performing "quick-maths" as described by
  Big Shaq in his PHD thesis, 2017, in which he states:

  > "2 plus 2 is 4, minus one that's 3, quick maths." (Big Shaq et al., 2017)

  Reference:
      https://youtu.be/3M_5oYU-IsU?t=60

  Example:
      >>> result = quick_maths()
      >>> assert result == 3

  NOTE: THIS IS FROM MY TEMPLATE RY03-MODULE
  """


# ==============================================================================
# SLEEP
# ==============================================================================
def sleep(seconds: float) -> float: ...


# ==============================================================================
# FILESYSTEM
# ==============================================================================
def read_text(path: FsPathLike) -> str: ...


def read_bytes(path: FsPathLike) -> bytes: ...


def write_text(path: FsPathLike, data: str) -> None: ...


def write_bytes(path: FsPathLike, data: bytes) -> None: ...


# ==============================================================================
# SUBPROCESS (VERY MUCH WIP)
# ==============================================================================
def run(
  *args: str | list[str],
  capture_output: bool = True,
  input: bytes | None = None,
) -> Any: ...


# ==============================================================================
# DEV
# ==============================================================================

def string_noop(s: str) -> str: ...


def bytes_noop(s: bytes) -> bytes: ...


# ------------------------------------------------------------------------------
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
# ------------------------------------------------------------------------------
# ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~ LIBS ~
# ------------------------------------------------------------------------------
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
# ------------------------------------------------------------------------------

# ==============================================================================
# WHICH
# ==============================================================================
def which(cmd: str, path: None | str = None) -> str | None: ...


def which_all(cmd: str, path: None | str = None) -> list[str]: ...


def whicha(cmd: str, path: None | str = None) -> list[str]:
  """Alias for which_all (may go away in the future)"""


# ==============================================================================
# GLOBSET
# ==============================================================================
class Glob:
  """globset::Glob wrapper"""

  def __init__(
    self,
    pattern: str,
    /,
    *,
    case_insensitive: bool | None = None,
    literal_separator: bool | None = None,
    backslash_escape: bool | None = None,
  ) -> None: ...

  def regex(self) -> str: ...

  def is_match(self, path: str) -> bool: ...

  def __call__(self, path: str) -> bool: ...

  def __invert__(self) -> Glob: ...

  def __str__(self) -> str: ...

  def __repr__(self) -> str: ...


class GlobSet:
  """globset::GlobSet wrapper"""

  def __init__(
    self,
    patterns: list[str],
    /,
    *,
    case_insensitive: bool | None = None,
    literal_separator: bool | None = None,
    backslash_escape: bool | None = None,
  ) -> None: ...

  def is_empty(self) -> bool: ...

  def is_match(self, path: str) -> bool: ...

  def matches(self, path: str) -> list[int]: ...

  def __call__(self, path: str) -> bool: ...

  def __invert__(self) -> GlobSet: ...

  def __str__(self) -> str: ...

  def __repr__(self) -> str: ...


class Globster:
  """Globster is a matcher with claws!

  Note: The north american `Globster` is similar to the european `Globset`
        but allows for negative patterns (prefixed with '!')

  """

  def __init__(
    self,
    patterns: list[str],
    /,
    *,
    case_insensitive: bool | None = None,
    literal_separator: bool | None = None,
    backslash_escape: bool | None = None,
  ) -> None: ...

  def is_empty(self) -> bool: ...

  def is_match(self, path: str) -> bool: ...

  def __call__(self, path: str) -> bool: ...

  def __invert__(self) -> GlobSet: ...

  def __str__(self) -> str: ...

  def __repr__(self) -> str: ...


def glob(
  pattern: str,
  /,
  *,
  case_insensitive: bool | None = None,
  literal_separator: bool | None = None,
  backslash_escape: bool | None = None,
) -> Glob: ...


def globs(
  patterns: list[str],
  /,
  *,
  case_insensitive: bool | None = None,
  literal_separator: bool | None = None,
  backslash_escape: bool | None = None,
) -> Globster: ...


# ==============================================================================
# WALKDIR
# ==============================================================================

class WalkdirGen:
  """walkdir::Walkdir iterable wrapper"""

  files: bool
  dirs: bool

  def __next__(self) -> str: ...

  def __iter__(self) -> Iterator[str]: ...


class FspathsGen:
  """walkdir iterable that yields FsPath objects"""

  files: bool
  dirs: bool

  def __next__(self) -> FsPath: ...

  def __iter__(self) -> Iterator[FsPath]: ...


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,
) -> WalkdirGen: ...


def fspaths(
  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,
) -> WalkdirGen: ...


# ==============================================================================
# SHLEX
# ==============================================================================
def shplit(s: str) -> list[str]:
  """shlex::split wrapper much like python's stdlib shlex.split but faster"""
  ...


# ==============================================================================
# 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: ...


def jiter_cache_clear() -> None: ...


def jiter_cache_usage() -> int: ...


# ==============================================================================
# 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"""


def gunzip(input: bytes) -> bytes:
  """Alias for gzip_decode"""


# ==============================================================================
# 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: ...


def xxh3_digest(input: bytes, seed: int | None = None) -> bytes: ...


def xxh3_intdigest(input: bytes, seed: int | None = None) -> int: ...


def xxh3_hexdigest(input: bytes, seed: int | None = None) -> str: ...


# xxh128
def xxh3_128_digest(input: bytes, seed: int | None = None) -> bytes: ...


def xxh3_128_intdigest(input: bytes, seed: int | None = None) -> int: ...


def xxh3_128_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

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.11.tar.gz (77.1 kB view details)

Uploaded Source

Built Distributions

ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ry-0.0.11-cp312-none-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.12 Windows x86-64

ry-0.0.11-cp312-none-win32.whl (2.0 MB view details)

Uploaded CPython 3.12 Windows x86

ry-0.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

ry-0.0.11-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

ry-0.0.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

ry-0.0.11-cp312-cp312-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

ry-0.0.11-cp312-cp312-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

ry-0.0.11-cp311-none-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.11 Windows x86-64

ry-0.0.11-cp311-none-win32.whl (2.0 MB view details)

Uploaded CPython 3.11 Windows x86

ry-0.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ry-0.0.11-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

ry-0.0.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

ry-0.0.11-cp311-cp311-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ry-0.0.11-cp311-cp311-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

ry-0.0.11-cp310-none-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.10 Windows x86-64

ry-0.0.11-cp310-none-win32.whl (2.0 MB view details)

Uploaded CPython 3.10 Windows x86

ry-0.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ry-0.0.11-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

ry-0.0.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

ry-0.0.11-cp310-cp310-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

ry-0.0.11-cp310-cp310-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

ry-0.0.11-cp39-none-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.9 Windows x86-64

ry-0.0.11-cp39-none-win32.whl (2.0 MB view details)

Uploaded CPython 3.9 Windows x86

ry-0.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ry-0.0.11-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

ry-0.0.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

ry-0.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

ry-0.0.11-cp39-cp39-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

ry-0.0.11-cp39-cp39-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

File details

Details for the file ry-0.0.11.tar.gz.

File metadata

  • Download URL: ry-0.0.11.tar.gz
  • Upload date:
  • Size: 77.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11.tar.gz
Algorithm Hash digest
SHA256 c84770fe0320299dc74ba8a8e383e7fca673784d1c5a205f7ea72d804d6a6fc9
MD5 8c3c2e3b221f7a29b056065e00378bef
BLAKE2b-256 b25fef01bf689e876b1ecab4d13603bdd568d76f88bc6af388744024a8dd89b0

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e9782206cfb915b50c0a67a744ecd756033e3c585638bce551736880869aa304
MD5 16eb4a848191ee80eb161b0cba90b389
BLAKE2b-256 2d1ce65c580dc023cabaf1dacf992d4a919d6c1b13190533d46a0a9dbf180e44

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 aafbff42504b5f0737ba50d80e1744463c33201b11f95bd830b61e7ca1613f51
MD5 0ebf55767ff568a1c03d242b9a984c9f
BLAKE2b-256 b1c57d1baaaa781c99ae34098c8cad5c96e8c85b6b1d8112dcbe741867feab7b

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 84adbefa52857cd46f50a2f2e09aa693b33374fce8582627f211feb4b37a9939
MD5 a42499eaf1c9f9ccb2e47b7e92403bef
BLAKE2b-256 4b813662da2ec082b5b37ebf11fd4409b5559dcaee1e46c66177c3079c520619

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 311fc90d034f24c898e8df0caf2f87e3c44dbc696b38ca37c123b87ce173b1be
MD5 95f835b5faf1548baa82a0382d6f6ad3
BLAKE2b-256 f49977a60c4f23b7ff4a109bc824c935a9752ea31351cc002cc90415ec2b1a57

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 63c1ffec664c0b2d12b5bbc10476d45309feb297b3dccb5207165c2b368bd51e
MD5 c12576f73faef4d893785d51558ae896
BLAKE2b-256 32b2e7baf6b01f87006902943e59ff12454b360779b43ebb8bb242afd37321ec

See more details on using hashes here.

File details

Details for the file ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3cd3b100711974d3f1ebb56a4785ac1ef2f159267421deafdf3dfa4cad093bf9
MD5 156ac65908936810434528f88fc6d329
BLAKE2b-256 0f289e3ed31e04c0afea621b7ad2db57dfee96b0ac5b179c1bad631e9ecb7763

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-none-win_amd64.whl.

File metadata

  • Download URL: ry-0.0.11-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 ce8735b4a679511388a5a402fe60c4278abbea3926e55c23e38a22651187b6e4
MD5 7b2eb094ae19603063cb510af2fdd827
BLAKE2b-256 b48700c134470ac5dbd444209f74bc6ec61f3d9e16f291182465ff310282922e

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-none-win32.whl.

File metadata

  • Download URL: ry-0.0.11-cp312-none-win32.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp312-none-win32.whl
Algorithm Hash digest
SHA256 c980872073c1d4857f7aea9a235d52c4b07732a1262d85366fcaa0635b9fc7cc
MD5 252bac1b94474b482558d7c326df5a85
BLAKE2b-256 050dcd52c3019be449e097a811a67da50c7f3268accda32efaaf94c292ae2cf3

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a843ca4b125047f7bae81728681a3486d8397c9b870a26c26143d1f0d26fec1f
MD5 1dab4842db28c3421592046d2275e75b
BLAKE2b-256 3f7151848490ae6ad934fc9a405b72b49eed920a21fcc896d99fa251810ed333

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3e9ea50c1f481a13fd4805f375a80b8e930d7b0fa4805a7d4e7e6b5474bc3d49
MD5 1c51a62e89598fbff9d91a1311bac439
BLAKE2b-256 3e5283d7f2601b39544a46a69a00d9311d7f52573ed077ed04f8d54d520330bf

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f0b1fc8fea4b7cf8da66537e4e4343d8c2b2b45ee7fc349682cb38d87a186358
MD5 7ff7bb5c10b18ad3562873202c75116c
BLAKE2b-256 8d64a6321d6d6fbe22e74b9bee26af66df2adac0833ffbd50668eb97945c3a3a

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f33a538217183092a193472f3a0dec0b006bf01c9586866d733f7285eb8b601e
MD5 f7ad3c9acc10c5b8deefbb0aad852c7d
BLAKE2b-256 e0ad61f0dcf010e11b6a565bb2549562f8607205394858e635e5f0a181bc3112

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5213c9556c7c1c06c10d08234cd6fe4144a0fd9d23167a52fa1eb95cfa6eb2c
MD5 85fe65ef519637dd1ac7a04109897159
BLAKE2b-256 cdb6dc8fb992199560f2cd80ef5535be20954a62c5bf76984a1cef01921c74b7

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 60d4f846a40e0bae7bed618cd16ff817530953a3f92a715087b0df8d4a68e4ce
MD5 2b537da459d26e9063a44660e30f311f
BLAKE2b-256 b257376acb95863e2e3f5ab87c03bb3ea77a236f24b37b3cd3d006ea331ff466

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-none-win_amd64.whl.

File metadata

  • Download URL: ry-0.0.11-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 841369be7c261f04d9895837c51526db420a74d2ce01416ef97fb0a00ee3dee7
MD5 d25e4eb52ff73784d23d9850ed3e9cf9
BLAKE2b-256 a9ef74c1975786bc26b8c01fe7b3a10e35bf18cc9f3a878864208d02e4331ec6

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-none-win32.whl.

File metadata

  • Download URL: ry-0.0.11-cp311-none-win32.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp311-none-win32.whl
Algorithm Hash digest
SHA256 fa5d015b243b7db8e613c20890ac383add718937bf3b7ba3d3f4518736b95b86
MD5 32c46860c3221b68f70003ce6e59c2f9
BLAKE2b-256 8e4b7384ec073136dd44d2214345555cc7125dda540126c9d9525f47d2fbfb8b

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da96b630340c3407ccc1fdd8bd8d29f566db8919e7c5beeff73a43e8903688a9
MD5 af161bb374457a0a8df18525ec1cdf9d
BLAKE2b-256 9d78911f24f7c28ee7a786cb488ed111dea7a7288228b2d8f1369ff0a2cc669a

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dd63b322e89e634d0722e3c3b7abb8002605b87ca8a5c5f97ac45432b1c0dcb8
MD5 ab5511a4d1911a48f7a90f49767cf979
BLAKE2b-256 e506ff0784164a1d459f23067fead63b44433673d05f87c6a6ef3d57c87b3d4c

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 3c287caf80ede7f6f1f30ec7610a83cdfa9f99a90494eba9ce1afdc9af5038c2
MD5 783ec5646419ebef0bb906e59cd4c291
BLAKE2b-256 61e15c652aee103b8375b1ed160beedec6aa47f618551ef99371579d0ac2d32e

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 642fc177ebe9f3e01bea549c128e997a44d6dd39fdf14632eb9ecb9fae3c3f82
MD5 8c548fb4dd68c1392840bb2b53eebf89
BLAKE2b-256 988b9e6009b1a8a66867c645426c9800023ac4c1c82254a9028b1cedb53143fa

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06b7f02829722e381718b163fb43b1813d81d8cbcbeb924a8e36a585b13241a9
MD5 c977f57d1818b6f6cc746e8448c9fa86
BLAKE2b-256 7f970fa7c031a82441ebeed71e3c36cd9026c9243c901139c437a8e294cd5f6e

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b4f28bc65d990c45b08e7ae01e234f12403a7690a6e0c1fa439a11058b953125
MD5 dbf441aaa413d2f26f885276e466f3b2
BLAKE2b-256 ae86142dd1c7ff7e8b756cc3f6f0f1c9f57732a4d36ec0aafeea5a4752b40261

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-none-win_amd64.whl.

File metadata

  • Download URL: ry-0.0.11-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 dacbf65ffb07f42ce1c2aa63141a7008e4c0eb3d1af42afb2e19a0210f8c84b4
MD5 66eece0418683775c32cb66016c1a843
BLAKE2b-256 9438e112c70146d20f163ca4004599ca640726647884ccb91f5db039e43ac7ae

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-none-win32.whl.

File metadata

  • Download URL: ry-0.0.11-cp310-none-win32.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp310-none-win32.whl
Algorithm Hash digest
SHA256 f89b4238054201ff2fe6f98ca7a589b269f1e9f625644154510f47664f5e90b9
MD5 84b07d8a1d08fb6d7c69fdb242c8b46f
BLAKE2b-256 ee71b86b6b4dc694f930418381db24dfedb1fde95c82f6c8c72536d027007e50

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 67cfc693963391e5eab56f393ff2414d2a51ea595ba4d5a2bec39f892ddb51b3
MD5 6f647eb0d5559d24e31c4bbc8b00b1f2
BLAKE2b-256 2dc0fa1e6da718a91753fc84c6411d7cc910cf201d17a2b59ca43baaf0ae74e4

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 96b0ec068d833bc28972793a40dc82d240b5515e0dcd0007076b968855a6871c
MD5 12a67e342eb8991568b4de19c0f14d49
BLAKE2b-256 55ee9f33517be10e805e16b2b8ab18734f7c44167e4c5580e653b42f452cc44c

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f8041ecdd587b53713d3bef402fb496bdb7a18164b31fa5a8519727c478b3228
MD5 742bab1a3eeb711d74a42363970546f5
BLAKE2b-256 b55df7f1d08c9b2a9ba4339f0984ba2e168c5ab1c465f8bdb34f382d0437c402

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e5f8af77e9df2d892720eb5fdf7d7cb7747da74411aa8ec8ffe712771025e3dc
MD5 6ffc249f59d0f5bc90e2bf07755fbea7
BLAKE2b-256 363df071c61d2f4f61b6f36b632d4be2527e6e25c63e474b0fb050371f847d64

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84df06d8a6757d95ad2cddf4851b688f98449ae7e5e86f17254accf8013e6fdc
MD5 86887e229a371b12c6ccd8112c130ecf
BLAKE2b-256 c5b1cf112cd3f4678fce543a37f8646849dd000aa1e76c071241b73045cf50cb

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ce41bd843abab12e074a05043cd2d4ac626b19587a68e67d7ed7f38353ef6ad2
MD5 48eea588a4dbef809b263c1f755efa47
BLAKE2b-256 70cf327b4ecec4fd35fca279746aa1e5e6b3f1b0dd44362397ff764b657782fe

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-none-win_amd64.whl.

File metadata

  • Download URL: ry-0.0.11-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 a8b949b57ee3d611b752c881d254dc7b44a6c377abe921c537bc6537a00f2b5c
MD5 97f8511efc24d286a42c17b3c3e9838f
BLAKE2b-256 6d9898d259245e85c9599a6f4854ec0fe06f07068169a602afb69f23a6430c37

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-none-win32.whl.

File metadata

  • Download URL: ry-0.0.11-cp39-none-win32.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.4

File hashes

Hashes for ry-0.0.11-cp39-none-win32.whl
Algorithm Hash digest
SHA256 af2d77117d2d2b1797591a9c6c53c096c4c41fd1c31a4733ea165170774c95e4
MD5 5bc2fbb2dda0f8da62f7a606d9df69a3
BLAKE2b-256 768e92432367f39162d2c3f38c26d1bd2c2ab438b666eff2cc154350d89caa03

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 995435a1c4a4f3c82533e878acdf2f3b8e4051f42808d048467497339875809d
MD5 4555d30f49e30cb05a113ce2cfd358f1
BLAKE2b-256 7a12b4326c231eb558a1d88c4f941e05cd87599bee7a8afb9cd6b2810a9e10b4

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f72a43a7e2cdfd723fc12fe36c4c0ec1d3dfcb3f6264b90d1effca6130d5d5d8
MD5 697a1aa24c6dad1e498044156edf0fcd
BLAKE2b-256 809261f49698446e43489ef739772fa17ad2061323a5abc1c7dae6fd52212c8d

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 85d040ac933176b5767529024d2fa3cc8ad26c7cdab7ec4eb58c703011f343b8
MD5 3f9fe260b076a2068a20e1253f958899
BLAKE2b-256 b9bbf93889dc35000519da827eadfd7878eaa1af59831dbafa3b6afd18cebddc

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 30eedab8fb30522e4369ac83fb7cd6c46d939cdce6bc035994d518882215f3e6
MD5 7f40096fe2bbe7e0f4114317ddea0dff
BLAKE2b-256 583ecf40c537b8e2ef59776821b7ea8eec55cc840105f66a45f9c6345d53a2d4

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 799e9b1a2cff376902eaeab704588ddc66f8ad3a0cec954b519372b26f1ca542
MD5 b5c4b9a69a91d75f5927deffe8595f45
BLAKE2b-256 ec5b8665baabd79ae08863cf6897a3d22ccc83cbda4900f2e76d345c086a81f7

See more details on using hashes here.

File details

Details for the file ry-0.0.11-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ry-0.0.11-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fcb8b05adca441b52a19e53ef78b59e0c2e90df91a3c33924dc489815de2fe4f
MD5 9d2752aa500129fef89c160c78a4bcfe
BLAKE2b-256 b35b4f427e584d1506fa43a56b8ad0a63868be37ce1a87ec1e1503ca238e5584

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page