From 29465ef07a88c37ab71cf771462d7aa064bea7c2 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 19:12:31 -0600 Subject: [PATCH 01/56] e2e for cross sdist build --- e2e/cases/uv-deps-650/crossbuild/BUILD.bazel | 25 +++++++++++++++++++ .../uv-deps-650/crossbuild/geohash_main.py | 5 ++++ .../uv-deps-650/crossbuild/pyproject.toml | 2 ++ .../crossbuild/require_cxx_driver.patch | 25 +++++++++++++++++++ e2e/cases/uv-deps-650/crossbuild/uv.lock | 8 ++++++ e2e/cases/uv-deps-650/setup.MODULE.bazel | 11 ++++++++ 6 files changed, 76 insertions(+) create mode 100644 e2e/cases/uv-deps-650/crossbuild/geohash_main.py create mode 100644 e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel index 21314bc9a..17bce79c7 100644 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel @@ -6,6 +6,8 @@ load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//tools:asserts.bzl", "assert_tar_listing") load(":toolchain_test.bzl", "exec_python_path") +exports_files(["require_cxx_driver.patch"]) + platform( name = "arm64_linux", constraint_values = [ @@ -160,3 +162,26 @@ build_test( ":arm64_layers", ], ) + +py_binary( + name = "geohash_bin", + srcs = ["geohash_main.py"], + dep_group = "crossbuild", + main = "geohash_main.py", + python_version = "3.12", + deps = [ + "@pypi_uv_deps_650//python_geohash", + ], +) + +platform_transition_filegroup( + name = "geohash_amd64_linux", + srcs = [":geohash_bin"], + target_platform = ":amd64_linux", +) + +platform_transition_filegroup( + name = "geohash_arm64_linux", + srcs = [":geohash_bin"], + target_platform = ":arm64_linux", +) diff --git a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py new file mode 100644 index 000000000..4e3f98f27 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 + +import geohash + +print(geohash.encode(37.7749, -122.4194)) diff --git a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml index 7310d14c8..f110fdf36 100644 --- a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml +++ b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml @@ -1,9 +1,11 @@ [project] name = "crossbuild" version = "0.0.0" +requires-python = ">=3.11" authors = [] dependencies = [ "psycopg2-binary", + "python-geohash==0.8.5", "setuptools", "build", ] diff --git a/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch b/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch new file mode 100644 index 000000000..87e257707 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch @@ -0,0 +1,25 @@ +diff --git a/src/geohash.cpp b/src/geohash.cpp +--- a/src/geohash.cpp ++++ b/src/geohash.cpp +@@ -0,0 +1,21 @@ ++#include ++ ++class RulesPyBase { ++public: ++ virtual ~RulesPyBase() {} ++}; ++ ++class RulesPyValue : public RulesPyBase { ++public: ++ std::string value; ++ ++ RulesPyValue(const char *value) : value(value) {} ++}; ++ ++extern "C" const char *rules_py_cxx_runtime_probe(void) { ++ static RulesPyValue value("rules_py_cxx_runtime_probe"); ++ RulesPyBase *base = &value; ++ RulesPyValue *derived = dynamic_cast(base); ++ return derived ? derived->value.c_str() : "dynamic_cast failed"; ++} ++ diff --git a/e2e/cases/uv-deps-650/crossbuild/uv.lock b/e2e/cases/uv-deps-650/crossbuild/uv.lock index d1847b175..4ac42a4fe 100644 --- a/e2e/cases/uv-deps-650/crossbuild/uv.lock +++ b/e2e/cases/uv-deps-650/crossbuild/uv.lock @@ -32,6 +32,7 @@ source = { virtual = "." } dependencies = [ { name = "build" }, { name = "psycopg2-binary" }, + { name = "python-geohash" }, { name = "setuptools" }, ] @@ -39,6 +40,7 @@ dependencies = [ requires-dist = [ { name = "build" }, { name = "psycopg2-binary" }, + { name = "python-geohash", specifier = "==0.8.5" }, { name = "setuptools" }, ] @@ -112,6 +114,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, ] +[[package]] +name = "python-geohash" +version = "0.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/e2/1a3507af7c8f91f8a4975d651d4aeb6a846dfdf74713954186ade4205850/python-geohash-0.8.5.tar.gz", hash = "sha256:05a21fcf4eda1a5eddbd291890ade23fc5ddaa6bb98f2ee23d2d384ed14f086d", size = 17636, upload-time = "2014-08-13T07:09:57.318Z" } + [[package]] name = "setuptools" version = "80.10.2" diff --git a/e2e/cases/uv-deps-650/setup.MODULE.bazel b/e2e/cases/uv-deps-650/setup.MODULE.bazel index b81de8b41..1cab41c3c 100644 --- a/e2e/cases/uv-deps-650/setup.MODULE.bazel +++ b/e2e/cases/uv-deps-650/setup.MODULE.bazel @@ -17,10 +17,21 @@ uv.project( pyproject = "//uv-deps-650/airflow:pyproject.toml", ) uv.project( + default_build_dependencies = [ + "build", + "setuptools", + ], hub_name = "pypi_uv_deps_650", lock = "//uv-deps-650/crossbuild:uv.lock", pyproject = "//uv-deps-650/crossbuild:pyproject.toml", ) +uv.override_package( + name = "python-geohash", + lock = "//uv-deps-650/crossbuild:uv.lock", + pre_build_patch_strip = 1, + pre_build_patches = ["//uv-deps-650/crossbuild:require_cxx_driver.patch"], + resource_set = "mem_4g", +) uv.project( hub_name = "pypi_uv_deps_650", lock = "//uv-deps-650/extras:uv.lock", From bd4944f23bf52df03ea581509bc9fb4d6750f48d Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 19:33:52 -0600 Subject: [PATCH 02/56] enable cross compile mode --- uv/private/pep517_whl/build_helper.py | 1 + uv/private/pep517_whl/rule.bzl | 60 ++++++++++++++++++--------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index 9d1cd8cab..e42e63f52 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -278,6 +278,7 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: PARSER.add_argument("--patch-strip", type=int, default=0, help="Strip count for patch (-p)") PARSER.add_argument("--patch", action="append", default=[], dest="patches", help="Patch file to apply (repeatable)") PARSER.add_argument("--execroot-marker", help="Token in env values to replace with the absolute execroot") +PARSER.add_argument("--cross", action="store_true", help="Cross-compilation mode: target platform != exec platform") opts, _ = PARSER.parse_known_args() tmp_root = path.abspath(opts.outdir) + ".tmp" diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index e24b99d60..bc189ff53 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -190,6 +190,28 @@ def _pep517_native_whl(ctx): wheel_dir = ctx.actions.declare_directory("whl") patch_args, patch_inputs = _patch_args_and_inputs(ctx) + eg_toolchains = ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains + cross = eg_toolchains[NATIVE_BUILD_TOOLCHAIN] == None + cc_toolchain = eg_toolchains[_CC_TOOLCHAIN_TYPE] + + if cc_toolchain == None: + if cross: + fail( + "Cross-compilation of sdist '{}' requires a CC toolchain " + + "registered for the target platform. No toolchain of type {} " + + "resolved against the current exec/target platform combination.\n" + + "Register a cross CC toolchain (e.g., toolchains_llvm with " + + "matching target_compatible_with) via register_toolchains.".format( + ctx.attr.src.label, + _CC_TOOLCHAIN_TYPE, + ), + ) + fail( + "sdist '{}' requires a CC toolchain but none resolved. " + + "Register a CC toolchain (e.g., rules_cc, toolchains_llvm) " + + "via register_toolchains.".format(ctx.attr.src.label), + ) + env = _common_env(ctx) extra_inputs, known_variables = _collect_toolchain_inputs_and_vars(ctx) @@ -213,12 +235,20 @@ def _pep517_native_whl(ctx): if "CXX" not in ctx.attr.env and cc_tools.get("CXX") and infer_cxx: env[_INFER_CXX_COMPANION] = "1" + if cross: + env["RULES_PY_CROSS_COMPILE"] = "1" + ctx.actions.run( - mnemonic = "PySdistNativeBuild", - progress_message = "Native source compiling {} to a whl".format(archive.basename), + mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", + progress_message = "{} source compiling {} to a whl".format( + "Cross" if cross else "Native", + archive.basename, + ), executable = ctx.executable.tool, toolchain = None, - arguments = ctx.attr.args + patch_args + _memory_args(ctx) + [ + arguments = ctx.attr.args + patch_args + _memory_args(ctx) + ( + ["--cross"] if cross else [] + ) + [ "--execroot-marker", _EXECROOT_MARKER, archive.path, @@ -299,8 +329,11 @@ attribute maps environment variable names to strings that may reference `$(VAR)` make-variables sourced from those toolchains. This mirrors the pattern used by `rules_rust`'s `cargo_build_script`. -The build is guaranteed to occur on an execution platform matching the -constraints of the target platform. +In native mode (exec platform == target platform) the build uses the host +CC toolchain. When the target platform differs, the build enters cross mode: +the CC toolchain of the "target" exec group resolves against a user-registered +cross CC toolchain (e.g., toolchains_llvm). If no cross CC toolchain is found, +analysis fails with a diagnostic naming the required toolchain type. """, attrs = _pep517_whl_attrs | { @@ -318,24 +351,11 @@ constraints of the target platform. }, fragments = ["cpp"], exec_groups = { - # Create an exec group which depends on a toolchain which can only be - # resolved to exec_compatible_with constraints equal to the target. This - # allows us to discover what those constraints need to be. - # - # NATIVE_BUILD_TOOLCHAIN has matching exec_compatible_with and - # target_compatible_with, so this exec group only resolves when the exec - # and target platforms match. Cross-compilation of sdists is intentionally - # unsupported: PEP 517 build backends (setuptools, meson-python, etc.) - # have no standard mechanism for cross-compilation, Python headers for - # the target platform are not readily available, and output wheel tags - # would need to encode the target platform with no upstream tooling - # support. Packages that need cross-compiled native extensions should - # publish pre-built wheels for their target platforms instead. _TARGET_EXEC_GROUP: exec_group( toolchains = [ PY_TOOLCHAIN, - NATIVE_BUILD_TOOLCHAIN, - _CC_TOOLCHAIN_TYPE, + config_common.toolchain_type(NATIVE_BUILD_TOOLCHAIN, mandatory = False), + config_common.toolchain_type(_CC_TOOLCHAIN_TYPE, mandatory = False), ], ), }, From b911ca4f32bcdcbbf5b32d451ad76e21f70b4f38 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 21:36:27 -0600 Subject: [PATCH 03/56] check so arch in e2e --- e2e/cases/uv-deps-650/crossbuild/BUILD.bazel | 53 +++++++++++++++++++ .../uv-deps-650/crossbuild/check_so_arch.sh | 37 +++++++++++++ 2 files changed, 90 insertions(+) create mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel index 17bce79c7..aacabdf2a 100644 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel @@ -185,3 +185,56 @@ platform_transition_filegroup( srcs = [":geohash_bin"], target_platform = ":arm64_linux", ) + +# ── Verify .so architecture ── + +py_image_layer( + name = "geohash_layers", + binary = ":geohash_bin", +) + +platform_transition_filegroup( + name = "geohash_amd64_layers", + srcs = [":geohash_layers"], + target_platform = ":amd64_linux", +) + +platform_transition_filegroup( + name = "geohash_arm64_layers", + srcs = [":geohash_layers"], + target_platform = ":arm64_linux", +) + +genrule( + name = "_geohash_amd64_so_arch_check", + srcs = [":geohash_amd64_layers"], + outs = ["_geohash_amd64_so_arch.ok"], + cmd = """ +tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) +$(location check_so_arch.sh) $$tar_file 3e00 +touch $@ +""", + tools = [":check_so_arch.sh"], +) + +genrule( + name = "_geohash_arm64_so_arch_check", + srcs = [":geohash_arm64_layers"], + outs = ["_geohash_arm64_so_arch.ok"], + cmd = """ +tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) +$(location check_so_arch.sh) $$tar_file b700 +touch $@ +""", + tools = [":check_so_arch.sh"], +) + +build_test( + name = "geohash_so_arch_amd64_test", + targets = [":_geohash_amd64_so_arch_check"], +) + +build_test( + name = "geohash_so_arch_arm64_test", + targets = [":_geohash_arm64_so_arch_check"], +) diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh new file mode 100755 index 000000000..6b1569373 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Check that _geohash.so inside a py_image_layer tar is ELF for the expected arch. +# +# Uses only POSIX utilities (tar, od, find) — no Python dependency. +# +# Usage: check_so_arch.sh +# expected_machine_le_hex: ELF e_machine as little-endian hex bytes +# x86_64 (EM_X86_64 = 62 = 0x3e) → "3e00" +# aarch64 (EM_AARCH64 = 183 = 0xb7) → "b700" +set -euo pipefail + +tar_file="${1:?usage: check_so_arch.sh }" +expected="${2:?expected ELF machine as little-endian hex}" + +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT +tar xf "$tar_file" -C "$tmp" 2>/dev/null || true + +so="$(find "$tmp" -name '_geohash*.so' -type f | head -1)" +if [ -z "$so" ]; then + echo "FAIL: no _geohash*.so found in $tar_file" + exit 1 +fi + +magic="$(od -A n -t x1 -N 4 "$so" | tr -d ' ')" +if [ "$magic" != "7f454c46" ]; then + echo "FAIL: $(basename "$so") is not ELF (magic=0x${magic})" + exit 1 +fi + +machine="$(od -A n -t x1 -j 18 -N 2 "$so" | tr -d ' ')" +if [ "$machine" != "$expected" ]; then + echo "FAIL: $(basename "$so") ELF machine=0x${machine} expected=0x${expected}" + exit 1 +fi + +echo "PASS: $(basename "$so") is ELF machine=0x${machine}" From 2e1e751740bb9e5c5f08fc0d99635367fb39c659 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 21:41:36 -0600 Subject: [PATCH 04/56] extract the compiler flags --- uv/private/pep517_whl/BUILD.bazel | 11 ++ uv/private/pep517_whl/build_helper.py | 152 +++++++++++++++++++- uv/private/pep517_whl/cc_layer.bzl | 193 ++++++++++++++++++++++++++ uv/private/pep517_whl/rule.bzl | 38 ++++- 4 files changed, 382 insertions(+), 12 deletions(-) create mode 100644 uv/private/pep517_whl/cc_layer.bzl diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index cf1b9b412..0799ecf67 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -14,6 +14,7 @@ bzl_library( name = "rule", srcs = ["rule.bzl"], deps = [ + ":cc_layer", "//py/private/toolchain:types", "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", @@ -22,6 +23,16 @@ bzl_library( ], ) +bzl_library( + name = "cc_layer", + srcs = ["cc_layer.bzl"], + visibility = ["//uv/private:__subpackages__"], + deps = [ + "@rules_cc//cc:action_names_bzl", + "@rules_cc//cc/common", + ], +) + py_library( name = "memory_monitor", srcs = ["memory_monitor.py"], diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index e42e63f52..245664a52 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -48,6 +48,73 @@ os.execv("{compiler_path}", ["{compiler_path}"] + filtered_args) """ +_IDENTITY_FLAG_PREFIXES = ( + "-target", + "--target", + "--sysroot", + "-isysroot", + "-mmacosx-version-min", +) + +_DROP_LINKER_FLAGS = frozenset({ + "-Wl,--start-group", + "-Wl,--end-group", + "-Wl,--as-needed", + "-Wl,--allow-shlib-undefined", + "-Wl,-O1", + "-Wl,-start_group", + "-Wl,-end_group", + "-bundle", +}) + +_DROP_LINKER_PAIRS = frozenset({ + "-arch", + "-undefined", + "-current_version", + "-compatibility_version", + "-install_name", +}) + +_DROP_LINKER_PREFIXES = ( + "-mmacosx-version-min", +) + +_CROSS_COMPILER_WRAPPER = """#!/usr/bin/env python3 +import os +import sys + +args = sys.argv[1:] +wrapper_flags = {wrapper_flags!r} +drop_exact = {drop_exact!r} +drop_pairs = {drop_pairs!r} +drop_prefixes = {drop_prefixes!r} +lld_path = {lld_path!r} +debug_flag = {debug_flag!r} + +is_link = "-c" not in args +filtered = [] +i = 0 +while i < len(args): + a = args[i] + if a == debug_flag or a in drop_exact or any(a.startswith(p) for p in drop_prefixes): + i += 1 + continue + if a in drop_pairs and i + 1 < len(args): + i += 2 + continue + filtered.append(a) + i += 1 + +if is_link and lld_path: + os.environ.setdefault("PATH", "") + os.environ["PATH"] = os.path.dirname(lld_path) + os.pathsep + os.environ["PATH"] + if "-fuse-ld=lld" not in filtered: + filtered.insert(0, "-fuse-ld=lld") + +real = {compiler_path!r} +os.execv(real, [os.path.basename(real)] + wrapper_flags + filtered) +""" + def _darwin_sysroot() -> Optional[str]: """Return the macOS SDK path, or None if unavailable.""" @@ -127,6 +194,63 @@ def _make_compiler_wrapper( return wrapper +def _get_wrapper_flags(cflags: str) -> list: + """Extract identity flags (-target, --sysroot, -isysroot, ...) from CFLAGS. + + The PEP 517 backend (setuptools, meson-python) may strip these when + constructing its own compile commands. The cross wrapper re-injects + them on every invocation to guarantee the real compiler targets the + correct platform. + """ + parts = shlex.split(cflags) + result = [] + i = 0 + while i < len(parts): + p = parts[i] + if any(p == prefix or p.startswith(prefix + "=") for prefix in _IDENTITY_FLAG_PREFIXES): + result.append(p) + if "=" not in p and i + 1 < len(parts) and not parts[i + 1].startswith("-"): + result.append(parts[i + 1]) + i += 1 + i += 1 + return result + + +def _find_lld(compiler_path: str) -> Optional[str]: + """Locate ld.lld or ld64.lld next to the compiler, if present.""" + d = path.dirname(compiler_path) + if not d: + return None + for name in ("ld.lld", "ld64.lld", "lld"): + candidate = path.join(d, name) + if path.isfile(candidate) and os.access(candidate, os.X_OK): + return candidate + return None + + +def _make_cross_compiler_wrapper( + tmpdir: str, + name: str, + compiler_path: str, + wrapper_flags: list, + lld_path: Optional[str] = None, +) -> str: + wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) + makedirs(path.dirname(wrapper), exist_ok=True) + with open(wrapper, "w") as f: + f.write(_CROSS_COMPILER_WRAPPER.format( + compiler_path=compiler_path, + wrapper_flags=wrapper_flags, + drop_exact=sorted(_DROP_LINKER_FLAGS), + drop_pairs=sorted(_DROP_LINKER_PAIRS), + drop_prefixes=list(_DROP_LINKER_PREFIXES), + lld_path=lld_path, + debug_flag=_DEBUG_FLAG, + )) + chmod(wrapper, 0o755) + return wrapper + + def _override_tool(env: Dict[str, str], key: str, wrapper: str) -> None: current = env.get(key) if not current: @@ -154,7 +278,11 @@ def _absolutize_tool_paths(env: Dict[str, str]) -> None: env[key] = shlex.join(parts) -def _compiler_env(tmpdir: str, execroot_marker: Optional[str] = None) -> Dict[str, str]: +def _compiler_env( + tmpdir: str, + execroot_marker: Optional[str] = None, + cross: bool = False, +) -> Dict[str, str]: env = dict(os.environ) if execroot_marker: execroot = os.getcwd() @@ -190,14 +318,24 @@ def _compiler_env(tmpdir: str, execroot_marker: Optional[str] = None) -> Dict[st if env.pop("ASPECT_RULES_PY_INFER_CXX_COMPANION", None) == "1": cxx_path = _local_cxx_companion(env.get("CXX"), cxx_path) - sysroot = _darwin_sysroot() - - cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot) - cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot) + if cross: + wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) + lld_path = _find_lld(cc_path) + cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path) + cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path) + else: + sysroot = _darwin_sysroot() + cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot) + cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot) env.setdefault("CC", cc) env.setdefault("CXX", cxx) + if cross: + ldshared_flags = env.get("LDSHAREDFLAGS", "") + env["LDSHARED"] = cc + (" " + ldshared_flags if ldshared_flags else "") + env["LDCXXSHARED"] = cxx + (" " + ldshared_flags if ldshared_flags else "") + # MPI builds (e.g. mpi4py) consult $MPICC before searching PATH, so a # plain C compiler here would shadow the real mpicc. Only set it when # a system mpicc exists, wrapped to keep the debug-flag stripping. @@ -279,6 +417,8 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: PARSER.add_argument("--patch", action="append", default=[], dest="patches", help="Patch file to apply (repeatable)") PARSER.add_argument("--execroot-marker", help="Token in env values to replace with the absolute execroot") PARSER.add_argument("--cross", action="store_true", help="Cross-compilation mode: target platform != exec platform") +PARSER.add_argument("--target-os", default="", help="Target platform OS (linux, darwin, windows)") +PARSER.add_argument("--target-cpu", default="", help="Target platform CPU (x86_64, aarch64, ...)") opts, _ = PARSER.parse_known_args() tmp_root = path.abspath(opts.outdir) + ".tmp" @@ -323,7 +463,7 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: # and re-point CC/CXX/etc. through wrapper scripts in tmp_root so the # Bazel-supplied workspace-relative compiler paths survive the cwd # change into the worktree. -build_env = _compiler_env(tmp_root, opts.execroot_marker) +build_env = _compiler_env(tmp_root, opts.execroot_marker, cross=opts.cross) if _legacy_metadata_conflicts_with_pyproject(t): print( diff --git a/uv/private/pep517_whl/cc_layer.bzl b/uv/private/pep517_whl/cc_layer.bzl new file mode 100644 index 000000000..74a0da98d --- /dev/null +++ b/uv/private/pep517_whl/cc_layer.bzl @@ -0,0 +1,193 @@ +load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES") +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") + +_EXECROOT_MARKER = "__ASPECT_RULES_PY_EXECROOT__" + +_CC_DISABLED_FEATURES = [ + "thin_lto", + "module_maps", + "fdo_instrument", + "fdo_optimize", + "layering_check", +] + +_PATH_FLAG_PREFIXES = ("-I", "-L", "-isysroot", "-iwithsysroot", "-B") + +CC_LAYER_ATTRS = { + "_os_linux": attr.label(default = "@platforms//os:linux"), + "_os_macos": attr.label(default = "@platforms//os:macos"), + "_os_windows": attr.label(default = "@platforms//os:windows"), + "_cpu_x86_64": attr.label(default = "@platforms//cpu:x86_64"), + "_cpu_aarch64": attr.label(default = "@platforms//cpu:aarch64"), + "_cpu_arm": attr.label(default = "@platforms//cpu:arm"), + "_cpu_x86_32": attr.label(default = "@platforms//cpu:x86_32"), +} + +def _absolutize_flag(flag): + """Prefix execroot-relative paths with the EXECROOT marker. + + The marker is replaced with os.getcwd() at execution time by + build_helper.py's _compiler_env, so paths survive the backend's + chdir into the unpacked sdist worktree. + """ + if not flag: + return flag + if not flag.startswith("-"): + if "/" in flag: + return _EXECROOT_MARKER + "/" + flag + return flag + for pfx in _PATH_FLAG_PREFIXES: + if flag.startswith(pfx) and len(flag) > len(pfx): + rest = flag[len(pfx):] + if rest and not rest.startswith("/") and "/" in rest: + return pfx + _EXECROOT_MARKER + "/" + rest + return flag + +def get_target_platform(ctx): + """Determine target OS and CPU from platform constraints. + + Returns Python-sysconfig-style names: (target_os, target_cpu). + Each may be None if the target platform lacks a recognized constraint. + """ + target_os = None + target_cpu = None + + if ctx.target_platform_has_constraint(ctx.attr._os_linux[platform_common.ConstraintValueInfo]): + target_os = "linux" + elif ctx.target_platform_has_constraint(ctx.attr._os_macos[platform_common.ConstraintValueInfo]): + target_os = "darwin" + elif ctx.target_platform_has_constraint(ctx.attr._os_windows[platform_common.ConstraintValueInfo]): + target_os = "windows" + + if ctx.target_platform_has_constraint(ctx.attr._cpu_x86_64[platform_common.ConstraintValueInfo]): + target_cpu = "x86_64" + elif ctx.target_platform_has_constraint(ctx.attr._cpu_aarch64[platform_common.ConstraintValueInfo]): + target_cpu = "aarch64" + elif ctx.target_platform_has_constraint(ctx.attr._cpu_arm[platform_common.ConstraintValueInfo]): + target_cpu = "arm" + elif ctx.target_platform_has_constraint(ctx.attr._cpu_x86_32[platform_common.ConstraintValueInfo]): + target_cpu = "x86" + + return target_os, target_cpu + +def extract_cc_layer(ctx, cc_toolchain): + """Extract CC toolchain tools, flags, and target platform info. + + Called only in cross-compilation mode. The native path relies on the + existing _cc_toolchain_inputs_and_tools + backend self-discovery. + + Args: + ctx: The rule context. Must include CC_LAYER_ATTRS and + fragments = ["cpp"]. + cc_toolchain: The resolved CcToolchainInfo-like object from + ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains[_CC_TOOLCHAIN_TYPE]. + + Returns: + struct( + cc, cxx, ar — tool execpaths, + cflags, cxxflags — joined compile flags (absolutized), + ldflags — joined executable linker flags (absolutized), + ldshared_flags — joined shared-lib linker flags (absolutized), + ccshared — "-fPIC" or "", + target_os — "linux" | "darwin" | "windows" | None, + target_cpu — "x86_64" | "aarch64" | "arm" | "x86" | None, + ) + """ + feature_configuration = cc_common.configure_features( + ctx = ctx, + cc_toolchain = cc_toolchain, + requested_features = ctx.features, + unsupported_features = ctx.disabled_features + _CC_DISABLED_FEATURES, + ) + + action_map = { + "cc": ACTION_NAMES.c_compile, + "cxx": ACTION_NAMES.cpp_compile, + "ldshared": ACTION_NAMES.cpp_link_dynamic_library, + "ld": ACTION_NAMES.cpp_link_executable, + "ar": ACTION_NAMES.cpp_link_static_library, + } + + tools = {} + for key, action_name in action_map.items(): + if cc_common.action_is_enabled( + feature_configuration = feature_configuration, + action_name = action_name, + ): + tools[key] = cc_common.get_tool_for_action( + feature_configuration = feature_configuration, + action_name = action_name, + ) + + compile_vars = cc_common.create_compile_variables( + feature_configuration = feature_configuration, + cc_toolchain = cc_toolchain, + ) + cxx_vars = cc_common.create_compile_variables( + feature_configuration = feature_configuration, + cc_toolchain = cc_toolchain, + add_legacy_cxx_options = True, + ) + link_shared_vars = cc_common.create_link_variables( + cc_toolchain = cc_toolchain, + feature_configuration = feature_configuration, + is_using_linker = True, + is_linking_dynamic_library = True, + must_keep_debug = False, + ) + link_exe_vars = cc_common.create_link_variables( + cc_toolchain = cc_toolchain, + feature_configuration = feature_configuration, + is_using_linker = True, + is_linking_dynamic_library = False, + must_keep_debug = False, + ) + link_static_vars = cc_common.create_link_variables( + cc_toolchain = cc_toolchain, + feature_configuration = feature_configuration, + is_using_linker = False, + is_linking_dynamic_library = False, + must_keep_debug = False, + ) + + vars_map = { + "cc": compile_vars, + "cxx": cxx_vars, + "ldshared": link_shared_vars, + "ld": link_exe_vars, + "ar": link_static_vars, + } + + flags = {} + for key, action_name in action_map.items(): + if not cc_common.action_is_enabled( + feature_configuration = feature_configuration, + action_name = action_name, + ): + continue + raw = cc_common.get_memory_inefficient_command_line( + feature_configuration = feature_configuration, + action_name = action_name, + variables = vars_map[key], + ) + flags[key] = " ".join([_absolutize_flag(f) for f in raw]) + + needs_pic = cc_common.action_is_enabled( + feature_configuration = feature_configuration, + action_name = ACTION_NAMES.cpp_link_dynamic_library, + ) + + target_os, target_cpu = get_target_platform(ctx) + + return struct( + cc = tools.get("cc"), + cxx = tools.get("cxx"), + ar = tools.get("ar"), + cflags = flags.get("cc", ""), + cxxflags = flags.get("cxx", ""), + ldflags = flags.get("ld", ""), + ldshared_flags = flags.get("ldshared", ""), + ccshared = "-fPIC" if needs_pic else "", + target_os = target_os, + target_cpu = target_cpu, + ) diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index bc189ff53..8af445365 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -10,6 +10,7 @@ load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES") load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//py/private/toolchain:types.bzl", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") +load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") _CC_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/cpp:toolchain_type") _TARGET_EXEC_GROUP = "target" @@ -192,9 +193,9 @@ def _pep517_native_whl(ctx): eg_toolchains = ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains cross = eg_toolchains[NATIVE_BUILD_TOOLCHAIN] == None - cc_toolchain = eg_toolchains[_CC_TOOLCHAIN_TYPE] + cc_toolchain_raw = eg_toolchains[_CC_TOOLCHAIN_TYPE] - if cc_toolchain == None: + if cc_toolchain_raw == None: if cross: fail( "Cross-compilation of sdist '{}' requires a CC toolchain " + @@ -212,6 +213,10 @@ def _pep517_native_whl(ctx): "via register_toolchains.".format(ctx.attr.src.label), ) + cc_toolchain = cc_toolchain_raw + if hasattr(cc_toolchain, "cc_provider_in_toolchain") and hasattr(cc_toolchain, "cc"): + cc_toolchain = cc_toolchain.cc + env = _common_env(ctx) extra_inputs, known_variables = _collect_toolchain_inputs_and_vars(ctx) @@ -236,7 +241,30 @@ def _pep517_native_whl(ctx): env[_INFER_CXX_COMPANION] = "1" if cross: + cc_layer = extract_cc_layer(ctx, cc_toolchain) env["RULES_PY_CROSS_COMPILE"] = "1" + env["RULES_PY_TARGET_OS"] = cc_layer.target_os or "" + env["RULES_PY_TARGET_CPU"] = cc_layer.target_cpu or "" + if cc_layer.cflags: + env["CFLAGS"] = cc_layer.cflags + if cc_layer.cxxflags: + env["CXXFLAGS"] = cc_layer.cxxflags + if cc_layer.ldflags: + env["LDFLAGS"] = cc_layer.ldflags + if cc_layer.ldshared_flags: + env["LDSHAREDFLAGS"] = cc_layer.ldshared_flags + if cc_layer.ccshared: + env["CFLAGS"] = (env.get("CFLAGS", "") + " " + cc_layer.ccshared).strip() + env["CXXFLAGS"] = (env.get("CXXFLAGS", "") + " " + cc_layer.ccshared).strip() + cross_args = [ + "--cross", + "--target-os", + cc_layer.target_os or "", + "--target-cpu", + cc_layer.target_cpu or "", + ] + else: + cross_args = [] ctx.actions.run( mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", @@ -246,9 +274,7 @@ def _pep517_native_whl(ctx): ), executable = ctx.executable.tool, toolchain = None, - arguments = ctx.attr.args + patch_args + _memory_args(ctx) + ( - ["--cross"] if cross else [] - ) + [ + arguments = ctx.attr.args + patch_args + _memory_args(ctx) + cross_args + [ "--execroot-marker", _EXECROOT_MARKER, archive.path, @@ -348,7 +374,7 @@ analysis fails with a diagnostic naming the required toolchain type. "the unpacked source tree. Omit CC/CXX/AR/LD/STRIP to use the " + "configured C++ action tools.", ), - }, + } | CC_LAYER_ATTRS, fragments = ["cpp"], exec_groups = { _TARGET_EXEC_GROUP: exec_group( From 34a96422894595e094c01de73f057dbc5323a135 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 22:18:09 -0600 Subject: [PATCH 05/56] check EXT_SUFFIX and SOABI --- e2e/cases/uv-deps-650/crossbuild/BUILD.bazel | 36 +++++++++++++++++++ .../uv-deps-650/crossbuild/check_so_suffix.sh | 25 +++++++++++++ 2 files changed, 61 insertions(+) create mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel index aacabdf2a..acaacca7a 100644 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel @@ -238,3 +238,39 @@ build_test( name = "geohash_so_arch_arm64_test", targets = [":_geohash_arm64_so_arch_check"], ) + +# ── Verify .so filename suffix (EXT_SUFFIX / SOABI) ── + +genrule( + name = "_geohash_amd64_so_suffix_check", + srcs = [":geohash_amd64_layers"], + outs = ["_geohash_amd64_so_suffix.ok"], + cmd = """ +tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) +$(location check_so_suffix.sh) $$tar_file cpython-312-x86_64-linux-gnu +touch $@ +""", + tools = [":check_so_suffix.sh"], +) + +genrule( + name = "_geohash_arm64_so_suffix_check", + srcs = [":geohash_arm64_layers"], + outs = ["_geohash_arm64_so_suffix.ok"], + cmd = """ +tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) +$(location check_so_suffix.sh) $$tar_file cpython-312-aarch64-linux-gnu +touch $@ +""", + tools = [":check_so_suffix.sh"], +) + +build_test( + name = "geohash_so_suffix_amd64_test", + targets = [":_geohash_amd64_so_suffix_check"], +) + +build_test( + name = "geohash_so_suffix_arm64_test", + targets = [":_geohash_arm64_so_suffix_check"], +) diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh new file mode 100755 index 000000000..d3df61ed3 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Check that _geohash.so inside a py_image_layer tar has the correct platform +# suffix in its filename — i.e. EXT_SUFFIX and SOABI reflect the target +# platform, not the exec host. +# +# Usage: check_so_suffix.sh +set -euo pipefail + +tar_file="${1:?usage: check_so_suffix.sh }" +expected="${2:?expected suffix substring, e.g. cpython-312-x86_64-linux-gnu}" + +so_name=$(tar tf "$tar_file" | grep '_geohash.*\.so$' | head -1) +if [ -z "$so_name" ]; then + echo "FAIL: no _geohash*.so in tar $tar_file" + exit 1 +fi + +echo ".so: $so_name" + +if ! echo "$so_name" | grep -q "$expected"; then + echo "FAIL: expected suffix '$expected' not found in filename" + exit 1 +fi + +echo "PASS: $so_name contains '$expected'" From 0f6d1fc5b3079a4ada71e7739468242c621ade06 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 22:32:04 -0600 Subject: [PATCH 06/56] modify EXT_SUFFIX and SOABI --- uv/private/pep517_whl/build_helper.py | 12 ++++++- uv/private/pep517_whl/rule.bzl | 47 +++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index 245664a52..ab0962e6a 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -318,13 +318,14 @@ def _compiler_env( if env.pop("ASPECT_RULES_PY_INFER_CXX_COMPANION", None) == "1": cxx_path = _local_cxx_companion(env.get("CXX"), cxx_path) + sysroot = _darwin_sysroot() + if cross: wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) lld_path = _find_lld(cc_path) cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path) cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path) else: - sysroot = _darwin_sysroot() cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot) cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot) @@ -336,6 +337,15 @@ def _compiler_env( env["LDSHARED"] = cc + (" " + ldshared_flags if ldshared_flags else "") env["LDCXXSHARED"] = cxx + (" " + ldshared_flags if ldshared_flags else "") + target_sysconfig = env.get("RULES_PY_TARGET_SYSCONFIGDATA") + if target_sysconfig and path.exists(target_sysconfig): + sysconfig_dir = path.join(tmpdir, ".target_sysconfig") + makedirs(sysconfig_dir, exist_ok=True) + shutil.copy(target_sysconfig, sysconfig_dir) + module_name = path.basename(target_sysconfig)[:-3] + env["_PYTHON_SYSCONFIGDATA_NAME"] = module_name + env["PYTHONPATH"] = sysconfig_dir + pathsep + env.get("PYTHONPATH", "") + # MPI builds (e.g. mpi4py) consult $MPICC before searching PATH, so a # plain C compiler here would shadow the real mpicc. Only set it when # a system mpicc exists, wrapped to keep the debug-flag stripping. diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index 8af445365..afe3be2e6 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -157,6 +157,37 @@ def _cc_toolchain_inputs_and_tools(ctx): infer_cxx = infer_cxx or tools.get("CXX") == tools.get("CC") return files, {key: value for key, value in tools.items() if value}, infer_cxx +_PYTHON_CPU_MAP = { + "x86_64": "x86_64", + "aarch64": "aarch64", + "x86": "i686", + "arm": "arm", +} + +def _find_sysconfigdata(runtime): + """Locate _sysconfigdata*.py inside the target interpreter's file tree.""" + if not runtime or not hasattr(runtime, "interpreter_version_info"): + return None + info = runtime.interpreter_version_info + prefix = "lib/python{}.{}".format(info.major, info.minor) + for f in runtime.files.to_list(): + if f.basename.startswith("_sysconfigdata") and f.basename.endswith(".py") and prefix in f.path: + return f + return None + +def _derive_python_host_platform(target_os, target_cpu): + """Derive _PYTHON_HOST_PLATFORM from target platform constraints. + + Linux: libc does not affect the platform string — always linux-{cpu}. + macOS: uses arm64 (not aarch64) and requires a version component. + """ + if target_os == "linux": + return "linux-" + _PYTHON_CPU_MAP.get(target_cpu, target_cpu) + if target_os == "darwin": + cpu = "arm64" if target_cpu == "aarch64" else target_cpu + return "macosx-11.0-" + cpu + return None + def _pep517_whl(ctx): archive = ctx.file.src wheel_dir = ctx.actions.declare_directory("whl") @@ -263,6 +294,19 @@ def _pep517_native_whl(ctx): "--target-cpu", cc_layer.target_cpu or "", ] + + py_toolchain = ctx.toolchains[PY_TOOLCHAIN] + if py_toolchain != None: + runtime = getattr(py_toolchain, "py3_runtime", None) + if runtime: + sysconfig_file = _find_sysconfigdata(runtime) + if sysconfig_file: + extra_inputs.append(depset([sysconfig_file])) + env["RULES_PY_TARGET_SYSCONFIGDATA"] = sysconfig_file.path + + host_platform = _derive_python_host_platform(cc_layer.target_os, cc_layer.target_cpu) + if host_platform: + env["_PYTHON_HOST_PLATFORM"] = host_platform else: cross_args = [] @@ -376,6 +420,9 @@ analysis fails with a diagnostic naming the required toolchain type. ), } | CC_LAYER_ATTRS, fragments = ["cpp"], + toolchains = [ + config_common.toolchain_type(PY_TOOLCHAIN, mandatory = False), + ], exec_groups = { _TARGET_EXEC_GROUP: exec_group( toolchains = [ From a776291919b378ec55e0e158874540e9a29c7ea1 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 23:19:13 -0600 Subject: [PATCH 07/56] adding cffi as default build dependency to break the build, since this package do not have py3-none-any --- e2e/cases/uv-deps-650/crossbuild/BUILD.bazel | 2 + .../uv-deps-650/crossbuild/pyproject.toml | 1 + e2e/cases/uv-deps-650/crossbuild/uv.lock | 109 ++++++++++++++++++ e2e/cases/uv-deps-650/setup.MODULE.bazel | 1 + 4 files changed, 113 insertions(+) diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel index acaacca7a..e68e771c2 100644 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel @@ -160,6 +160,8 @@ build_test( targets = [ ":amd64_layers", ":arm64_layers", + ":geohash_amd64_layers", + ":geohash_arm64_layers", ], ) diff --git a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml index f110fdf36..d6e6ed0c0 100644 --- a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml +++ b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml @@ -4,6 +4,7 @@ version = "0.0.0" requires-python = ">=3.11" authors = [] dependencies = [ + "cffi", "psycopg2-binary", "python-geohash==0.8.5", "setuptools", diff --git a/e2e/cases/uv-deps-650/crossbuild/uv.lock b/e2e/cases/uv-deps-650/crossbuild/uv.lock index 4ac42a4fe..85263a4e5 100644 --- a/e2e/cases/uv-deps-650/crossbuild/uv.lock +++ b/e2e/cases/uv-deps-650/crossbuild/uv.lock @@ -16,6 +16,104 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl", hash = "sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596", size = 24141, upload-time = "2026-01-08T16:41:46.453Z" }, ] +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -31,6 +129,7 @@ version = "0.0.0" source = { virtual = "." } dependencies = [ { name = "build" }, + { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash" }, { name = "setuptools" }, @@ -39,6 +138,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "build" }, + { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash", specifier = "==0.8.5" }, { name = "setuptools" }, @@ -105,6 +205,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, ] +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + [[package]] name = "pyproject-hooks" version = "1.2.0" diff --git a/e2e/cases/uv-deps-650/setup.MODULE.bazel b/e2e/cases/uv-deps-650/setup.MODULE.bazel index 1cab41c3c..6326b4590 100644 --- a/e2e/cases/uv-deps-650/setup.MODULE.bazel +++ b/e2e/cases/uv-deps-650/setup.MODULE.bazel @@ -19,6 +19,7 @@ uv.project( uv.project( default_build_dependencies = [ "build", + "cffi", "setuptools", ], hub_name = "pypi_uv_deps_650", From 8fe1b2ae956a2763e6f8ce525beb18d0a7bf93e5 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 23:49:58 -0600 Subject: [PATCH 08/56] improve selection wheel with exec_transition --- uv/private/pep517_whl/BUILD.bazel | 7 +++ uv/private/pep517_whl/exec_transition.bzl | 53 +++++++++++++++++++++++ uv/private/pep517_whl/rule.bzl | 11 ++++- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 uv/private/pep517_whl/exec_transition.bzl diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index 0799ecf67..564cf7374 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -15,6 +15,7 @@ bzl_library( srcs = ["rule.bzl"], deps = [ ":cc_layer", + ":exec_transition", "//py/private/toolchain:types", "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", @@ -33,6 +34,12 @@ bzl_library( ], ) +bzl_library( + name = "exec_transition", + srcs = ["exec_transition.bzl"], + visibility = ["//uv/private:__subpackages__"], +) + py_library( name = "memory_monitor", srcs = ["memory_monitor.py"], diff --git a/uv/private/pep517_whl/exec_transition.bzl b/uv/private/pep517_whl/exec_transition.bzl new file mode 100644 index 000000000..f6658814b --- /dev/null +++ b/uv/private/pep517_whl/exec_transition.bzl @@ -0,0 +1,53 @@ +load("@aspect_rules_py_uv_host//:defs.bzl", "CURRENT_PLATFORM_LIBC", "CURRENT_PLATFORM_VERSION") + +_PLATFORM_LIBC_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_libc")) +_PLATFORM_VERSION_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_version")) + +_HOST_OPTION_INPUTS = [ + "//command_line_option:platforms", + "//command_line_option:host_platform", + "//command_line_option:host_cpu", + "//command_line_option:host_compilation_mode", + "//command_line_option:host_copt", + "//command_line_option:host_cxxopt", + "//command_line_option:host_linkopt", + "//command_line_option:host_action_env", + "//command_line_option:host_features", +] + +_HOST_OPTION_OUTPUTS = [ + "//command_line_option:platforms", + "//command_line_option:cpu", + "//command_line_option:compilation_mode", + "//command_line_option:copt", + "//command_line_option:cxxopt", + "//command_line_option:linkopt", + "//command_line_option:action_env", + "//command_line_option:features", +] + +def _exec_transition_impl(settings, _attr): + if settings["//command_line_option:platforms"] == [settings["//command_line_option:host_platform"]]: + return {} + + return { + "//command_line_option:platforms": [settings["//command_line_option:host_platform"]], + "//command_line_option:cpu": settings["//command_line_option:host_cpu"], + "//command_line_option:compilation_mode": settings["//command_line_option:host_compilation_mode"], + "//command_line_option:copt": settings["//command_line_option:host_copt"], + "//command_line_option:cxxopt": settings["//command_line_option:host_cxxopt"], + "//command_line_option:linkopt": settings["//command_line_option:host_linkopt"], + "//command_line_option:action_env": settings["//command_line_option:host_action_env"], + "//command_line_option:features": settings["//command_line_option:host_features"], + _PLATFORM_LIBC_FLAG: CURRENT_PLATFORM_LIBC, + _PLATFORM_VERSION_FLAG: CURRENT_PLATFORM_VERSION, + } + +exec_transition = transition( + implementation = _exec_transition_impl, + inputs = _HOST_OPTION_INPUTS, + outputs = _HOST_OPTION_OUTPUTS + [ + _PLATFORM_LIBC_FLAG, + _PLATFORM_VERSION_FLAG, + ], +) diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index afe3be2e6..94c578057 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -11,6 +11,7 @@ load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//py/private/toolchain:types.bzl", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") +load(":exec_transition.bzl", "exec_transition") _CC_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/cpp:toolchain_type") _TARGET_EXEC_GROUP = "target" @@ -310,6 +311,10 @@ def _pep517_native_whl(ctx): else: cross_args = [] + _tool = ctx.attr.tool + if type(_tool) == "list": + _tool = _tool[0] + ctx.actions.run( mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", progress_message = "{} source compiling {} to a whl".format( @@ -328,7 +333,7 @@ def _pep517_native_whl(ctx): [archive] + patch_inputs, transitive = extra_inputs, ), - tools = [ctx.attr.tool[DefaultInfo].files_to_run], + tools = [_tool[DefaultInfo].files_to_run], outputs = [wheel_dir], env = env, exec_group = _TARGET_EXEC_GROUP, @@ -418,6 +423,10 @@ analysis fails with a diagnostic naming the required toolchain type. "the unpacked source tree. Omit CC/CXX/AR/LD/STRIP to use the " + "configured C++ action tools.", ), + "tool": attr.label(executable = True, cfg = exec_transition), + "_allowlist_function_transition": attr.label( + default = "@bazel_tools//tools/allowlists/function_transition_allowlist", + ), } | CC_LAYER_ATTRS, fragments = ["cpp"], toolchains = [ From d41150eafbf90e201b80b59a80b519b8e3895b67 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 00:07:23 -0600 Subject: [PATCH 09/56] validate wheel platform --- uv/private/pep517_whl/build_helper.py | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index ab0962e6a..a1b5894fb 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -418,6 +418,58 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: ) ) +_WHEEL_OS_MAP = {"linux": "linux", "darwin": "macosx", "windows": "win"} + + +def _expected_cpu_in_tag(target_os: str, target_cpu: str) -> str: + if target_os == "darwin": + return {"aarch64": "arm64", "x86_64": "x86_64"}.get(target_cpu, target_cpu) + return {"x86_64": "x86_64", "aarch64": "aarch64", "x86": "i686", "arm": "armv7l"}.get(target_cpu, target_cpu) + + +def _validate_wheel_platform(wheel_filename: str) -> None: + target_os = os.environ.get("RULES_PY_TARGET_OS", "") + target_cpu = os.environ.get("RULES_PY_TARGET_CPU", "") + if not target_os or not target_cpu: + return + + platform_tag = wheel_filename.rsplit("-", 1)[-1].rsplit(".", 1)[0].lower() + + expected_os = _WHEEL_OS_MAP.get(target_os, target_os) + expected_cpu = _expected_cpu_in_tag(target_os, target_cpu) + + host_os = _platform.system().lower() + host_wheel_os = _WHEEL_OS_MAP.get(host_os, host_os) + + if target_os != host_os and host_wheel_os in platform_tag: + print( + "Error: wheel platform tag '{}' contains exec host OS '{}' instead of " + "target OS '{}'. The target sysconfig override may have failed.".format( + platform_tag, host_wheel_os, expected_os, + ), + file=sys.stderr, + ) + exit(1) + + if expected_os not in platform_tag: + print( + "Error: wheel platform tag '{}' does not contain target OS '{}'.".format( + platform_tag, expected_os, + ), + file=sys.stderr, + ) + exit(1) + + if expected_cpu not in platform_tag: + print( + "Error: wheel platform tag '{}' does not contain target CPU '{}'.".format( + platform_tag, expected_cpu, + ), + file=sys.stderr, + ) + exit(1) + + PARSER = ArgumentParser() PARSER.add_argument("srcarchive") PARSER.add_argument("outdir") @@ -551,3 +603,6 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: if opts.validate_anyarch and not inventory[0].endswith("-none-any.whl"): print("Error: Target was anyarch but built a none-any wheel!\nSee {} for the sandbox".format(t), file=sys.stderr) exit(1) + +if opts.cross and not inventory[0].endswith("-none-any.whl"): + _validate_wheel_platform(inventory[0]) From 73cf6a340ebe92fe4f368157062e0aff05c41214 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 00:10:25 -0600 Subject: [PATCH 10/56] linter errors --- uv/private/pep517_whl/build_helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index a1b5894fb..afc641e99 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -194,7 +194,7 @@ def _make_compiler_wrapper( return wrapper -def _get_wrapper_flags(cflags: str) -> list: +def _get_wrapper_flags(cflags: str) -> list[str]: """Extract identity flags (-target, --sysroot, -isysroot, ...) from CFLAGS. The PEP 517 backend (setuptools, meson-python) may strip these when @@ -232,7 +232,7 @@ def _make_cross_compiler_wrapper( tmpdir: str, name: str, compiler_path: str, - wrapper_flags: list, + wrapper_flags: list[str], lld_path: Optional[str] = None, ) -> str: wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) From 17d7552f797b3601722acb10333b4785f4d5f1fb Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 00:24:55 -0600 Subject: [PATCH 11/56] revert exec transition --- .../uv-deps-650/crossbuild/pyproject.toml | 1 - e2e/cases/uv-deps-650/crossbuild/uv.lock | 109 ------------------ e2e/cases/uv-deps-650/setup.MODULE.bazel | 1 - uv/private/pep517_whl/BUILD.bazel | 7 -- uv/private/pep517_whl/exec_transition.bzl | 53 --------- uv/private/pep517_whl/rule.bzl | 8 +- 6 files changed, 1 insertion(+), 178 deletions(-) delete mode 100644 uv/private/pep517_whl/exec_transition.bzl diff --git a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml index d6e6ed0c0..f110fdf36 100644 --- a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml +++ b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml @@ -4,7 +4,6 @@ version = "0.0.0" requires-python = ">=3.11" authors = [] dependencies = [ - "cffi", "psycopg2-binary", "python-geohash==0.8.5", "setuptools", diff --git a/e2e/cases/uv-deps-650/crossbuild/uv.lock b/e2e/cases/uv-deps-650/crossbuild/uv.lock index 85263a4e5..4ac42a4fe 100644 --- a/e2e/cases/uv-deps-650/crossbuild/uv.lock +++ b/e2e/cases/uv-deps-650/crossbuild/uv.lock @@ -16,104 +16,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl", hash = "sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596", size = 24141, upload-time = "2026-01-08T16:41:46.453Z" }, ] -[[package]] -name = "cffi" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, - { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, - { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, - { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, - { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, - { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, - { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, - { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, - { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, - { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, - { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, - { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, - { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, - { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, - { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, - { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, - { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, - { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, - { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, - { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, - { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, - { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, - { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, - { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, - { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, - { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, - { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, - { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, - { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, - { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, - { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, - { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, - { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, - { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, - { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, - { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, - { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, - { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, - { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, - { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, - { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, - { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, - { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, - { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, - { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, - { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, - { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, - { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, - { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, - { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, - { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, - { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, - { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, - { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, - { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, - { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, - { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, - { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, - { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, - { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, - { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, - { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, - { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, - { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, - { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, - { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, - { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, - { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, - { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, - { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, -] - [[package]] name = "colorama" version = "0.4.6" @@ -129,7 +31,6 @@ version = "0.0.0" source = { virtual = "." } dependencies = [ { name = "build" }, - { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash" }, { name = "setuptools" }, @@ -138,7 +39,6 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "build" }, - { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash", specifier = "==0.8.5" }, { name = "setuptools" }, @@ -205,15 +105,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, ] -[[package]] -name = "pycparser" -version = "3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, -] - [[package]] name = "pyproject-hooks" version = "1.2.0" diff --git a/e2e/cases/uv-deps-650/setup.MODULE.bazel b/e2e/cases/uv-deps-650/setup.MODULE.bazel index 6326b4590..1cab41c3c 100644 --- a/e2e/cases/uv-deps-650/setup.MODULE.bazel +++ b/e2e/cases/uv-deps-650/setup.MODULE.bazel @@ -19,7 +19,6 @@ uv.project( uv.project( default_build_dependencies = [ "build", - "cffi", "setuptools", ], hub_name = "pypi_uv_deps_650", diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index 564cf7374..0799ecf67 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -15,7 +15,6 @@ bzl_library( srcs = ["rule.bzl"], deps = [ ":cc_layer", - ":exec_transition", "//py/private/toolchain:types", "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", @@ -34,12 +33,6 @@ bzl_library( ], ) -bzl_library( - name = "exec_transition", - srcs = ["exec_transition.bzl"], - visibility = ["//uv/private:__subpackages__"], -) - py_library( name = "memory_monitor", srcs = ["memory_monitor.py"], diff --git a/uv/private/pep517_whl/exec_transition.bzl b/uv/private/pep517_whl/exec_transition.bzl deleted file mode 100644 index f6658814b..000000000 --- a/uv/private/pep517_whl/exec_transition.bzl +++ /dev/null @@ -1,53 +0,0 @@ -load("@aspect_rules_py_uv_host//:defs.bzl", "CURRENT_PLATFORM_LIBC", "CURRENT_PLATFORM_VERSION") - -_PLATFORM_LIBC_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_libc")) -_PLATFORM_VERSION_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_version")) - -_HOST_OPTION_INPUTS = [ - "//command_line_option:platforms", - "//command_line_option:host_platform", - "//command_line_option:host_cpu", - "//command_line_option:host_compilation_mode", - "//command_line_option:host_copt", - "//command_line_option:host_cxxopt", - "//command_line_option:host_linkopt", - "//command_line_option:host_action_env", - "//command_line_option:host_features", -] - -_HOST_OPTION_OUTPUTS = [ - "//command_line_option:platforms", - "//command_line_option:cpu", - "//command_line_option:compilation_mode", - "//command_line_option:copt", - "//command_line_option:cxxopt", - "//command_line_option:linkopt", - "//command_line_option:action_env", - "//command_line_option:features", -] - -def _exec_transition_impl(settings, _attr): - if settings["//command_line_option:platforms"] == [settings["//command_line_option:host_platform"]]: - return {} - - return { - "//command_line_option:platforms": [settings["//command_line_option:host_platform"]], - "//command_line_option:cpu": settings["//command_line_option:host_cpu"], - "//command_line_option:compilation_mode": settings["//command_line_option:host_compilation_mode"], - "//command_line_option:copt": settings["//command_line_option:host_copt"], - "//command_line_option:cxxopt": settings["//command_line_option:host_cxxopt"], - "//command_line_option:linkopt": settings["//command_line_option:host_linkopt"], - "//command_line_option:action_env": settings["//command_line_option:host_action_env"], - "//command_line_option:features": settings["//command_line_option:host_features"], - _PLATFORM_LIBC_FLAG: CURRENT_PLATFORM_LIBC, - _PLATFORM_VERSION_FLAG: CURRENT_PLATFORM_VERSION, - } - -exec_transition = transition( - implementation = _exec_transition_impl, - inputs = _HOST_OPTION_INPUTS, - outputs = _HOST_OPTION_OUTPUTS + [ - _PLATFORM_LIBC_FLAG, - _PLATFORM_VERSION_FLAG, - ], -) diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index 94c578057..c363d02b8 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -11,7 +11,6 @@ load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//py/private/toolchain:types.bzl", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") -load(":exec_transition.bzl", "exec_transition") _CC_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/cpp:toolchain_type") _TARGET_EXEC_GROUP = "target" @@ -312,8 +311,6 @@ def _pep517_native_whl(ctx): cross_args = [] _tool = ctx.attr.tool - if type(_tool) == "list": - _tool = _tool[0] ctx.actions.run( mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", @@ -423,10 +420,7 @@ analysis fails with a diagnostic naming the required toolchain type. "the unpacked source tree. Omit CC/CXX/AR/LD/STRIP to use the " + "configured C++ action tools.", ), - "tool": attr.label(executable = True, cfg = exec_transition), - "_allowlist_function_transition": attr.label( - default = "@bazel_tools//tools/allowlists/function_transition_allowlist", - ), + "tool": attr.label(executable = True, cfg = config.exec(_TARGET_EXEC_GROUP)), } | CC_LAYER_ATTRS, fragments = ["cpp"], toolchains = [ From 88e08264e16d8ead6cd6d9a96b320ba37cb96955 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 11:20:13 -0600 Subject: [PATCH 12/56] exec transition --- .../pep517-frontend-exec-group/BUILD.bazel | 22 ++-- .../uv-deps-650/crossbuild/pyproject.toml | 1 + e2e/cases/uv-deps-650/crossbuild/uv.lock | 109 ++++++++++++++++++ e2e/cases/uv-deps-650/setup.MODULE.bazel | 1 + uv/private/pep517_whl/BUILD.bazel | 7 ++ uv/private/pep517_whl/exec_transition.bzl | 34 ++++++ uv/private/pep517_whl/rule.bzl | 34 ++++-- 7 files changed, 189 insertions(+), 19 deletions(-) create mode 100644 uv/private/pep517_whl/exec_transition.bzl diff --git a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel index 5ccb88e15..a5900813c 100644 --- a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel +++ b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel @@ -479,16 +479,15 @@ write_file( content = [ "#!/usr/bin/env bash", "set -euo pipefail", - ] + select({ - ":linux_aarch64_config": ["actual=aarch64"], - ":linux_x86_64_config": ["actual=x86_64"], - "//conditions:default": ["actual=default"], - }) + [ + # The build tool is configured for the HOST platform (see + # uv/private/pep517_whl/exec_transition.bzl) so that its Python build + # dependencies resolve against host-compatible wheels. Its own + # platform identity therefore varies with the host (on a darwin host + # the select above would take its default branch; on a linux x86_64 + # host it takes :linux_x86_64_config), so there is no stable value to + # assert here. What remains meaningful — and host-independent — is + # that the CC toolchain comes from the "target" exec group: "expected=\"$1\"", - "if [[ \"${actual}\" != \"${expected}\" ]]; then", - " echo \"frontend used ${actual}; expected ${expected}\" >&2", - " exit 1", - "fi", "compiler_actual=\"$(\"${CC}\")\"", "if [[ \"${compiler_actual}\" != \"${expected}\" ]]; then", " echo \"compiler ${CC} reported ${compiler_actual}; expected ${expected}\" >&2", @@ -735,6 +734,11 @@ build_test( ], ) +# NOTE: the frontend tool itself is configured for the host platform (see +# exec_transition.bzl); this test verifies the CC toolchain of the "target" +# exec group is exposed to the build, not that the tool runs in the exec +# group's platform configuration. + build_test( name = "configured_compiler_tools_test", targets = [":wheel_linux_configured"], diff --git a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml index f110fdf36..d6e6ed0c0 100644 --- a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml +++ b/e2e/cases/uv-deps-650/crossbuild/pyproject.toml @@ -4,6 +4,7 @@ version = "0.0.0" requires-python = ">=3.11" authors = [] dependencies = [ + "cffi", "psycopg2-binary", "python-geohash==0.8.5", "setuptools", diff --git a/e2e/cases/uv-deps-650/crossbuild/uv.lock b/e2e/cases/uv-deps-650/crossbuild/uv.lock index 4ac42a4fe..85263a4e5 100644 --- a/e2e/cases/uv-deps-650/crossbuild/uv.lock +++ b/e2e/cases/uv-deps-650/crossbuild/uv.lock @@ -16,6 +16,104 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl", hash = "sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596", size = 24141, upload-time = "2026-01-08T16:41:46.453Z" }, ] +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -31,6 +129,7 @@ version = "0.0.0" source = { virtual = "." } dependencies = [ { name = "build" }, + { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash" }, { name = "setuptools" }, @@ -39,6 +138,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "build" }, + { name = "cffi" }, { name = "psycopg2-binary" }, { name = "python-geohash", specifier = "==0.8.5" }, { name = "setuptools" }, @@ -105,6 +205,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, ] +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + [[package]] name = "pyproject-hooks" version = "1.2.0" diff --git a/e2e/cases/uv-deps-650/setup.MODULE.bazel b/e2e/cases/uv-deps-650/setup.MODULE.bazel index 1cab41c3c..6326b4590 100644 --- a/e2e/cases/uv-deps-650/setup.MODULE.bazel +++ b/e2e/cases/uv-deps-650/setup.MODULE.bazel @@ -19,6 +19,7 @@ uv.project( uv.project( default_build_dependencies = [ "build", + "cffi", "setuptools", ], hub_name = "pypi_uv_deps_650", diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index 0799ecf67..80f78ba82 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -15,6 +15,7 @@ bzl_library( srcs = ["rule.bzl"], deps = [ ":cc_layer", + ":exec_transition", "//py/private/toolchain:types", "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", @@ -38,3 +39,9 @@ py_library( srcs = ["memory_monitor.py"], visibility = ["//visibility:public"], ) + +bzl_library( + name = "exec_transition", + srcs = ["exec_transition.bzl"], + deps = ["@aspect_rules_py_uv_host//:defs"], +) diff --git a/uv/private/pep517_whl/exec_transition.bzl b/uv/private/pep517_whl/exec_transition.bzl new file mode 100644 index 000000000..610710c3f --- /dev/null +++ b/uv/private/pep517_whl/exec_transition.bzl @@ -0,0 +1,34 @@ +load("@aspect_rules_py_uv_host//:defs.bzl", "CURRENT_PLATFORM_LIBC", "CURRENT_PLATFORM_VERSION") + +_PLATFORM_LIBC_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_libc")) +_PLATFORM_VERSION_FLAG = str(Label("@aspect_rules_py//uv/private/constraints/platform:platform_version")) + +_INPUTS = [ + "//command_line_option:platforms", + "//command_line_option:host_platform", + _PLATFORM_LIBC_FLAG, + _PLATFORM_VERSION_FLAG, +] + +_OUTPUTS = [ + "//command_line_option:platforms", + _PLATFORM_LIBC_FLAG, + _PLATFORM_VERSION_FLAG, +] + +def _exec_transition_impl(settings, _attr): + if settings["//command_line_option:platforms"] == [settings["//command_line_option:host_platform"]] and \ + settings[_PLATFORM_LIBC_FLAG] == CURRENT_PLATFORM_LIBC and \ + settings[_PLATFORM_VERSION_FLAG] == CURRENT_PLATFORM_VERSION: + return {} + return { + "//command_line_option:platforms": [settings["//command_line_option:host_platform"]], + _PLATFORM_LIBC_FLAG: CURRENT_PLATFORM_LIBC, + _PLATFORM_VERSION_FLAG: CURRENT_PLATFORM_VERSION, + } + +exec_transition = transition( + implementation = _exec_transition_impl, + inputs = _INPUTS, + outputs = _OUTPUTS, +) diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index c363d02b8..92f134529 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -11,6 +11,7 @@ load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//py/private/toolchain:types.bzl", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") +load(":exec_transition.bzl", "exec_transition") _CC_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/cpp:toolchain_type") _TARGET_EXEC_GROUP = "target" @@ -29,6 +30,12 @@ def _wheel_providers(wheel_dir, console_scripts): SourceBuiltWheelInfo(console_scripts = tuple(console_scripts)), ] +def _tool_files_to_run(ctx): + tool = ctx.attr.tool + if type(tool) == "list": + tool = tool[0] + return tool[DefaultInfo].files_to_run + def _common_env(ctx): # pyproject_hooks copies the build process environment and launches its # Python executable without -I: @@ -198,17 +205,18 @@ def _pep517_whl(ctx): # the action sandbox, which means the venv shim can find the interpreter # via the standard runfiles mechanism regardless of whether the interpreter # comes from an external repo or the main workspace. + tool_files_to_run = _tool_files_to_run(ctx) ctx.actions.run( mnemonic = "PySdistBuild", progress_message = "Source compiling {} to a whl".format(archive.basename), - executable = ctx.executable.tool, + executable = tool_files_to_run, toolchain = None, arguments = ctx.attr.args + patch_args + _memory_args(ctx) + [ archive.path, wheel_dir.path, ], inputs = [archive] + patch_inputs, - tools = [ctx.attr.tool[DefaultInfo].files_to_run], + tools = [tool_files_to_run], outputs = [wheel_dir], env = _common_env(ctx), exec_group = _TARGET_EXEC_GROUP, @@ -310,7 +318,7 @@ def _pep517_native_whl(ctx): else: cross_args = [] - _tool = ctx.attr.tool + _tool = _tool_files_to_run(ctx) ctx.actions.run( mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", @@ -318,7 +326,7 @@ def _pep517_native_whl(ctx): "Cross" if cross else "Native", archive.basename, ), - executable = ctx.executable.tool, + executable = _tool, toolchain = None, arguments = ctx.attr.args + patch_args + _memory_args(ctx) + cross_args + [ "--execroot-marker", @@ -330,7 +338,7 @@ def _pep517_native_whl(ctx): [archive] + patch_inputs, transitive = extra_inputs, ), - tools = [_tool[DefaultInfo].files_to_run], + tools = [_tool], outputs = [wheel_dir], env = env, exec_group = _TARGET_EXEC_GROUP, @@ -353,10 +361,16 @@ _PATCH_ATTRS = { _pep517_whl_attrs = { "src": attr.label(allow_single_file = True), - # The wheel action uses the named group below, so its frontend must use the - # same execution platform: - # https://bazel.build/extending/exec-groups#defining-exec-groups - "tool": attr.label(executable = True, cfg = config.exec(_TARGET_EXEC_GROUP)), + # The wheel action runs in the "target" exec group; its frontend must run + # on the exec (host) platform but resolve its Python build dependencies + # for the *target* Python version. exec_transition pins --platforms to the + # host and resets the platform_libc/platform_version flags to host values + # (Starlark flags otherwise leak from the target configuration and break + # wheel selection for build deps). See exec_transition.bzl. + "tool": attr.label(executable = True, cfg = exec_transition), + "_allowlist_function_transition": attr.label( + default = "@bazel_tools//tools/allowlists/function_transition_allowlist", + ), "version": attr.string(), "console_scripts": attr.string_list( doc = "Console scripts discovered from the source distribution's entry-point metadata.", @@ -420,7 +434,7 @@ analysis fails with a diagnostic naming the required toolchain type. "the unpacked source tree. Omit CC/CXX/AR/LD/STRIP to use the " + "configured C++ action tools.", ), - "tool": attr.label(executable = True, cfg = config.exec(_TARGET_EXEC_GROUP)), + "tool": attr.label(executable = True, cfg = exec_transition), } | CC_LAYER_ATTRS, fragments = ["cpp"], toolchains = [ From 1571655ef3c01c1ad4ab3656347b0832c19cef75 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 12:15:26 -0600 Subject: [PATCH 13/56] documenting --- docs/uv.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/docs/uv.md b/docs/uv.md index ac8b14f27..70a8d47d4 100644 --- a/docs/uv.md +++ b/docs/uv.md @@ -271,6 +271,59 @@ platform_transition_filegroup( ) ``` +## Example: Cross-compiling sdists + +Wheels are selected for the target platform, but when a package only ships a +source distribution — or no published wheel matches the target — uv builds the +sdist as part of the build. Two modes exist: + +- **Pure-Python sdists** produce a `-none-any` wheel and build identically in + any configuration, cross or not. +- **Native sdists** (C/C++ extensions) build in *native mode* when the exec and + target platforms coincide. When they differ, the build enters *cross mode*. + +Cross mode requires a **cross-capable C++ toolchain** registered with +`register_toolchains` — one whose compiler can target the destination platform +from the exec platform (for example `toolchains_llvm`, whose clang is +multi-target). If none resolves, analysis fails with an explicit error naming +the missing toolchain type rather than an obscure toolchain-resolution +failure. No per-package opt-in is needed: cross mode activates automatically +from the platform configuration. + +Under cross mode the build action: + +1. Extracts the C++ toolchain selected for the target platform (compiler, + compile/link flags, sysroot) and re-materializes it as compiler wrapper + scripts, so flags such as `-target` / `--sysroot` survive the PEP 517 + backend's own command construction. +2. Overrides the target interpreter's sysconfig for the build + (`_PYTHON_SYSCONFIGDATA_NAME` pointing at the target runtime's + `_sysconfigdata_*.py`, `_PYTHON_HOST_PLATFORM`, and the target's + `EXT_SUFFIX`/`SOABI`), so the produced `.so` and wheel are tagged for the + destination platform. +3. Resolves the sdist's *build* dependencies (`uv.project`'s + `default_build_dependencies`, e.g. `build`, `setuptools`, `cffi`) for the + **exec platform** but the **target Python version** — the interpreter that + runs the build is the host one; the wheels it imports match the host. +4. Validates the produced wheel's platform tag against the target OS/CPU and + fails the action if the backend leaked the exec platform into the tag. + +A working end-to-end example (Darwin → Linux arm64/amd64, `python-geohash` +built from sdist, with architecture and `EXT_SUFFIX` assertions) lives in +`e2e/cases/uv-deps-650/crossbuild/`. + +Current limitations: + +- Only setuptools-style PEP 517 backends are exercised in cross mode. meson / + meson-python, cmake, and maturin/PyO3 packages may build but are not yet + covered; CPU-feature detection that runs compiled binaries cannot work in + cross mode and needs per-package baselines. +- No shared-library "repair" (auditwheel/delocate style bundling) is performed + yet; wheels linking against Bazel-provided native libraries need care. +- Windows targets and MSVC are not supported. +- Remote execution with an exec platform different from the host is untested; + the build-dependency resolution assumes exec == host. + ## Example: Constraining library compatibility By default uv hubs let you write `py_library` and other targets which are From 0b06775a0c05336394bf0f531aa1a9976e7b09cb Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Thu, 23 Jul 2026 12:44:43 -0600 Subject: [PATCH 14/56] deriving from the exec/target interpreter platform identities --- uv/private/pep517_whl/BUILD.bazel | 1 + uv/private/pep517_whl/rule.bzl | 56 +++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index 80f78ba82..46ca89705 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -16,6 +16,7 @@ bzl_library( deps = [ ":cc_layer", ":exec_transition", + "//py/private/interpreter:versions", "//py/private/toolchain:types", "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index 92f134529..d27c857fe 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -8,7 +8,8 @@ build backend the sdist declares in its `[build-system]` table. load("@bazel_lib//lib:resource_sets.bzl", "resource_set", "resource_set_attr") load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES") load("@rules_cc//cc/common:cc_common.bzl", "cc_common") -load("//py/private/toolchain:types.bzl", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") +load("//py/private/interpreter:versions.bzl", "PLATFORMS") +load("//py/private/toolchain:types.bzl", "EXEC_TOOLS_TOOLCHAIN", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") load(":exec_transition.bzl", "exec_transition") @@ -225,13 +226,51 @@ def _pep517_whl(ctx): return _wheel_providers(wheel_dir, ctx.attr.console_scripts) +def _interpreter_platform_triple(runtime): + """Best-effort platform triple of the repo a PyRuntimeInfo comes from. + + Interpreter repositories encode the PBS platform triple in their name + (`python_3_12_aarch64-apple-darwin`, sanitized variants with underscores, + and rules_python's hyphenated `python_3_11_aarch64-apple-darwin`). + Returns the matching PLATFORMS key, or None when the interpreter's origin + is not recognizable (custom or non-hermetic toolchains). + """ + if runtime == None or runtime.interpreter == None: + return None + short_path = runtime.interpreter.short_path + repo = short_path.split("/")[1] if short_path.startswith("../") else short_path.split("/")[0] + for triple in PLATFORMS: + if triple in repo or triple.replace("-", "_") in repo: + return triple + return None + +def _cross_compile(ctx, eg_toolchains): + """Decide cross mode from exec/target interpreter platform identities. + + The exec interpreter (EXEC_TOOLS_TOOLCHAIN, selected by exec platform) + and the target interpreter (PY_TOOLCHAIN, selected by target platform) + carry their origin repo's platform triple. Identical triples prove + exec == target, so a native build stays native even when the optional + NATIVE_BUILD_TOOLCHAIN sentinel is not registered for the platform. + + When either identity is unrecognizable (custom interpreters), fall back + to the sentinel's absence as the cross signal — the previous behavior. + """ + exec_tc = eg_toolchains[EXEC_TOOLS_TOOLCHAIN] + py_tc = ctx.toolchains[PY_TOOLCHAIN] + exec_triple = _interpreter_platform_triple(getattr(exec_tc, "exec_runtime", None) if exec_tc != None else None) + target_triple = _interpreter_platform_triple(getattr(py_tc, "py3_runtime", None) if py_tc != None else None) + if exec_triple and target_triple: + return exec_triple != target_triple + return eg_toolchains[NATIVE_BUILD_TOOLCHAIN] == None + def _pep517_native_whl(ctx): archive = ctx.file.src wheel_dir = ctx.actions.declare_directory("whl") patch_args, patch_inputs = _patch_args_and_inputs(ctx) eg_toolchains = ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains - cross = eg_toolchains[NATIVE_BUILD_TOOLCHAIN] == None + cross = _cross_compile(ctx, eg_toolchains) cc_toolchain_raw = eg_toolchains[_CC_TOOLCHAIN_TYPE] if cc_toolchain_raw == None: @@ -416,10 +455,14 @@ attribute maps environment variable names to strings that may reference pattern used by `rules_rust`'s `cargo_build_script`. In native mode (exec platform == target platform) the build uses the host -CC toolchain. When the target platform differs, the build enters cross mode: -the CC toolchain of the "target" exec group resolves against a user-registered -cross CC toolchain (e.g., toolchains_llvm). If no cross CC toolchain is found, -analysis fails with a diagnostic naming the required toolchain type. +CC toolchain. Cross mode is decided by comparing the platform triples of the +exec interpreter (exec-tools toolchain) and the target interpreter (Python +toolchain): differing triples enter cross mode, where the CC toolchain of +the "target" exec group resolves against a user-registered cross CC toolchain +(e.g., toolchains_llvm). If no cross CC toolchain is found, analysis fails +with a diagnostic naming the required toolchain type. When the interpreter +origins are unrecognizable, the optional NATIVE_BUILD_TOOLCHAIN sentinel's +absence is used as the cross signal. """, attrs = _pep517_whl_attrs | { @@ -444,6 +487,7 @@ analysis fails with a diagnostic naming the required toolchain type. _TARGET_EXEC_GROUP: exec_group( toolchains = [ PY_TOOLCHAIN, + config_common.toolchain_type(EXEC_TOOLS_TOOLCHAIN, mandatory = False), config_common.toolchain_type(NATIVE_BUILD_TOOLCHAIN, mandatory = False), config_common.toolchain_type(_CC_TOOLCHAIN_TYPE, mandatory = False), ], From bf1385f0079b7871d200b9445a40ca0c2f822e8f Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Sun, 26 Jul 2026 11:34:40 -0700 Subject: [PATCH 15/56] add pycross tests (cherry picked from commit 4869b33a259c864285491e116fd0938a9508462c) --- e2e/crossbuild/pycross-setuptools/BUILD.bazel | 74 ++++++++++++++- .../pycross-setuptools/setup.MODULE.bazel | 6 +- e2e/crossbuild/tools/BUILD.bazel | 1 + e2e/crossbuild/tools/check_wheel_native.py | 92 +++++++++++++++++++ 4 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 e2e/crossbuild/tools/check_wheel_native.py diff --git a/e2e/crossbuild/pycross-setuptools/BUILD.bazel b/e2e/crossbuild/pycross-setuptools/BUILD.bazel index e2c54e19c..db8890bb6 100644 --- a/e2e/crossbuild/pycross-setuptools/BUILD.bazel +++ b/e2e/crossbuild/pycross-setuptools/BUILD.bazel @@ -1,9 +1,11 @@ # Ported from rules_pycross tests/e2e/build_setuptools. # -# Three setuptools C-extension sdists built by `pep517_native_whl` and -# imported at runtime for the host. +# Three setuptools C-extension sdists built by `pep517_native_whl`, imported at +# runtime for the host, then rebuilt through rules_pycross's `collect_wheels` +# matrix for two non-host Linux platforms — the cross path this branch adds. load("@aspect_rules_py//py:defs.bzl", "py_test") +load("//tools:collect_wheels.bzl", "collect_wheels") exports_files(["require_extension.patch"]) @@ -11,6 +13,36 @@ _PY = "3.12" _DEP_GROUP = "pycross_setuptools" +# The libc/version flags are what the wheel resolver keys platform-specific +# wheel selection off; a bare constraint_values platform would leave build +# dependencies unresolvable. Same shape as the e2e/crossbuild workspace. The +# dep_group flag rides along because the wheel targets under `collect_wheels` +# are reached through a platform transition, not through a py_venv. +_PLATFORM_FLAGS = [ + "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", + "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", + "--@aspect_rules_py//uv/private/constraints/dep_group:dep_group=" + _DEP_GROUP, + "--@aspect_rules_py//py/private/interpreter:python_version=" + _PY, +] + +platform( + name = "amd64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:x86_64", + ], + flags = _PLATFORM_FLAGS, +) + +platform( + name = "arm64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:aarch64", + ], + flags = _PLATFORM_FLAGS, +) + py_test( name = "test_setproctitle", srcs = ["test_setproctitle.py"], @@ -37,3 +69,41 @@ py_test( python_version = _PY, deps = ["@pypi_pycross_setuptools//pyyaml"], ) + +# rules_pycross's cross matrix, restricted to zstandard. +# +# pyyaml is excluded because `PYYAML_FORCE_LIBYAML=0` makes it anyarch — there +# is nothing platform-specific left to assert. +# +# setproctitle is excluded because it cannot cross-build here at all: its +# setup.py picks sources and macros off `sys.platform`, which reports the +# *exec* interpreter's platform. Cross mode overrides `_PYTHON_HOST_PLATFORM` +# and `_PYTHON_SYSCONFIGDATA_NAME`, neither of which moves `sys.platform`, so a +# darwin exec host compiles `src/darwin_set_process_name.c` with +# `-D__darwin__=1` against a linux target and fails on +# `CoreFoundation/CoreFoundation.h`. rules_pycross handles this with a real +# crossenv (`pycross/private/build/tools/crossenv/`) that patches `sys.platform` +# in the build interpreter. `require_extension.patch` keeps that failure loud +# rather than letting setproctitle fall back to an anyarch wheel. +collect_wheels( + name = "native_wheels", + expected_tags = [ + "linux_x86_64", + "linux_aarch64", + ], + platforms = [ + ":amd64_linux", + ":arm64_linux", + ], + wheels = ["@sdist_build__pycross_setuptools__zstandard__0_22_0//:whl"], +) + +py_test( + name = "native_wheels_elf_test", + srcs = ["//tools:check_wheel_native.py"], + args = ["$(rootpath :native_wheels)"], + data = [":native_wheels"], + dep_group = _DEP_GROUP, + main = "//tools:check_wheel_native.py", + python_version = _PY, +) diff --git a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel index 6a4ba7ee6..2270925ae 100644 --- a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel @@ -67,4 +67,8 @@ uv.override_package( lock = "//pycross-setuptools:uv.lock", resource_set = "mem_4g", ) -use_repo(uv, "pypi_pycross_setuptools") +use_repo( + uv, + "pypi_pycross_setuptools", + "sdist_build__pycross_setuptools__zstandard__0_22_0", +) diff --git a/e2e/crossbuild/tools/BUILD.bazel b/e2e/crossbuild/tools/BUILD.bazel index 2fc7add18..987e249f0 100644 --- a/e2e/crossbuild/tools/BUILD.bazel +++ b/e2e/crossbuild/tools/BUILD.bazel @@ -5,6 +5,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_binary") # Consumed cross-package by the `collect_wheels` macro (//tools:collect_wheels.bzl), # which declares a py_test with this script as `main` in the caller's package. exports_files([ + "check_wheel_native.py", "check_wheel_tags.py", ]) diff --git a/e2e/crossbuild/tools/check_wheel_native.py b/e2e/crossbuild/tools/check_wheel_native.py new file mode 100644 index 000000000..0bc1211d5 --- /dev/null +++ b/e2e/crossbuild/tools/check_wheel_native.py @@ -0,0 +1,92 @@ +"""Assert cross-built wheels really contain extensions for the tagged platform. + +Usage: check_wheel_native.py + +For every Linux-tagged wheel in the directory, every extension module inside it +must be an ELF object whose `e_machine` matches the wheel's architecture tag, +and whose filename ABI tag names the same architecture. A cross build that +fell back to the exec platform's compiler or sysconfig produces a correctly +named wheel holding host-architecture objects — which the wheel-tag check +alone cannot see. + +rules_pycross's cross coverage stops at "the wheel builds for both platforms" +(tests/e2e/shared/collect_wheels.bzl feeding a build target); this is the +assertion that makes that matrix meaningful. +""" + +import os +import struct +import sys +import zipfile + +# ELF e_machine values, from elf.h. +_EM_X86_64 = 0x3E +_EM_AARCH64 = 0xB7 + +_ARCH_TAGS = { + "x86_64": _EM_X86_64, + "aarch64": _EM_AARCH64, +} + + +def _wheel_arch(name: str) -> str: + for arch in _ARCH_TAGS: + if arch in name: + return arch + raise AssertionError("cannot determine architecture from wheel name {}".format(name)) + + +def _elf_machine(data: bytes) -> int: + assert data[:4] == b"\x7fELF", "not an ELF object" + little_endian = data[5] == 1 + return struct.unpack_from("H", data, 18)[0] + + +def _check(wheel_path: str) -> int: + name = os.path.basename(wheel_path) + arch = _wheel_arch(name) + expected_machine = _ARCH_TAGS[arch] + checked = 0 + + with zipfile.ZipFile(wheel_path) as zf: + for entry in zf.namelist(): + if not entry.endswith(".so"): + continue + machine = _elf_machine(zf.read(entry)) + if machine != expected_machine: + raise AssertionError( + "{}: {} is ELF machine {:#x}, expected {:#x} for '{}'".format( + name, entry, machine, expected_machine, arch + ) + ) + base = os.path.basename(entry) + if "." in base[:-3] and arch not in base: + raise AssertionError( + "{}: extension filename '{}' does not name architecture '{}'".format( + name, base, arch + ) + ) + print(" {} -> {} (ELF {:#x})".format(name, base, machine)) + checked += 1 + + return checked + + +def main() -> None: + wheel_dir = sys.argv[1] + wheels = sorted( + f + for f in os.listdir(wheel_dir) + if f.endswith(".whl") and "linux" in f and not f.endswith("-none-any.whl") + ) + assert wheels, "no Linux-tagged native wheels collected under {}".format(wheel_dir) + + total = 0 + for wheel in wheels: + total += _check(os.path.join(wheel_dir, wheel)) + + assert total, "collected native wheels contain no extension modules: {}".format(wheels) + + +if __name__ == "__main__": + main() From a8ca49952d8536a87119e869861055370c1c5b5f Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 6 Aug 2026 11:57:46 -0600 Subject: [PATCH 16/56] crossbuild test cases --- .github/workflows/ci-workflows.yaml | 5 + .../pep517-frontend-exec-group/BUILD.bazel | 8 - .../uv-deps-650/crossbuild/geohash_main.py | 5 - e2e/crossbuild/.bazelrc | 16 +- e2e/crossbuild/.bazelversion | 2 +- e2e/crossbuild/BUILD.bazel | 58 ++ e2e/crossbuild/MODULE.bazel | 457 +++++++++++- e2e/crossbuild/MODULE.bazel.lock | 686 +++++++++++++----- e2e/crossbuild/awkward_cpp/BUILD.bazel | 15 + .../awkward_cpp_image_command_test.yaml | 9 + .../awkward_cpp/awkward_cpp_main.py | 24 + e2e/crossbuild/awkward_cpp/pyproject.toml | 15 + e2e/crossbuild/awkward_cpp/uv.lock | 349 +++++++++ e2e/crossbuild/bcrypt/BUILD.bazel | 16 + .../bcrypt/bcrypt_image_command_test.yaml | 9 + e2e/crossbuild/bcrypt/bcrypt_main.py | 17 + e2e/crossbuild/bcrypt/pyproject.toml | 14 + e2e/crossbuild/bcrypt/uv.lock | 178 +++++ e2e/crossbuild/contourpy/BUILD.bazel | 12 + .../contourpy_image_command_test.yaml | 9 + e2e/crossbuild/contourpy/contourpy_main.py | 30 + e2e/crossbuild/contourpy/pyproject.toml | 15 + e2e/crossbuild/contourpy/uv.lock | 364 ++++++++++ e2e/crossbuild/geohash/BUILD.bazel | 158 ++++ .../geohash/check_geohash_output.sh | 16 + .../geohash/geohash_image_command_test.yaml | 9 + e2e/crossbuild/geohash/geohash_main.py | 13 + .../geohash}/require_cxx_driver.patch | 0 e2e/crossbuild/jpype1/BUILD.bazel | 17 + .../jpype1/jpype1_image_command_test.yaml | 9 + e2e/crossbuild/jpype1/jpype1_main.py | 16 + e2e/crossbuild/jpype1/pyproject.toml | 14 + e2e/crossbuild/jpype1/uv.lock | 149 ++++ e2e/crossbuild/msgpack/BUILD.bazel | 16 + .../msgpack/msgpack_image_command_test.yaml | 9 + e2e/crossbuild/msgpack/msgpack_main.py | 16 + e2e/crossbuild/msgpack/pyproject.toml | 12 + e2e/crossbuild/msgpack/uv.lock | 133 ++++ e2e/crossbuild/numpy/BUILD.bazel | 16 + .../numpy/numpy_image_command_test.yaml | 9 + e2e/crossbuild/numpy/numpy_main.py | 28 + e2e/crossbuild/numpy/pyproject.toml | 14 + e2e/crossbuild/numpy/uv.lock | 211 ++++++ e2e/crossbuild/psutil/BUILD.bazel | 14 + .../psutil/psutil_image_command_test.yaml | 9 + e2e/crossbuild/psutil/psutil_main.py | 17 + e2e/crossbuild/psutil/pyproject.toml | 13 + e2e/crossbuild/psutil/uv.lock | 112 +++ e2e/crossbuild/pydantic_core/BUILD.bazel | 14 + .../pydantic_core_image_command_test.yaml | 9 + .../pydantic_core/pydantic_core_main.py | 14 + e2e/crossbuild/pydantic_core/pyproject.toml | 12 + e2e/crossbuild/pydantic_core/uv.lock | 194 +++++ .../crossbuild/pyproject.toml | 1 - e2e/crossbuild/rpds_py/BUILD.bazel | 16 + e2e/crossbuild/rpds_py/pyproject.toml | 12 + .../rpds_py/rpds_py_image_command_test.yaml | 9 + e2e/crossbuild/rpds_py/rpds_py_main.py | 13 + e2e/crossbuild/rpds_py/uv.lock | 205 ++++++ e2e/crossbuild/test.sh | 13 + e2e/crossbuild/tiktoken/BUILD.bazel | 16 + e2e/crossbuild/tiktoken/pyproject.toml | 14 + .../tiktoken/tiktoken_image_command_test.yaml | 10 + e2e/crossbuild/tiktoken/tiktoken_main.py | 27 + e2e/crossbuild/tiktoken/uv.lock | 382 ++++++++++ e2e/crossbuild/tools/BUILD.bazel | 65 +- e2e/crossbuild/tools/ant_layer.bzl | 33 + e2e/crossbuild/tools/assert_absent.py | 49 ++ e2e/crossbuild/tools/asserts.bzl | 107 +++ .../tools}/check_so_arch.sh | 17 +- e2e/crossbuild/tools/check_so_suffix.sh | 29 + e2e/crossbuild/tools/checks.bzl | 49 ++ e2e/crossbuild/tools/cross_case.bzl | 143 ++++ e2e/crossbuild/tools/rust_layer.bzl | 31 + e2e/crossbuild/tools/test_exec_toolchain.sh | 44 ++ .../tools}/toolchain_test.bzl | 0 .../uv-deps-650 => }/crossbuild/uv.lock | 54 -- e2e/crossbuild/zstandard/BUILD.bazel | 117 +++ e2e/crossbuild/zstandard/compare_backend.py | 52 ++ e2e/crossbuild/zstandard/pyproject.toml | 14 + e2e/crossbuild/zstandard/uv.lock | 222 ++++++ .../zstandard/zstandard_diff_test.yaml | 7 + 82 files changed, 5056 insertions(+), 281 deletions(-) delete mode 100644 e2e/cases/uv-deps-650/crossbuild/geohash_main.py create mode 100644 e2e/crossbuild/BUILD.bazel create mode 100644 e2e/crossbuild/awkward_cpp/BUILD.bazel create mode 100644 e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml create mode 100644 e2e/crossbuild/awkward_cpp/awkward_cpp_main.py create mode 100644 e2e/crossbuild/awkward_cpp/pyproject.toml create mode 100644 e2e/crossbuild/awkward_cpp/uv.lock create mode 100644 e2e/crossbuild/bcrypt/BUILD.bazel create mode 100644 e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml create mode 100644 e2e/crossbuild/bcrypt/bcrypt_main.py create mode 100644 e2e/crossbuild/bcrypt/pyproject.toml create mode 100644 e2e/crossbuild/bcrypt/uv.lock create mode 100644 e2e/crossbuild/contourpy/BUILD.bazel create mode 100644 e2e/crossbuild/contourpy/contourpy_image_command_test.yaml create mode 100644 e2e/crossbuild/contourpy/contourpy_main.py create mode 100644 e2e/crossbuild/contourpy/pyproject.toml create mode 100644 e2e/crossbuild/contourpy/uv.lock create mode 100644 e2e/crossbuild/geohash/BUILD.bazel create mode 100755 e2e/crossbuild/geohash/check_geohash_output.sh create mode 100644 e2e/crossbuild/geohash/geohash_image_command_test.yaml create mode 100644 e2e/crossbuild/geohash/geohash_main.py rename e2e/{cases/uv-deps-650/crossbuild => crossbuild/geohash}/require_cxx_driver.patch (100%) create mode 100644 e2e/crossbuild/jpype1/BUILD.bazel create mode 100644 e2e/crossbuild/jpype1/jpype1_image_command_test.yaml create mode 100644 e2e/crossbuild/jpype1/jpype1_main.py create mode 100644 e2e/crossbuild/jpype1/pyproject.toml create mode 100644 e2e/crossbuild/jpype1/uv.lock create mode 100644 e2e/crossbuild/msgpack/BUILD.bazel create mode 100644 e2e/crossbuild/msgpack/msgpack_image_command_test.yaml create mode 100644 e2e/crossbuild/msgpack/msgpack_main.py create mode 100644 e2e/crossbuild/msgpack/pyproject.toml create mode 100644 e2e/crossbuild/msgpack/uv.lock create mode 100644 e2e/crossbuild/numpy/BUILD.bazel create mode 100644 e2e/crossbuild/numpy/numpy_image_command_test.yaml create mode 100644 e2e/crossbuild/numpy/numpy_main.py create mode 100644 e2e/crossbuild/numpy/pyproject.toml create mode 100644 e2e/crossbuild/numpy/uv.lock create mode 100644 e2e/crossbuild/psutil/BUILD.bazel create mode 100644 e2e/crossbuild/psutil/psutil_image_command_test.yaml create mode 100644 e2e/crossbuild/psutil/psutil_main.py create mode 100644 e2e/crossbuild/psutil/pyproject.toml create mode 100644 e2e/crossbuild/psutil/uv.lock create mode 100644 e2e/crossbuild/pydantic_core/BUILD.bazel create mode 100644 e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml create mode 100644 e2e/crossbuild/pydantic_core/pydantic_core_main.py create mode 100644 e2e/crossbuild/pydantic_core/pyproject.toml create mode 100644 e2e/crossbuild/pydantic_core/uv.lock rename e2e/{cases/uv-deps-650 => }/crossbuild/pyproject.toml (88%) create mode 100644 e2e/crossbuild/rpds_py/BUILD.bazel create mode 100644 e2e/crossbuild/rpds_py/pyproject.toml create mode 100644 e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml create mode 100644 e2e/crossbuild/rpds_py/rpds_py_main.py create mode 100644 e2e/crossbuild/rpds_py/uv.lock create mode 100755 e2e/crossbuild/test.sh create mode 100644 e2e/crossbuild/tiktoken/BUILD.bazel create mode 100644 e2e/crossbuild/tiktoken/pyproject.toml create mode 100644 e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml create mode 100644 e2e/crossbuild/tiktoken/tiktoken_main.py create mode 100644 e2e/crossbuild/tiktoken/uv.lock create mode 100644 e2e/crossbuild/tools/ant_layer.bzl create mode 100644 e2e/crossbuild/tools/assert_absent.py create mode 100644 e2e/crossbuild/tools/asserts.bzl rename e2e/{cases/uv-deps-650/crossbuild => crossbuild/tools}/check_so_arch.sh (52%) create mode 100755 e2e/crossbuild/tools/check_so_suffix.sh create mode 100644 e2e/crossbuild/tools/checks.bzl create mode 100644 e2e/crossbuild/tools/cross_case.bzl create mode 100644 e2e/crossbuild/tools/rust_layer.bzl create mode 100755 e2e/crossbuild/tools/test_exec_toolchain.sh rename e2e/{cases/uv-deps-650/crossbuild => crossbuild/tools}/toolchain_test.bzl (100%) rename e2e/{cases/uv-deps-650 => }/crossbuild/uv.lock (68%) create mode 100644 e2e/crossbuild/zstandard/BUILD.bazel create mode 100644 e2e/crossbuild/zstandard/compare_backend.py create mode 100644 e2e/crossbuild/zstandard/pyproject.toml create mode 100644 e2e/crossbuild/zstandard/uv.lock create mode 100644 e2e/crossbuild/zstandard/zstandard_diff_test.yaml diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 65686c658..e6c7732d6 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -107,6 +107,11 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + # e2e/crossbuild runs an arm64 container from this amd64 runner + - if: matrix.workspace.slug == 'e2e-crossbuild' + uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: arm64 # Run `test //...`, then the workspace's test.sh if it has one - name: Test working-directory: ${{ matrix.workspace.path }} diff --git a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel index a5900813c..cf7fa314c 100644 --- a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel +++ b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel @@ -479,14 +479,6 @@ write_file( content = [ "#!/usr/bin/env bash", "set -euo pipefail", - # The build tool is configured for the HOST platform (see - # uv/private/pep517_whl/exec_transition.bzl) so that its Python build - # dependencies resolve against host-compatible wheels. Its own - # platform identity therefore varies with the host (on a darwin host - # the select above would take its default branch; on a linux x86_64 - # host it takes :linux_x86_64_config), so there is no stable value to - # assert here. What remains meaningful — and host-independent — is - # that the CC toolchain comes from the "target" exec group: "expected=\"$1\"", "compiler_actual=\"$(\"${CC}\")\"", "if [[ \"${compiler_actual}\" != \"${expected}\" ]]; then", diff --git a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py deleted file mode 100644 index 4e3f98f27..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 - -import geohash - -print(geohash.encode(37.7749, -122.4194)) diff --git a/e2e/crossbuild/.bazelrc b/e2e/crossbuild/.bazelrc index 6cb312c68..f8b70ea56 100644 --- a/e2e/crossbuild/.bazelrc +++ b/e2e/crossbuild/.bazelrc @@ -1,15 +1,3 @@ -# Match Bazel 9's default. Without this, PySdistNativeBuild actions on -# Bazel 8 run without a default PATH, and clang's compiled-in default -# linker (`ld`, not bundled with the hermetic LLVM toolchain) can't be -# located. With it on, Bazel injects a static PATH=/bin:/usr/bin:/usr/local/bin -# so clang's PATH search hits the runner's /usr/bin/ld. +# Without this, sdist build actions run with no PATH and clang can't find +# `ld` (not bundled with the hermetic LLVM toolchain). common --incompatible_strict_action_env - -# Enable path mapping so WhlInstall actions are exercised with -# supports-path-mapping. Actions that declare the execution requirement get -# configuration-stripped cache keys; those that don't still work normally. -build --experimental_output_paths=strip - -# Build without the bytes -common:ci --remote_download_outputs=minimal -common:ci --nobuild_runfile_links diff --git a/e2e/crossbuild/.bazelversion b/e2e/crossbuild/.bazelversion index 074c37b76..6adf95a25 100644 --- a/e2e/crossbuild/.bazelversion +++ b/e2e/crossbuild/.bazelversion @@ -1,4 +1,4 @@ -8.6.0 +8.5.1 # The first line of this file is used by Bazelisk and Bazel to be sure # the right version of Bazel is used to build and test this repo. # This also defines which version is used on CI. diff --git a/e2e/crossbuild/BUILD.bazel b/e2e/crossbuild/BUILD.bazel new file mode 100644 index 000000000..530464c4f --- /dev/null +++ b/e2e/crossbuild/BUILD.bazel @@ -0,0 +1,58 @@ +package(default_visibility = [ + "//awkward_cpp:__pkg__", + "//bcrypt:__pkg__", + "//contourpy:__pkg__", + "//geohash:__pkg__", + "//jpype1:__pkg__", + "//msgpack:__pkg__", + "//numpy:__pkg__", + "//psutil:__pkg__", + "//pydantic_core:__pkg__", + "//rpds_py:__pkg__", + "//tiktoken:__pkg__", + "//tools:__pkg__", + "//zstandard:__pkg__", +]) + +platform( + name = "arm64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:aarch64", + ], + flags = [ + "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", + "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", + "--stripopt=--strip-all", + ], +) + +platform( + name = "amd64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:x86_64", + ], + flags = [ + "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", + "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", + "--stripopt=--strip-all", + ], +) + +# Used only from a macOS host — see test.sh. +platform( + name = "arm64_macos", + constraint_values = [ + "@platforms//os:macos", + "@platforms//cpu:aarch64", + ], +) + +platform( + name = "amd64_macos", + constraint_values = [ + "@platforms//os:macos", + "@platforms//cpu:x86_64", + ], +) diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index 04afffa9d..bbac0109a 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -1,37 +1,139 @@ -"""Isolated workspace for cross-platform source-build (crossbuild) suites. - -Hosts the rules_pycross ports: every case here forces packages to build from -their sdists and asserts properties of the resulting wheels across target -platforms. They live apart from `e2e/cases` because this workspace is where -the cross-compilation test matrix grows; keeping the sdist-build hubs out of -the shared `cases/` module also keeps their package-specific overrides -(`default_build_dependencies`, patches, `resource_set`) from leaking onto -unrelated cases sharing that workspace. +"""Cross-compiled sdist e2e coverage — isolated from `e2e/cases`. + +`python-geohash` (a real C++ extension) is built for linux/amd64 and +linux/arm64 from the same amd64 exec host, exercising `pep517_native_whl`'s +cross path end to end. Isolated from `e2e/cases` because +`default_build_dependencies`, the pre-build patch, and +`resource_set = "mem_4g"` are specific to `python-geohash` and would +otherwise leak onto unrelated packages sharing the hub. + +The Linux cross toolchain is `gcc_toolchain` (real GCC, hermetic sysroots), +not LLVM: clang is a native cross-compiler and papers over missing +sysroot/flag propagation in ways a stricter GCC cross toolchain won't — for +instance gcc_toolchain does not auto-link libstdc++, so a C++ build here +only succeeds if `cc_layer.bzl` actually forwards the link flags it should. + +On a macOS host, BUILD.bazel's geohash_macos_* targets also build for +arm64/amd64 macOS via the Xcode SDK; see test.sh for why those are `manual` +rather than plain `platform_transition_filegroup` targets. gcc_toolchain is +Linux-only, so geohash_macos_amd64_cross_test has no registered toolchain +for its target/exec combination and will fail analysis with a clear +diagnostic if ever run — this path was already unverified (no CI runs it), +so failing loudly here is a wash, not a regression. + +`//zstandard` cross-compiles a package that also ships official prebuilt +wheels, and diffs our build's compressed output against theirs — a stronger +check than `//geohash`'s fixed expected value, since it validates against an +independent reference build rather than a hardcoded string. + +`//contourpy` (meson-python) and `//awkward_cpp` (scikit-build-core/CMake) +exercise cross support for those two backends, on top of `//geohash` and +`//zstandard`'s setuptools/distutils coverage — `build_helper.py` generates a +meson cross file / CMake toolchain file per build, since neither backend's +own cross auto-detection covers a plain Linux-arch cross build (both only +special-case macOS ARCHFLAGS, plus Android/iOS for meson-python). + +`//rpds_py` (maturin/PyO3, real Rust) needs its own Cargo toolchain: `rust` +registers x86_64 (exec) and arm64 (target) rust_toolchains, and +build_helper.py sets CARGO_BUILD_TARGET / CARGO_TARGET__LINKER since +Cargo has no cross auto-detection at all — every build needs an explicit +--target and a linker for it, or it silently falls back to $CC (the host +driver) and fails at the link step. The arm64-*targeting* rust_toolchain's +sysroot only bundles LLVM's own runtime libs for the exec platform, not its +rust-std (needed to compile build scripts/proc-macros, always host +artifacts) — `//tools:rust_host_sysroot` pins the plain x86_64 toolchain by +label (bypassing toolchain resolution, which under this cross transition +would otherwise hand back the arm64-targeting one again) so +build_helper.py can merge the two sysroots into one Cargo can actually use. + +`//pydantic_core` (maturin/PyO3, ~100 transitive crates vs. //rpds_py's ~20) +and `//bcrypt` (setuptools-rust — a build-backend of plain +"setuptools.build_meta" with "setuptools-rust" only visible in +build-system.requires, and no --target flag of its own either — it shells +out to a bare `cargo rustc` and relies on the same $CARGO_BUILD_TARGET) each +add a second, widely-used real-world package per Rust code path, so neither +is validated by one lucky package alone. setuptools-rust also needed +PYO3_CROSS_PYTHON_VERSION: maturin auto-generates a PYO3_CONFIG_FILE for +pyo3-ffi's build script, but setuptools-rust gives it no cross help at all. +`//psutil` is a second, far more widely-used plain setuptools/distutils +C-extension package alongside `//geohash` and `//zstandard`, for the same +"one lucky package" reason. + +`//jpype1` (scikit-build-core/CMake, same backend as `//awkward_cpp`) needs +a JDK and Apache Ant on top of that — but both are always exec-platform +tools regardless of what CPU `_jpype.so` targets: it only links against +libdl (see its CMakeLists.txt), never libjvm/libjawt, and the JAR Ant +produces is portable JVM bytecode, so unlike Rust's rust-std there's no +host/target split to solve here. `@bazel_tools//tools/jdk:current_java_runtime` +(used by e.g. `e2e/cases/uv-sdist-jdk-build`) resolves to rules_java's +default remotejdk, which is actually Azul Zulu, not genuine Eclipse +Temurin — `@temurin11_linux_x86_64` fetches a real Temurin 11 build instead +(see its `http_archive` for the exact Adoptium release metadata). Ant ships +no Bazel toolchain at all upstream, hermetic or otherwise, so +`@apache_ant` + `//tools:ant_home` vendor and expose it the same way. + +`//msgpack` is a third setuptools/distutils C-extension package, distinct +from `//geohash` (hand-written C++) and `//psutil`/`//zstandard` (hand-written +C/CFFI): its extension is Cython-generated, committed as pre-Cythonized .c +in the sdist, exercising that code-generation path's symbol/link pattern +rather than a fourth hand-written one. + +`//tiktoken` is a second setuptools-rust package alongside `//bcrypt` (same +build-backend shape, same $CARGO_BUILD_TARGET-driven cross path) — not a +maturin package despite superficially resembling `//rpds_py`/ +`//pydantic_core`; verified against its real sdist pyproject.toml before +wiring it in. Its own encodings download BPE vocab files over the network on +first use, which a sandboxed cross build/QEMU container can't do, so +tiktoken_main.py builds a minimal `tiktoken.Encoding` directly instead — +still a real round-trip through the compiled Rust core, just without the +network dependency. + +`//numpy` is the only other widely-used meson-python package besides +`//contourpy` — its build has no cross auto-detection for a missing system +BLAS/LAPACK either (meson-python only special-cases the macOS ARCHFLAGS/ +Android/iOS cases build_helper.py already works around), so it needs its +own `-Dblas=none -Dlapack=none` (numpy's own documented no-BLAS recipe, see +its emscripten cibuildwheel config) passed via a new, backend-generic +RULES_PY_MESON_SETUP_ARGS env var — needed for the *native* build here too, +since this sandbox has no system BLAS/LAPACK either, not just the cross one. """ bazel_dep(name = "aspect_rules_py") +bazel_dep(name = "bazel_features", version = "1.38.0") +bazel_dep(name = "bazel_skylib", version = "1.4.2") bazel_dep(name = "bazel_lib", version = "3.0.0") +bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "tar.bzl", version = "0.10.1") bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "llvm", version = "0.8.3") +bazel_dep(name = "gcc_toolchain", version = "0.11.0") +bazel_dep(name = "rules_oci", version = "2.2.7") +bazel_dep(name = "rules_shell", version = "0.4.1") +bazel_dep(name = "container_structure_test", version = "1.22.1") +bazel_dep(name = "rules_rust", version = "0.68.0") +bazel_dep(name = "rules_java", version = "8.14.0") local_path_override( module_name = "aspect_rules_py", path = "../..", ) +# Ensure any transitive "aspect_bazel_lib" is latest to be forward compatible with bazel_lib 3+ +single_version_override( + module_name = "aspect_bazel_lib", + version = "2.22.5", +) + interpreters = use_extension("@aspect_rules_py//py:extensions.bzl", "python_interpreters") interpreters.configure( releases = [ "20260303", "20251031", + "20241002", ], ) interpreters.toolchain( python_version = "3.12", ) -interpreters.toolchain( - python_version = "3.13", -) use_repo(interpreters, "python_interpreters") register_toolchains("@python_interpreters//:all") @@ -42,13 +144,330 @@ use_repo(tools, "rules_py_tools") register_toolchains("@rules_py_tools//:all") -register_toolchains("@llvm//toolchain:all") +gcc_toolchains = use_extension("@gcc_toolchain//toolchain:module_extensions.bzl", "gcc_toolchains") +gcc_toolchains.toolchain( + name = "gcc_toolchain_x86_64", + target_arch = "x86_64", +) +gcc_toolchains.toolchain( + name = "gcc_toolchain_aarch64", + target_arch = "aarch64", +) +use_repo(gcc_toolchains, "gcc_toolchain_aarch64", "gcc_toolchain_x86_64") + +register_toolchains( + "@gcc_toolchain_x86_64//:cc_toolchain", + "@gcc_toolchain_aarch64//:cc_toolchain", +) + +rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") +rust.toolchain( + edition = "2021", + extra_target_triples = ["aarch64-unknown-linux-gnu"], + versions = ["1.90.0"], +) +use_repo(rust, "rust_toolchains") + +register_toolchains("@rust_toolchains//:all") + +oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") +oci.pull( + name = "ubuntu", + digest = "sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54", + image = "public.ecr.aws/docker/library/ubuntu", + platforms = [ + "linux/arm64/v8", + "linux/amd64", + ], + tag = "latest", +) +use_repo(oci, "ubuntu", "ubuntu_linux_amd64", "ubuntu_linux_arm64_v8") + +# Used by assert_tar_listing (tools/asserts.bzl). +bazel_lib_toolchains = use_extension("@tar.bzl//tar:extensions.bzl", "toolchains", dev_dependency = True) +use_repo(bazel_lib_toolchains, "bsd_tar_toolchains") uv_bin = use_extension("@aspect_rules_py//uv:extensions.bzl", "uv_bin") -uv_bin.toolchain(version = "0.11.21") +uv_bin.toolchain(version = "0.11.6") use_repo(uv_bin, "uv") -include("//pycross-distutils-probe:setup.MODULE.bazel") -include("//pycross-patches:setup.MODULE.bazel") -include("//pycross-pure-python:setup.MODULE.bazel") -include("//pycross-setuptools:setup.MODULE.bazel") +uv = use_extension("@aspect_rules_py//uv:extensions.bzl", "uv") +uv.declare_hub(hub_name = "pypi_crossbuild") +uv.project( + default_build_dependencies = [ + "build", + "cffi", + "setuptools", + ], + hub_name = "pypi_crossbuild", + lock = "//:uv.lock", + pyproject = "//:pyproject.toml", +) +uv.override_package( + name = "python-geohash", + lock = "//:uv.lock", + pre_build_patch_strip = 1, + pre_build_patches = ["//geohash:require_cxx_driver.patch"], + resource_set = "mem_4g", +) +use_repo(uv, "pypi_crossbuild") + +# Plain setuptools/meson-python/scikit-build-core hubs: no rust/jdk toolchain +# wiring, so each is fully described by (hub dir, its build deps). +_SIMPLE_CROSSBUILD_PACKAGES = [ + { + "deps": [ + "build", + "cffi", + "setuptools", + "wheel", + ], + "hub": "zstandard", + }, + { + "deps": [ + "build", + "meson", + "meson-python", + "ninja", + "pybind11", + ], + "hub": "contourpy", + }, + { + "deps": [ + "build", + "cmake", + "ninja", + "pybind11", + "scikit-build-core", + ], + "hub": "awkward_cpp", + }, + { + "deps": [ + "build", + "setuptools", + "wheel", + ], + "hub": "psutil", + }, + { + "deps": [ + "build", + "setuptools", + ], + "hub": "msgpack", + }, +] + +[uv.declare_hub(hub_name = "pypi_crossbuild_" + pkg["hub"]) for pkg in _SIMPLE_CROSSBUILD_PACKAGES] + +[ + uv.project( + default_build_dependencies = pkg["deps"], + hub_name = "pypi_crossbuild_" + pkg["hub"], + lock = "//{}:uv.lock".format(pkg["hub"]), + pyproject = "//{}:pyproject.toml".format(pkg["hub"]), + ) + for pkg in _SIMPLE_CROSSBUILD_PACKAGES +] + +[use_repo(uv, "pypi_crossbuild_" + pkg["hub"]) for pkg in _SIMPLE_CROSSBUILD_PACKAGES] + +# maturin/PyO3 + setuptools-rust hubs: all three need the identical Cargo +# cross env/toolchains wiring (see //tools:rust_host_sysroot); a shared block +# also makes that identical-ness visually obvious instead of relying on the +# reader to diff three near-copies. "pypi_name" differs from "hub" for +# rpds_py/pydantic_core since PyPI hyphenates what the hub dir underscores. +_RUST_CROSSBUILD_PACKAGES = [ + { + "deps": [ + "build", + "maturin", + ], + "hub": "rpds_py", + "pypi_name": "rpds-py", + }, + { + "deps": [ + "build", + "setuptools", + "setuptools-rust", + "wheel", + ], + "hub": "bcrypt", + "pypi_name": "bcrypt", + }, + { + "deps": [ + "build", + "maturin", + ], + "hub": "pydantic_core", + "pypi_name": "pydantic-core", + }, + { + "deps": [ + "build", + "setuptools", + "setuptools-rust", + "wheel", + ], + "hub": "tiktoken", + "pypi_name": "tiktoken", + }, +] + +[uv.declare_hub(hub_name = "pypi_crossbuild_" + pkg["hub"]) for pkg in _RUST_CROSSBUILD_PACKAGES] + +[ + uv.project( + default_build_dependencies = pkg["deps"], + hub_name = "pypi_crossbuild_" + pkg["hub"], + lock = "//{}:uv.lock".format(pkg["hub"]), + pyproject = "//{}:pyproject.toml".format(pkg["hub"]), + ) + for pkg in _RUST_CROSSBUILD_PACKAGES +] + +[ + uv.override_package( + name = pkg["pypi_name"], + env = { + "CARGO": "$(CARGO)", + "RUSTC": "$(RUSTC)", + "RULES_PY_RUST_HOST_SYSROOT": "$(RUST_HOST_SYSROOT)", + }, + lock = "//{}:uv.lock".format(pkg["hub"]), + toolchains = [ + "@rules_rust//rust/toolchain:current_rust_toolchain", + "//tools:rust_host_sysroot", + ], + ) + for pkg in _RUST_CROSSBUILD_PACKAGES +] + +[use_repo(uv, "pypi_crossbuild_" + pkg["hub"]) for pkg in _RUST_CROSSBUILD_PACKAGES] + +uv.declare_hub(hub_name = "pypi_crossbuild_numpy") +uv.project( + default_build_dependencies = [ + "build", + "cython", + "meson-python", + "ninja", + ], + hub_name = "pypi_crossbuild_numpy", + lock = "//numpy:uv.lock", + pyproject = "//numpy:pyproject.toml", +) +uv.override_package( + # numpy has no system BLAS/LAPACK in this sandbox (native build) or in + # the cross toolchain (cross build) — no toolchain needed, just a + # literal extra meson setup-args value, same as numpy's own documented + # no-BLAS cross recipe (see its emscripten cibuildwheel config). + name = "numpy", + env = { + "RULES_PY_MESON_SETUP_ARGS": "-Dblas=none -Dlapack=none", + }, + lock = "//numpy:uv.lock", +) +use_repo(uv, "pypi_crossbuild_numpy") + +uv.declare_hub(hub_name = "pypi_crossbuild_jpype1") +uv.project( + default_build_dependencies = [ + "build", + "scikit-build-core", + "setuptools", + "wheel", + ], + hub_name = "pypi_crossbuild_jpype1", + lock = "//jpype1:uv.lock", + pyproject = "//jpype1:pyproject.toml", +) +uv.override_package( + name = "jpype1", + env = { + "JAVA": "$(JAVA)", + "JAVA_HOME": "$(JAVABASE)", + "RULES_PY_ANT_BIN_DIR": "$(ANT_BIN_DIR)", + }, + lock = "//jpype1:uv.lock", + toolchains = [ + "@temurin11_linux_x86_64//:jdk", + "//tools:ant_home", + ], +) +use_repo(uv, "pypi_crossbuild_jpype1") + +# Official prebuilt wheels to diff our cross-compiled build against. +http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "official_zstandard_amd64_linux", + build_file_content = """filegroup(name = "backend_c", srcs = ["zstandard/backend_c.cpython-312-x86_64-linux-gnu.so"], visibility = ["//visibility:public"])""", + sha256 = "466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c", + type = "zip", + url = "https://files.pythonhosted.org/packages/e5/01/080939755ca12ebbb7fc38b6f4ddecd5e8c416d571d4927ece1360baba2c/zstandard-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", +) + +http_archive( + name = "official_zstandard_arm64_linux", + build_file_content = """filegroup(name = "backend_c", srcs = ["zstandard/backend_c.cpython-312-aarch64-linux-gnu.so"], visibility = ["//visibility:public"])""", + sha256 = "a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f", + type = "zip", + url = "https://files.pythonhosted.org/packages/47/44/be2d67304ba9bf4694ffcaa99d146814d70c4cb0bfc00e0e86fdfae66a31/zstandard-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", +) + +# jpype1 only ever runs Ant/javac at build time to produce a JAR (portable +# Java bytecode) — always a host-executed step regardless of what CPU the +# compiled _jpype.so targets, so a single exec-platform (x86_64) JDK and a +# single (architecture-independent) Ant install cover both the native and +# cross builds. Genuine Eclipse Temurin, not rules_java's default remotejdk +# (which resolves to Azul Zulu builds) — see fetched release metadata at +# https://api.adoptium.net/v3/assets/latest/11/hotspot?image_type=jdk&os=linux&architecture=x64. +http_archive( + name = "temurin11_linux_x86_64", + build_file_content = """load("@rules_java//java/toolchains:java_runtime.bzl", "java_runtime") + +package(default_visibility = ["//visibility:public"]) + +filegroup(name = "jdk-bin", srcs = glob(["bin/**"])) + +filegroup(name = "jdk-conf", srcs = glob(["conf/**"], allow_empty = True)) + +filegroup(name = "jdk-include", srcs = glob(["include/**"], allow_empty = True)) + +filegroup(name = "jdk-lib", srcs = glob(["lib/**", "release"], allow_empty = True)) + +java_runtime( + name = "jdk", + srcs = [":jdk-bin", ":jdk-conf", ":jdk-include", ":jdk-lib"], + java = "bin/java", + version = 11, +) +""", + sha256 = "5906e0339e9322a688b2375eaf40666e00a16e008b0067b0a9f9e4b6c5033720", + strip_prefix = "jdk-11.0.32+9", + url = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.32%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.32_9.tar.gz", +) + +# Apache Ant: plain Java bytecode plus shell/bat launchers — no architecture +# variants needed. +http_archive( + name = "apache_ant", + build_file_content = """package(default_visibility = ["//visibility:public"]) + +exports_files(["bin/ant"]) + +filegroup( + name = "all_files", + srcs = glob(["**"], allow_empty = True), +) +""", + sha256 = "71334d7e5d98cfe53d6c429a648a5021137a967378667306c5f613dff5180506", + strip_prefix = "apache-ant-1.10.15", + url = "https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.15-bin.tar.gz", +) diff --git a/e2e/crossbuild/MODULE.bazel.lock b/e2e/crossbuild/MODULE.bazel.lock index 60f5caa49..e93959739 100644 --- a/e2e/crossbuild/MODULE.bazel.lock +++ b/e2e/crossbuild/MODULE.bazel.lock @@ -10,9 +10,15 @@ "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", + "https://bcr.bazel.build/modules/apple_support/1.23.1/MODULE.bazel": "53763fed456a968cf919b3240427cf3a9d5481ec5466abc9d5dc51bc70087442", + "https://bcr.bazel.build/modules/apple_support/1.24.1/MODULE.bazel": "f46e8ddad60aef170ee92b2f3d00ef66c147ceafea68b6877cb45bd91737f5f8", + "https://bcr.bazel.build/modules/apple_support/1.24.1/source.json": "cf725267cbacc5f028ef13bb77e7f2c2e0066923a4dab1025e4a0511b1ed258a", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/MODULE.bazel": "004ba890363d05372a97248c37205ae64b6fa31047629cd2c0895a9d0c7779e8", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/source.json": "ac2c3213df8f985785f1d0aeb7f0f73d5324e6e67d593d9b9470fb74a25d4a9b", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/source.json": "605086bbc197743a0d360f7ddc550a1d4dfa0441bc807236e17170f636153348", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", @@ -20,18 +26,20 @@ "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", "https://bcr.bazel.build/modules/bazel_features/1.24.0/MODULE.bazel": "4796b4c25b47053e9bbffa792b3792d07e228ff66cd0405faef56a978708acd4", + "https://bcr.bazel.build/modules/bazel_features/1.27.0/MODULE.bazel": "621eeee06c4458a9121d1f104efb80f39d34deff4984e778359c60eaf1a8cb65", "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", + "https://bcr.bazel.build/modules/bazel_features/1.32.0/MODULE.bazel": "095d67022a58cb20f7e20e1aefecfa65257a222c18a938e2914fd257b5f1ccdc", "https://bcr.bazel.build/modules/bazel_features/1.34.0/MODULE.bazel": "e8475ad7c8965542e0c7aac8af68eb48c4af904be3d614b6aa6274c092c2ea1e", + "https://bcr.bazel.build/modules/bazel_features/1.38.0/MODULE.bazel": "f9b8a9c890ebd216b4049fd12a31d3c2602e3403c7af636b04fbbd7453edc9c9", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", - "https://bcr.bazel.build/modules/bazel_features/1.42.0/MODULE.bazel": "e8ca15cb2639c5f12183db6dcb678735555d0cdd739b32a0418b6532b5e565f8", "https://bcr.bazel.build/modules/bazel_features/1.43.0/MODULE.bazel": "defa2226f06ba20550d6548c3a2ea2a7929634437a52973869c20c225450eb91", "https://bcr.bazel.build/modules/bazel_features/1.43.0/source.json": "1c4207dc858d6de0eecef30026793616bbf420c74aac27b6bad212534a730437", "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d", - "https://bcr.bazel.build/modules/bazel_lib/3.2.2/MODULE.bazel": "e2c890c8a515d6bca9c66d47718aa9e44b458fde64ec7204b8030bf2d349058c", - "https://bcr.bazel.build/modules/bazel_lib/3.2.2/source.json": "9e84e115c20e14652c5c21401ae85ff4daa8702e265b5c0b3bf89353f17aa212", + "https://bcr.bazel.build/modules/bazel_lib/3.3.1/MODULE.bazel": "732a0d516cf6400d9b3136e4356258aef1bf91de8d5240f87f0112f098920c1d", + "https://bcr.bazel.build/modules/bazel_lib/3.3.1/source.json": "8e5175d7b4125a39b8941d01e38039934d058e03804f46a2b8fd7ae6316b1ce2", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", @@ -50,9 +58,14 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/source.json": "7ad77c1e8c1b84222d9b3f3cae016a76639435744c19330b0b37c0a3c9da7dc0", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/container_structure_test/1.22.1/MODULE.bazel": "da58a98f9f6d47e702532fdfec0431bd60e417d3f004471f409a4543cae0e61e", + "https://bcr.bazel.build/modules/container_structure_test/1.22.1/source.json": "75873f230014ff7a6f30e9f81b9e31ee4593c71353ffa8d5f8fe4ad4aba21160", + "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.1/MODULE.bazel": "cdf8cbe5ee750db04b78878c9633cc76e80dcf4416cbe982ac3a9222f80713c8", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.3/MODULE.bazel": "f1b7bb2dd53e8f2ef984b39485ec8a44e9076dda5c4b8efd2fb4c6a6e856a31d", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.7/MODULE.bazel": "1e5e03c383fa64ebbe0942a225c32168fd6ef6b270351bbec481d47d19d1b96d", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.7/source.json": "34a83d58ae2f1ef6731d1fc8a1b6f07825741aff3f5993b67b67ec21d2c2946e", + "https://bcr.bazel.build/modules/gcc_toolchain/0.11.0/MODULE.bazel": "aaa5a4209a1a7cd1284413c10c81d980d3d51805d86e0e1e5691d044bcd5d917", + "https://bcr.bazel.build/modules/gcc_toolchain/0.11.0/source.json": "66a3cbd9b068123fae2c3b63bb35f180f218ce09987e9a7a5e5c2d2393dcc761", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", @@ -60,11 +73,12 @@ "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", "https://bcr.bazel.build/modules/hermetic_launcher/0.0.14/MODULE.bazel": "67ff71bbfb482e58510451c4c8b8cd303c757f7ff79a2aff7cf381277be96f9f", "https://bcr.bazel.build/modules/hermetic_launcher/0.0.14/source.json": "475aa00426677e643e327b4b031d8816a3bc0a134c94d0d0d510cfd67b2cfd2c", + "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f", + "https://bcr.bazel.build/modules/jq.bzl/0.1.0/source.json": "746bf13cac0860f091df5e4911d0c593971cd8796b5ad4e809b2f8e133eee3d5", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", - "https://bcr.bazel.build/modules/llvm/0.8.3/MODULE.bazel": "dbc1bc13171f8f9980a75524883abef1c491613e8d8d805cd4ffa3767ba9708e", - "https://bcr.bazel.build/modules/llvm/0.8.3/source.json": "4b11874c26a9de53c03a25a517ebc36dee6b458c920fe9ed65e3ca279ff19775", + "https://bcr.bazel.build/modules/package_metadata/0.0.2/MODULE.bazel": "fb8d25550742674d63d7b250063d4580ca530499f045d70748b1b142081ebb92", "https://bcr.bazel.build/modules/package_metadata/0.0.3/MODULE.bazel": "77890552ecea9e284b5424c9de827a58099348763a4359e975c359a83d4faa83", "https://bcr.bazel.build/modules/package_metadata/0.0.3/source.json": "742075a428ad12a3fa18a69014c2f57f01af910c6d9d18646c990200853e641a", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", @@ -74,6 +88,7 @@ "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", + "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580", "https://bcr.bazel.build/modules/platforms/1.1.0/MODULE.bazel": "1c0c09f5bdcf4b3f924720d2478a3711cb39f4977019ca5988685e5b7e18b3d2", "https://bcr.bazel.build/modules/platforms/1.1.0/source.json": "fcf351c47596c939140ab0d333dfdd08ed1ea6ce33c2fe70c12493a301cf1344", @@ -105,9 +120,11 @@ "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8", "https://bcr.bazel.build/modules/rules_cc/0.2.16/MODULE.bazel": "9242fa89f950c6ef7702801ab53922e99c69b02310c39fb6e62b2bd30df2a1d4", + "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84", "https://bcr.bazel.build/modules/rules_cc/0.2.18/MODULE.bazel": "4460ec36adc8f722a6a2a4ac9374cb91f2acebadaa93fc37966129afb3dece87", "https://bcr.bazel.build/modules/rules_cc/0.2.18/source.json": "abad668ff2fd63ada1ac49bf386d37e27048b89a3465a6fd968bb832b00a09d3", "https://bcr.bazel.build/modules/rules_cc/0.2.4/MODULE.bazel": "1ff1223dfd24f3ecf8f028446d4a27608aa43c3f41e346d22838a4223980b8cc", + "https://bcr.bazel.build/modules/rules_cc/0.2.8/MODULE.bazel": "f1df20f0bf22c28192a794f29b501ee2018fa37a3862a1a2132ae2940a23a642", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", @@ -140,9 +157,12 @@ "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", + "https://bcr.bazel.build/modules/rules_oci/2.2.7/MODULE.bazel": "f6150e4b224d459f7f6523ef65967464ca4efdd266c7fbf2f5a2a51011957e0c", + "https://bcr.bazel.build/modules/rules_oci/2.2.7/source.json": "b099f02af330f47f19dc67fc9300ef6e1937a8c86882690db0e7a2fcea8c7f6b", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", + "https://bcr.bazel.build/modules/rules_pkg/1.1.0/MODULE.bazel": "9db8031e71b6ef32d1846106e10dd0ee2deac042bd9a2de22b4761b0c3036453", + "https://bcr.bazel.build/modules/rules_pkg/1.1.0/source.json": "fef768df13a92ce6067e1cd0cdc47560dace01354f1d921cfb1d632511f7d608", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", @@ -155,9 +175,11 @@ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", - "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", "https://bcr.bazel.build/modules/rules_python/1.9.0/MODULE.bazel": "afc3a05f29f09f2d3ee95ad99a145250dab41a2b2d8d6f82cc91936b3213282c", "https://bcr.bazel.build/modules/rules_python/1.9.0/source.json": "3921ea0b65298d51aead5b9e4a82203d7be9b5918619b58b53f1c259f4e63169", + "https://bcr.bazel.build/modules/rules_rust/0.68.0/MODULE.bazel": "dcb4fe4396b49d3b2d72bccf634d27499dd2a58dcdfccfe8e17ba15c4bd150ae", + "https://bcr.bazel.build/modules/rules_rust/0.68.0/source.json": "e5d5f37874c4af13dbdfbf1220889607d9b3cc51f2831e10c2035b6638442f07", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b", @@ -170,11 +192,13 @@ "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", "https://bcr.bazel.build/modules/tar.bzl/0.10.1/MODULE.bazel": "bf5fda5b5ccef8c3c4a5f4886144377386e0baa382972f257acb42dcf40ea908", - "https://bcr.bazel.build/modules/tar.bzl/0.10.4/MODULE.bazel": "e8f9ff79199e8d9eaad7f1b0a77ad74b30bb82d794b87d8ca942bead5de83ae9", - "https://bcr.bazel.build/modules/tar.bzl/0.10.4/source.json": "20143442376c03426f6135292ba02d825cb75308aa47e6bf42dd4cc5a435c2ff", + "https://bcr.bazel.build/modules/tar.bzl/0.10.1/source.json": "3f1beb35acf53c270a9de493cdc775a985551d7069cfcf24e136b42f683bbb10", + "https://bcr.bazel.build/modules/tar.bzl/0.5.1/MODULE.bazel": "7c2eb3dcfc53b0f3d6f9acdfd911ca803eaf92aadf54f8ca6e4c1f3aee288351", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", - "https://bcr.bazel.build/modules/with_cfg.bzl/0.12.0/MODULE.bazel": "b573395fe63aef4299ba095173e2f62ccfee5ad9bbf7acaa95dba73af9fc2b38", - "https://bcr.bazel.build/modules/with_cfg.bzl/0.12.0/source.json": "3f3fbaeafecaf629877ad152a2c9def21f8d330d91aa94c5dc75bbb98c10b8b8", + "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/MODULE.bazel": "6b6c543e415d2a502954766e50c6a6144a131687f2751b62157a9250e2b04982", + "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/source.json": "12363ac76d821f6c7dabfebbd673615391da06e2e33f576402d31a96a7b56532", + "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", + "https://bcr.bazel.build/modules/yq.bzl/0.1.1/source.json": "2d2bad780a9f2b9195a4a370314d2c17ae95eaa745cefc2e12fbc49759b15aa3", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", @@ -214,200 +238,120 @@ ] } }, - "@@llvm+//3rd_party/gcc/extension:gcc.bzl%gcc": { + "@@container_structure_test+//:repositories.bzl%extension": { "general": { - "bzlTransitiveDigest": "XUWTels9SzO7xhmQBqYtaFYFMTjrFMSDFi/Q7hv4f34=", - "usagesDigest": "9IP/e++b81Ga1zICxzXu+yqfe5i4DX5F/SsrgV5a568=", + "bzlTransitiveDigest": "jyF1qaqe3SV7GOwa1PtIiJk04CPKLgKbWZoD1aX28NU=", + "usagesDigest": "uXk1ym4ketE3OMAHoR5fUuuv8pOmi0aSyCe28koTwfA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "gcc": { - "repoRuleId": "@@llvm+//:http_bsdtar_archive.bzl%http_bsdtar_archive", + "jq_darwin_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", "attributes": { - "build_file": "@@llvm+//3rd_party/gcc:gcc.BUILD.bazel", - "includes": [ - "gcc/BASE-VER", - "gcc/DATESTAMP", - "gcc/ginclude/unwind-arm-common.h", - "config/acx.m4", - "config/cet.m4", - "config/futex.m4", - "config/gc++filt.m4", - "config/gthr.m4", - "config/hwcaps.m4", - "config/iconv.m4", - "config/lthostflags.m4", - "config/multi.m4", - "config/no-executables.m4", - "config/tls.m4", - "config/toolexeclibdir.m4", - "config/unwind_ipinfo.m4", - "include/ansidecl.h", - "include/demangle.h", - "include/dyn-string.h", - "include/getopt.h", - "include/libiberty.h", - "libgcc/gthr-posix.h", - "libgcc/gthr-single.h", - "libgcc/gthr.h", - "libgcc/config/arm/unwind-arm.h", - "libgcc/unwind-generic.h", - "libgcc/unwind-pe.h", - "libiberty/cp-demangle.c", - "libiberty/cp-demangle.h", - "libstdc++-v3/acinclude.m4", - "libstdc++-v3/config/**", - "libstdc++-v3/configure.ac", - "libstdc++-v3/configure.host", - "libstdc++-v3/crossconfig.m4", - "libstdc++-v3/linkage.m4", - "libstdc++-v3/include/**", - "libstdc++-v3/libsupc++/**", - "libstdc++-v3/src/**" - ], - "sha256": "dc033fdfd79caf199113446af6d082004534437b6ebd276f9732815d86cbe723", - "strip_prefix": "gcc-2bfd402f8569511901ec8fe7628f57471e6d240a", - "urls": [ - "https://github.com/gcc-mirror/gcc/archive/2bfd402f8569511901ec8fe7628f57471e6d240a.tar.gz" - ] + "platform": "darwin_amd64", + "version": "1.7" } - } - }, - "recordedRepoMappingEntries": [ - [ - "llvm+", - "bazel_lib", - "bazel_lib+" - ], - [ - "llvm+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@pybind11_bazel+//:python_configure.bzl%extension": { - "general": { - "bzlTransitiveDigest": "D2/qWHU6yQFwRG7Bb+caqrYMha5avsASao2vERrxK24=", - "usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=", - "recordedFileInputs": { - "@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" - }, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "local_config_python": { - "repoRuleId": "@@pybind11_bazel+//:python_configure.bzl%python_configure", - "attributes": {} }, - "pybind11": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "jq_darwin_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", "attributes": { - "build_file": "@@pybind11_bazel+//:pybind11.BUILD", - "strip_prefix": "pybind11-2.11.1", - "urls": [ - "https://github.com/pybind/pybind11/archive/v2.11.1.zip" - ] + "platform": "darwin_arm64", + "version": "1.7" } - } - }, - "recordedRepoMappingEntries": [ - [ - "pybind11_bazel+", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": { - "general": { - "bzlTransitiveDigest": "4LouzhF/yT117s7peGnNs9ROomiJXC6Zl5R0oI21jho=", - "usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "platforms": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + }, + "jq_linux_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", "attributes": { - "urls": [ - "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz", - "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz" - ], - "sha256": "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74" + "platform": "linux_amd64", + "version": "1.7" } }, - "rules_python": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "jq_linux_arm64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", "attributes": { - "sha256": "d70cd72a7a4880f0000a6346253414825c19cdd40a28289bdf67b8e6480edff8", - "strip_prefix": "rules_python-0.28.0", - "url": "https://github.com/bazelbuild/rules_python/releases/download/0.28.0/rules_python-0.28.0.tar.gz" + "platform": "linux_arm64", + "version": "1.7" } }, - "bazel_skylib": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "jq_windows_amd64": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", "attributes": { - "sha256": "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", - "urls": [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz" - ] + "platform": "windows_amd64", + "version": "1.7" } }, - "com_google_absl": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "jq": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_host_alias_repo", + "attributes": {} + }, + "jq_toolchains": { + "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_toolchains_repo", "attributes": { - "urls": [ - "https://github.com/abseil/abseil-cpp/archive/refs/tags/20240116.1.zip" - ], - "strip_prefix": "abseil-cpp-20240116.1", - "integrity": "sha256-7capMWOvWyoYbUaHF/b+I2U6XLMaHmky8KugWvfXYuk=" + "user_repository_name": "jq" } }, - "rules_fuzzing_oss_fuzz": { - "repoRuleId": "@@rules_fuzzing+//fuzzing/private/oss_fuzz:repository.bzl%oss_fuzz_repository", - "attributes": {} + "structure_test_st_darwin_amd64": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", + "attributes": { + "platform": "darwin_amd64" + } }, - "honggfuzz": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "structure_test_st_darwin_arm64": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", "attributes": { - "build_file": "@@rules_fuzzing+//:honggfuzz.BUILD", - "sha256": "6b18ba13bc1f36b7b950c72d80f19ea67fbadc0ac0bb297ec89ad91f2eaa423e", - "url": "https://github.com/google/honggfuzz/archive/2.5.zip", - "strip_prefix": "honggfuzz-2.5" + "platform": "darwin_arm64" } }, - "rules_fuzzing_jazzer": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_jar", + "structure_test_st_linux_arm64": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", "attributes": { - "sha256": "ee6feb569d88962d59cb59e8a31eb9d007c82683f3ebc64955fd5b96f277eec2", - "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer/0.20.1/jazzer-0.20.1.jar" + "platform": "linux_arm64" } }, - "rules_fuzzing_jazzer_api": { - "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_jar", + "structure_test_st_linux_s390x": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", "attributes": { - "sha256": "f5a60242bc408f7fa20fccf10d6c5c5ea1fcb3c6f44642fec5af88373ae7aa1b", - "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer-api/0.20.1/jazzer-api-0.20.1.jar" + "platform": "linux_s390x" + } + }, + "structure_test_st_linux_amd64": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", + "attributes": { + "platform": "linux_amd64" + } + }, + "structure_test_st_windows_amd64": { + "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", + "attributes": { + "platform": "windows_amd64" + } + }, + "structure_test_toolchains": { + "repoRuleId": "@@container_structure_test+//bazel:toolchains_repo.bzl%toolchains_repo", + "attributes": { + "toolchain_type": "@container_structure_test//bazel:structure_test_toolchain_type", + "toolchain": "@structure_test_st_{platform}//:structure_test_toolchain" } } }, "recordedRepoMappingEntries": [ [ - "rules_fuzzing+", + "aspect_bazel_lib+", "bazel_tools", "bazel_tools" + ], + [ + "container_structure_test+", + "aspect_bazel_lib", + "aspect_bazel_lib+" ] ] } }, "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "nvW/NrBXlAmiQw99EMGKkLaD2KbNp2mQDlxdfpr+0Ls=", + "bzlTransitiveDigest": "rL/34P1aFDq2GqVC2zCFgQ8nTuOC6ziogocpvG50Qz8=", "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -469,9 +413,213 @@ ] } }, + "@@rules_oci+//oci:extensions.bzl%oci": { + "general": { + "bzlTransitiveDigest": "btafL5urts9jH0gR3UVdsG7OprxGfLk14aFXX/G5FdU=", + "usagesDigest": "9ABtbohz+3s6dpNBjutox5VF5aRBXAiiB40cBGEQvYM=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "ubuntu_linux_arm64_v8": { + "repoRuleId": "@@rules_oci+//oci/private:pull.bzl%oci_pull", + "attributes": { + "www_authenticate_challenges": {}, + "scheme": "https", + "registry": "public.ecr.aws", + "repository": "docker/library/ubuntu", + "identifier": "sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54", + "platform": "linux/arm64/v8", + "target_name": "ubuntu_linux_arm64_v8", + "bazel_tags": [] + } + }, + "ubuntu_linux_amd64": { + "repoRuleId": "@@rules_oci+//oci/private:pull.bzl%oci_pull", + "attributes": { + "www_authenticate_challenges": {}, + "scheme": "https", + "registry": "public.ecr.aws", + "repository": "docker/library/ubuntu", + "identifier": "sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54", + "platform": "linux/amd64", + "target_name": "ubuntu_linux_amd64", + "bazel_tags": [] + } + }, + "ubuntu": { + "repoRuleId": "@@rules_oci+//oci/private:pull.bzl%oci_alias", + "attributes": { + "target_name": "ubuntu", + "www_authenticate_challenges": {}, + "scheme": "https", + "registry": "public.ecr.aws", + "repository": "docker/library/ubuntu", + "identifier": "sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54", + "platforms": { + "@@platforms//cpu:arm64": "@ubuntu_linux_arm64_v8", + "@@platforms//cpu:x86_64": "@ubuntu_linux_amd64" + }, + "bzlmod_repository": "ubuntu", + "reproducible": true + } + }, + "oci_crane_darwin_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "darwin_amd64", + "crane_version": "v0.18.0" + } + }, + "oci_crane_darwin_arm64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "darwin_arm64", + "crane_version": "v0.18.0" + } + }, + "oci_crane_linux_arm64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "linux_arm64", + "crane_version": "v0.18.0" + } + }, + "oci_crane_linux_armv6": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "linux_armv6", + "crane_version": "v0.18.0" + } + }, + "oci_crane_linux_i386": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "linux_i386", + "crane_version": "v0.18.0" + } + }, + "oci_crane_linux_s390x": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "linux_s390x", + "crane_version": "v0.18.0" + } + }, + "oci_crane_linux_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "linux_amd64", + "crane_version": "v0.18.0" + } + }, + "oci_crane_windows_armv6": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "windows_armv6", + "crane_version": "v0.18.0" + } + }, + "oci_crane_windows_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%crane_repositories", + "attributes": { + "platform": "windows_amd64", + "crane_version": "v0.18.0" + } + }, + "oci_crane_toolchains": { + "repoRuleId": "@@rules_oci+//oci/private:toolchains_repo.bzl%toolchains_repo", + "attributes": { + "toolchain_type": "@rules_oci//oci:crane_toolchain_type", + "toolchain": "@oci_crane_{platform}//:crane_toolchain" + } + }, + "oci_regctl_darwin_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "darwin_amd64" + } + }, + "oci_regctl_darwin_arm64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "darwin_arm64" + } + }, + "oci_regctl_linux_arm64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "linux_arm64" + } + }, + "oci_regctl_linux_s390x": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "linux_s390x" + } + }, + "oci_regctl_linux_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "linux_amd64" + } + }, + "oci_regctl_windows_amd64": { + "repoRuleId": "@@rules_oci+//oci:repositories.bzl%regctl_repositories", + "attributes": { + "platform": "windows_amd64" + } + }, + "oci_regctl_toolchains": { + "repoRuleId": "@@rules_oci+//oci/private:toolchains_repo.bzl%toolchains_repo", + "attributes": { + "toolchain_type": "@rules_oci//oci:regctl_toolchain_type", + "toolchain": "@oci_regctl_{platform}//:regctl_toolchain" + } + } + }, + "moduleExtensionMetadata": { + "explicitRootModuleDirectDeps": [ + "ubuntu", + "ubuntu_linux_arm64_v8", + "ubuntu_linux_amd64" + ], + "explicitRootModuleDirectDevDeps": [], + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "aspect_bazel_lib+", + "bazel_tools", + "bazel_tools" + ], + [ + "bazel_features+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_oci+", + "aspect_bazel_lib", + "aspect_bazel_lib+" + ], + [ + "rules_oci+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_oci+", + "bazel_skylib", + "bazel_skylib+" + ] + ] + } + }, "@@rules_python+//python/uv:uv.bzl%uv": { "general": { - "bzlTransitiveDigest": "yG9F6L2IZXKRbD/aIUa6sU7uITLUTBKOMWPbIvl1VdM=", + "bzlTransitiveDigest": "xMgnVVV6SeyGCaYQT+4rYddx63q6+JXtyCrlLeA8OLM=", "usagesDigest": "6MjoD3H+netDdhklgMWks3NARpHVXxy8kfsMe9XXPa8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -513,6 +661,218 @@ }, "facts": { "@@aspect_rules_py+//py:extensions.bzl%python_interpreters": { + "release_index_v2_20241002_https://github.com/astral-sh/python-build-standalone/releases/download_install_only": { + "3.10/aarch64-apple-darwin/default": { + "filename": "cpython-3.10.15+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "bcfdf8235cd4f84ca280f33a17030e65ba23e7905e70a8ed2ed2c83229ad136f" + }, + "3.10/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.10.15+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "2e364a47cdbfcfaf56122b7656a3e8a7163babbda4f6bb6165aa644cbc65bd57" + }, + "3.10/i686-pc-windows-msvc/default": { + "filename": "cpython-3.10.15+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "814561a8addee5f56a19223ecdd879a22b82d631bd5704eac7b2e98287e797a8" + }, + "3.10/x86_64-apple-darwin/default": { + "filename": "cpython-3.10.15+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "35678c2ba6d7aff56ca96f06ca735fe4bd09e4a5d3d40f552d76a1653c80a123" + }, + "3.10/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.10.15+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "422fb92c310f030b05ca8e59a256c72ffde38f03382a006284d9e5e2a7b646f5" + }, + "3.10/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.10.15+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "f17cba68a55dcd386be4cbb0002cf3037718019fc1585b2ff9a32efd3283557d" + }, + "3.10/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.10.15+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.10.15", + "sha256": "7b2baf761282600359d43e6f14b01437a8d0e517ba3a28f50688806dd8897b11" + }, + "3.11/aarch64-apple-darwin/default": { + "filename": "cpython-3.11.10+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "540225743ca9ca04d7e0de520e211ecafb379677c49fba4b89334e7248219cb2" + }, + "3.11/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.11.10+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "047e687b561f8e38740819cc3e112e83ae349927cca846921a1c301e5d9cc873" + }, + "3.11/i686-pc-windows-msvc/default": { + "filename": "cpython-3.11.10+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "d9e75d5028c8975c158f4b9c01ef820480249b3401dbde755c0f344e15feebf5" + }, + "3.11/x86_64-apple-darwin/default": { + "filename": "cpython-3.11.10+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "f498693f03fd672a4dc581ef0e1101102d33964352c35ecff21686a8d00744c9" + }, + "3.11/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.11.10+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "d71cde066b614903e9f243c4babd179e7e978fcfa95702355566463e623abe6c" + }, + "3.11/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.11.10+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "9c0197e72b2dd1ebf56eb562cb7a078052b4ab71d5666cd3be3b6e75db42c79e" + }, + "3.11/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.11.10+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.11.10", + "sha256": "fb86dce628d2008eefd3550193839fb9f283f5f6c25a09c8b676713ff4757156" + }, + "3.12/aarch64-apple-darwin/default": { + "filename": "cpython-3.12.7+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "5a9cdbb8536839a83edae3e41eb44161b640d78181fec083e07c668ba796a875" + }, + "3.12/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.12.7+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "5481ca52e7ac8685c1e9d4e804a66e5c928879e0f44799aa6934735f66266643" + }, + "3.12/i686-pc-windows-msvc/default": { + "filename": "cpython-3.12.7+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "8c62920e2fef022fc49d58cc999c77ea45318f96a5a5c0ba3bb155d33732d7f3" + }, + "3.12/x86_64-apple-darwin/default": { + "filename": "cpython-3.12.7+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "60eaf2c9a63926f5edfe7a0ecf4b2fbb37de6764f0c0100be245d098e3995da7" + }, + "3.12/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.12.7+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "1c74dd0499ef7d993d8942ebe6692c90c50d09719e0335f8e210b91277f8e7c0" + }, + "3.12/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.12.7+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "04ffccbbb1beedd0bc80347c061fe527833001681ee543c3ba85dac5134ed500" + }, + "3.12/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.12.7+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.12.7", + "sha256": "d4a8f2b3e422089475bcd6f2b855c9ed0e666af2de4f19df7c764362eb8c4aca" + }, + "3.13/aarch64-apple-darwin/default": { + "filename": "cpython-3.13.0rc3+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "577e846eaf0a27342b3f80b5f292eb292b0eb6a9df3a0fa0c5925e86cfe046a3" + }, + "3.13/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.13.0rc3+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "48974ab9b4a6990b17e6740393492fc5557e6acc4ab02be9d9543e0e506e48a6" + }, + "3.13/i686-pc-windows-msvc/default": { + "filename": "cpython-3.13.0rc3+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "fa5e8195fa7a6b6d4df0bc92b36d38836b72c4f5fb41978d495abe5a454fed67" + }, + "3.13/x86_64-apple-darwin/default": { + "filename": "cpython-3.13.0rc3+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "81a01923b25a4b2b68f517b07a4a4a9186d873e6518f060e4a004e77d7094687" + }, + "3.13/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.13.0rc3+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "319ecb727317868c4f3bfecd480f216b38275f5373f72c022d255318b650ebe2" + }, + "3.13/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.13.0rc3+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "a4b4e0a79b53938db050daf7f78dd09faf49d1e29dbba6cac87cf857c0a51fb4" + }, + "3.13/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.13.0rc3+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.13.0rc3", + "sha256": "56fac98fb5ed39f67cd7c0ce6e503a1e551ce727dc46796a0f16c09d26e845aa" + }, + "3.8/aarch64-apple-darwin/default": { + "filename": "cpython-3.8.20+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "2ddfc04bdb3e240f30fb782fa1deec6323799d0e857e0b63fa299218658fd3d4" + }, + "3.8/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "9d8798f9e79e0fc0f36fcb95bfa28a1023407d51a8ea5944b4da711f1f75f1ed" + }, + "3.8/i686-pc-windows-msvc/default": { + "filename": "cpython-3.8.20+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "06988218600fe3e2c02c3182d5629a1d4e596b3771ab32a9e99756c5904b5fac" + }, + "3.8/x86_64-apple-darwin/default": { + "filename": "cpython-3.8.20+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "68d060cd373255d2ca5b8b3441363d5aa7cc45b0c11bbccf52b1717c2b5aa8bb" + }, + "3.8/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.8.20+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "41b6709fec9c56419b7de1940d1f87fa62045aff81734480672dcb807eedc47e" + }, + "3.8/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.8.20+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "285e141c36f88b2e9357654c5f77d1f8fb29cc25132698fe35bb30d787f38e87" + }, + "3.8/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.8.20+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.8.20", + "sha256": "ea8d7f9dd35815cf88f5ed257b5d0206d97df5a9500f719b6a6031b8c7071db8" + }, + "3.9/aarch64-apple-darwin/default": { + "filename": "cpython-3.9.20+20241002-aarch64-apple-darwin-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "dc5f3b4c54deea7a42479b3f81b1c1b3a330f721aea3aff7df9833567bbfa8ea" + }, + "3.9/aarch64-unknown-linux-gnu/default": { + "filename": "cpython-3.9.20+20241002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "0d84fa0884e843828312a1fcbfd8756abe3d6cf3c27086f79cd7352bad13ac4c" + }, + "3.9/i686-pc-windows-msvc/default": { + "filename": "cpython-3.9.20+20241002-i686-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "bd2c7cf4d7eba224ada44dfbccf5248d313ba5072462c71aa753c824354704f3" + }, + "3.9/x86_64-apple-darwin/default": { + "filename": "cpython-3.9.20+20241002-x86_64-apple-darwin-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "a07be8fddd5f6f6a0db7abd16f2b2a8a94a891e54091e4f45b64e822597e4d7d" + }, + "3.9/x86_64-pc-windows-msvc/default": { + "filename": "cpython-3.9.20+20241002-x86_64-pc-windows-msvc-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "94000af8e9d9f5aba6d2325963a6b3403afbf310f6790edff3dfe8becd8197de" + }, + "3.9/x86_64-unknown-linux-gnu/default": { + "filename": "cpython-3.9.20+20241002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "fec849569158e5e46610621d7da91b02dca2cc5f66dd49cc0f85d7469c8f5a84" + }, + "3.9/x86_64-unknown-linux-musl/default": { + "filename": "cpython-3.9.20+20241002-x86_64-unknown-linux-musl-install_only.tar.gz", + "full_version": "3.9.20", + "sha256": "31f5e329f14ac8b79527712c4265edfea1cb6dff4bb04cf8c51cd809290e136c" + } + }, "release_index_v2_20251031_https://github.com/astral-sh/python-build-standalone/releases/download_install_only": { "3.10/aarch64-apple-darwin/default": { "filename": "cpython-3.10.19+20251031-aarch64-apple-darwin-install_only.tar.gz", diff --git a/e2e/crossbuild/awkward_cpp/BUILD.bazel b/e2e/crossbuild/awkward_cpp/BUILD.bazel new file mode 100644 index 000000000..727d55038 --- /dev/null +++ b/e2e/crossbuild/awkward_cpp/BUILD.bazel @@ -0,0 +1,15 @@ +# awkward-cpp ships official prebuilt wheels for linux/amd64 and +# linux/arm64, but [tool.uv] no-binary-package forces it to build from +# sdist here. scikit-build-core (CMake) backend — pep517_native_whl doesn't +# support it yet. Its compiled libraries (libawkward*.so) are loaded via +# ctypes at runtime, not imported as CPython extension modules, so unlike +# //contourpy there's no EXT_SUFFIX/SOABI to check — only ELF arch. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "awkward_cpp", + check_so_suffix = False, + deps = ["@pypi_crossbuild_awkward_cpp//awkward_cpp"], + so_pattern = "whl_install__crossbuild_awkward_cpp.*awkward_cpp/lib/libawkward-cpu-kernels\\.so$$", +) diff --git a/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml b/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml new file mode 100644 index 000000000..02721d4ed --- /dev/null +++ b/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# awkward_cpp_main.py asserts the exact null count itself and only prints +# "OK" on success. +commandTests: + - name: awkward_IndexedArray_numnull counts correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/awkward_cpp/awkward_cpp_main.py b/e2e/crossbuild/awkward_cpp/awkward_cpp_main.py new file mode 100644 index 000000000..c4df3aef4 --- /dev/null +++ b/e2e/crossbuild/awkward_cpp/awkward_cpp_main.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +"""Calls a single compiled kernel directly via ctypes. + +awkward_IndexedArray64_numnull counts negative ("null") entries in an +IndexedArray's index buffer. fromindex=[0,-1,2,-1,4] has 2 nulls. +""" +import ctypes +from numpy import int64 +from awkward_cpp.cpu_kernels import kernel + + +def main() -> None: + fromindex = (ctypes.c_int64 * 5)(0, -1, 2, -1, 4) + numnull = ctypes.c_int64(0) + func = kernel[("awkward_IndexedArray_numnull", int64, int64)] + err = func(ctypes.pointer(numnull), fromindex, 5) + if err.str: + raise RuntimeError("kernel error: {}".format(err.str)) + assert numnull.value == 2, "expected 2 nulls, got {}".format(numnull.value) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/awkward_cpp/pyproject.toml b/e2e/crossbuild/awkward_cpp/pyproject.toml new file mode 100644 index 000000000..cbcdcfd6a --- /dev/null +++ b/e2e/crossbuild/awkward_cpp/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "crossbuild_awkward_cpp" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "awkward-cpp==55", + "build", + "cmake", + "ninja", + "pybind11", + "scikit-build-core", +] + +[tool.uv] +no-binary-package = ["awkward-cpp"] diff --git a/e2e/crossbuild/awkward_cpp/uv.lock b/e2e/crossbuild/awkward_cpp/uv.lock new file mode 100644 index 000000000..741316801 --- /dev/null +++ b/e2e/crossbuild/awkward_cpp/uv.lock @@ -0,0 +1,349 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version < '3.12'", +] + +[[package]] +name = "awkward-cpp" +version = "55" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/e1/24cfd2d5c8f6fdee31897c10efd20ad9ff52be629d71fafd1814d73a56d0/awkward_cpp-55.tar.gz", hash = "sha256:e2c8be3e6a353d6d2a93d65be1900ba997765b160ea7668f9ab221de5fb8a373", size = 1503409, upload-time = "2026-07-28T18:23:19.913Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/7d/1f070fc5d32f3c9f034eb0a27e1561a1ec5af6475db5d6676c39b1c2e2ed/awkward_cpp-55-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44a2df3ab7074c3b7bcdcff18c3c330d9e3dc459443d4c93f1c4e852c509e18d", size = 623619, upload-time = "2026-07-28T18:22:11.184Z" }, + { url = "https://files.pythonhosted.org/packages/0e/53/4015b1853702fa3cae59295e7810188657b5b174451ecaae548eae2fc5ef/awkward_cpp-55-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:04af2ded4f51768801cb81f9565c40589a0e1b1a1d15929082edeb81abb9c7c8", size = 576185, upload-time = "2026-07-28T18:22:12.554Z" }, + { url = "https://files.pythonhosted.org/packages/1c/19/44c4239f5f12929a1dbdfec991714a53f62d376985d204029a83b8cbcb5f/awkward_cpp-55-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0221731ffed79da9111043defa90563906d3251221758afce4177298b1ecbc7b", size = 619562, upload-time = "2026-07-28T18:22:13.92Z" }, + { url = "https://files.pythonhosted.org/packages/5d/18/7862e4a29d305b792cfb3aba4f3ea5f33610924aef3dc5870db5ef48f8ce/awkward_cpp-55-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be9875e50dabdabbcae52a7ffd4f9dda2696a12ee98cb0ac7cce144c99fbed9e", size = 692019, upload-time = "2026-07-28T18:22:15.159Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4f/986dd5ce1150a3ed2725d3f110bf0912b0416e392100b52a8ce3bbc7437d/awkward_cpp-55-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5e42f724e98efa1a0b3eeb9488fa07becbc0fddb192a77722241a4e1735beb90", size = 1619158, upload-time = "2026-07-28T18:22:16.574Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0e/f3a2acca6e652d19bec0e8dd55ec90edbe7a503e9974efe17a606538cdc6/awkward_cpp-55-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c12ec7456981a48dde5a71a5ae848ab8631e97513edb02d8de58c5ccb36604f3", size = 1734142, upload-time = "2026-07-28T18:22:18.298Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/41d2c9ce8b0eedc8ee0d579ef26daaa545ffb2df5af7a10f41b58a7b242d/awkward_cpp-55-cp311-cp311-win32.whl", hash = "sha256:7bd732e01ea08ef714fd989a2d5a9f0f894fd44b9fa15b3d55f338c93b046316", size = 707007, upload-time = "2026-07-28T18:22:19.67Z" }, + { url = "https://files.pythonhosted.org/packages/e8/09/13cb41c16841f96067f30ee3415a4182e4ec48f5d3c3b7a44c8fbc6e955d/awkward_cpp-55-cp311-cp311-win_amd64.whl", hash = "sha256:defd65395334fd04fa2b9c01549e40c7c857006be6c65784dfd627c18aaec829", size = 739518, upload-time = "2026-07-28T18:22:21.005Z" }, + { url = "https://files.pythonhosted.org/packages/d6/9f/e1049b40a06d870a8189978874e9aaceac6973fb119371c772d5b601a9ea/awkward_cpp-55-cp311-cp311-win_arm64.whl", hash = "sha256:cf808ad4befe8622b26b25c4699645afb935727d8fae8e873810fc465fbe1e81", size = 876103, upload-time = "2026-07-28T18:22:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/98/8e/a860951951aefd968e378bd52d21e9b11437441cbda8d3c9dcb7730bf319/awkward_cpp-55-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4e5b20f5bb811688cad6b36d50b827fbeb0b7cb398844ea76e68a7d0da5d4265", size = 623048, upload-time = "2026-07-28T18:22:24.362Z" }, + { url = "https://files.pythonhosted.org/packages/a2/26/a08b58becfa07a0b6341787119f6d37d4c1aa5f01a598d37aa14732552eb/awkward_cpp-55-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:162141db862afa99e9524a99dd4b93bb8b47d780709ec308be0156e9f9338d65", size = 576965, upload-time = "2026-07-28T18:22:25.757Z" }, + { url = "https://files.pythonhosted.org/packages/09/22/373ff09eaa3ae6fcc789f49f92af8d0893022ac791a6ed9908dc1a62cc1b/awkward_cpp-55-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40ce7361ba9f5f3256b06a89e918ead4f8bf4f6e13981da36c5839029a785652", size = 620360, upload-time = "2026-07-28T18:22:26.984Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/ced3284f7f9559ba0ef835c5afde032ee07aa59b901346f5e202634b70b6/awkward_cpp-55-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40bfb8305ac51d26a4d57fcb86e94c7fb4ecbcec5693d021a9d5cebc8979f9b2", size = 692499, upload-time = "2026-07-28T18:22:28.62Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ef/8c1d716d91a6960ccf964cfad64cc3d2cdededc255150f09f2a9d38cf95d/awkward_cpp-55-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:34629ae8067fad78577a1dec72a3c65ff1b8f7a704287d2c060c354300a80d66", size = 1621196, upload-time = "2026-07-28T18:22:30.083Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a8/c06c2cc4db66a95e370326ca432300dcb316c3673a59e2308ba5dcafda3c/awkward_cpp-55-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e6e64a4448f4b172b4cde1f18a338690660e2c7526cd1a3877d8ee454120c7e4", size = 1735731, upload-time = "2026-07-28T18:22:31.771Z" }, + { url = "https://files.pythonhosted.org/packages/1b/7a/bf7ea7ac59a0dae79e00b50e54d4b2445e0bcd94a761d5e0ba124b4c7e3a/awkward_cpp-55-cp312-cp312-win32.whl", hash = "sha256:3dd8064bbf051620cfb850e9f771392fb2bd2dbec300f4a663bdeb4cd3750b0e", size = 706667, upload-time = "2026-07-28T18:22:33.287Z" }, + { url = "https://files.pythonhosted.org/packages/42/8a/1f9650b73a933cd32fa02387b0e78ab35504743456e2b48cc016139a7ea7/awkward_cpp-55-cp312-cp312-win_amd64.whl", hash = "sha256:64814032a629b09638dff1ef30151429118bba76cad5beb9bf7257b5d2fe3151", size = 743881, upload-time = "2026-07-28T18:22:34.911Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/935feee4997a83481c3260823d98dcfb95181621a5b598f571796f3a6ad7/awkward_cpp-55-cp312-cp312-win_arm64.whl", hash = "sha256:0461ea93f9d8e53b1d55afb0fa60068aca1005cd609a842890af6b0aa9ffc44b", size = 874679, upload-time = "2026-07-28T18:22:36.399Z" }, + { url = "https://files.pythonhosted.org/packages/d8/13/12b9625bef7a4ef07ff92c0a1d414883720b7b73db0cc534605b8cbdc9f8/awkward_cpp-55-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6216a8e7c228fe00a7e3b27566fc55be0ed299bf9c23b84ddbadd343ed8937b5", size = 623091, upload-time = "2026-07-28T18:22:37.927Z" }, + { url = "https://files.pythonhosted.org/packages/6e/86/46d9d13e75734e1d960e2af7ae664807ba2ffd86fe0db66d2d118375e61b/awkward_cpp-55-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d6eb0a4e1f04fe2e6502c827bd5a4cf30bd43becf7914a652e92297e8ba6a38", size = 576970, upload-time = "2026-07-28T18:22:39.254Z" }, + { url = "https://files.pythonhosted.org/packages/76/88/ef9304c34716a87e9ea3f4902c9cf60d075132b0d4be547321c4d3940b41/awkward_cpp-55-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfa81da556a07d01924f1bc9c499be12e40988a2cd5869ac280da67c2d5a89ff", size = 620452, upload-time = "2026-07-28T18:22:40.652Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c1/43934c3a0bf743823ac1812fbdd59bd69343b6adb61ca04012394a6201a3/awkward_cpp-55-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:145672b9ef352f811f7d1e971574af21d9c70f615456969bd5073a7da53900e1", size = 692557, upload-time = "2026-07-28T18:22:42.167Z" }, + { url = "https://files.pythonhosted.org/packages/31/0f/bf248189e8d7eb0f3aaf6db6ffab82e8af83e18fdd1da1fc47655d81f228/awkward_cpp-55-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f03ba5aa767cbf2f22509491d416e2fc07db2f641496f65d13cecdd7bc5f519e", size = 1621216, upload-time = "2026-07-28T18:22:43.597Z" }, + { url = "https://files.pythonhosted.org/packages/68/9e/7439f1b0eb7d9b0aa7f764348fb70e46d3550250680af8268c5848123fac/awkward_cpp-55-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f2404d53ade95efd3b2539e346f05ee579c4aa37b394f1bfd40b6148d2315016", size = 1735735, upload-time = "2026-07-28T18:22:45.224Z" }, + { url = "https://files.pythonhosted.org/packages/25/d4/b87e11e21df23c1baf451c13e852398a8bd6dd6924283f73ad41c4a92c70/awkward_cpp-55-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:6281cc536ba7473f605b92c9ad72cd3ddebd69871f474ec44e5368a81ab1d9c0", size = 233240, upload-time = "2026-07-28T18:22:46.745Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f3/e36d1d7265e1e3a18852aec20d77937577f6c601fa58125b92c363169dcd/awkward_cpp-55-cp313-cp313-win32.whl", hash = "sha256:34895e9049319ae1f345110404816925c96b02b6e00d3b8680bb5c30f7edaba0", size = 706696, upload-time = "2026-07-28T18:22:47.987Z" }, + { url = "https://files.pythonhosted.org/packages/83/96/25847d3bc9e5d0f3bdfec5da6a09cef8a2c792b6926a5ed4b13930565283/awkward_cpp-55-cp313-cp313-win_amd64.whl", hash = "sha256:b73e1cefb6b8c2405c63441c02caff18fea36c39149861ada6e3e779760f3435", size = 743928, upload-time = "2026-07-28T18:22:49.437Z" }, + { url = "https://files.pythonhosted.org/packages/41/f2/7ce97bcd5528285372f4c355e33b98483ddc51f325659684c9eec47218cd/awkward_cpp-55-cp313-cp313-win_arm64.whl", hash = "sha256:c7a06bb033d8be282977427f65745feebb25353ea8a9fcb4cda8ad5c38593560", size = 874740, upload-time = "2026-07-28T18:22:50.936Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/847cb55dc27a4fc9db68c003a3ce091e995cd521f9e719ea2fdd0081bede/awkward_cpp-55-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ec7f1581e8ac77c9868d267f0f52619bcf10f55dde49d9e7e74d11b78bbafe76", size = 623606, upload-time = "2026-07-28T18:22:52.363Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b1/6e5a85f923421eb2f7a0b26bc5b7b6cac7e3d24ee428b023307116262a9b/awkward_cpp-55-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:519730063b9243a92fcae6f38edd4a563ddb70ddf58b4b76c0ce936836639989", size = 577511, upload-time = "2026-07-28T18:22:53.67Z" }, + { url = "https://files.pythonhosted.org/packages/77/00/ef40720720d21d107ade1859d582067463c5ce702a4c4c0389ef4607a882/awkward_cpp-55-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eadc5442a82d5d1eb36b1d1ee2a7b60484dce68d4da4b1e80e71aada6fcb03bd", size = 620784, upload-time = "2026-07-28T18:22:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/7b/9d/612d3d06d9da9dc5fac3b4d758859966c8522a0024485be37fc655993f7a/awkward_cpp-55-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:640f2db9803debbfa671abd93d3ba2aedebfbdcd794be1a868e8e5954e6aae98", size = 693407, upload-time = "2026-07-28T18:22:56.505Z" }, + { url = "https://files.pythonhosted.org/packages/04/30/1458274d6ab8bf3fd061efc46f58f090e341e3b2b8e0d743b0d946b5a886/awkward_cpp-55-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7ebc50d9c2d6854741b28ce9ad7921977f1ff0752033b782657fbe9bfce7ed53", size = 1622112, upload-time = "2026-07-28T18:22:58.031Z" }, + { url = "https://files.pythonhosted.org/packages/f1/73/2ceee3817615f76ff5d5e5df2461ee8643c23aee8c8f6fbb34dff66966e7/awkward_cpp-55-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a819fa853e2e9f7c627dac13bd3e0122db45957f31705b219cc64747f6c740e2", size = 1736062, upload-time = "2026-07-28T18:22:59.509Z" }, + { url = "https://files.pythonhosted.org/packages/f8/65/b8a193becd6e6402b13f5c5d99a3210ae5768cf64ffb4ed6f313bdd94766/awkward_cpp-55-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:7fea8ddfc741f250f16482f5f3fe709a54f76ef5fc04e69bec3f0a792ecaf749", size = 234618, upload-time = "2026-07-28T18:23:00.838Z" }, + { url = "https://files.pythonhosted.org/packages/63/18/f6698e7d569bc84617292477839ce5405ff0d08da35aac76a93dbe5f4287/awkward_cpp-55-cp314-cp314-win32.whl", hash = "sha256:a52d8fa60e738a94798cecb1e8ab32a078003c89f0bd3554b15d0db8dfacc36e", size = 721993, upload-time = "2026-07-28T18:23:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/b8/59/8fe9fa01fa79b49f45d64308f3de418497b3a2d8d1321828af983c07551b/awkward_cpp-55-cp314-cp314-win_amd64.whl", hash = "sha256:f66a0c5e746c01e11df4ce5fbeec558abba76b7331306706e29a98c64394aaaa", size = 763380, upload-time = "2026-07-28T18:23:03.641Z" }, + { url = "https://files.pythonhosted.org/packages/3b/36/e75309bef10836d3457b8a7bb0339449ce5a9257fca28a750e3c553bab9d/awkward_cpp-55-cp314-cp314-win_arm64.whl", hash = "sha256:b621ed5779c7e3da5fa269c66e217dc0b6c9b8300e65fdd110473308e0095043", size = 900263, upload-time = "2026-07-28T18:23:04.999Z" }, + { url = "https://files.pythonhosted.org/packages/40/23/fb123beb39add0dc87fb67964cd87744a8e8abd9bd6dbda3df7289d89d2c/awkward_cpp-55-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:12f5721ff2fd90797798ea220753b9d1fdb24bef6597b2c3b6e60a8682406e4e", size = 636411, upload-time = "2026-07-28T18:23:06.528Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e3/1c74e3b408db21f43268e3d5898453546d610e3406b30df83c755056cb34/awkward_cpp-55-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c4944008057fdf670a3875a795e9e7a669016d37a8c0051c7710b818c1761a40", size = 591861, upload-time = "2026-07-28T18:23:07.959Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bd/5f2baae25acd3ffecf4e04e1f4416f7cf5e4a2872acaf8cdb2777946cff4/awkward_cpp-55-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3db72b63a9d27b2b85b90ceb9c00d8f9f975f41bebc70b671897574371d56823", size = 627287, upload-time = "2026-07-28T18:23:09.37Z" }, + { url = "https://files.pythonhosted.org/packages/c4/3c/6b1fcae55c5464c26a944b5c6563535063fa9fb60ca8f5dc3bd45bd9905b/awkward_cpp-55-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7999d8378ce0d86f269660d0405ddeabd9a1a4d4d1920cdca91c19954e27a07d", size = 699825, upload-time = "2026-07-28T18:23:10.937Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a8/571cf407542afae57590662a5ea5d7444b52c859e9db154f1097926aa6d8/awkward_cpp-55-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb5d7e24fcddc6433bbf925e259f1a70c57f0c72c720f5f6b7761e7b446be4a", size = 1626806, upload-time = "2026-07-28T18:23:12.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/da/51bb342e2c9720571c7d5df89b6b1823603294541cb1de1612cb2120d759/awkward_cpp-55-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4b3120f389aabeec73af0dd58839feb0ce32bb94ad3c3c7677ca996d23b240e", size = 1742018, upload-time = "2026-07-28T18:23:13.787Z" }, + { url = "https://files.pythonhosted.org/packages/87/13/d97148ca915d11a6d0b3eec2fa4ce7c6622aac645db37b9dd5d83830bc9d/awkward_cpp-55-cp314-cp314t-win32.whl", hash = "sha256:012750bf3b6fd3589216f9a058c20bd36ba2183a151c710795545f8645550a33", size = 728215, upload-time = "2026-07-28T18:23:15.309Z" }, + { url = "https://files.pythonhosted.org/packages/66/de/7978303ce84dedb642e9d34481947ee54e891d42f1f307051ee5fc0aff92/awkward_cpp-55-cp314-cp314t-win_amd64.whl", hash = "sha256:a6d274e526e6e1c247d80d7bd1e1172c663167d9df13dc2614579afc11fe82c9", size = 772816, upload-time = "2026-07-28T18:23:16.716Z" }, + { url = "https://files.pythonhosted.org/packages/45/d5/c2c0242a813e8b8f283c943e52ab2331545b63e90c0b833f45a0e86e7abc/awkward_cpp-55-cp314-cp314t-win_arm64.whl", hash = "sha256:a3ccb6d47cfc3c365a64128b0ae58fa314c432ffa1f48155c1a477e33f1e5f5e", size = 909757, upload-time = "2026-07-28T18:23:18.21Z" }, +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "cmake" +version = "4.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/ea/206baf6fd51a47790f766a24fa4514cd39c31b26ab934376f29a4aa458e5/cmake-4.4.2.tar.gz", hash = "sha256:6af2e0585239627f85f49a8f90761ce4560c671daae1d5e8d2b5f059dc7d22de", size = 34953, upload-time = "2026-08-04T06:14:49.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/5a/578888a6713994abfd97db756c937ce5ced44fa6280e7b7d452eebb8aa83/cmake-4.4.2-py3-none-macosx_10_10_universal2.whl", hash = "sha256:7a0279d3006c961ba1d62fe4383919ebcb7b770fb3357f6ae1309ca89210183b", size = 54414035, upload-time = "2026-08-04T06:13:31.175Z" }, + { url = "https://files.pythonhosted.org/packages/0f/4f/925a2a60ae544791599e2fb14d3619d979511a56518e512081e7ef4b5f8d/cmake-4.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc9d9f95dc9a542db99ca96cba1c275adeeb497ff2e134c780a9677b8578bd05", size = 30288280, upload-time = "2026-08-04T06:13:35.675Z" }, + { url = "https://files.pythonhosted.org/packages/2a/76/6f4327771875666f95c4f4c56a53fc25eaac8e027e3144b37ec827ed3818/cmake-4.4.2-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b0a9bb2fa889773c3ff719130064de28edd36fd3e916b46e576243a6f16f033f", size = 31466224, upload-time = "2026-08-04T06:13:39.268Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8f/f5a8bb6e7e86947b6810d2b2685710ed8332c2ab8766c6e3121d17cee59e/cmake-4.4.2-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:93b06166210e478783e3078612144700d44e0492fe7efd6fcd00e4061bc709a6", size = 31225510, upload-time = "2026-08-04T06:13:43.367Z" }, + { url = "https://files.pythonhosted.org/packages/a0/57/ebd7a6f429a6d5b9cf87a8fe16f17851aa9b3ce78af5b58af3c5e41ac939/cmake-4.4.2-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:ea5c206308f8eefc0be7cbeeee93b8b192b6af7338741b6d12fe387234bb7920", size = 29098755, upload-time = "2026-08-04T06:13:47.102Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b7/b8d0b15f57b37ac5b9e374169471f045da3a715b7f0f3af681011415d972/cmake-4.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:27b024e903ef985b37183d754a5c61230b56b41fe0971cd44b71b80c787ec594", size = 30230879, upload-time = "2026-08-04T06:13:50.678Z" }, + { url = "https://files.pythonhosted.org/packages/3b/91/1d72e960d27edbcc3f02bedd3890c4096bbaaf9dbcb7d86f678d2082fe90/cmake-4.4.2-py3-none-manylinux_2_31_armv7l.whl", hash = "sha256:a3580e0c30755c36b48edbbf471aaeb5d07858de0281e58a4a598dfa52a0f05d", size = 27319760, upload-time = "2026-08-04T06:13:54.468Z" }, + { url = "https://files.pythonhosted.org/packages/3b/f7/dc27806fdee158ca3f30d043ef1c1b18b5f846266d5adf4989d97cc571cc/cmake-4.4.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e58296c6e0c04dec37fc28cbf56ca7150646c948dddab2b0d6f8a0a466e7f1ca", size = 27432198, upload-time = "2026-08-04T06:13:58.614Z" }, + { url = "https://files.pythonhosted.org/packages/97/ff/b3f135c8a28a2ee2b57c2f671342a0c0f3cb1b78ea62a633815483eb4acd/cmake-4.4.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:00a0a207efc83019b55f617b93b2592c2616aebd9c4eeab83ec076dc2a9b84a4", size = 39474065, upload-time = "2026-08-04T06:14:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b5/463afc4ec6ae535661d6a50918efff9e165ef4793ae6c14c376f0660d756/cmake-4.4.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0220135cceb78530e79e2b5cd0392672e4c524178db768a5f940ea24520e1359", size = 36109755, upload-time = "2026-08-04T06:14:08.512Z" }, + { url = "https://files.pythonhosted.org/packages/c4/e8/052a01a2c3362d04cb545c456ab26a8776c683f9a97f4082508c6d8cc506/cmake-4.4.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4eb0e17af8344d3063ce0c1a38a156eb7bbe3447f984ad12629a40f5c967fedd", size = 42239493, upload-time = "2026-08-04T06:14:14.295Z" }, + { url = "https://files.pythonhosted.org/packages/0e/30/c9b5bcd20411793c26838191a73e0e820da64d8f872ecba5364ebc2a3538/cmake-4.4.2-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:00195668e40e5dd0d51244e31d15fabb79b97c5e154f9f78b4240f152198c2eb", size = 41399147, upload-time = "2026-08-04T06:14:19.396Z" }, + { url = "https://files.pythonhosted.org/packages/31/d4/56f18d34b11981031f7bdb0215f05e8e43982d7848dc39a8a96b141d4e6a/cmake-4.4.2-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:41e2a04663685304222ba03fb5bed8db52480854aa873cbae1478eedf3a8ec1a", size = 36322600, upload-time = "2026-08-04T06:14:24.013Z" }, + { url = "https://files.pythonhosted.org/packages/34/4a/582268f8468d0f49b4b73423364af7ee82dba28eef63886e9c32f34761a2/cmake-4.4.2-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:269f84ede6543c5d65249dd685db6125a962e5928b7eafd0ed3acdd2b600aa9e", size = 38668384, upload-time = "2026-08-04T06:14:28.633Z" }, + { url = "https://files.pythonhosted.org/packages/45/24/620930e1ddf0832ac688e00aad2568dd876d71f3637fa98f917dfec25df0/cmake-4.4.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e5b51faffe02ca78ed4f6b9afbe6dee8d25ab36e9a9365f510e890a16db76013", size = 39444623, upload-time = "2026-08-04T06:14:33.525Z" }, + { url = "https://files.pythonhosted.org/packages/70/a4/2f2af96afacfb0f4e5fc02f6f491d4cde4ce8e51d914311f2492e22ed8d9/cmake-4.4.2-py3-none-win32.whl", hash = "sha256:109af09f308fd53ddc44bbc23536b6ecb72db53f0218f611efccd9871b19f39f", size = 38774551, upload-time = "2026-08-04T06:14:38.493Z" }, + { url = "https://files.pythonhosted.org/packages/06/9e/3e572a9a8966eec43b6d75b8b8d9543ca2182ec4006a538fb239e004a3cf/cmake-4.4.2-py3-none-win_amd64.whl", hash = "sha256:c28388fe95298486169c45c0ec8bdf067aabcb59273b98a4cdae8be5cd9c74f3", size = 42325289, upload-time = "2026-08-04T06:14:42.919Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b9/2f0b9b355a5293d73db62cefab46a7d0f3b151962d58fb284f340e3685c4/cmake-4.4.2-py3-none-win_arm64.whl", hash = "sha256:1358f355578d19397f87955d4204f737bb399ba36cce59be5853976912836b32", size = 40497534, upload-time = "2026-08-04T06:14:47.366Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-awkward-cpp" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "awkward-cpp" }, + { name = "build" }, + { name = "cmake" }, + { name = "ninja" }, + { name = "pybind11" }, + { name = "scikit-build-core" }, +] + +[package.metadata] +requires-dist = [ + { name = "awkward-cpp", specifier = "==55" }, + { name = "build" }, + { name = "cmake" }, + { name = "ninja" }, + { name = "pybind11" }, + { name = "scikit-build-core" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, + { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, + { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pybind11" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/f0/35145a3c3baffeef55d4b8324caa33abaa8fa56ab345ecd4b2211d09163e/pybind11-3.0.4.tar.gz", hash = "sha256:3286b59c8a774b9ee650169302dd5a4eedc30a8617905a0560dd8ee44775130c", size = 589533, upload-time = "2026-04-19T03:08:15.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/06/c3a23c9a0263b136c519f033a58d4641e73065fefc7754e9667ec206d992/pybind11-3.0.4-py3-none-any.whl", hash = "sha256:961720ee652da51d531b7b2451a6bd2bc042b0106e6d9baa48ecb7d58034ce63", size = 314166, upload-time = "2026-04-19T03:08:14.091Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "scikit-build-core" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pathspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/7c/0f69b0c7150ce4bcee78c199fe3b7e03a6e01578451bd5d5d1a58beb32f9/scikit_build_core-1.0.3.tar.gz", hash = "sha256:a4d7a05978ee37975c37743510c8991e2debce7ef83afb0a07c0c576fd4f16e8", size = 477539, upload-time = "2026-07-12T05:08:30.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b0/7ad8fa9aebb0835b2e20afebf1483cbe175d1612fe01e85042ce9ced8755/scikit_build_core-1.0.3-py3-none-any.whl", hash = "sha256:ae95427b7d3c14a6cf8bbfd4d901f6138ab64c99e20cbe8ea7d75cd26093f085", size = 278294, upload-time = "2026-07-12T05:08:28.725Z" }, +] diff --git a/e2e/crossbuild/bcrypt/BUILD.bazel b/e2e/crossbuild/bcrypt/BUILD.bazel new file mode 100644 index 000000000..2df8ac7c3 --- /dev/null +++ b/e2e/crossbuild/bcrypt/BUILD.bazel @@ -0,0 +1,16 @@ +# bcrypt ships official prebuilt wheels for linux/amd64 and linux/arm64, but +# [tool.uv] no-binary-package forces it to build from sdist here. Unlike +# //rpds_py (maturin), this is setuptools + setuptools-rust — a build-backend +# value of plain "setuptools.build_meta" with setuptools-rust only visible in +# build-system.requires, exercising the OTHER real-world Rust-in-Python +# integration path (also used by cryptography, pydantic-core's sibling +# ecosystem) rather than a second maturin package. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "bcrypt", + check_so_suffix = False, + deps = ["@pypi_crossbuild_bcrypt//bcrypt"], + so_pattern = "whl_install__crossbuild_bcrypt.*_bcrypt.*\\.so$$", +) diff --git a/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml b/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml new file mode 100644 index 000000000..eb9fa7ad5 --- /dev/null +++ b/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# bcrypt_main.py asserts the hashpw/checkpw round-trip itself and only +# prints "OK" on success. +commandTests: + - name: bcrypt hashpw/checkpw round-trips correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/bcrypt/bcrypt_main.py b/e2e/crossbuild/bcrypt/bcrypt_main.py new file mode 100644 index 000000000..d9b098299 --- /dev/null +++ b/e2e/crossbuild/bcrypt/bcrypt_main.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import bcrypt + + +def main() -> None: + password = b"correct horse battery staple" + hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=4)) + # A hash must verify against the password it was made from, and reject a + # different one — deterministic regardless of the random salt gensalt() + # picks. + assert bcrypt.checkpw(password, hashed) is True, "checkpw rejected the password that produced this hash" + assert bcrypt.checkpw(b"wrong password", hashed) is False, "checkpw accepted the wrong password" + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/bcrypt/pyproject.toml b/e2e/crossbuild/bcrypt/pyproject.toml new file mode 100644 index 000000000..820d6ce4d --- /dev/null +++ b/e2e/crossbuild/bcrypt/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "crossbuild_bcrypt" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "bcrypt==5.0.0", + "build", + "setuptools", + "setuptools-rust", + "wheel", +] + +[tool.uv] +no-binary-package = ["bcrypt"] diff --git a/e2e/crossbuild/bcrypt/uv.lock b/e2e/crossbuild/bcrypt/uv.lock new file mode 100644 index 000000000..5b67b0eff --- /dev/null +++ b/e2e/crossbuild/bcrypt/uv.lock @@ -0,0 +1,178 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "bcrypt" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/36/3329e2518d70ad8e2e5817d5a4cac6bba05a47767ec416c7d020a965f408/bcrypt-5.0.0.tar.gz", hash = "sha256:f748f7c2d6fd375cc93d3fba7ef4a9e3a092421b8dbf34d8d4dc06be9492dfdd", size = 25386, upload-time = "2025-09-25T19:50:47.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/85/3e65e01985fddf25b64ca67275bb5bdb4040bd1a53b66d355c6c37c8a680/bcrypt-5.0.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f3c08197f3039bec79cee59a606d62b96b16669cff3949f21e74796b6e3cd2be", size = 481806, upload-time = "2025-09-25T19:49:05.102Z" }, + { url = "https://files.pythonhosted.org/packages/44/dc/01eb79f12b177017a726cbf78330eb0eb442fae0e7b3dfd84ea2849552f3/bcrypt-5.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:200af71bc25f22006f4069060c88ed36f8aa4ff7f53e67ff04d2ab3f1e79a5b2", size = 268626, upload-time = "2025-09-25T19:49:06.723Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/e82388ad5959c40d6afd94fb4743cc077129d45b952d46bdc3180310e2df/bcrypt-5.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:baade0a5657654c2984468efb7d6c110db87ea63ef5a4b54732e7e337253e44f", size = 271853, upload-time = "2025-09-25T19:49:08.028Z" }, + { url = "https://files.pythonhosted.org/packages/ec/86/7134b9dae7cf0efa85671651341f6afa695857fae172615e960fb6a466fa/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c58b56cdfb03202b3bcc9fd8daee8e8e9b6d7e3163aa97c631dfcfcc24d36c86", size = 269793, upload-time = "2025-09-25T19:49:09.727Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/6296688ac1b9e503d034e7d0614d56e80c5d1a08402ff856a4549cb59207/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4bfd2a34de661f34d0bda43c3e4e79df586e4716ef401fe31ea39d69d581ef23", size = 289930, upload-time = "2025-09-25T19:49:11.204Z" }, + { url = "https://files.pythonhosted.org/packages/d1/18/884a44aa47f2a3b88dd09bc05a1e40b57878ecd111d17e5bba6f09f8bb77/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ed2e1365e31fc73f1825fa830f1c8f8917ca1b3ca6185773b349c20fd606cec2", size = 272194, upload-time = "2025-09-25T19:49:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/0e/8f/371a3ab33c6982070b674f1788e05b656cfbf5685894acbfef0c65483a59/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:83e787d7a84dbbfba6f250dd7a5efd689e935f03dd83b0f919d39349e1f23f83", size = 269381, upload-time = "2025-09-25T19:49:14.308Z" }, + { url = "https://files.pythonhosted.org/packages/b1/34/7e4e6abb7a8778db6422e88b1f06eb07c47682313997ee8a8f9352e5a6f1/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:137c5156524328a24b9fac1cb5db0ba618bc97d11970b39184c1d87dc4bf1746", size = 271750, upload-time = "2025-09-25T19:49:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/54f416be2499bd72123c70d98d36c6cd61a4e33d9b89562c22481c81bb30/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:38cac74101777a6a7d3b3e3cfefa57089b5ada650dce2baf0cbdd9d65db22a9e", size = 303757, upload-time = "2025-09-25T19:49:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/13/62/062c24c7bcf9d2826a1a843d0d605c65a755bc98002923d01fd61270705a/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d8d65b564ec849643d9f7ea05c6d9f0cd7ca23bdd4ac0c2dbef1104ab504543d", size = 306740, upload-time = "2025-09-25T19:49:18.693Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/1fdbfc8c0f20875b6b4020f3c7dc447b8de60aa0be5faaf009d24242aec9/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:741449132f64b3524e95cd30e5cd3343006ce146088f074f31ab26b94e6c75ba", size = 334197, upload-time = "2025-09-25T19:49:20.523Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c1/8b84545382d75bef226fbc6588af0f7b7d095f7cd6a670b42a86243183cd/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:212139484ab3207b1f0c00633d3be92fef3c5f0af17cad155679d03ff2ee1e41", size = 352974, upload-time = "2025-09-25T19:49:22.254Z" }, + { url = "https://files.pythonhosted.org/packages/10/a6/ffb49d4254ed085e62e3e5dd05982b4393e32fe1e49bb1130186617c29cd/bcrypt-5.0.0-cp313-cp313t-win32.whl", hash = "sha256:9d52ed507c2488eddd6a95bccee4e808d3234fa78dd370e24bac65a21212b861", size = 148498, upload-time = "2025-09-25T19:49:24.134Z" }, + { url = "https://files.pythonhosted.org/packages/48/a9/259559edc85258b6d5fc5471a62a3299a6aa37a6611a169756bf4689323c/bcrypt-5.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f6984a24db30548fd39a44360532898c33528b74aedf81c26cf29c51ee47057e", size = 145853, upload-time = "2025-09-25T19:49:25.702Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/9714173403c7e8b245acf8e4be8876aac64a209d1b392af457c79e60492e/bcrypt-5.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9fffdb387abe6aa775af36ef16f55e318dcda4194ddbf82007a6f21da29de8f5", size = 139626, upload-time = "2025-09-25T19:49:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/f8/14/c18006f91816606a4abe294ccc5d1e6f0e42304df5a33710e9e8e95416e1/bcrypt-5.0.0-cp314-cp314t-macosx_10_12_universal2.whl", hash = "sha256:4870a52610537037adb382444fefd3706d96d663ac44cbb2f37e3919dca3d7ef", size = 481862, upload-time = "2025-09-25T19:49:28.365Z" }, + { url = "https://files.pythonhosted.org/packages/67/49/dd074d831f00e589537e07a0725cf0e220d1f0d5d8e85ad5bbff251c45aa/bcrypt-5.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48f753100931605686f74e27a7b49238122aa761a9aefe9373265b8b7aa43ea4", size = 268544, upload-time = "2025-09-25T19:49:30.39Z" }, + { url = "https://files.pythonhosted.org/packages/f5/91/50ccba088b8c474545b034a1424d05195d9fcbaaf802ab8bfe2be5a4e0d7/bcrypt-5.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f70aadb7a809305226daedf75d90379c397b094755a710d7014b8b117df1ebbf", size = 271787, upload-time = "2025-09-25T19:49:32.144Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e7/d7dba133e02abcda3b52087a7eea8c0d4f64d3e593b4fffc10c31b7061f3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:744d3c6b164caa658adcb72cb8cc9ad9b4b75c7db507ab4bc2480474a51989da", size = 269753, upload-time = "2025-09-25T19:49:33.885Z" }, + { url = "https://files.pythonhosted.org/packages/33/fc/5b145673c4b8d01018307b5c2c1fc87a6f5a436f0ad56607aee389de8ee3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a28bc05039bdf3289d757f49d616ab3efe8cf40d8e8001ccdd621cd4f98f4fc9", size = 289587, upload-time = "2025-09-25T19:49:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/27/d7/1ff22703ec6d4f90e62f1a5654b8867ef96bafb8e8102c2288333e1a6ca6/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7f277a4b3390ab4bebe597800a90da0edae882c6196d3038a73adf446c4f969f", size = 272178, upload-time = "2025-09-25T19:49:36.793Z" }, + { url = "https://files.pythonhosted.org/packages/c8/88/815b6d558a1e4d40ece04a2f84865b0fef233513bd85fd0e40c294272d62/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:79cfa161eda8d2ddf29acad370356b47f02387153b11d46042e93a0a95127493", size = 269295, upload-time = "2025-09-25T19:49:38.164Z" }, + { url = "https://files.pythonhosted.org/packages/51/8c/e0db387c79ab4931fc89827d37608c31cc57b6edc08ccd2386139028dc0d/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a5393eae5722bcef046a990b84dff02b954904c36a194f6cfc817d7dca6c6f0b", size = 271700, upload-time = "2025-09-25T19:49:39.917Z" }, + { url = "https://files.pythonhosted.org/packages/06/83/1570edddd150f572dbe9fc00f6203a89fc7d4226821f67328a85c330f239/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f4c94dec1b5ab5d522750cb059bb9409ea8872d4494fd152b53cca99f1ddd8c", size = 334034, upload-time = "2025-09-25T19:49:41.227Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f2/ea64e51a65e56ae7a8a4ec236c2bfbdd4b23008abd50ac33fbb2d1d15424/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0cae4cb350934dfd74c020525eeae0a5f79257e8a201c0c176f4b84fdbf2a4b4", size = 352766, upload-time = "2025-09-25T19:49:43.08Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d4/1a388d21ee66876f27d1a1f41287897d0c0f1712ef97d395d708ba93004c/bcrypt-5.0.0-cp314-cp314t-win32.whl", hash = "sha256:b17366316c654e1ad0306a6858e189fc835eca39f7eb2cafd6aaca8ce0c40a2e", size = 152449, upload-time = "2025-09-25T19:49:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/3f/61/3291c2243ae0229e5bca5d19f4032cecad5dfb05a2557169d3a69dc0ba91/bcrypt-5.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:92864f54fb48b4c718fc92a32825d0e42265a627f956bc0361fe869f1adc3e7d", size = 149310, upload-time = "2025-09-25T19:49:46.162Z" }, + { url = "https://files.pythonhosted.org/packages/3e/89/4b01c52ae0c1a681d4021e5dd3e45b111a8fb47254a274fa9a378d8d834b/bcrypt-5.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dd19cf5184a90c873009244586396a6a884d591a5323f0e8a5922560718d4993", size = 143761, upload-time = "2025-09-25T19:49:47.345Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/6237f151fbfe295fe3e074ecc6d44228faa1e842a81f6d34a02937ee1736/bcrypt-5.0.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b", size = 494553, upload-time = "2025-09-25T19:49:49.006Z" }, + { url = "https://files.pythonhosted.org/packages/45/b6/4c1205dde5e464ea3bd88e8742e19f899c16fa8916fb8510a851fae985b5/bcrypt-5.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c2388ca94ffee269b6038d48747f4ce8df0ffbea43f31abfa18ac72f0218effb", size = 275009, upload-time = "2025-09-25T19:49:50.581Z" }, + { url = "https://files.pythonhosted.org/packages/3b/71/427945e6ead72ccffe77894b2655b695ccf14ae1866cd977e185d606dd2f/bcrypt-5.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:560ddb6ec730386e7b3b26b8b4c88197aaed924430e7b74666a586ac997249ef", size = 278029, upload-time = "2025-09-25T19:49:52.533Z" }, + { url = "https://files.pythonhosted.org/packages/17/72/c344825e3b83c5389a369c8a8e58ffe1480b8a699f46c127c34580c4666b/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d79e5c65dcc9af213594d6f7f1fa2c98ad3fc10431e7aa53c176b441943efbdd", size = 275907, upload-time = "2025-09-25T19:49:54.709Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7e/d4e47d2df1641a36d1212e5c0514f5291e1a956a7749f1e595c07a972038/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2b732e7d388fa22d48920baa267ba5d97cca38070b69c0e2d37087b381c681fd", size = 296500, upload-time = "2025-09-25T19:49:56.013Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c3/0ae57a68be2039287ec28bc463b82e4b8dc23f9d12c0be331f4782e19108/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0c8e093ea2532601a6f686edbc2c6b2ec24131ff5c52f7610dd64fa4553b5464", size = 278412, upload-time = "2025-09-25T19:49:57.356Z" }, + { url = "https://files.pythonhosted.org/packages/45/2b/77424511adb11e6a99e3a00dcc7745034bee89036ad7d7e255a7e47be7d8/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5b1589f4839a0899c146e8892efe320c0fa096568abd9b95593efac50a87cb75", size = 275486, upload-time = "2025-09-25T19:49:59.116Z" }, + { url = "https://files.pythonhosted.org/packages/43/0a/405c753f6158e0f3f14b00b462d8bca31296f7ecfc8fc8bc7919c0c7d73a/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:89042e61b5e808b67daf24a434d89bab164d4de1746b37a8d173b6b14f3db9ff", size = 277940, upload-time = "2025-09-25T19:50:00.869Z" }, + { url = "https://files.pythonhosted.org/packages/62/83/b3efc285d4aadc1fa83db385ec64dcfa1707e890eb42f03b127d66ac1b7b/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e3cf5b2560c7b5a142286f69bde914494b6d8f901aaa71e453078388a50881c4", size = 310776, upload-time = "2025-09-25T19:50:02.393Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/47ee337dacecde6d234890fe929936cb03ebc4c3a7460854bbd9c97780b8/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f632fd56fc4e61564f78b46a2269153122db34988e78b6be8b32d28507b7eaeb", size = 312922, upload-time = "2025-09-25T19:50:04.232Z" }, + { url = "https://files.pythonhosted.org/packages/d6/3a/43d494dfb728f55f4e1cf8fd435d50c16a2d75493225b54c8d06122523c6/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:801cad5ccb6b87d1b430f183269b94c24f248dddbbc5c1f78b6ed231743e001c", size = 341367, upload-time = "2025-09-25T19:50:05.559Z" }, + { url = "https://files.pythonhosted.org/packages/55/ab/a0727a4547e383e2e22a630e0f908113db37904f58719dc48d4622139b5c/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3cf67a804fc66fc217e6914a5635000259fbbbb12e78a99488e4d5ba445a71eb", size = 359187, upload-time = "2025-09-25T19:50:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bb/461f352fdca663524b4643d8b09e8435b4990f17fbf4fea6bc2a90aa0cc7/bcrypt-5.0.0-cp38-abi3-win32.whl", hash = "sha256:3abeb543874b2c0524ff40c57a4e14e5d3a66ff33fb423529c88f180fd756538", size = 153752, upload-time = "2025-09-25T19:50:08.515Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/4190e60921927b7056820291f56fc57d00d04757c8b316b2d3c0d1d6da2c/bcrypt-5.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:35a77ec55b541e5e583eb3436ffbbf53b0ffa1fa16ca6782279daf95d146dcd9", size = 150881, upload-time = "2025-09-25T19:50:09.742Z" }, + { url = "https://files.pythonhosted.org/packages/54/12/cd77221719d0b39ac0b55dbd39358db1cd1246e0282e104366ebbfb8266a/bcrypt-5.0.0-cp38-abi3-win_arm64.whl", hash = "sha256:cde08734f12c6a4e28dc6755cd11d3bdfea608d93d958fffbe95a7026ebe4980", size = 144931, upload-time = "2025-09-25T19:50:11.016Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ba/2af136406e1c3839aea9ecadc2f6be2bcd1eff255bd451dd39bcf302c47a/bcrypt-5.0.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0c418ca99fd47e9c59a301744d63328f17798b5947b0f791e9af3c1c499c2d0a", size = 495313, upload-time = "2025-09-25T19:50:12.309Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ee/2f4985dbad090ace5ad1f7dd8ff94477fe089b5fab2040bd784a3d5f187b/bcrypt-5.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddb4e1500f6efdd402218ffe34d040a1196c072e07929b9820f363a1fd1f4191", size = 275290, upload-time = "2025-09-25T19:50:13.673Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6e/b77ade812672d15cf50842e167eead80ac3514f3beacac8902915417f8b7/bcrypt-5.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7aeef54b60ceddb6f30ee3db090351ecf0d40ec6e2abf41430997407a46d2254", size = 278253, upload-time = "2025-09-25T19:50:15.089Z" }, + { url = "https://files.pythonhosted.org/packages/36/c4/ed00ed32f1040f7990dac7115f82273e3c03da1e1a1587a778d8cea496d8/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f0ce778135f60799d89c9693b9b398819d15f1921ba15fe719acb3178215a7db", size = 276084, upload-time = "2025-09-25T19:50:16.699Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fa6e16145e145e87f1fa351bbd54b429354fd72145cd3d4e0c5157cf4c70/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a71f70ee269671460b37a449f5ff26982a6f2ba493b3eabdd687b4bf35f875ac", size = 297185, upload-time = "2025-09-25T19:50:18.525Z" }, + { url = "https://files.pythonhosted.org/packages/24/b4/11f8a31d8b67cca3371e046db49baa7c0594d71eb40ac8121e2fc0888db0/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822", size = 278656, upload-time = "2025-09-25T19:50:19.809Z" }, + { url = "https://files.pythonhosted.org/packages/ac/31/79f11865f8078e192847d2cb526e3fa27c200933c982c5b2869720fa5fce/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:edfcdcedd0d0f05850c52ba3127b1fce70b9f89e0fe5ff16517df7e81fa3cbb8", size = 275662, upload-time = "2025-09-25T19:50:21.567Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8d/5e43d9584b3b3591a6f9b68f755a4da879a59712981ef5ad2a0ac1379f7a/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:611f0a17aa4a25a69362dcc299fda5c8a3d4f160e2abb3831041feb77393a14a", size = 278240, upload-time = "2025-09-25T19:50:23.305Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/44590e3fc158620f680a978aafe8f87a4c4320da81ed11552f0323aa9a57/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:db99dca3b1fdc3db87d7c57eac0c82281242d1eabf19dcb8a6b10eb29a2e72d1", size = 311152, upload-time = "2025-09-25T19:50:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/e4fbfc46f14f47b0d20493669a625da5827d07e8a88ee460af6cd9768b44/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5feebf85a9cefda32966d8171f5db7e3ba964b77fdfe31919622256f80f9cf42", size = 313284, upload-time = "2025-09-25T19:50:26.268Z" }, + { url = "https://files.pythonhosted.org/packages/25/ae/479f81d3f4594456a01ea2f05b132a519eff9ab5768a70430fa1132384b1/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3ca8a166b1140436e058298a34d88032ab62f15aae1c598580333dc21d27ef10", size = 341643, upload-time = "2025-09-25T19:50:28.02Z" }, + { url = "https://files.pythonhosted.org/packages/df/d2/36a086dee1473b14276cd6ea7f61aef3b2648710b5d7f1c9e032c29b859f/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:61afc381250c3182d9078551e3ac3a41da14154fbff647ddf52a769f588c4172", size = 359698, upload-time = "2025-09-25T19:50:31.347Z" }, + { url = "https://files.pythonhosted.org/packages/c0/f6/688d2cd64bfd0b14d805ddb8a565e11ca1fb0fd6817175d58b10052b6d88/bcrypt-5.0.0-cp39-abi3-win32.whl", hash = "sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683", size = 153725, upload-time = "2025-09-25T19:50:34.384Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b9/9d9a641194a730bda138b3dfe53f584d61c58cd5230e37566e83ec2ffa0d/bcrypt-5.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2", size = 150912, upload-time = "2025-09-25T19:50:35.69Z" }, + { url = "https://files.pythonhosted.org/packages/27/44/d2ef5e87509158ad2187f4dd0852df80695bb1ee0cfe0a684727b01a69e0/bcrypt-5.0.0-cp39-abi3-win_arm64.whl", hash = "sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927", size = 144953, upload-time = "2025-09-25T19:50:37.32Z" }, + { url = "https://files.pythonhosted.org/packages/8a/75/4aa9f5a4d40d762892066ba1046000b329c7cd58e888a6db878019b282dc/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534", size = 271180, upload-time = "2025-09-25T19:50:38.575Z" }, + { url = "https://files.pythonhosted.org/packages/54/79/875f9558179573d40a9cc743038ac2bf67dfb79cecb1e8b5d70e88c94c3d/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4", size = 273791, upload-time = "2025-09-25T19:50:39.913Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fe/975adb8c216174bf70fc17535f75e85ac06ed5252ea077be10d9cff5ce24/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911", size = 270746, upload-time = "2025-09-25T19:50:43.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f8/972c96f5a2b6c4b3deca57009d93e946bbdbe2241dca9806d502f29dd3ee/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4", size = 273375, upload-time = "2025-09-25T19:50:45.43Z" }, +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-bcrypt" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "bcrypt" }, + { name = "build" }, + { name = "setuptools" }, + { name = "setuptools-rust" }, + { name = "wheel" }, +] + +[package.metadata] +requires-dist = [ + { name = "bcrypt", specifier = "==5.0.0" }, + { name = "build" }, + { name = "setuptools" }, + { name = "setuptools-rust" }, + { name = "wheel" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] + +[[package]] +name = "setuptools-rust" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "semantic-version" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/ba/b31781d61bf9ee3c232a1d1160db11c11cdeae1d44e06c90723b25a8279f/setuptools_rust-1.13.0.tar.gz", hash = "sha256:f2afcf4baeee689910ce49cfa8aad4e08cce72f417449bcc32891b8664fdc726", size = 314100, upload-time = "2026-06-27T21:45:02.976Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/80/909e46e684e47b116ed145bf2a1a8f5f7c9d90e8c3f8f7fce6a529c0068d/setuptools_rust-1.13.0-py3-none-any.whl", hash = "sha256:666439c4d90e968bb625bcf87ec0aa02b4f49e599d2f5dc255c633a04e8eca99", size = 30536, upload-time = "2026-06-27T21:45:01.583Z" }, +] + +[[package]] +name = "wheel" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, +] diff --git a/e2e/crossbuild/contourpy/BUILD.bazel b/e2e/crossbuild/contourpy/BUILD.bazel new file mode 100644 index 000000000..40fd8143f --- /dev/null +++ b/e2e/crossbuild/contourpy/BUILD.bazel @@ -0,0 +1,12 @@ +# contourpy ships official prebuilt wheels for linux/amd64 and linux/arm64, +# but [tool.uv] no-binary-package forces it to build from sdist here. Unlike +# //geohash (setuptools) and //zstandard (setuptools+CFFI), this is a +# meson-python backend — pep517_native_whl doesn't support it yet. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "contourpy", + deps = ["@pypi_crossbuild_contourpy//contourpy"], + so_pattern = "whl_install__crossbuild_contourpy.*_contourpy.*\\.so$$", +) diff --git a/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml b/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml new file mode 100644 index 000000000..7d8f5c80c --- /dev/null +++ b/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# contourpy_main.py asserts the exact 1.5-contour of z=x+y itself and only +# prints "OK" on success. +commandTests: + - name: contourpy computes the 1.5 contour of z=x+y correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/contourpy/contourpy_main.py b/e2e/crossbuild/contourpy/contourpy_main.py new file mode 100644 index 000000000..e583fae14 --- /dev/null +++ b/e2e/crossbuild/contourpy/contourpy_main.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import math + +import numpy as np +import contourpy + + +def main() -> None: + x = np.array([0.0, 1.0, 2.0]) + y = np.array([0.0, 1.0, 2.0]) + z = np.array([[0.0, 1.0, 2.0], [1.0, 2.0, 3.0], [2.0, 3.0, 4.0]]) + cg = contourpy.contour_generator(x, y, z) + lines = cg.lines(1.5) + assert len(lines) == 1, "expected exactly one contour line, got {}".format(len(lines)) + + # z=x+y is bilinear (no cross term), so its 1.5-contour is the exact + # line x+y=1.5 from (0,1.5) to (1.5,0) — hand-verified, not just captured + # output. + expected = [(0.0, 1.5), (0.5, 1.0), (1.0, 0.5), (1.5, 0.0)] + points = [tuple(p) for p in lines[0]] + assert len(points) == len(expected), "expected {} points, got {}".format(len(expected), len(points)) + for got, want in zip(points, expected): + assert math.isclose(got[0], want[0], abs_tol=1e-9) and math.isclose(got[1], want[1], abs_tol=1e-9), \ + "point {} != expected {}".format(got, want) + + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/contourpy/pyproject.toml b/e2e/crossbuild/contourpy/pyproject.toml new file mode 100644 index 000000000..1e9101493 --- /dev/null +++ b/e2e/crossbuild/contourpy/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "crossbuild_contourpy" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "contourpy==1.3.3", + "meson", + "meson-python", + "ninja", + "pybind11", +] + +[tool.uv] +no-binary-package = ["contourpy"] diff --git a/e2e/crossbuild/contourpy/uv.lock b/e2e/crossbuild/contourpy/uv.lock new file mode 100644 index 000000000..114e75ec0 --- /dev/null +++ b/e2e/crossbuild/contourpy/uv.lock @@ -0,0 +1,364 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform != 'ios'", + "python_full_version >= '3.12' and sys_platform == 'ios'", + "python_full_version < '3.12' and sys_platform != 'ios'", + "python_full_version < '3.12' and sys_platform == 'ios'", +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt' and sys_platform != 'ios'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +] + +[[package]] +name = "crossbuild-contourpy" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "contourpy" }, + { name = "meson" }, + { name = "meson-python" }, + { name = "ninja" }, + { name = "pybind11" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "contourpy", specifier = "==1.3.3" }, + { name = "meson" }, + { name = "meson-python" }, + { name = "ninja" }, + { name = "pybind11" }, +] + +[[package]] +name = "meson" +version = "1.11.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/ce/c4d3d849d5cf8d9193b075acf435fb5dc0f4bdab35a3486f1204fd8265a7/meson-1.11.2.tar.gz", hash = "sha256:698feae069cef3ecd4d7aaf281d7df359bdfcf555a9a1564383d3b913fa8a736", size = 2463316, upload-time = "2026-07-11T07:19:44.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/c5/680527bdddf039807f22041882678b7f21d3380b4cdbc46abf2f24e2db6c/meson-1.11.2-py3-none-any.whl", hash = "sha256:7e4f6e83fec83e3eaac928e058b073c7557b282c35b6a2024cea143a39926a39", size = 1078911, upload-time = "2026-07-11T07:19:40.636Z" }, +] + +[[package]] +name = "meson-python" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "meson" }, + { name = "packaging" }, + { name = "pyproject-metadata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/f0/d794d7ed8a843a8a8947768f3b329d1e8601222dc95d930f4a5f9706cd6c/meson_python-0.20.0.tar.gz", hash = "sha256:6d9726ae6cd37e22f210c74b364b30180a68c20442e97ff09f3c566a414af738", size = 102641, upload-time = "2026-06-10T19:42:52.132Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/ad/77f9483e180cabab2772ac222aedd3dfab858e60d992f40414a3f08e7494/meson_python-0.20.0-py3-none-any.whl", hash = "sha256:6a744cf0c09e76ecbdc58cfa374b48c8902dac1b74479628238634efbf36aec9", size = 29386, upload-time = "2026-06-10T19:42:50.614Z" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, + { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, + { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12' and sys_platform != 'ios'", + "python_full_version < '3.12' and sys_platform == 'ios'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and sys_platform != 'ios'", + "python_full_version >= '3.12' and sys_platform == 'ios'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pybind11" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/f0/35145a3c3baffeef55d4b8324caa33abaa8fa56ab345ecd4b2211d09163e/pybind11-3.0.4.tar.gz", hash = "sha256:3286b59c8a774b9ee650169302dd5a4eedc30a8617905a0560dd8ee44775130c", size = 589533, upload-time = "2026-04-19T03:08:15.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/06/c3a23c9a0263b136c519f033a58d4641e73065fefc7754e9667ec206d992/pybind11-3.0.4-py3-none-any.whl", hash = "sha256:961720ee652da51d531b7b2451a6bd2bc042b0106e6d9baa48ecb7d58034ce63", size = 314166, upload-time = "2026-04-19T03:08:14.091Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "pyproject-metadata" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/76/1cae539918a7b1746d624c2f01560b793c22cd8c081157505bb9bbf0e34d/pyproject_metadata-0.12.1.tar.gz", hash = "sha256:8809a4df6fe08279b39a8890669506ed3158e0617855ac9aff098fcbe772ae4c", size = 48457, upload-time = "2026-07-04T02:19:32.029Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/8e/d883718e872abc214ba053f60f7e6edc2abd5ffbd1544beb01a9c92ddd3c/pyproject_metadata-0.12.1-py3-none-any.whl", hash = "sha256:f7162d580a96386a8eb096da06215f981f547d1490f03055ef99e323bc2da427", size = 23452, upload-time = "2026-07-04T02:19:30.657Z" }, +] diff --git a/e2e/crossbuild/geohash/BUILD.bazel b/e2e/crossbuild/geohash/BUILD.bazel new file mode 100644 index 000000000..63b21f86c --- /dev/null +++ b/e2e/crossbuild/geohash/BUILD.bazel @@ -0,0 +1,158 @@ +# python-geohash has no prebuilt wheel — this package covers the actual +# cross-compilation of its C++ extension for linux/amd64, linux/arm64, and +# (from a macOS host) arm64/amd64 macOS. See //psycopg2 for the +# platform-transition-only packaging coverage. + +load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@container_structure_test//:defs.bzl", "container_structure_test") +load("@rules_oci//oci:defs.bzl", "oci_image") +load("@rules_shell//shell:sh_test.bzl", "sh_test") +load("//tools:checks.bzl", "assert_so_arch", "assert_so_suffix") + +# assert_so_arch/assert_so_suffix thread this into a genrule cmd, so a +# trailing "$" (the regex end-anchor) must be doubled for Bazel's Make-variable +# expansion, same as $$(...) elsewhere in a cmd string. +_SO_PATTERN = "site-packages/_geohash.*\\.so$$" + +exports_files(["require_cxx_driver.patch"]) + +py_binary( + name = "geohash_bin", + srcs = ["geohash_main.py"], + dep_group = "crossbuild", + main = "geohash_main.py", + python_version = "3.12", + deps = [ + "@pypi_crossbuild//python_geohash", + ], +) + +py_image_layer( + name = "geohash_layers", + binary = ":geohash_bin", +) + +platform_transition_filegroup( + name = "geohash_amd64_layers", + srcs = [":geohash_layers"], + target_platform = "//:amd64_linux", +) + +platform_transition_filegroup( + name = "geohash_arm64_layers", + srcs = [":geohash_layers"], + target_platform = "//:arm64_linux", +) + +# Bazel-9-safe version of the ELF/suffix checks below. +build_test( + name = "geohash_build_test", + targets = [ + ":geohash_amd64_layers", + ":geohash_arm64_layers", + ], +) + +# ELF machine byte and EXT_SUFFIX/SOABI of the built .so — catches a cross +# build that silently fell back to the host compiler despite claiming the +# right wheel tag. +assert_so_arch( + name = "geohash_so_arch_amd64_test", + actual = ":geohash_amd64_layers", + expected_machine_hex = "3e00", + so_pattern = _SO_PATTERN, +) + +assert_so_arch( + name = "geohash_so_arch_arm64_test", + actual = ":geohash_arm64_layers", + expected_machine_hex = "b700", + so_pattern = _SO_PATTERN, +) + +assert_so_suffix( + name = "geohash_so_suffix_amd64_test", + actual = ":geohash_amd64_layers", + expected_suffix = "cpython-312-x86_64-linux-gnu", + so_pattern = _SO_PATTERN, +) + +assert_so_suffix( + name = "geohash_so_suffix_arm64_test", + actual = ":geohash_arm64_layers", + expected_suffix = "cpython-312-aarch64-linux-gnu", + so_pattern = _SO_PATTERN, +) + +oci_image( + name = "geohash_image", + base = "@ubuntu", + entrypoint = ["/app"], + tars = [":geohash_layers"], +) + +platform_transition_filegroup( + name = "geohash_amd64_image", + srcs = [":geohash_image"], + target_platform = "//:amd64_linux", +) + +platform_transition_filegroup( + name = "geohash_arm64_image", + srcs = [":geohash_image"], + target_platform = "//:arm64_linux", +) + +container_structure_test( + name = "geohash_amd64_image_command_test", + configs = ["geohash_image_command_test.yaml"], + image = ":geohash_amd64_image", + platform = "linux/amd64", + tags = ["requires-docker"], +) + +# Runs the arm64 build under QEMU (binfmt_misc) instead of just checking its +# ELF/suffix — proves the extension computes the right answer, not just that +# it looks cross-compiled. Local repro: sudo apt-get install qemu-user-static +# binfmt-support. +container_structure_test( + name = "geohash_arm64_image_command_test", + configs = ["geohash_image_command_test.yaml"], + image = ":geohash_arm64_image", + platform = "linux/aarch64", + tags = [ + "requires-docker", + "requires-qemu", + ], +) + +# geohash_bin with no platform override already targets the ambient host, +# so no transition is needed to exercise native macOS. +sh_test( + name = "geohash_macos_native_test", + srcs = ["check_geohash_output.sh"], + args = ["$(rootpath :geohash_bin)"], + data = [":geohash_bin"], + target_compatible_with = ["@platforms//os:macos"], +) + +# manual, not target_compatible_with: the transition below always resolves +# to os:macos regardless of the real host, so target_compatible_with can't +# tell Linux apart from macOS here. test.sh invokes both by label after +# checking uname. +platform_transition_filegroup( + name = "geohash_amd64_macos_bin", + srcs = [":geohash_bin"], + tags = ["manual"], + target_platform = "//:amd64_macos", +) + +sh_test( + name = "geohash_macos_amd64_cross_test", + srcs = ["check_geohash_output.sh"], + args = ["$(rootpath :geohash_amd64_macos_bin)"], + data = [":geohash_amd64_macos_bin"], + tags = ["manual"], +) diff --git a/e2e/crossbuild/geohash/check_geohash_output.sh b/e2e/crossbuild/geohash/check_geohash_output.sh new file mode 100755 index 000000000..0a7fa5e1c --- /dev/null +++ b/e2e/crossbuild/geohash/check_geohash_output.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# geohash_main.py asserts geohash.encode(37.7749, -122.4194) itself and only +# prints "OK" on success, so this just has to confirm the binary reached +# that point rather than re-checking the expected geohash value here too. +set -euo pipefail + +bin="${1:?usage: check_geohash_output.sh }" +expected="OK" + +actual="$("$bin")" +if [[ "$actual" != "$expected" ]]; then + echo "FAIL: $bin printed '$actual', expected '$expected'" + exit 1 +fi + +echo "PASS: $bin printed '$actual'" diff --git a/e2e/crossbuild/geohash/geohash_image_command_test.yaml b/e2e/crossbuild/geohash/geohash_image_command_test.yaml new file mode 100644 index 000000000..075bf6ec9 --- /dev/null +++ b/e2e/crossbuild/geohash/geohash_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# geohash.encode(37.7749, -122.4194) is deterministic across architectures; +# geohash_main.py asserts the exact value and only prints "OK" on success. +commandTests: + - name: geohash encodes correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/geohash/geohash_main.py b/e2e/crossbuild/geohash/geohash_main.py new file mode 100644 index 000000000..70580279b --- /dev/null +++ b/e2e/crossbuild/geohash/geohash_main.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +import geohash + + +def main() -> None: + encoded = geohash.encode(37.7749, -122.4194) + assert encoded == "9q8yyk8ytpxr", "geohash.encode returned {!r}, expected '9q8yyk8ytpxr'".format(encoded) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch b/e2e/crossbuild/geohash/require_cxx_driver.patch similarity index 100% rename from e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch rename to e2e/crossbuild/geohash/require_cxx_driver.patch diff --git a/e2e/crossbuild/jpype1/BUILD.bazel b/e2e/crossbuild/jpype1/BUILD.bazel new file mode 100644 index 000000000..c29d5c161 --- /dev/null +++ b/e2e/crossbuild/jpype1/BUILD.bazel @@ -0,0 +1,17 @@ +# jpype1 ships official prebuilt wheels for linux/amd64 and linux/arm64, but +# [tool.uv] no-binary-package forces it to build from sdist here. Its +# scikit-build-core/CMake build additionally needs a JDK (javac/JNI headers) +# and Apache Ant (to build a Java-side JAR) — both always exec-platform +# tools regardless of what CPU _jpype.so targets, since jpype1's compiled +# extension only links against libdl, never against libjvm/libjawt (see +# CMakeLists.txt's target_link_libraries), and the JAR Ant produces is +# portable JVM bytecode. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "jpype1", + check_so_suffix = False, + deps = ["@pypi_crossbuild_jpype1//jpype1"], + so_pattern = "whl_install__crossbuild_jpype1.*_jpype.*\\.so$$", +) diff --git a/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml b/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml new file mode 100644 index 000000000..fdc4cdcd7 --- /dev/null +++ b/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# jpype1_main.py asserts jpype.__version__ itself and only prints "OK" on +# success. +commandTests: + - name: jpype1 imports successfully after an Ant + JNI cross build + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/jpype1/jpype1_main.py b/e2e/crossbuild/jpype1/jpype1_main.py new file mode 100644 index 000000000..13d5d2088 --- /dev/null +++ b/e2e/crossbuild/jpype1/jpype1_main.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +import jpype + + +def main() -> None: + # jpype.__version__ is a plain constant baked into the pure-Python + # package — checking it proves the compiled _jpype extension (and its + # Java-side JAR, built via Ant) imported successfully, without needing + # to actually start a JVM at runtime (which would need a target-arch JRE + # inside the image too). + assert jpype.__version__ == "1.7.1", "expected jpype 1.7.1, got {}".format(jpype.__version__) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/jpype1/pyproject.toml b/e2e/crossbuild/jpype1/pyproject.toml new file mode 100644 index 000000000..752870bad --- /dev/null +++ b/e2e/crossbuild/jpype1/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "crossbuild_jpype1" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "jpype1==1.7.1", + "scikit-build-core", + "setuptools", + "wheel", +] + +[tool.uv] +no-binary-package = ["jpype1"] diff --git a/e2e/crossbuild/jpype1/uv.lock b/e2e/crossbuild/jpype1/uv.lock new file mode 100644 index 000000000..2a0b9eee6 --- /dev/null +++ b/e2e/crossbuild/jpype1/uv.lock @@ -0,0 +1,149 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-jpype1" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "jpype1" }, + { name = "scikit-build-core" }, + { name = "setuptools" }, + { name = "wheel" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "jpype1", specifier = "==1.7.1" }, + { name = "scikit-build-core" }, + { name = "setuptools" }, + { name = "wheel" }, +] + +[[package]] +name = "jpype1" +version = "1.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/a2/5d27e81d24eef64668bf702bfe0e091cc48388b4666f36e025243eb9d827/jpype1-1.7.1.tar.gz", hash = "sha256:3cd88838dc3d2d546f7eaeadaaff864e590010c15f2b6a44b6f37e60796a14b2", size = 783791, upload-time = "2026-05-06T23:55:10.664Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/5e/5611d50222d146a060dbf22e69c4017545341ea6b289a591d5a9bdaad718/jpype1-1.7.1-1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:4c81ee11aee5ed938d7415877cd9c7a0cc9cbf1dac87f7eab928e641323a385b", size = 571633, upload-time = "2026-05-19T20:19:33.536Z" }, + { url = "https://files.pythonhosted.org/packages/79/32/8b2279b12364f260111c7843bf9ede7dc442d5521d6d2ca728b3d522d445/jpype1-1.7.1-1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b3ddd9f9099202212a34679dfb95dda590bcfbd23289559d104e24abec9120d1", size = 569654, upload-time = "2026-05-19T20:19:36.41Z" }, + { url = "https://files.pythonhosted.org/packages/b5/67/5caa0de30bcb1c8786cc988144a68908e0624de20cfed470a67b1dd1f60c/jpype1-1.7.1-1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:6d491a81281407f8a68552eb3c0e635e576e066c069268dc29a1ea27bb4778ae", size = 569800, upload-time = "2026-05-19T20:19:38.877Z" }, + { url = "https://files.pythonhosted.org/packages/5b/1d/9ee10b1aad9f01ea6ac6159981120eb5ace01962f9cfaa7de6b911de3eb8/jpype1-1.7.1-1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:ace0ba1a67561358fa5b57b8e93ed8bcf16f0a8d5cba79c875089c56827adf8e", size = 569753, upload-time = "2026-05-19T20:19:41.514Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c8/f0f306866dfa2bae97f83db48aa084ed049583f61dfba713124211b08fdf/jpype1-1.7.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2e1459738e9baf560548965b364206890acf34e42673efcfe5048c2c1203e4cf", size = 375606, upload-time = "2026-05-06T23:54:01.62Z" }, + { url = "https://files.pythonhosted.org/packages/28/a9/08eb2c8556598043981692251180479babc56086c5464bb2631929b94acf/jpype1-1.7.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fc68b8e94ba5981e6142b4bcbbfa262ebe41438a679e0ebc2daf0759cc8d3e19", size = 408134, upload-time = "2026-05-06T23:54:04.251Z" }, + { url = "https://files.pythonhosted.org/packages/e2/61/36001f0979fa0fffa28dac49f44cbb642cfcbd9f67e090d7fb9a8ace9e80/jpype1-1.7.1-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:47bc10f263fc8ea3f97e46a753e355a565c317a61109f298169fcc4365ff415f", size = 454588, upload-time = "2026-05-06T23:54:06.804Z" }, + { url = "https://files.pythonhosted.org/packages/c0/e7/140c78ee6c0804b1ff5eb8313eb76a29e49e973da810539cabf6d454e6bc/jpype1-1.7.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4cabb1d0c23bd8455ab0ef027a6a4b62d6e49c95b96ef8ff652ea83cbba6de6c", size = 439352, upload-time = "2026-05-06T23:54:09.416Z" }, + { url = "https://files.pythonhosted.org/packages/f2/38/8efa98a77f028895bb2cd6eb134b670334e376011f24e6c0f502f515987e/jpype1-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:3af59fdbf1798158b01f1a68b7b19ff805a2d18175542434d6aa89e45d5e53b5", size = 357971, upload-time = "2026-05-06T23:54:11.74Z" }, + { url = "https://files.pythonhosted.org/packages/87/76/6a3aef14a4f21e0254a20f3ae446566274cf84e6079bad00ec784dab4dfa/jpype1-1.7.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7328a61ae4945bd2963c15b7d7ead1d8dfc71ea784dec43dedbea4437d645843", size = 374560, upload-time = "2026-05-06T23:54:14.007Z" }, + { url = "https://files.pythonhosted.org/packages/72/ad/e2db5dae7cd821385096f607deb79bcdd25331c07a58608318d4dade2e48/jpype1-1.7.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158aee356b2c0bf489939d85f6fb31e54a800bd2d95a89b83e5bd7c07fdb048e", size = 407331, upload-time = "2026-05-06T23:54:15.87Z" }, + { url = "https://files.pythonhosted.org/packages/c3/97/f54c66ed8a9ce33fdc87991712260169c1f9ec514110e266b3a56b73ef13/jpype1-1.7.1-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:1cde7f185ef36c2840daf9293423d609eace5b79c632e2267023d6c75ef52988", size = 453957, upload-time = "2026-05-06T23:54:18.684Z" }, + { url = "https://files.pythonhosted.org/packages/03/ed/bc55cc34dd54864a5a717c3f76ff2771961154325aef683d8e4b85b7c51a/jpype1-1.7.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4de86ec7f9f381c7aea8cbbecaa189c020e5fb700620bd96f4762f954757656b", size = 438525, upload-time = "2026-05-06T23:54:21.395Z" }, + { url = "https://files.pythonhosted.org/packages/ca/80/c0098bedd014bc9a1a8a349e40a1fc1408c79af28f6c32bdbb1a2b839c7b/jpype1-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:d7dad528c73d02987358485dc37fab36edb9ad8bce53533e65f54cff1b68a4bc", size = 356985, upload-time = "2026-05-06T23:54:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/22/1c/d3e60c3fefb0ed22afc27e7ed6032565f9c5cbf1452ff03129b8f7354195/jpype1-1.7.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:2c54e9c7b7df819631db2cc8e64eaded7884d7dfaa67c035c70de512a8987b34", size = 374581, upload-time = "2026-05-06T23:54:25.801Z" }, + { url = "https://files.pythonhosted.org/packages/6f/10/47d8327d96f6aa9049ea84189508ed446e81b233d8978d49b737b4a0df51/jpype1-1.7.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:988d2db564b61ffcc4fa9533fb65e98037d869b866e02c145e49125554cad6cc", size = 407509, upload-time = "2026-05-06T23:54:27.94Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/995f4ac18eb3016c3819af5ce0c1a89e94f1cbefc560db688118b32eab3d/jpype1-1.7.1-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:1c387dc58f28aefce50955eb7f24403f05b8a2942ef22c7f08d731d1fc753a50", size = 454093, upload-time = "2026-05-06T23:54:30.702Z" }, + { url = "https://files.pythonhosted.org/packages/86/34/1a45d77fc164daef989b650254144c323462ba00895cedfcb794a7a5dbab/jpype1-1.7.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:907a4dcc89cca1655fe3fad389e9f60d5c681ddf070927a9013a6d0f64ccf118", size = 438527, upload-time = "2026-05-06T23:54:33.033Z" }, + { url = "https://files.pythonhosted.org/packages/dd/10/1f47deb971c20519233577474d397255bbdc4717aa7f0192b0b505d7b47b/jpype1-1.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:969e160c15ab83b21c657837797ddae3701482d3db54f57ae81c75b558942533", size = 357069, upload-time = "2026-05-06T23:54:42.379Z" }, + { url = "https://files.pythonhosted.org/packages/83/79/760198389ce7e3a6048fd54e1ab5e31139298e2d253cbb9181b1a2cbe48f/jpype1-1.7.1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0486725034916270f1c28e27bd74ef793f96d41b822956e3edf5666f99058665", size = 409596, upload-time = "2026-05-06T23:54:35.07Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4e/175b0d0c8e29f7ba6e00f0588e2df06773796bd3c58fa5910cee3aefe40b/jpype1-1.7.1-cp313-cp313t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:39b57767ed33bba453e4c81f2dfcb39be8b3ad25eaeedd96391e171bde3c765f", size = 455365, upload-time = "2026-05-06T23:54:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/29/a9/0576c3d54bfa0bd6b9392f4624bd39bc9cc924a5362ba95d16e3ad77778a/jpype1-1.7.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7605e33971f8f16634e4786ce0a4b2d1691aebd09ca21fdc7a700e9a0f3dd6a7", size = 439563, upload-time = "2026-05-06T23:54:40.188Z" }, + { url = "https://files.pythonhosted.org/packages/91/4e/3bc23e8f50e7bbec2e0f7479346ca17fbc4811df2c710ae6be573ad9317d/jpype1-1.7.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b5e87d88523354d3e46769e4d3244318571d6d35a170febf4f82e3ce408d54b1", size = 374428, upload-time = "2026-05-06T23:54:44.457Z" }, + { url = "https://files.pythonhosted.org/packages/59/1f/0cf0b34e73dd8622ae6fd0e2393edbc5ba5365d76349486ba02292c3cc98/jpype1-1.7.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d32ace75bfc63ccac22258e1d2de33210cfb20d2520db0b413f2b9b1318dd96", size = 407388, upload-time = "2026-05-06T23:54:46.634Z" }, + { url = "https://files.pythonhosted.org/packages/2d/70/6c800d4e3a00200c5c8f52f32db4400623e0d9c1c5136834acb9230478ce/jpype1-1.7.1-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:295934261cede86a6d47b3ad6fd4c259aefe07d4f292a23ea6b33a75f40b3153", size = 454007, upload-time = "2026-05-06T23:54:49.442Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7f/858a229a9525bc717594dc394cc1d0677c786513285da54d0c0ba90d9342/jpype1-1.7.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29977b16a6f88a617fb274994108d816b59680fdab10edb03fd57b1da4ff3e61", size = 438408, upload-time = "2026-05-06T23:54:52.404Z" }, + { url = "https://files.pythonhosted.org/packages/09/d0/adba12d654a84c8e2af8c401acf3fe6b85d98f2ee1f6c29afecae826e871/jpype1-1.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:bff1d3561afb5fdd38f8a69d03669450662c242ec245804240c1ce82c2fc5398", size = 364457, upload-time = "2026-05-06T23:55:01.661Z" }, + { url = "https://files.pythonhosted.org/packages/c2/06/e9b4c867381b0c2573e5080464586b4956de9e3b0c1f40c551f17d1052c9/jpype1-1.7.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:906381e076b2dbbbbef830a7d1be7bdde4f35e59c3c058e40f1e4a36024bcde5", size = 409453, upload-time = "2026-05-06T23:54:54.866Z" }, + { url = "https://files.pythonhosted.org/packages/2f/43/c3cb7b6c82d9f901c1316d25016d18bfad0381eb55cfc960b7f999a42ef3/jpype1-1.7.1-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:7bef4ac17e0b0dbb96ee6afbd8878a5fa85353e3eb3eba4fe86e1df3dd62eb1b", size = 455217, upload-time = "2026-05-06T23:54:57.552Z" }, + { url = "https://files.pythonhosted.org/packages/9f/87/f5b46e288dc3a0c7c6fb02e00f68a621035fa03cac3b6b489effd4170b13/jpype1-1.7.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b230c9475525b29114e6396b864c154f02f7cb041f2ac6bde006ed569e579aea", size = 439454, upload-time = "2026-05-06T23:54:59.609Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "scikit-build-core" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pathspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/7c/0f69b0c7150ce4bcee78c199fe3b7e03a6e01578451bd5d5d1a58beb32f9/scikit_build_core-1.0.3.tar.gz", hash = "sha256:a4d7a05978ee37975c37743510c8991e2debce7ef83afb0a07c0c576fd4f16e8", size = 477539, upload-time = "2026-07-12T05:08:30.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b0/7ad8fa9aebb0835b2e20afebf1483cbe175d1612fe01e85042ce9ced8755/scikit_build_core-1.0.3-py3-none-any.whl", hash = "sha256:ae95427b7d3c14a6cf8bbfd4d901f6138ab64c99e20cbe8ea7d75cd26093f085", size = 278294, upload-time = "2026-07-12T05:08:28.725Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] + +[[package]] +name = "wheel" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, +] diff --git a/e2e/crossbuild/msgpack/BUILD.bazel b/e2e/crossbuild/msgpack/BUILD.bazel new file mode 100644 index 000000000..7a4b78219 --- /dev/null +++ b/e2e/crossbuild/msgpack/BUILD.bazel @@ -0,0 +1,16 @@ +# msgpack-python ships official prebuilt wheels for linux/amd64 and +# linux/arm64, but [tool.uv] no-binary-package forces it to build from +# sdist here. Same setuptools/distutils backend as //geohash, //zstandard, +# and //psutil, but its extension (_cmsgpack) is generated by Cython — +# committed as pre-Cythonized .c in the sdist, so no Cython build +# dependency is needed — exercising that code-generation path's symbol/link +# pattern rather than a second hand-written-C or hand-written-C++ package. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "msgpack", + check_so_suffix = False, + deps = ["@pypi_crossbuild_msgpack//msgpack"], + so_pattern = "whl_install__crossbuild_msgpack.*_cmsgpack.*\\.so$$", +) diff --git a/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml b/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml new file mode 100644 index 000000000..b4d9efcdb --- /dev/null +++ b/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# msgpack_main.py asserts a real pack/unpack round-trip through the compiled +# _cmsgpack extension itself and only prints "OK" on success. +commandTests: + - name: msgpack round-trips a nested structure correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/msgpack/msgpack_main.py b/e2e/crossbuild/msgpack/msgpack_main.py new file mode 100644 index 000000000..8e9f1a41d --- /dev/null +++ b/e2e/crossbuild/msgpack/msgpack_main.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +import msgpack + + +def main() -> None: + # A round-trip through msgpack's compiled Cython extension (_cmsgpack) + # must reproduce the exact same structure, including nested types. + payload = {"a": 1, "b": [1, 2, 3], "c": "text", "d": None, "e": True} + packed = msgpack.packb(payload) + unpacked = msgpack.unpackb(packed, raw=False) + assert unpacked == payload, "round-trip produced {!r}, expected {!r}".format(unpacked, payload) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/msgpack/pyproject.toml b/e2e/crossbuild/msgpack/pyproject.toml new file mode 100644 index 000000000..1d6b56870 --- /dev/null +++ b/e2e/crossbuild/msgpack/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "crossbuild_msgpack" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "msgpack==1.2.1", + "setuptools", +] + +[tool.uv] +no-binary-package = ["msgpack"] diff --git a/e2e/crossbuild/msgpack/uv.lock b/e2e/crossbuild/msgpack/uv.lock new file mode 100644 index 000000000..844642782 --- /dev/null +++ b/e2e/crossbuild/msgpack/uv.lock @@ -0,0 +1,133 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-msgpack" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "msgpack" }, + { name = "setuptools" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "msgpack", specifier = "==1.2.1" }, + { name = "setuptools" }, +] + +[[package]] +name = "msgpack" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647", size = 183960, upload-time = "2026-06-18T16:13:52.594Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/6b/e9b1cdc042c4458801d2545ed782a95f3d6ba8e270cce8745b8603c7f748/msgpack-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22", size = 82812, upload-time = "2026-06-18T16:12:45.022Z" }, + { url = "https://files.pythonhosted.org/packages/0c/3a/dd518a1bf78ed1e9ad8afe57307c079a00eafe4b3068932a27ca1ea56b4f/msgpack-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5", size = 82739, upload-time = "2026-06-18T16:12:46.025Z" }, + { url = "https://files.pythonhosted.org/packages/70/e0/7ba9e1542bf0771a27b8b37c1316e3f95ae9d748fd765284655c476ad4ef/msgpack-1.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06", size = 414233, upload-time = "2026-06-18T16:12:47.029Z" }, + { url = "https://files.pythonhosted.org/packages/03/8d/671d81534ea0e2b0e8a121be100020da09eb78861fe3aa8f3ef7dcd3bed1/msgpack-1.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4", size = 423843, upload-time = "2026-06-18T16:12:48.19Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b6/e5c737515ed1f166664b87601b532f58cbb73d8aa6a90b99f7c2c5037e8e/msgpack-1.2.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8", size = 390772, upload-time = "2026-06-18T16:12:49.624Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/62ed8c2e87d7021eab19921594d961ef3aa3794eec76c716dc30f3bfd433/msgpack-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b", size = 409559, upload-time = "2026-06-18T16:12:50.936Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/59aa3887b860bbf43532835e192b1c388a17590d6068ae4f8b2bc74c906e/msgpack-1.2.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e", size = 387838, upload-time = "2026-06-18T16:12:52.161Z" }, + { url = "https://files.pythonhosted.org/packages/09/11/f8563e471093420cf6478cb3271a0175d8402b82d879783d4035d2d03360/msgpack-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f", size = 421732, upload-time = "2026-06-18T16:12:53.556Z" }, + { url = "https://files.pythonhosted.org/packages/57/cf/e673683c4c6c90c1022b24c65af4b03eda72b182a1176ef6449069d66acc/msgpack-1.2.1-cp311-cp311-win32.whl", hash = "sha256:91054a783328e0ea7954b8771095705c8d2243b814743fbaadf14552c9c52c5d", size = 64091, upload-time = "2026-06-18T16:12:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/3f/07/ca212739d179f9083bff2c7c08c24101c3555a334fadc2b876b18768a3ae/msgpack-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2eda0b7ebb1283a98d3e4492ac933c8af6aff59fd3df1c3ed024f536af4b1dc8", size = 70462, upload-time = "2026-06-18T16:12:55.898Z" }, + { url = "https://files.pythonhosted.org/packages/6d/be/6798347b425e26f35db82e69dd83c09716c856a3714e7bffc4c0860fd830/msgpack-1.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:6ee967f7c7e1df2890c671ff2ee51a28ded0efc95da3e507176dee881ce36c66", size = 65059, upload-time = "2026-06-18T16:12:57.053Z" }, + { url = "https://files.pythonhosted.org/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35", size = 83531, upload-time = "2026-06-18T16:12:58.249Z" }, + { url = "https://files.pythonhosted.org/packages/50/2e/ebdb85a8da151397a2790363676b7ed7c125924fe618e4c6d8befb0cc62c/msgpack-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c", size = 82657, upload-time = "2026-06-18T16:12:59.396Z" }, + { url = "https://files.pythonhosted.org/packages/26/aa/753ad8b007b464e1d8aa0c8e650b9c5f4f725e658fc5ac8a7635c55b7f6e/msgpack-1.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60926b75d00c8e816ef98f3034f484a8bc64242d66839cef4cf7e503142316a0", size = 410634, upload-time = "2026-06-18T16:13:00.383Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a", size = 419989, upload-time = "2026-06-18T16:13:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cc/85039b7b0eb168aaad7383a23c97e291a11f08351cb45a606ce865e4e3f1/msgpack-1.2.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4202c74688ca06591f78cb18988228bd4cca2cc75d57b60008372892d2f1e6e6", size = 377544, upload-time = "2026-06-18T16:13:03.637Z" }, + { url = "https://files.pythonhosted.org/packages/ed/bf/35963899493b32030c85fc513b723ae66144ac70c11ebc52e889e16e3d99/msgpack-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8b267ce94efb76fbd1b3373511420074ee3187f0f7811bf394531de13294735a", size = 400842, upload-time = "2026-06-18T16:13:05.012Z" }, + { url = "https://files.pythonhosted.org/packages/a6/df/8e2ac970c8f99264cd9997d1c73df5466bc19da3301d7dc5500862a9b089/msgpack-1.2.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e4f1d0f8f98ade9634e01fb704a408f9336c0a8f1117b369f5db83dc7551d8b1", size = 374108, upload-time = "2026-06-18T16:13:06.232Z" }, + { url = "https://files.pythonhosted.org/packages/17/dd/fa8bd265110dfa51c20cb529f9e6d240a16fafe7e645004c6af2d01353ba/msgpack-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f02cf17a6ca1abe29b5f980644f7551f94d71f2011509b26d8625ce038f0df64", size = 414939, upload-time = "2026-06-18T16:13:07.478Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b9/8377a5ad8953fc0437c70cc98d9ae29f27fe5ac5109fbec0812085865735/msgpack-1.2.1-cp312-cp312-win32.whl", hash = "sha256:0c0d9802354507bcba62af19c17918e3eb437cc25e6f50657d511b5856a77aac", size = 64504, upload-time = "2026-06-18T16:13:08.822Z" }, + { url = "https://files.pythonhosted.org/packages/57/7f/ce1e377df7e62461fefd9eb23bfb93a4a523f40a517b377b8f844d836828/msgpack-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c24aa15d5963051e1a5c62b12c50cd705992502b5ec1f3bece6046f33c9fc24", size = 71421, upload-time = "2026-06-18T16:13:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/8f/32/ebfe84c9929f08f188d56c7a2fd913406a9ddad76a634697c1c43b8112e6/msgpack-1.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:4227224aaec8f7fbcbfbd4272319347b2bb4030366502600f8c45588c5187b07", size = 64775, upload-time = "2026-06-18T16:13:11.056Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ac/dcddcab6f6c20ecb387ca5e980371cdb3f87ff69aeca388be97eebc4c074/msgpack-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a70e3cf2804a300d921bb0940426e35f4e489a23adfb77a808892241db0a064", size = 83151, upload-time = "2026-06-18T16:13:12.173Z" }, + { url = "https://files.pythonhosted.org/packages/64/71/fbcfa83a1d6a9c6091942d1cfd070962244664b87427a9a49a6897b1b219/msgpack-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:491cc39455ca765fad51fb451bf2915eb2cf41192ab5801ce8d67c1d614fe056", size = 82351, upload-time = "2026-06-18T16:13:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/e3/10/ddf7b06db879e8792d13934ddda09ff20bd2a583fd84c9b59aae9b0e650b/msgpack-1.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f310233ef7fb9c14e201c93639fe5f5260b005f56f0b29048e999c30935596cc", size = 407518, upload-time = "2026-06-18T16:13:14.233Z" }, + { url = "https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d", size = 416405, upload-time = "2026-06-18T16:13:15.435Z" }, + { url = "https://files.pythonhosted.org/packages/f9/84/e8e9598b557c0ba6ddae901a73780a4c75ac667dddf59414b1e56a42fb34/msgpack-1.2.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dc871b997a9370d855b7394465f2f350e847a5b806dd38dcc9c989e7d87da155", size = 376257, upload-time = "2026-06-18T16:13:17.022Z" }, + { url = "https://files.pythonhosted.org/packages/40/16/738fe6d875ad7e2a9429c165322a4ec088f4f273cdfae63d96a89c467961/msgpack-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85f57e960d877f2977f6430896191b04a21f8901b3b4baf2e4604329f4db5402", size = 397469, upload-time = "2026-06-18T16:13:18.287Z" }, + { url = "https://files.pythonhosted.org/packages/ca/be/6d5952df75a7f24f35833af764c3a6860780364cb3a0030beb8099e1b2b4/msgpack-1.2.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1233ee2dd0cefba127583de50ea654677277047d238303521db35def3d7b2e7c", size = 372802, upload-time = "2026-06-18T16:13:19.685Z" }, + { url = "https://files.pythonhosted.org/packages/e1/39/e2ef7dbf0473bcb8dc7c50bf782a892d67414877b63e47fc88eb189ef5e6/msgpack-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3dc2feb0876209d9c38aa56cb1de169bd6c4348f1aa48271f241226590993e6", size = 411273, upload-time = "2026-06-18T16:13:21.028Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c5/133f4512a56e983a93445c836c9d94d88f3bc2e0980ff4b9e577bd8416ce/msgpack-1.2.1-cp313-cp313-win32.whl", hash = "sha256:6d09badf350af2be9d189184e04e64cf54ad93569ab3d96fca58bd3e84aad707", size = 64471, upload-time = "2026-06-18T16:13:22.293Z" }, + { url = "https://files.pythonhosted.org/packages/e2/98/577e10b055096a7dd40732358cabaf7180a20c79ed1dcdbb618e4b9deac7/msgpack-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:33f14fba63278b714efe6ad07e50ea5f03d91537aa6a1c5f1ceca4cf44013ca9", size = 71274, upload-time = "2026-06-18T16:13:23.455Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ee/0c0048e7cfbef23c6a94791b8959ab28155232e7956de8a305b5ff588f05/msgpack-1.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc5febcd4c99effbc02b528e49d6fd0760b2b7d48c05239e345a5fa6e743d9a", size = 64795, upload-time = "2026-06-18T16:13:24.687Z" }, + { url = "https://files.pythonhosted.org/packages/77/58/cce442852c6b9e1639c7c8ac8fd9143121cb32dab0f308df4d1426a8eb9c/msgpack-1.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:05f340e47e7e47d2da8db9b53e1bb1d294369e9ef45a747441309f6650b8351d", size = 83610, upload-time = "2026-06-18T16:13:25.724Z" }, + { url = "https://files.pythonhosted.org/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7", size = 83138, upload-time = "2026-06-18T16:13:26.781Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a6/99e58722feaffc5f2fbcc0c8c0d1451ab9f84097f7af87291b46af2390f4/msgpack-1.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca0dacff965c47afdc3749a8469d7302a8f801d6a28758d55120d75e66ce6889", size = 406090, upload-time = "2026-06-18T16:13:28.072Z" }, + { url = "https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720", size = 412106, upload-time = "2026-06-18T16:13:29.427Z" }, + { url = "https://files.pythonhosted.org/packages/63/d2/155d9e71b40e41fd934bc0c48b9b2770f22263e1ac20aad8e29fdca7be3f/msgpack-1.2.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6c4be5d1c02a42b066ca6ddb71adf36432868fdcdb6ee87e634e86e0674190", size = 374851, upload-time = "2026-06-18T16:13:30.631Z" }, + { url = "https://files.pythonhosted.org/packages/98/48/deaf2326262a8d5ea3295ce9649912ecd3f551ba7ec8e33c665d2ba583f3/msgpack-1.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec0e675d59150a6269ddc9139087c722292664a37d071a849c05c473350f1f2d", size = 396168, upload-time = "2026-06-18T16:13:31.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/2a/b4410f906c2ec0008f1608d3ab5143afc3ad3f4e6da0fed3ea2231d0bef4/msgpack-1.2.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:dd3bfe82d53edfe4b7fc9a7ec9761e23a7a5b1dac22264505af428253c29ed24", size = 371959, upload-time = "2026-06-18T16:13:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/59/86/1edc67270099a528fa2093ea60fe191233cd238e4bd30cfacf7db79fc959/msgpack-1.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5ad5467fc3f68b5468e06c5f788d712e9f8ffc8b0cd1bcb160c105c1ee92dae7", size = 408457, upload-time = "2026-06-18T16:13:34.567Z" }, + { url = "https://files.pythonhosted.org/packages/82/90/8b630fef07d8c5ab457b71ff2c217910c83d333c7a68472c186e87cc504a/msgpack-1.2.1-cp314-cp314-win32.whl", hash = "sha256:98b58bdb89c46190e4609bb36abe17c6d4105ad13f9c5f8f6f64d320f8ced3fb", size = 65942, upload-time = "2026-06-18T16:13:36.056Z" }, + { url = "https://files.pythonhosted.org/packages/16/f1/467b81e98b24dd3885d7b1857728797b4ffc76a7a7483af4fb321a07de3c/msgpack-1.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:74847557e28ce71bd3c438a447ca90e4b507e997ddbdef8a12a7b283b86c156b", size = 72627, upload-time = "2026-06-18T16:13:37.079Z" }, + { url = "https://files.pythonhosted.org/packages/a7/1d/5d8c4c89985feb6acefb82a09e501c60392261856d2408d20bfe4f0360b1/msgpack-1.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:b50b727bd652bdc37d950336c848ef20ec54a4cafc38dce19b1cd86ad625d0f7", size = 66908, upload-time = "2026-06-18T16:13:38.23Z" }, + { url = "https://files.pythonhosted.org/packages/1b/02/ad2afb678b4de94496cd432b581759b756a92c1192d8c767edd6b132efdc/msgpack-1.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8d00f177ca88a77c1cf848d204a38f249751650b601cb6532acc68805d8a8273", size = 86000, upload-time = "2026-06-18T16:13:39.44Z" }, + { url = "https://files.pythonhosted.org/packages/54/74/0b797484013128837f3b1cbb6cea019277c4de4e377dc512b4d9a0f92940/msgpack-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5bb9c386f0a329c035ddbab4b72d1028bf9627add8dda41070288563d57ed1b1", size = 86544, upload-time = "2026-06-18T16:13:40.447Z" }, + { url = "https://files.pythonhosted.org/packages/a9/b4/b774d7eb95561739907fec675582f83203cf41c597a418c2589b4bfb8e9d/msgpack-1.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20466cca18c49c7292a8984bc15d65857b171e7264bdcb5f96baf8be238791fc", size = 427661, upload-time = "2026-06-18T16:13:41.574Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f9/3243191dc9937e00756c8bc1b0272fed8f23758e43df2a3b46f533e5090f/msgpack-1.2.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:196300e7e5d6e74d50f1607ab9c06c4a1484c383cd22defd727902591f7e8dde", size = 426375, upload-time = "2026-06-18T16:13:42.936Z" }, + { url = "https://files.pythonhosted.org/packages/23/c7/1693111db9944ba4ad4b67a1e788400d78a0b6af7a6523dc7e4e58f8274b/msgpack-1.2.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575957e79cd51903a4e8495a242442949641e08f1efd5197b43bebd3ea7682b4", size = 380495, upload-time = "2026-06-18T16:13:44.306Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2b/92f86956a0c13e8662f7e2ad630c4eb4db07497b967589bd5245e018b2c1/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8c2ed1e48cc0f460bf3c7780e7137ff21a4e18433451916f2442c1b21036cd7d", size = 410897, upload-time = "2026-06-18T16:13:45.629Z" }, + { url = "https://files.pythonhosted.org/packages/da/ea/1479f72d200313a76fc2f823a79d1e07ed052ab7b8a0280640aa7b95de42/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5f6277e5f783c36786a145e0247fc189a03f35f84b251646e53592d2bc12b355", size = 378519, upload-time = "2026-06-18T16:13:46.998Z" }, + { url = "https://files.pythonhosted.org/packages/f5/4d/fa006060ffa1011d32bfae826fe766fe73e02982183601633b7121058ab3/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9389552ecf4784886345ead0647e4edc96bee37cbab05b75540f542f766c48c", size = 419815, upload-time = "2026-06-18T16:13:48.205Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/aab6c946570496b78e67804721f3d5e2d62a93081b9b37df77764ef56347/msgpack-1.2.1-cp314-cp314t-win32.whl", hash = "sha256:c1c79a604a2969a868a78b6ebd27a887e00c624f14f66b3038e0590cb23332d1", size = 70914, upload-time = "2026-06-18T16:13:49.385Z" }, + { url = "https://files.pythonhosted.org/packages/13/0a/e608956488a2af014cfe6e3d665e090b8ee42aa14b07f8f95b8880d66b09/msgpack-1.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f12038a35fabd52e56a3547bab42401af49a45caa6dd00b34c44de235bc93ee2", size = 77999, upload-time = "2026-06-18T16:13:50.467Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8a/27e2e57055176e366a46b85d02d68e7a5bcfbdd8474c9706375d965f24d3/msgpack-1.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0adcf06ffde0777c0e1a9b771a2b1c4226ba1bbf748c8efcc02fcdeca3299107", size = 71160, upload-time = "2026-06-18T16:13:51.498Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] diff --git a/e2e/crossbuild/numpy/BUILD.bazel b/e2e/crossbuild/numpy/BUILD.bazel new file mode 100644 index 000000000..f19890073 --- /dev/null +++ b/e2e/crossbuild/numpy/BUILD.bazel @@ -0,0 +1,16 @@ +# numpy ships official prebuilt wheels for linux/amd64 and linux/arm64, but +# [tool.uv] no-binary-package forces it to build from sdist here. The only +# other real-world meson-python package besides //contourpy, at far greater +# scale (numpy itself vendors its own meson via +# vendored-meson/meson/meson.py, and needs Cython plus -Dblas=none +# -Dlapack=none since this sandbox has no system BLAS/LAPACK — see +# MODULE.bazel's RULES_PY_MESON_SETUP_ARGS override), so this backend isn't +# validated by one lucky (and comparatively simple) package alone. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "numpy", + deps = ["@pypi_crossbuild_numpy//numpy"], + so_pattern = "whl_install__crossbuild_numpy.*_multiarray_umath.*\\.so$$", +) diff --git a/e2e/crossbuild/numpy/numpy_image_command_test.yaml b/e2e/crossbuild/numpy/numpy_image_command_test.yaml new file mode 100644 index 000000000..f0445d0f4 --- /dev/null +++ b/e2e/crossbuild/numpy/numpy_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# numpy_main.py asserts real elementwise arithmetic and a no-BLAS matmul +# fallback through the compiled core itself and only prints "OK" on success. +commandTests: + - name: numpy computes elementwise arithmetic and a no-BLAS matmul correctly + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/numpy/numpy_main.py b/e2e/crossbuild/numpy/numpy_main.py new file mode 100644 index 000000000..df1777fb0 --- /dev/null +++ b/e2e/crossbuild/numpy/numpy_main.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import numpy as np + + +def main() -> None: + # Plain elementwise arithmetic never touches BLAS regardless of build + # config — a baseline sanity check that the compiled core imported and + # runs at all. + a = np.array([1, 2, 3], dtype=np.int64) + b = np.array([4, 5, 6], dtype=np.int64) + result = (a + b).tolist() + assert result == [5, 7, 9], "elementwise add: got {}, expected [5, 7, 9]".format(result) + + # Matrix multiplication normally routes through BLAS (dgemm) when one is + # linked; built with -Dblas=none, numpy falls back to its own internal + # gemm loop instead — this specifically exercises that fallback path is + # numerically correct, not just present. + m1 = np.array([[1.0, 2.0], [3.0, 4.0]]) + m2 = np.array([[5.0, 6.0], [7.0, 8.0]]) + product = (m1 @ m2).tolist() + expected = [[19.0, 22.0], [43.0, 50.0]] + assert product == expected, "matmul (no-BLAS fallback): got {}, expected {}".format(product, expected) + + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/numpy/pyproject.toml b/e2e/crossbuild/numpy/pyproject.toml new file mode 100644 index 000000000..4a02db46a --- /dev/null +++ b/e2e/crossbuild/numpy/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "crossbuild_numpy" +version = "0.0.0" +requires-python = ">=3.12" +dependencies = [ + "build", + "cython>=3.0.6", + "meson-python>=0.18.0", + "ninja", + "numpy==2.5.1", +] + +[tool.uv] +no-binary-package = ["numpy"] diff --git a/e2e/crossbuild/numpy/uv.lock b/e2e/crossbuild/numpy/uv.lock new file mode 100644 index 000000000..77a4e7e40 --- /dev/null +++ b/e2e/crossbuild/numpy/uv.lock @@ -0,0 +1,211 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" +resolution-markers = [ + "sys_platform != 'ios'", + "sys_platform == 'ios'", +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-numpy" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "cython" }, + { name = "meson-python" }, + { name = "ninja" }, + { name = "numpy" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "cython", specifier = ">=3.0.6" }, + { name = "meson-python", specifier = ">=0.18.0" }, + { name = "ninja" }, + { name = "numpy", specifier = "==2.5.1" }, +] + +[[package]] +name = "cython" +version = "3.2.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/de/db48b8870e766cfea809986cc50c1e986c663a9ab7bafd0ac1a2512c4a26/cython-3.2.9.tar.gz", hash = "sha256:d249c9022ab13286b17bd66f30609e800c5f95efeecb06168990c7a66cecde6c", size = 3293493, upload-time = "2026-07-24T06:21:21.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/37/c74d842306c8fe381c415b37460d5e3086a820fac72b8ff5cb48513ccfcd/cython-3.2.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:114b2dee0fa1daa48a59574d848da0ff1b6bdb725a755e9b92fad14962e1ff8d", size = 3009571, upload-time = "2026-07-24T06:21:52.534Z" }, + { url = "https://files.pythonhosted.org/packages/15/c0/f7c42b161edd585e3ae556fd62a2c72cd80a6ed527a9907f0c5c6fb060de/cython-3.2.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5cd9c5f138cb052130b40ad3b6976d2180c35348410995812678f4636bd8f94", size = 3183562, upload-time = "2026-07-24T06:21:54.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/1b/c04520ac7f3157aa12a69b632c16261170dac9fab6c48608cc004b8f1b17/cython-3.2.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23e80bc885c599e72072e18d0746df82d394b73100c1e153cda7359e6e59fe09", size = 3354811, upload-time = "2026-07-24T06:21:56.72Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/4ce33235a25b19fcd51dc639f0f403b783a3b7f9b1934eade0d993fbe029/cython-3.2.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b1fd5a9c03f72a18618668a8e90d569442ed742f910e3ad003dcc9348e9598b", size = 2778077, upload-time = "2026-07-24T06:21:58.7Z" }, + { url = "https://files.pythonhosted.org/packages/83/fa/7ffbaab88558e28411715ad35d913cac7d64ee965344c185325da84c4309/cython-3.2.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:44b7fc417933d65bf31bce00337ff318efa3ea59daed21d10fe842d41e657c08", size = 2998816, upload-time = "2026-07-24T06:22:00.822Z" }, + { url = "https://files.pythonhosted.org/packages/04/69/feed68904f389452494d9e0861c24228c0bda656f9fbd32f9e5b525b2ef4/cython-3.2.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41637c644d7224d2d3170ee312077c2173693f0d4a0da1c82a0cffa3680a42dc", size = 3185802, upload-time = "2026-07-24T06:22:02.831Z" }, + { url = "https://files.pythonhosted.org/packages/f0/0d/a7f094343e5c4925efac60e6dbdcf8602042e7f54c83ae14ccbc8033d2d9/cython-3.2.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f815cd3387bd88ca9eeabc357ce4bdf884eef0ab2949db0fbd5e0b69fe5ee422", size = 3360405, upload-time = "2026-07-24T06:22:04.645Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ba/a5c25226e29cb4f3a2c97d2b29de10e37c8a6b67b3c2f2a8b16ba713b218/cython-3.2.9-cp313-cp313-win_amd64.whl", hash = "sha256:ddb43637b7749b88644df4319e1c36f767e7fb71a92bb9942558c8de2f1cc5f4", size = 2774714, upload-time = "2026-07-24T06:22:06.953Z" }, + { url = "https://files.pythonhosted.org/packages/3c/69/e5969fa87c7b8833f62fe790e1617a1391112fa55fe12079c41a4553119c/cython-3.2.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:63a42e131112072f912b66734088abc946c6bc42cb7454461a6dfdd2d09d3bae", size = 3013040, upload-time = "2026-07-24T06:22:08.9Z" }, + { url = "https://files.pythonhosted.org/packages/b4/98/8eaceeec00d4f9cc75e3106397c005952e0d710332c4966215b8a110a522/cython-3.2.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f25b402a6f1eed34af2af57603a9aadcf594dacaced1655e925eb317fba3f337", size = 3231531, upload-time = "2026-07-24T06:22:11.028Z" }, + { url = "https://files.pythonhosted.org/packages/94/a4/1e03a0c115afa9de7b06891721d6489d6a05f78934a6897a0f5a409ee2f5/cython-3.2.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d3cba9c4770cf76370fead8d2ae71bc474f3ef67ae4119e455d025726bcdc1c", size = 3372818, upload-time = "2026-07-24T06:22:12.97Z" }, + { url = "https://files.pythonhosted.org/packages/1b/04/b5c4d76723824d84e3761718c51964f7829335ee1c7c16b69f11b111adf0/cython-3.2.9-cp314-cp314-win_amd64.whl", hash = "sha256:56d95c0674c25f281c6ae8f1d17bd425d6c2818bb304ff781831bb5d00d04b0b", size = 2812223, upload-time = "2026-07-24T06:22:14.9Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4a/342312c5fe021c8e0c386e1915d138e0902c48ae179b0374ab04773a8831/cython-3.2.9-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:944dc8747f640b3527649c566a5fc75ee0c15e80642ea2fdae4fe6378e1a9d4a", size = 2899729, upload-time = "2026-07-24T06:22:24.877Z" }, + { url = "https://files.pythonhosted.org/packages/f0/62/ea919ee426cb4d435ec8155e1ee6bcbb46b20d8f070527191b59769d4e7f/cython-3.2.9-cp39-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4b871ad97dd7fb1cbf56f6238c54423febd310afc1d9d9bc70c69c89b7ce57fc", size = 3226650, upload-time = "2026-07-24T06:22:26.947Z" }, + { url = "https://files.pythonhosted.org/packages/18/02/057b4f63e2ced8c3cf217c4e9fb544bfe48145f493347c7ca3f51607526c/cython-3.2.9-cp39-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9b6ebc6c74b4318eaa4e51e520dc8b95ebc7b262953c3ecb24131104681f14e", size = 2881919, upload-time = "2026-07-24T06:22:29.318Z" }, + { url = "https://files.pythonhosted.org/packages/64/e4/e158793ee3de7e4417ba17e7ff1015d6e2cf557cb485ad270b2446c9d1c7/cython-3.2.9-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:92989da161a7d18a7ad4baebc49289b2b77556d5a94916f90140ba26aecf6892", size = 3004702, upload-time = "2026-07-24T06:22:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/d5bbbd743ab4feddb24a7e823b34c3ec4ebab91ff503d16743a4e7ce106b/cython-3.2.9-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e75ec625d8f8781ced690b7a2f5c2d138067711cf24bb8fb68c872c30c2fefe5", size = 2902695, upload-time = "2026-07-24T06:22:33.525Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/80850817395985259f135baa510d9186d3a325df81cd1862060bba977029/cython-3.2.9-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:2b1756ddc3bc0cd4341a515fc420c3e25e13c249f5537159b3fb0bff8d19e55c", size = 3241554, upload-time = "2026-07-24T06:22:35.667Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ce/6be776814f6cb81751f3da737ed537385738148e1ea99f89fb4637799198/cython-3.2.9-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7d41baea51ea00f9237f75af498577827493bca5e9b45bbd4e351543727e589a", size = 3124337, upload-time = "2026-07-24T06:22:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/e2/48/27c948cbbfe6050994e67a497ae530955dcda7e79084319321c49969e0fd/cython-3.2.9-cp39-abi3-win32.whl", hash = "sha256:61d4abbf84f77c8d19361d05d9f51d65d8d95e74f736eae55fa1aed8a1430469", size = 2435609, upload-time = "2026-07-24T06:22:40.005Z" }, + { url = "https://files.pythonhosted.org/packages/17/ef/cf0e1bd7542296f1752be63b027f90271448d8c8062eac66d8e44a79b883/cython-3.2.9-cp39-abi3-win_arm64.whl", hash = "sha256:57a6a78d14f7dd7d6062d9bca694e2a8c1c14113b6ceceea076abcd1161fdc5a", size = 2458025, upload-time = "2026-07-24T06:22:41.973Z" }, + { url = "https://files.pythonhosted.org/packages/00/ec/e61deec9bcfbb0e1b36f8b5ba75cb44644419b4bfd0fdd666bffd21d9579/cython-3.2.9-py3-none-any.whl", hash = "sha256:a2b0e87f6b80790c929308ca0831d686f7a180feab684fe8cd4a4380bd96aaca", size = 1259272, upload-time = "2026-07-24T06:21:18.95Z" }, +] + +[[package]] +name = "meson" +version = "1.11.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/ce/c4d3d849d5cf8d9193b075acf435fb5dc0f4bdab35a3486f1204fd8265a7/meson-1.11.2.tar.gz", hash = "sha256:698feae069cef3ecd4d7aaf281d7df359bdfcf555a9a1564383d3b913fa8a736", size = 2463316, upload-time = "2026-07-11T07:19:44.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/c5/680527bdddf039807f22041882678b7f21d3380b4cdbc46abf2f24e2db6c/meson-1.11.2-py3-none-any.whl", hash = "sha256:7e4f6e83fec83e3eaac928e058b073c7557b282c35b6a2024cea143a39926a39", size = 1078911, upload-time = "2026-07-11T07:19:40.636Z" }, +] + +[[package]] +name = "meson-python" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "meson" }, + { name = "packaging" }, + { name = "pyproject-metadata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/f0/d794d7ed8a843a8a8947768f3b329d1e8601222dc95d930f4a5f9706cd6c/meson_python-0.20.0.tar.gz", hash = "sha256:6d9726ae6cd37e22f210c74b364b30180a68c20442e97ff09f3c566a414af738", size = 102641, upload-time = "2026-06-10T19:42:52.132Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/ad/77f9483e180cabab2772ac222aedd3dfab858e60d992f40414a3f08e7494/meson_python-0.20.0-py3-none-any.whl", hash = "sha256:6a744cf0c09e76ecbdc58cfa374b48c8902dac1b74479628238634efbf36aec9", size = 29386, upload-time = "2026-06-10T19:42:50.614Z" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, + { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, + { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "pyproject-metadata" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/76/1cae539918a7b1746d624c2f01560b793c22cd8c081157505bb9bbf0e34d/pyproject_metadata-0.12.1.tar.gz", hash = "sha256:8809a4df6fe08279b39a8890669506ed3158e0617855ac9aff098fcbe772ae4c", size = 48457, upload-time = "2026-07-04T02:19:32.029Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/8e/d883718e872abc214ba053f60f7e6edc2abd5ffbd1544beb01a9c92ddd3c/pyproject_metadata-0.12.1-py3-none-any.whl", hash = "sha256:f7162d580a96386a8eb096da06215f981f547d1490f03055ef99e323bc2da427", size = 23452, upload-time = "2026-07-04T02:19:30.657Z" }, +] diff --git a/e2e/crossbuild/psutil/BUILD.bazel b/e2e/crossbuild/psutil/BUILD.bazel new file mode 100644 index 000000000..d737c7933 --- /dev/null +++ b/e2e/crossbuild/psutil/BUILD.bazel @@ -0,0 +1,14 @@ +# psutil ships official prebuilt wheels for linux/amd64 and linux/arm64, but +# [tool.uv] no-binary-package forces it to build from sdist here. A second, +# far more widely-used plain setuptools/distutils C-extension package next +# to //geohash and //zstandard, so the setuptools backend's cross support +# isn't validated by niche packages alone. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "psutil", + check_so_suffix = False, + deps = ["@pypi_crossbuild_psutil//psutil"], + so_pattern = "whl_install__crossbuild_psutil.*_psutil_linux.*\\.so$$", +) diff --git a/e2e/crossbuild/psutil/psutil_image_command_test.yaml b/e2e/crossbuild/psutil/psutil_image_command_test.yaml new file mode 100644 index 000000000..252f3a096 --- /dev/null +++ b/e2e/crossbuild/psutil/psutil_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# psutil_main.py asserts real cpu/memory info from its compiled Linux +# backend itself and only prints "OK" on success. +commandTests: + - name: psutil reads real cpu/memory info through its compiled backend + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/psutil/psutil_main.py b/e2e/crossbuild/psutil/psutil_main.py new file mode 100644 index 000000000..73bad3d23 --- /dev/null +++ b/e2e/crossbuild/psutil/psutil_main.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import psutil + + +def main() -> None: + # cpu_count()/virtual_memory().total read real /proc/cpuinfo and + # /proc/meminfo via psutil's compiled Linux backend (_psutil_linux.so) — + # both must be positive on any real (or QEMU-emulated) Linux system. + cpu_count = psutil.cpu_count() + assert cpu_count is not None and cpu_count >= 1, "cpu_count() returned {!r}".format(cpu_count) + mem_total = psutil.virtual_memory().total + assert mem_total > 0, "virtual_memory().total returned {!r}".format(mem_total) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/psutil/pyproject.toml b/e2e/crossbuild/psutil/pyproject.toml new file mode 100644 index 000000000..6a3052b38 --- /dev/null +++ b/e2e/crossbuild/psutil/pyproject.toml @@ -0,0 +1,13 @@ +[project] +name = "crossbuild_psutil" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "psutil==7.2.2", + "setuptools", + "wheel", +] + +[tool.uv] +no-binary-package = ["psutil"] diff --git a/e2e/crossbuild/psutil/uv.lock b/e2e/crossbuild/psutil/uv.lock new file mode 100644 index 000000000..3305dde8a --- /dev/null +++ b/e2e/crossbuild/psutil/uv.lock @@ -0,0 +1,112 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-psutil" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "psutil" }, + { name = "setuptools" }, + { name = "wheel" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "psutil", specifier = "==7.2.2" }, + { name = "setuptools" }, + { name = "wheel" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] + +[[package]] +name = "wheel" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, +] diff --git a/e2e/crossbuild/pydantic_core/BUILD.bazel b/e2e/crossbuild/pydantic_core/BUILD.bazel new file mode 100644 index 000000000..ae8dfd4f5 --- /dev/null +++ b/e2e/crossbuild/pydantic_core/BUILD.bazel @@ -0,0 +1,14 @@ +# pydantic-core ships official prebuilt wheels for linux/amd64 and +# linux/arm64, but [tool.uv] no-binary-package forces it to build from sdist +# here. A second, much more widely-depended-on maturin/PyO3 package next to +# //rpds_py — pydantic-core underpins Pydantic v2 and, transitively, most of +# the modern Python web/data ecosystem (FastAPI included) — so this backend +# isn't validated by one lucky package alone. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "pydantic_core", + deps = ["@pypi_crossbuild_pydantic_core//pydantic_core"], + so_pattern = "whl_install__crossbuild_pydantic_core.*_pydantic_core.*\\.so$$", +) diff --git a/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml b/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml new file mode 100644 index 000000000..5428f90b2 --- /dev/null +++ b/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# pydantic_core_main.py asserts the coerced int value itself and only +# prints "OK" on success. +commandTests: + - name: pydantic-core validates and coerces a string to int + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/pydantic_core/pydantic_core_main.py b/e2e/crossbuild/pydantic_core/pydantic_core_main.py new file mode 100644 index 000000000..dafac4835 --- /dev/null +++ b/e2e/crossbuild/pydantic_core/pydantic_core_main.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +from pydantic_core import core_schema, SchemaValidator + + +def main() -> None: + validator = SchemaValidator(core_schema.int_schema()) + result = validator.validate_python("123") + # pydantic-core's lax int mode coerces the numeric string to a real int. + assert result == 123 and isinstance(result, int), "expected int 123, got {!r}".format(result) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/pydantic_core/pyproject.toml b/e2e/crossbuild/pydantic_core/pyproject.toml new file mode 100644 index 000000000..7c8f2db5b --- /dev/null +++ b/e2e/crossbuild/pydantic_core/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "crossbuild_pydantic_core" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "maturin", + "pydantic-core==2.47.0", +] + +[tool.uv] +no-binary-package = ["pydantic-core"] diff --git a/e2e/crossbuild/pydantic_core/uv.lock b/e2e/crossbuild/pydantic_core/uv.lock new file mode 100644 index 000000000..81581281f --- /dev/null +++ b/e2e/crossbuild/pydantic_core/uv.lock @@ -0,0 +1,194 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-pydantic-core" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "maturin" }, + { name = "pydantic-core" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "maturin" }, + { name = "pydantic-core", specifier = "==2.47.0" }, +] + +[[package]] +name = "maturin" +version = "1.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/b3/addd877f871fb1860d46d3a4f206ecb10b946c85846805e6367631926fd3/maturin-1.14.1.tar.gz", hash = "sha256:9d6577a62cd08e0ceba7a0db06fb098e0c9b1b3429bad747a4f3a18215a1b3df", size = 369637, upload-time = "2026-06-19T05:19:49.774Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/f0/97c5a5bd9c71653a066c0976a484eaaae50b9369557838a4176b7b0bdaa5/maturin-1.14.1-py3-none-linux_armv6l.whl", hash = "sha256:522292398945442cdafa9daeb2271b2340fbde57027b818f923f88eab04174f8", size = 10207496, upload-time = "2026-06-19T05:19:09.321Z" }, + { url = "https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ffe5ad71f21d1e6603c4dd75f7fee34adf5ed5ebcebb692886549888ebb329ed", size = 19680113, upload-time = "2026-06-19T05:19:13.43Z" }, + { url = "https://files.pythonhosted.org/packages/43/b6/79c881410a3b1c187f7eb3d407aecae646c6a4433d630d72200359015e83/maturin-1.14.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f3306078070c1508fd715b9116070cbcaff5959024272a9f1e6f5cb29768b86c", size = 10169205, upload-time = "2026-06-19T05:19:16.615Z" }, + { url = "https://files.pythonhosted.org/packages/93/9d/44b6f26dcb7f7a04c5501ac2dbb6ca1490150682baa525ca5860504f9eab/maturin-1.14.1-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:cd457cd88961156e26379e1155bd287cc0ec1c8b2f1582b0660fb31b87c8842d", size = 10188098, upload-time = "2026-06-19T05:19:19.736Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:dfc54ae32e6fcb18302193ab9a30b0b25eefffba994ae13238974805533ef75e", size = 10627576, upload-time = "2026-06-19T05:19:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/e5/33/b096412bd6a7cb399652b260666f901adf88a687181a6dbd6a3f89f0a94e/maturin-1.14.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:a131d912b5267e640bc96d70f4914e10590aed64082ec9abacba7cea52004224", size = 10085181, upload-time = "2026-06-19T05:19:25.69Z" }, + { url = "https://files.pythonhosted.org/packages/56/8d/08c3bf469c38a23c9e6c877e338193001eb604d010fedc08341974e38528/maturin-1.14.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:be18fc568fb76884c0205456336892a75105ec398e6b667cd777c6268bd06d69", size = 10026363, upload-time = "2026-06-19T05:19:28.904Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a4/c4d1a92839f8745ab4aab988a7db884a79d6d710bd3b286fcf9316dece1a/maturin-1.14.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:994a0c8ba3ad8a92b3a9ee1b02645d200d610216b15cff5102b0fe65e8e08666", size = 13321347, upload-time = "2026-06-19T05:19:32.411Z" }, + { url = "https://files.pythonhosted.org/packages/b3/fa/170f04624d03fd07d2a8b1b67de83a127af93aef9eaa425839553347297b/maturin-1.14.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be80866363e605d137991b491a741a84cde9ae350183c4c85f49690ca9aaaa65", size = 10877609, upload-time = "2026-06-19T05:19:35.448Z" }, + { url = "https://files.pythonhosted.org/packages/61/ad/1ae2e1d0ded282bf2c55ac13f0811d87deb425e200ae64a15785675dede9/maturin-1.14.1-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:5282dffd4b539d2be245f4e5b1a5ab6bc1033b58f4a4872f5833f9d43c954aa4", size = 10417316, upload-time = "2026-06-19T05:19:38.28Z" }, + { url = "https://files.pythonhosted.org/packages/fb/27/bf677183920718da49cd7982d6a3ffc440aad8919329f571d189f81b7bdf/maturin-1.14.1-py3-none-win32.whl", hash = "sha256:1a04de0a20188f95c721b5702eed18140bdcccb28c386797093eca3f62f4d4e0", size = 8931293, upload-time = "2026-06-19T05:19:41.183Z" }, + { url = "https://files.pythonhosted.org/packages/63/4b/585adeb9167b08d3cdff0032a938b0e72655c92003df4f52c3f696a1bcc2/maturin-1.14.1-py3-none-win_amd64.whl", hash = "sha256:3c9f94640ecc4895e94abaf834a0684430032c865b2748a36c12461fd9252fdd", size = 10314067, upload-time = "2026-06-19T05:19:44.389Z" }, + { url = "https://files.pythonhosted.org/packages/51/d4/dac8c0720ae246be1700afb6fbdbbea20fe35b13f6570b2f70faa005df77/maturin-1.14.1-py3-none-win_arm64.whl", hash = "sha256:15cea8fcb3ba47dd636f50092bb34baea8b04ac777392f23e6bf8a9a61efb894", size = 9718943, upload-time = "2026-06-19T05:19:47.49Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/74/319859f70c733f341df03823c8ca27ce9003faaac3ffa3110f3af1c8641a/pydantic_core-2.47.0.tar.gz", hash = "sha256:422c1797a7864b2a9a996435aba92fe571fb80190f67a31edbc1ac040c7b51fe", size = 476601, upload-time = "2026-05-22T13:19:00.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/e0/0da7149bbd84c438beb208e17174d03a798f2c8ce5a978cbc19fb3052be6/pydantic_core-2.47.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fe87ccbc39a103709d0a5afa75240c15a94611af129261e9484bef0bc97960b2", size = 2114007, upload-time = "2026-05-22T13:20:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/51/30/362c68ac4dc1a830066bf250850725d95be0567bb6a85434616ac68f5939/pydantic_core-2.47.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:45882c24324f123037982c65eb8d60da778447e6bc87c82241f81d6c6d2c307e", size = 1948028, upload-time = "2026-05-22T13:19:25.939Z" }, + { url = "https://files.pythonhosted.org/packages/60/d6/1dd26612212fab9145a2b0d876459764ad04248331cb6f61ab4909fddc43/pydantic_core-2.47.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983e39b39547772543f3518557d0a86dbb3b7bb58bf8e82faba1e0cfa3e816d9", size = 1972491, upload-time = "2026-05-22T13:20:35.379Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c4/00b31fd04acf601efff148add88cfe5f3c21f43f872e79f76e4580cfaf18/pydantic_core-2.47.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3eb92447d3a079b945b61b8cbd6c3ec2954de3655c4efa0ebd35b069e472c2a9", size = 2045790, upload-time = "2026-05-22T13:18:25.672Z" }, + { url = "https://files.pythonhosted.org/packages/8b/33/7d1a8116bde9d259b3289090a2d93b87562001731cdf81d78bef5d1060d8/pydantic_core-2.47.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af9600c680bec4b8d23c32ddaf7a5d91ed39a2cf758c082e34e860140cdcd87", size = 2223039, upload-time = "2026-05-22T13:20:37.64Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f6/4c94adcfe1bdaad3f8865a2115bed02e02cba809ffab25c0f85c0cc9b78a/pydantic_core-2.47.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d6098342d4510a9034a500a53b1d737daf9cfc18a47cd21047d02d7d1587557", size = 2282031, upload-time = "2026-05-22T13:17:41.455Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4f/7fe179b37f887297a5bfd7b38a4a26cd485748b6b424c43c73a36c02f57b/pydantic_core-2.47.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a891c20be5110deb1904f639f3615ec5022b3495995850d1abe7b8fa1550b5", size = 2088600, upload-time = "2026-05-22T13:17:36.643Z" }, + { url = "https://files.pythonhosted.org/packages/fa/15/daef331c1571ee986e1410511218c4d58e6ead75e0db735051925caa572b/pydantic_core-2.47.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:13990d357a50078e382b15fa3ce3f08043223b4be3eaeb340b184f54c1a2397a", size = 2112087, upload-time = "2026-05-22T13:19:30.024Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c7/7cfbb736f9ac501a92171e93bf640d065a13e12dcbcfb7effd21cce2f1ca/pydantic_core-2.47.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0f7343305387bb5884f24d384b7978ad099a277b27529e592c041a502a37c32", size = 2171199, upload-time = "2026-05-22T13:19:12.183Z" }, + { url = "https://files.pythonhosted.org/packages/5f/03/48e63b1f7d2088d747dde98b5dd7b89a46fff9173b6c10dc6189289c4aa5/pydantic_core-2.47.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2c5e11bb1be2de2707c9367f364e73091ef30d34be54b3a4564d7421ac1a16bd", size = 2176850, upload-time = "2026-05-22T13:17:39.318Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/e653f7723f1dff5c054dada5f5d7f2c294067c087a52188847a0414cff2e/pydantic_core-2.47.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:e1b52aa981e034896712460c899ee30707c8c6a385e79bb7648aac76c748a3da", size = 2315368, upload-time = "2026-05-22T13:18:36.365Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ff/5aa6fcde3bd427648fee1a363671d8b4852c716603acd77091fb4cf1fc3d/pydantic_core-2.47.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d57d46021c20d4efc28f69b4ca4670dffbb7bdafa51d1967b747849726ec643b", size = 2351750, upload-time = "2026-05-22T13:19:28.187Z" }, + { url = "https://files.pythonhosted.org/packages/85/1d/6ee14bea4426d6bc421033d8d6ec69a6938d5773f7bd1d535b221fa48a7b/pydantic_core-2.47.0-cp311-cp311-win32.whl", hash = "sha256:d93c02ae8bd33f73624319d85cba47e754155c5bf104c0c5ca96fcd1f3094939", size = 1971464, upload-time = "2026-05-22T13:20:30.718Z" }, + { url = "https://files.pythonhosted.org/packages/cf/6b/e466253efba866851af6e1094c488b4c5fb6adbfd8993d13e12b2a575541/pydantic_core-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:859ca679f00e5feb11b58b616eb7bc0efbb13654be21f5c898e510e27671c900", size = 2070625, upload-time = "2026-05-22T13:18:17.224Z" }, + { url = "https://files.pythonhosted.org/packages/c1/27/10628ab2df9f2421b6f3b88add9e026f1cb79198be417ee7d684ef0de5d7/pydantic_core-2.47.0-cp311-cp311-win_arm64.whl", hash = "sha256:482667e5b7a3e97b0836f33a716199c4ec6ba9c896ca4db6eae799ec527c1e64", size = 2052484, upload-time = "2026-05-22T13:17:32.654Z" }, + { url = "https://files.pythonhosted.org/packages/19/23/2daeff7346433ad9a3567852dd7a716329f9a7952dcf1ee74b166271bdc7/pydantic_core-2.47.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:70a7aeba54854f5d97da65cb1a61f000f53df3704cab41cd81d65ab127ddd031", size = 2108216, upload-time = "2026-05-22T13:19:31.898Z" }, + { url = "https://files.pythonhosted.org/packages/6c/70/2989cb5112b892b7dc13af570ff57d0f383f770fc88bbb644262df1b3017/pydantic_core-2.47.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c0e97329e38228f57fe1f2d91ba0ef39cc75cc1a84fe6ef58942d2fc6cb406bf", size = 1951502, upload-time = "2026-05-22T13:19:54.702Z" }, + { url = "https://files.pythonhosted.org/packages/fe/a6/2417d8b1856cf7579a21e2679f02417b910e4f29120303e2c45137525072/pydantic_core-2.47.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:faf83e50714837af72f13e9369c50377552a4a74049d4477bed51c7e5822d94b", size = 1975590, upload-time = "2026-05-22T13:17:26.586Z" }, + { url = "https://files.pythonhosted.org/packages/fc/71/0cd0813355b385bef8fa9a719982e0b44847afedc043b988c9f7c5d02ca9/pydantic_core-2.47.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f50abe60347bf8afe2b2f58db86cf3ac6e418eec7ffa01d9dc90ba29fc64f243", size = 2055885, upload-time = "2026-05-22T13:20:42.378Z" }, + { url = "https://files.pythonhosted.org/packages/a3/33/5687c6dcf8ecca106c95b2a49f04a633320ab49961da6e57682db37b4482/pydantic_core-2.47.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13b18e7dec056336f29ee77dea3cc5db0271d6215cac7249cc5c61b0a49d293", size = 2235292, upload-time = "2026-05-22T13:19:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/36/98/08e81f1a0f0aa82cfa1a4d07b66eb116740fd6c82ba4baa8f96d4b377132/pydantic_core-2.47.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3aaabbdbbbb8dff33fa053ffb2c980f39dec745fc03592f50e1e010449129841", size = 2308945, upload-time = "2026-05-22T13:18:38.113Z" }, + { url = "https://files.pythonhosted.org/packages/04/f1/6e35bdbdb79f96e630265297452d709b2ebd5facfbd83d3eb702eee24939/pydantic_core-2.47.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2907ee6d15cf26787bfbeb4c42e18e52f358086eab91baea961a0d909248d6", size = 2093861, upload-time = "2026-05-22T13:20:26.271Z" }, + { url = "https://files.pythonhosted.org/packages/1f/c4/6a48e5da6a567bcf6d3ab113d2d476e1b93e3be941b4c486918f1c9d6714/pydantic_core-2.47.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:c413761260967f4dbb51135e1b49f30a1c29e15bf371fbb39754ed6475739545", size = 2124948, upload-time = "2026-05-22T13:18:15.728Z" }, + { url = "https://files.pythonhosted.org/packages/94/a1/e356c98dfc6bd5e6e166f2c832865a62941370b17a7199d35bc5999fecc8/pydantic_core-2.47.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bb527ac6e5a9721023b24615e1a55c01f47c60007f08b7d2afb89ff9c7a0e22", size = 2182065, upload-time = "2026-05-22T13:19:07.986Z" }, + { url = "https://files.pythonhosted.org/packages/63/aa/6e99aac0a891b05cc522cc464aebeec2bb877fa4744be641a013ebc1785a/pydantic_core-2.47.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b3abf7fd5e6abe483a63413f9cd26b7c93c20780e19c8556434c7279f6b2f10c", size = 2185830, upload-time = "2026-05-22T13:18:34.551Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/c6c5c1ad40b4d58f11d6e754e9c3990a2a3cfff20a9cf5c1f0a855a791b2/pydantic_core-2.47.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:9cefe43d17a5a273d71697c084d3787defa7f578cd5fab4cef4c66d13c9e44b2", size = 2327330, upload-time = "2026-05-22T13:19:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f8/064747538297e385a1f197f35551d1bf6093e88c5ce9b4e15c035f0a1cfe/pydantic_core-2.47.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:38a8b5371b7938e4f6c31060dbd51d3b3229aef7c43eaac2eb8b153e43c3f189", size = 2366505, upload-time = "2026-05-22T13:20:11.895Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d5/2d8715ef982c0b1875e42f4248b48439133a2781f0be77f0e4dbc84d147d/pydantic_core-2.47.0-cp312-cp312-win32.whl", hash = "sha256:b87e95e644df2a36bd631dd0d6e097aa73d19a55adf7b1724ebdeece3d9c76b7", size = 1957410, upload-time = "2026-05-22T13:17:38.025Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ea/9d908a80798db41c7c38926259ed74d015869f0afe4be6ed56f71793a084/pydantic_core-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0078c5695322050ccedbc86eafaf3e2548439782c51d99e575de0e31b9fe4f4", size = 2072354, upload-time = "2026-05-22T13:17:42.779Z" }, + { url = "https://files.pythonhosted.org/packages/fe/78/5549cba47c662ec7f05d79527474786e5ff7f08ef3e65a409a8a2ab6013e/pydantic_core-2.47.0-cp312-cp312-win_arm64.whl", hash = "sha256:7eedc31996e9eba3bdfbbc380805ac6d765c889b7e93b17cd00ecb0200fd6dca", size = 2035452, upload-time = "2026-05-22T13:18:18.75Z" }, + { url = "https://files.pythonhosted.org/packages/7a/91/810cabda42f7fdd13b349702694e1140f6071fd42d1e542d606d5ad0c2d4/pydantic_core-2.47.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:263560ece98bffbbc0a8047ce60b8a278c859db6a2a4e30d9454b02891045eca", size = 2108548, upload-time = "2026-05-22T13:18:09.878Z" }, + { url = "https://files.pythonhosted.org/packages/fa/87/f444a6d63bcbdff3c45291df842941ed56c568f45dd3742f25afb567b5a2/pydantic_core-2.47.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a7fdaff39a66bf66e9037da482575513d2f20bfb02ea9d9222b5cb3b902fc695", size = 1951421, upload-time = "2026-05-22T13:20:32.973Z" }, + { url = "https://files.pythonhosted.org/packages/f5/09/c90dff5407c11e59023161c84df19dd5ed93966a23b2f08cd21d45812ab9/pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e6c8ee5ce8c270bfae09763ae4bbbccfe81090c97d670a621fb86cb1ef6042", size = 1976554, upload-time = "2026-05-22T13:19:04.085Z" }, + { url = "https://files.pythonhosted.org/packages/95/cf/55fbe9f1b396f91005cd1cb7acf2bcf380a1f1b57e261ac78bcdc0ff42f3/pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e38cdae682cfec4b3816722dccf6376ca59049726d57dca83c2fe7cc13665589", size = 2055005, upload-time = "2026-05-22T13:18:12.809Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c6/4f7cbaa62582e95c080cdd45fb5d4350ff05dac87ea32930c75dcb427bf1/pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc3193ff0b7e2e168f84c6185e70475738c191f3154e0af8f897cd0f8f9a489", size = 2235489, upload-time = "2026-05-22T13:19:13.994Z" }, + { url = "https://files.pythonhosted.org/packages/31/75/16913c82ffd194c537222b3d0e8a05c11681e551add67308ec4af6023724/pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57ff41672a615f38af528ee904602be51c653248354e5db8e9252668abe91e68", size = 2308360, upload-time = "2026-05-22T13:18:39.894Z" }, + { url = "https://files.pythonhosted.org/packages/05/9f/b24bb1b764fc360adace5df806a81fd62ef1662df2973891e487c3fd5a2c/pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473b9a2b2a1f0dd55cbb32d2b902f93babe7f141a0bb48fb4d3d4d2b3e93e9a0", size = 2092549, upload-time = "2026-05-22T13:17:45.38Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d3/0268ea5972b91178250c0a573bb54c17f697665cd2aa35623087a3589fc6/pydantic_core-2.47.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:195f9c4ac43a7b2a044a7b86631c3352abdb820bed2823ea29f98f779255f459", size = 2123849, upload-time = "2026-05-22T13:18:03.817Z" }, + { url = "https://files.pythonhosted.org/packages/8f/92/26b2147738a89f78925775bb4b34ae53f981ce880ee77ee2c2ccbc49466a/pydantic_core-2.47.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c1cd10d39ef1ff8bcd68b6865bee9c434631ac0608d402fe86e678851c2e2a5", size = 2181733, upload-time = "2026-05-22T13:17:35.308Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fa/8a858dde4784c7245b7216ab9a71518cb1a898a83ffb5c0509181789de19/pydantic_core-2.47.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7cbe66352fe2b39511d49150e5b52159429cd21f5633a3e801dd2c43829dcdca", size = 2184065, upload-time = "2026-05-22T13:18:11.369Z" }, + { url = "https://files.pythonhosted.org/packages/69/20/ea165877f965622e021f04d63330f9ceb55ede0aefa862863e06a9a610cb/pydantic_core-2.47.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e35192a1d53e55d510d8bb1023c988c7cdae6d94539074971741b2a7656e49a1", size = 2326881, upload-time = "2026-05-22T13:18:41.477Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d6/ad22a6f0941be5a5478e6c378d0ec3c7641be96d7a86a3ea1f9e9830a269/pydantic_core-2.47.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81de54576de2e20baec76cc5afae2820f9049e6fdc4f357bac3391da02d0ba97", size = 2365574, upload-time = "2026-05-22T13:20:02.947Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4e/eb5e3429dd29311e75ab89313cde09b709b0637fd88838d2cb4a98760b02/pydantic_core-2.47.0-cp313-cp313-win32.whl", hash = "sha256:05da6647bdfd3888936ac10aa39b239d659f3c93dff281af0fc5943eb55629dd", size = 1955451, upload-time = "2026-05-22T13:17:31.178Z" }, + { url = "https://files.pythonhosted.org/packages/15/12/ec107c12aa8729c766285d4aa6caa5f5addf8b2ef6cfd35c455a3ca5c66e/pydantic_core-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:021220e0a03b66112737ee1fc49759340ce8fafb8d9ade1b7fb366b06033fa45", size = 2071285, upload-time = "2026-05-22T13:19:50.585Z" }, + { url = "https://files.pythonhosted.org/packages/f4/02/b003a55acfeb35823925d1cd502b80e3fe6c5d477865c36815fbefdf49ac/pydantic_core-2.47.0-cp313-cp313-win_arm64.whl", hash = "sha256:55156ee2f6f561ea4e25ab55f84bd70b9c9ed2546a834cb2b038fe10225aaa37", size = 2034804, upload-time = "2026-05-22T13:18:32.64Z" }, + { url = "https://files.pythonhosted.org/packages/ef/46/a4675c783822e229bf04e290ae28cf5a057b00a46039498743b066e0fefd/pydantic_core-2.47.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6e37a6974fbd8fa7cae12285a76970d50b3689ffd6ed7c7fdd176ba81dd22d0e", size = 2104537, upload-time = "2026-05-22T13:18:05.312Z" }, + { url = "https://files.pythonhosted.org/packages/67/bb/f6d6d1dd8362d616b227b55af8bc2d1b7d4ea842facb7c50a82298ba3b9d/pydantic_core-2.47.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2433b8524785cc117e602233bc574879bc8d87f09523edeec51665d5c46cf42d", size = 1951581, upload-time = "2026-05-22T13:18:14.244Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ae/7d01ed8658ccf8beae8a3fcf2cd023c3ba0ab0b19d3f456845a709cece94/pydantic_core-2.47.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8f9f2be064c8bf1189f46f7062fd42765d94f59cfb7db7ef8db19563192110a", size = 1978461, upload-time = "2026-05-22T13:19:15.829Z" }, + { url = "https://files.pythonhosted.org/packages/80/e5/dd38ccbd1e68f1c3fd7f8b413a8b32db11bd16d5999c3dc3aed4e54290df/pydantic_core-2.47.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1f0a9659a2eb161573418e3138f616101ba21bbd2ff04916dca7b6712155e015", size = 2049444, upload-time = "2026-05-22T13:19:06.258Z" }, + { url = "https://files.pythonhosted.org/packages/7d/63/0cb998f3f4ea4255ab6d891e2537d4566cd31630df0d406ce45b00306729/pydantic_core-2.47.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2995074b99242aa28991e0120a3c881babc139e08750a05b7ea7d140644e091d", size = 2231772, upload-time = "2026-05-22T13:20:05.22Z" }, + { url = "https://files.pythonhosted.org/packages/3f/20/2cacf5c4a1bdda1356351df38f343c6cf13af6194e6e0ee0f7967395793f/pydantic_core-2.47.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5b224dc04c3ff9b08c24419464eb7f6ad7a1049e12284a00bf80df82bd15fdb", size = 2305322, upload-time = "2026-05-22T13:20:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8f/b7e09086bd48b1ef3f74227ed98907496924a622c7f9315cf661946233c6/pydantic_core-2.47.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:264361b7236d4374fef6342908f87d084a0d58a2f8d0811e99f714309cb0ba7e", size = 2097748, upload-time = "2026-05-22T13:20:21.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/27/2927049e93f6fbbaa838b2bb656dbd63c6d6fcaab9909d632fd93573ebd9/pydantic_core-2.47.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:53368beaf693f6302a6e33bdefe950857534a04d282811421bd20176d0fb5636", size = 2122971, upload-time = "2026-05-22T13:19:37.977Z" }, + { url = "https://files.pythonhosted.org/packages/f2/3b/80b58a0c7f4339f024ad5c5b6316bef895536abf75c45dc85f0c83ae1a92/pydantic_core-2.47.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5d2177b44ba7d9d86850f865f362feeaac6a2ed8517a9b505b97ff0b7fdbd7dd", size = 2181287, upload-time = "2026-05-22T13:18:20.601Z" }, + { url = "https://files.pythonhosted.org/packages/5d/0a/dfcb9575603aaf113d2cae1fb622570046a210276eba2267764b3f83f4f2/pydantic_core-2.47.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:fb57a6b538ec7a01b937986bc093aec530fb056135b6bc9cfdd0bf8460c25bc2", size = 2177842, upload-time = "2026-05-22T13:17:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/57/c2/31a198c8180b417d18410e7640c505b39c51ac291aca34f71ac37093f4c4/pydantic_core-2.47.0-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:18c9c7c3a18e9bdbf1215d913f6bd00e17595dc92949817935cb87a3cf5f1697", size = 2321802, upload-time = "2026-05-22T13:17:54.495Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/052d872b61f88d2f71b3d881c08abfbe33cb9d64bd988712bb4fb973001c/pydantic_core-2.47.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2f72a382886ca85bb1247303b9134cf9978c9d454de62e710a1ebcd9d2131927", size = 2363870, upload-time = "2026-05-22T13:18:45.053Z" }, + { url = "https://files.pythonhosted.org/packages/be/60/c8c985d4081dafaa88fe6ac6a41ebe2b82d289c391b2bcbd3508f585e7a9/pydantic_core-2.47.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:cdf4dc2cdd0eacad1bd81c4d25422b4c25b206acae095d2d64e5d5cb7facc6b3", size = 1369335, upload-time = "2026-05-22T13:17:51.719Z" }, + { url = "https://files.pythonhosted.org/packages/42/70/30dfcc18dc5552f7235ae2ffd7b699a1ba0d38ebfcdb97f371c792d61601/pydantic_core-2.47.0-cp314-cp314-win32.whl", hash = "sha256:1e859dd5e06e9807080e14995db131649a77c61131cc464a7fe492a69ce82488", size = 1952107, upload-time = "2026-05-22T13:20:24.07Z" }, + { url = "https://files.pythonhosted.org/packages/fa/49/f5c517ba99b9e1036ead16cedd0fc189dbcbf900fb0b85b746b6a0b9b389/pydantic_core-2.47.0-cp314-cp314-win_amd64.whl", hash = "sha256:234ecade0e358caa1ea516c218b3f61e61e30532cad1a8bb12f2487325838548", size = 2071388, upload-time = "2026-05-22T13:18:46.74Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6c/6b95e00ed7a3c7f78cb8544bc34cb29412c05512af507fc4466912576d50/pydantic_core-2.47.0-cp314-cp314-win_arm64.whl", hash = "sha256:58158d0111e86893bc35aacabe509f951ed303cddf8cdba43533190bde317914", size = 2026046, upload-time = "2026-05-22T13:18:22.112Z" }, + { url = "https://files.pythonhosted.org/packages/22/2c/fa67f96f381ba3c83e8cd75a6eb3c538e123d8d02e19d80383bff01ffda0/pydantic_core-2.47.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:24017fd3befd4d7cc4a8c71f4a1e9a44d29fdc91723c5446b0e795ab808adee7", size = 2102407, upload-time = "2026-05-22T13:17:46.882Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e8/99abe6c33db3dda235a2095eae5fdd03266857abd9be1c50ed97a59587c3/pydantic_core-2.47.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:dfa0820888cc4549fcce7e6bd8affa7d75198d885ccd0bb0760def4bb8461862", size = 1931963, upload-time = "2026-05-22T13:18:23.776Z" }, + { url = "https://files.pythonhosted.org/packages/5c/dd/96d1884f65737f793e64b6b8745ee793e3cb4735e086ead0a40e5349294e/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1d507f331756f7066cde7c9f35ed78fa78223a54369dbc8a34d6da7a5074fa1", size = 1973492, upload-time = "2026-05-22T13:17:22.128Z" }, + { url = "https://files.pythonhosted.org/packages/07/8c/0504f091c75b229cd07d61b45464d7c5291c3ecf2e7d847f215fe81cf5e5/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c4a885fb50c05903bc703a00830616e680304fdcdd90fc9535a52e72debe712", size = 2035548, upload-time = "2026-05-22T13:17:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/0f/bf/e9f69c55ef6c945d29e4afb306f62a15354bfd09f1ee25d9aecd4c6cbb82/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b107cbd764bf68f12a57c7aa5846d868bc7463490a1ac2d0f19bffef624c5a9", size = 2238356, upload-time = "2026-05-22T13:19:10.309Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1d/dfbd214487033093f5946c1fd5915ae5dc6b278efe764397b5e2ef8092a8/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b5f46412c8226d0c8f1f423c324c75afe342e4b854836933579fb484f68598c", size = 2284799, upload-time = "2026-05-22T13:17:27.959Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ec/f80488fa26a6b27bd0d1267f35b0fce3bfeec23ca97021085a94ccd3adc3/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90cbf7e35d597503cbdb5cd85409cbb75f377290bc7e8e37cc5dfe4f5cc66cf8", size = 2107895, upload-time = "2026-05-22T13:18:27.282Z" }, + { url = "https://files.pythonhosted.org/packages/9b/1d/67ac210745f63a982b145d8f281dc76bd347d98052792f087224a178da54/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:04ee7ba7172cb4484af51b2890f19069d35773698abc8c6ebb651f52fbf41134", size = 2102797, upload-time = "2026-05-22T13:19:40.139Z" }, + { url = "https://files.pythonhosted.org/packages/6c/75/f3b9bd4d88fcaad9a5abf2ec6969f37a70e34f40a5f8d2d78077f168e83d/pydantic_core-2.47.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a7acb3e120ddba94372b8146e62ea3a0bce203180e34641c817c87f995c91e0", size = 2160123, upload-time = "2026-05-22T13:19:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/13/1b/e94ac13bd17c341e86c4b67deb47b63718208fe413034fdb01e7a4bf1dd8/pydantic_core-2.47.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:1a2f7ceb58013d167d8c96f10ec9b3a137018c819ba356f68ff1cb74302fd22e", size = 2164386, upload-time = "2026-05-22T13:18:48.372Z" }, + { url = "https://files.pythonhosted.org/packages/36/e5/862ff195402f5b08db9ad4d9ebe7cbed993f51528aab7edcb62531442556/pydantic_core-2.47.0-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:482b097637fec5037eb13fe9f9d5fe47e568a5b451d686bc2b854076cc0b50ca", size = 2303767, upload-time = "2026-05-22T13:18:50.211Z" }, + { url = "https://files.pythonhosted.org/packages/c2/05/c8ebbb97cf44686fc9cc64a6bb86ac72a8871426a9f61417e395d77c4894/pydantic_core-2.47.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a8c7f5fad73eb404f4b84c75f3d9d3865b748ded248b7366341db6e516fc502b", size = 2361148, upload-time = "2026-05-22T13:18:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8b/4695ec6ce81eda7cc822383de993c5b2c289cfc84d3f032a30c55eb238fc/pydantic_core-2.47.0-cp314-cp314t-win32.whl", hash = "sha256:f343c39928097175acf2f7d0cba5c00b0f62265d88a173a4ce264266ac849bd9", size = 1939588, upload-time = "2026-05-22T13:19:42.151Z" }, + { url = "https://files.pythonhosted.org/packages/96/4d/bc2e188ab648b3ab284e80a0340c5d5b9723c22572c6e36ba39eb300e718/pydantic_core-2.47.0-cp314-cp314t-win_amd64.whl", hash = "sha256:52d40e074da44e42b2425aedebd513e405a31807036ef597175117a9b01743a6", size = 2049697, upload-time = "2026-05-22T13:18:08.244Z" }, + { url = "https://files.pythonhosted.org/packages/6f/46/ca1e6813e029993e57340c6a37740450c51919e3809472f79060f4d64cf0/pydantic_core-2.47.0-cp314-cp314t-win_arm64.whl", hash = "sha256:25cac08c9735e61e5c0b9f7a85c438661fc0e9da226afdfa984c3da6c5942a5a", size = 2025906, upload-time = "2026-05-22T13:17:50.322Z" }, + { url = "https://files.pythonhosted.org/packages/1e/a3/7391a9a511aba60ba119dcbc221a36109dd05ff498dcd6e6ff7222a21b76/pydantic_core-2.47.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:dbe50ffd50c7e1b8e3bedafafd10fabe8a7cf51916f995fd57316eb1293f2439", size = 2112946, upload-time = "2026-05-22T13:18:54.846Z" }, + { url = "https://files.pythonhosted.org/packages/71/74/1d0fe337fa5a89069731206be4da2b41793b8f8fe28f34ed4d941028a62f/pydantic_core-2.47.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:67c3f4b57a1cda846a9b6258e0ef70f99b0757d0b6a55f7e3e5b100620937d2c", size = 1940704, upload-time = "2026-05-22T13:18:00.366Z" }, + { url = "https://files.pythonhosted.org/packages/ac/75/d40231aed211f97ffc3264d7a7c98d1f52f7b9c8d165cee75c8c1c13e5c3/pydantic_core-2.47.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c1e025c83b3987784191ec5aa78cfb94686f1ba73d98ae4d520c09cdecda8d", size = 1985024, upload-time = "2026-05-22T13:17:29.331Z" }, + { url = "https://files.pythonhosted.org/packages/a6/bc/e27d3fb897c5b059a508b88eb7c4cc1f0fe600be3231728bb003e1e2b464/pydantic_core-2.47.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c547cac87585ab8a6e9495fd3be22ae8ccaabb3c909f6ae589a180677c105cc8", size = 2136202, upload-time = "2026-05-22T13:17:34.031Z" }, + { url = "https://files.pythonhosted.org/packages/4e/21/81cc7e3acbf7d4eed41e9585e81b5840aaf6ddbe65974a20946038d6516b/pydantic_core-2.47.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:d648515c65f8871ceca6a0446be32fb1a0aae414db3907ec0df6cc2380dd0c04", size = 2098016, upload-time = "2026-05-22T13:18:56.902Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6e/c98e869e9f754f18088ad9b55887972d08606e7bf81dba088779e927eb65/pydantic_core-2.47.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3292813ac8ed17671a5b1ac8256b6e98b96c29c1c6d061c35899e2f6e0444cac", size = 1931175, upload-time = "2026-05-22T13:20:07.566Z" }, + { url = "https://files.pythonhosted.org/packages/5d/65/ce0d773f4b51dc332764ba1bd585c81f62d5c92231a66d152aff16be8dfa/pydantic_core-2.47.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf3cfcea028f41a9b42a47f4a53d72ca4274d04e3ee525bd58ca89ea8c5e1910", size = 1995356, upload-time = "2026-05-22T13:19:44.143Z" }, + { url = "https://files.pythonhosted.org/packages/19/2c/6e63683a77d342c93bad67bb0762ca8fe1d8418acc8617d70ccdcc5ec5ff/pydantic_core-2.47.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52afdd8640d59890539060e91c8a494cf96b463e63b2ba499cc5c23abcb5e96b", size = 2144893, upload-time = "2026-05-22T13:17:59.008Z" }, + { url = "https://files.pythonhosted.org/packages/f1/bf/06a01e2f6668aa10646e5c9b050a609d975a93d58454e26e16fd9f82cd38/pydantic_core-2.47.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ff201e8b93cd6a3849ec3fecb1d642d0391ca4a387f1162adaadddfd1986598c", size = 2114751, upload-time = "2026-05-22T13:18:02.245Z" }, + { url = "https://files.pythonhosted.org/packages/41/50/caf4cc67fdd664baf89bfe264d72079e901a02d903c813ced9de173cdd69/pydantic_core-2.47.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eba39fca6e1fc7c58a5e6b5c320c6eec86014f7075dfa0fb1a79076e00304b3a", size = 1947894, upload-time = "2026-05-22T13:19:36.12Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c0/96ba102865c9ccb945a758272741d00175837bf32bb71750f6e2bf4543fb/pydantic_core-2.47.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b494566e8e7e1a3992a550900902d6c0051538e53f5957e24003e7775638a24", size = 2131698, upload-time = "2026-05-22T13:18:58.55Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f8/ee7c5d4eafaecdeaf92ce84f48d748c139888e90fa25b2ae988c5aea874c/pydantic_core-2.47.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c96f745745fe778a92e74f40675c57b80dd46fc98186c9020e5ba4514a0470bd", size = 2157797, upload-time = "2026-05-22T13:17:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/08/69/b3eba1d0e015cee3906f7056cfd9ed383f6cef486fde5398a002df2594e4/pydantic_core-2.47.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dbfb8f8ac48a8fd5a9f83cdbba0a23796f3ff5f9421c735808ed134d3318046f", size = 2177829, upload-time = "2026-05-22T13:20:09.611Z" }, + { url = "https://files.pythonhosted.org/packages/8a/36/a0ceff9b7c3a0980128c9ef763db1e9fe9c2b1fcecf6ed055e88af39f123/pydantic_core-2.47.0-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:4ded2d8dc3beb086623ab3256b81a0b51fc026c94eb363f480aec09b204a1cbd", size = 2307425, upload-time = "2026-05-22T13:19:46.177Z" }, + { url = "https://files.pythonhosted.org/packages/d6/0a/930e210e95ade33ecacabc4ba822aa1662a0aaf843d2cf57abce27fb95b1/pydantic_core-2.47.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:25f8aa59fd3f85651387c37b289cd8f0bbc8f632e7dad13c6b837759e78be88d", size = 2351547, upload-time = "2026-05-22T13:17:48.597Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0c/90941408bb6c1e84563d99177c9e62c536dce0388b5a8bf37b90b4f6f095/pydantic_core-2.47.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:0ae0096729c64aa6155cef74e75d1945017b01cfb82f313a18d843fafc497476", size = 2180871, upload-time = "2026-05-22T13:19:56.696Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] diff --git a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml b/e2e/crossbuild/pyproject.toml similarity index 88% rename from e2e/cases/uv-deps-650/crossbuild/pyproject.toml rename to e2e/crossbuild/pyproject.toml index d6e6ed0c0..648b141a7 100644 --- a/e2e/cases/uv-deps-650/crossbuild/pyproject.toml +++ b/e2e/crossbuild/pyproject.toml @@ -5,7 +5,6 @@ requires-python = ">=3.11" authors = [] dependencies = [ "cffi", - "psycopg2-binary", "python-geohash==0.8.5", "setuptools", "build", diff --git a/e2e/crossbuild/rpds_py/BUILD.bazel b/e2e/crossbuild/rpds_py/BUILD.bazel new file mode 100644 index 000000000..7ece315d2 --- /dev/null +++ b/e2e/crossbuild/rpds_py/BUILD.bazel @@ -0,0 +1,16 @@ +# rpds-py ships official prebuilt wheels for linux/amd64 and linux/arm64, +# but [tool.uv] no-binary-package forces it to build from sdist here. +# Unlike //geohash (setuptools), //contourpy (meson-python), and +# //awkward_cpp (scikit-build-core/CMake), this is a Rust/maturin+PyO3 +# extension — build_helper.py needs a Rust cross toolchain (cargo/rustc) +# and CARGO_TARGET__LINKER pointed at our C cross toolchain, since +# maturin's own cross-compile detection doesn't cover a plain Linux-arch +# cross build any more than meson-python/scikit-build-core's did. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "rpds_py", + deps = ["@pypi_crossbuild_rpds_py//rpds_py"], + so_pattern = "whl_install__crossbuild_rpds_py.*rpds/rpds.*\\.so$$", +) diff --git a/e2e/crossbuild/rpds_py/pyproject.toml b/e2e/crossbuild/rpds_py/pyproject.toml new file mode 100644 index 000000000..7d99faddd --- /dev/null +++ b/e2e/crossbuild/rpds_py/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "crossbuild_rpds_py" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "maturin", + "rpds-py==2026.6.3", +] + +[tool.uv] +no-binary-package = ["rpds-py"] diff --git a/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml b/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml new file mode 100644 index 000000000..1cd919c2d --- /dev/null +++ b/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml @@ -0,0 +1,9 @@ +schemaVersion: 2.0.0 + +# rpds_py_main.py asserts rpds.List([1,2,3]).push_front(0)'s exact iteration +# order itself and only prints "OK" on success. +commandTests: + - name: rpds-py List.push_front computes the correct order + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/rpds_py/rpds_py_main.py b/e2e/crossbuild/rpds_py/rpds_py_main.py new file mode 100644 index 000000000..7cc3db78b --- /dev/null +++ b/e2e/crossbuild/rpds_py/rpds_py_main.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import rpds + + +def main() -> None: + # push_front(0) onto [1, 2, 3] must yield 0, 1, 2, 3 in iteration order. + values = list(rpds.List([1, 2, 3]).push_front(0)) + assert values == [0, 1, 2, 3], "expected [0, 1, 2, 3], got {}".format(values) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/rpds_py/uv.lock b/e2e/crossbuild/rpds_py/uv.lock new file mode 100644 index 000000000..f3170591b --- /dev/null +++ b/e2e/crossbuild/rpds_py/uv.lock @@ -0,0 +1,205 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-rpds-py" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "maturin" }, + { name = "rpds-py" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "maturin" }, + { name = "rpds-py", specifier = "==2026.6.3" }, +] + +[[package]] +name = "maturin" +version = "1.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/b3/addd877f871fb1860d46d3a4f206ecb10b946c85846805e6367631926fd3/maturin-1.14.1.tar.gz", hash = "sha256:9d6577a62cd08e0ceba7a0db06fb098e0c9b1b3429bad747a4f3a18215a1b3df", size = 369637, upload-time = "2026-06-19T05:19:49.774Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/f0/97c5a5bd9c71653a066c0976a484eaaae50b9369557838a4176b7b0bdaa5/maturin-1.14.1-py3-none-linux_armv6l.whl", hash = "sha256:522292398945442cdafa9daeb2271b2340fbde57027b818f923f88eab04174f8", size = 10207496, upload-time = "2026-06-19T05:19:09.321Z" }, + { url = "https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ffe5ad71f21d1e6603c4dd75f7fee34adf5ed5ebcebb692886549888ebb329ed", size = 19680113, upload-time = "2026-06-19T05:19:13.43Z" }, + { url = "https://files.pythonhosted.org/packages/43/b6/79c881410a3b1c187f7eb3d407aecae646c6a4433d630d72200359015e83/maturin-1.14.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f3306078070c1508fd715b9116070cbcaff5959024272a9f1e6f5cb29768b86c", size = 10169205, upload-time = "2026-06-19T05:19:16.615Z" }, + { url = "https://files.pythonhosted.org/packages/93/9d/44b6f26dcb7f7a04c5501ac2dbb6ca1490150682baa525ca5860504f9eab/maturin-1.14.1-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:cd457cd88961156e26379e1155bd287cc0ec1c8b2f1582b0660fb31b87c8842d", size = 10188098, upload-time = "2026-06-19T05:19:19.736Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:dfc54ae32e6fcb18302193ab9a30b0b25eefffba994ae13238974805533ef75e", size = 10627576, upload-time = "2026-06-19T05:19:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/e5/33/b096412bd6a7cb399652b260666f901adf88a687181a6dbd6a3f89f0a94e/maturin-1.14.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:a131d912b5267e640bc96d70f4914e10590aed64082ec9abacba7cea52004224", size = 10085181, upload-time = "2026-06-19T05:19:25.69Z" }, + { url = "https://files.pythonhosted.org/packages/56/8d/08c3bf469c38a23c9e6c877e338193001eb604d010fedc08341974e38528/maturin-1.14.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:be18fc568fb76884c0205456336892a75105ec398e6b667cd777c6268bd06d69", size = 10026363, upload-time = "2026-06-19T05:19:28.904Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a4/c4d1a92839f8745ab4aab988a7db884a79d6d710bd3b286fcf9316dece1a/maturin-1.14.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:994a0c8ba3ad8a92b3a9ee1b02645d200d610216b15cff5102b0fe65e8e08666", size = 13321347, upload-time = "2026-06-19T05:19:32.411Z" }, + { url = "https://files.pythonhosted.org/packages/b3/fa/170f04624d03fd07d2a8b1b67de83a127af93aef9eaa425839553347297b/maturin-1.14.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be80866363e605d137991b491a741a84cde9ae350183c4c85f49690ca9aaaa65", size = 10877609, upload-time = "2026-06-19T05:19:35.448Z" }, + { url = "https://files.pythonhosted.org/packages/61/ad/1ae2e1d0ded282bf2c55ac13f0811d87deb425e200ae64a15785675dede9/maturin-1.14.1-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:5282dffd4b539d2be245f4e5b1a5ab6bc1033b58f4a4872f5833f9d43c954aa4", size = 10417316, upload-time = "2026-06-19T05:19:38.28Z" }, + { url = "https://files.pythonhosted.org/packages/fb/27/bf677183920718da49cd7982d6a3ffc440aad8919329f571d189f81b7bdf/maturin-1.14.1-py3-none-win32.whl", hash = "sha256:1a04de0a20188f95c721b5702eed18140bdcccb28c386797093eca3f62f4d4e0", size = 8931293, upload-time = "2026-06-19T05:19:41.183Z" }, + { url = "https://files.pythonhosted.org/packages/63/4b/585adeb9167b08d3cdff0032a938b0e72655c92003df4f52c3f696a1bcc2/maturin-1.14.1-py3-none-win_amd64.whl", hash = "sha256:3c9f94640ecc4895e94abaf834a0684430032c865b2748a36c12461fd9252fdd", size = 10314067, upload-time = "2026-06-19T05:19:44.389Z" }, + { url = "https://files.pythonhosted.org/packages/51/d4/dac8c0720ae246be1700afb6fbdbbea20fe35b13f6570b2f70faa005df77/maturin-1.14.1-py3-none-win_arm64.whl", hash = "sha256:15cea8fcb3ba47dd636f50092bb34baea8b04ac777392f23e6bf8a9a61efb894", size = 9718943, upload-time = "2026-06-19T05:19:47.49Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] diff --git a/e2e/crossbuild/test.sh b/e2e/crossbuild/test.sh new file mode 100755 index 000000000..940a5d9a1 --- /dev/null +++ b/e2e/crossbuild/test.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# geohash_macos_amd64_cross_test is tagged "manual" (see BUILD.bazel), so +# this is the only place that runs it — and only on a real macOS host. +set -euo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ "$(uname)" == "Darwin" ]]; then + echo "macOS host detected — building and running the macOS cross target too" + bazel test --test_output=errors //geohash:geohash_macos_amd64_cross_test +else + echo "Linux host — skipping macOS cross target (no Xcode SDK available from here)" +fi diff --git a/e2e/crossbuild/tiktoken/BUILD.bazel b/e2e/crossbuild/tiktoken/BUILD.bazel new file mode 100644 index 000000000..29c102b22 --- /dev/null +++ b/e2e/crossbuild/tiktoken/BUILD.bazel @@ -0,0 +1,16 @@ +# tiktoken ships official prebuilt wheels for linux/amd64 and linux/arm64, +# but [tool.uv] no-binary-package forces it to build from sdist here. A +# second setuptools-rust package alongside //bcrypt — same build-backend +# shape (plain "setuptools.build_meta" with "setuptools-rust" only visible +# in build-system.requires, no --target flag of its own) on a different, +# widely-used real-world crate (OpenAI's BPE tokenizer core), so this path +# isn't validated by one lucky package alone. + +load("//tools:cross_case.bzl", "pep517_cross_case") + +pep517_cross_case( + name = "tiktoken", + check_so_suffix = False, + deps = ["@pypi_crossbuild_tiktoken//tiktoken"], + so_pattern = "whl_install__crossbuild_tiktoken.*_tiktoken.*\\.so$$", +) diff --git a/e2e/crossbuild/tiktoken/pyproject.toml b/e2e/crossbuild/tiktoken/pyproject.toml new file mode 100644 index 000000000..312dc35c8 --- /dev/null +++ b/e2e/crossbuild/tiktoken/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "crossbuild_tiktoken" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "setuptools", + "setuptools-rust", + "tiktoken==0.13.0", + "wheel", +] + +[tool.uv] +no-binary-package = ["tiktoken"] diff --git a/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml b/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml new file mode 100644 index 000000000..59b81cd1a --- /dev/null +++ b/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml @@ -0,0 +1,10 @@ +schemaVersion: 2.0.0 + +# tiktoken_main.py asserts a real encode/decode round-trip through the +# compiled Rust core (_tiktoken.CoreBPE) itself and only prints "OK" on +# success. +commandTests: + - name: tiktoken encodes and decodes through its compiled Rust core + exitCode: 0 + command: /app + expectedOutput: ["OK"] diff --git a/e2e/crossbuild/tiktoken/tiktoken_main.py b/e2e/crossbuild/tiktoken/tiktoken_main.py new file mode 100644 index 000000000..9076c12d0 --- /dev/null +++ b/e2e/crossbuild/tiktoken/tiktoken_main.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import tiktoken + + +def main() -> None: + # tiktoken's real encodings (cl100k_base, o200k_base, ...) download their + # BPE vocab over the network on first use — not available in a sandboxed + # cross build/QEMU-emulated container. Build a minimal encoding directly + # instead: one rank per raw byte, no merges, so encode() must exercise + # the real compiled Rust core (_tiktoken.CoreBPE) to reduce "hi" to its + # two literal byte values with no other correct output possible. + mergeable_ranks = {bytes([i]): i for i in range(256)} + enc = tiktoken.Encoding( + name="byte-level-test", + pat_str=r".+", + mergeable_ranks=mergeable_ranks, + special_tokens={}, + ) + tokens = enc.encode("hi") + assert tokens == [104, 105], "expected [104, 105], got {}".format(tokens) + decoded = enc.decode(tokens) + assert decoded == "hi", "expected 'hi', got {!r}".format(decoded) + print("OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/tiktoken/uv.lock b/e2e/crossbuild/tiktoken/uv.lock new file mode 100644 index 000000000..3e4d23ca1 --- /dev/null +++ b/e2e/crossbuild/tiktoken/uv.lock @@ -0,0 +1,382 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-tiktoken" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "setuptools" }, + { name = "setuptools-rust" }, + { name = "tiktoken" }, + { name = "wheel" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "setuptools" }, + { name = "setuptools-rust" }, + { name = "tiktoken", specifier = "==0.13.0" }, + { name = "wheel" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "regex" +version = "2026.7.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/98/04b13f1ddfb63158025291c02e03eb42fbb7acb51d091d541050eb4e35e8/regex-2026.7.19.tar.gz", hash = "sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5", size = 416440, upload-time = "2026-07-19T00:19:48.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e5/cef4de2bac939280b68d32adc659478845238a8274f2f79c465063f590ad/regex-2026.7.19-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ac777001cdfc28b72477d93c8564bb7583081ea8fb45cdca3d568e0a4f87183c", size = 494012, upload-time = "2026-07-19T00:16:39.927Z" }, + { url = "https://files.pythonhosted.org/packages/ff/87/e86f51eb117457bb7803132ffe5cb6e2841e2b5bea4cc85d397f3c6e257d/regex-2026.7.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:59787bd5f8c70aa339084e961d2996b53fbdeab4d5393bba5c1fe1fc32e02bae", size = 295281, upload-time = "2026-07-19T00:16:41.433Z" }, + { url = "https://files.pythonhosted.org/packages/41/2e/2360c41d8080a3d9ec7e5c90fad6eab3b50192869d10e9a5609e48c8177b/regex-2026.7.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:90c633e7e8d6bf4e992b8b36ce69e018f834b641dd6de8cea6d78c06ffa119c5", size = 290615, upload-time = "2026-07-19T00:16:43.058Z" }, + { url = "https://files.pythonhosted.org/packages/cf/69/b65ba4344efbc771b28fe5dde84cbbb6c8f9551165952fe78def5b9dde6a/regex-2026.7.19-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:87ccab0db8d5f4fbb0272642113c1adb2ffc698c16d3a0944580222331fa7a20", size = 791804, upload-time = "2026-07-19T00:16:44.662Z" }, + { url = "https://files.pythonhosted.org/packages/81/b6/a40dfa0dc6224b36f620c00296eacc830489cbf8c2837b6750dfe6170375/regex-2026.7.19-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e50d748a32da622f256e8d505867f5d3c43a837c6a9f0efb149655fadd1042a", size = 861723, upload-time = "2026-07-19T00:16:46.412Z" }, + { url = "https://files.pythonhosted.org/packages/e3/02/735991dee71abd83196a7962f7ed8bf5aa05720ff06e2d3ff896a85e2bbb/regex-2026.7.19-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf1516fe58fc104f39b2d1dbe2d5e27d0cd45c4be2e42ba6ee0cc763701ec3c7", size = 905932, upload-time = "2026-07-19T00:16:47.956Z" }, + { url = "https://files.pythonhosted.org/packages/45/6c/e7098d8b846ccdbf431d8c081b61e496526a27a28094ed09e0dce21b3f54/regex-2026.7.19-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09f3e5287f94f17b709dc9a9e70865855feee835c861613be144218ce4ca82cc", size = 801407, upload-time = "2026-07-19T00:16:49.43Z" }, + { url = "https://files.pythonhosted.org/packages/8a/18/34b69274e2649bcc7d9b089c2b2983fb2632d8ecf667e359593be9072e79/regex-2026.7.19-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6383cd2ed53a646c659ba1fe65727db76437fdaa069e697a0b44a51d5843d864", size = 774448, upload-time = "2026-07-19T00:16:51.352Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e6/0a72247d025585fd3800b98e040b84d562a88af6303347100484849f4f01/regex-2026.7.19-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:09d3007fc76249a83cdd33de160d50e6cb77f54e09d8fa9e7148e10607ce24af", size = 783297, upload-time = "2026-07-19T00:16:53.071Z" }, + { url = "https://files.pythonhosted.org/packages/b1/aa/c4f65ae7dd02a36b323a70c4cff326e1f3442361aaebc9311100a130d54f/regex-2026.7.19-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f8c6e7a1cfa3dc9d0ee2de0e65e834537fa29992cc3976ffec914afc35c5dd5", size = 854736, upload-time = "2026-07-19T00:16:54.607Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/668082bcc817b9e694189b84997aeba7385b7779faa6711788679c482e35/regex-2026.7.19-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b2ea4a3e8357be8849e833beeae757ac3c7a6b3fc055c03c808a53c91ad30d82", size = 763298, upload-time = "2026-07-19T00:16:56.289Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fb/2d07ad555e7af88aa5f867fdafa47a8d945ee237c20af3ebceb46a820835/regex-2026.7.19-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:80115dd39481fd3a4b4080220799dbcacb921a844de4b827264ececacbe17c78", size = 844430, upload-time = "2026-07-19T00:16:57.933Z" }, + { url = "https://files.pythonhosted.org/packages/51/15/c82a471fe3dce56f03745635b43aa456c40dc0db089e07ef148b331507d1/regex-2026.7.19-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d6ce43a0269d68cee79a7d1ade7def53c20f8f2a047b92d7b5d5bcc73ae88327", size = 789683, upload-time = "2026-07-19T00:16:59.583Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f4/7532a2c59d56f5398902c20de60f0c9a5d1cd364e42a051b48e1b210be7b/regex-2026.7.19-cp311-cp311-win32.whl", hash = "sha256:9be2a6647740dd3cca6acb24e87f03d7632cd280dbce9bbe40c26353a215a45d", size = 266778, upload-time = "2026-07-19T00:17:01.032Z" }, + { url = "https://files.pythonhosted.org/packages/83/2b/cf1bc631db154eb95520d9d5dbc2371ff77a0f014bbf7d748fed8496aa63/regex-2026.7.19-cp311-cp311-win_amd64.whl", hash = "sha256:8d3469c91dd92ee41b7c95280edbd975ef1ba9195086686623a1c6e8935ce965", size = 277983, upload-time = "2026-07-19T00:17:02.571Z" }, + { url = "https://files.pythonhosted.org/packages/8d/bd/56ceaf170e875d5a6761bf2bfd0d040f1cacc896850d5e40cb29b11bbd06/regex-2026.7.19-cp311-cp311-win_arm64.whl", hash = "sha256:36aacfb15faaff3ced55afbf35ec72f50d4aee22082c4f7fe0573a33e2fca92e", size = 276961, upload-time = "2026-07-19T00:17:04.135Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/d11d7e501ac8fd7d617684423ebb9561e0b998481c1e4cbc0cb212c5d74a/regex-2026.7.19-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2cc3460cedf7579948486eab03bc9ad7089df4d7281c0f47f4afe03e8d13f02d", size = 496778, upload-time = "2026-07-19T00:17:05.677Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a9/a5ab6f312f24318019170dc485d5421fe4f89e43a98640da50d95a8a7041/regex-2026.7.19-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0e9554c8785eac5cffe6300f69a91f58ba72bc88a5f8d661235ad7c6aa5b8ccd", size = 297122, upload-time = "2026-07-19T00:17:07.59Z" }, + { url = "https://files.pythonhosted.org/packages/b3/63/4cab4d7f2d384a144d420b763d97674cb70619c878ea6fcd7640d0e62143/regex-2026.7.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7da47a0f248977f08e2cb659ff3c17ddc13a4d39b3a7baa0a81bf5b415430f6", size = 292009, upload-time = "2026-07-19T00:17:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/22/85/102a81b218298957d4ea7d2f084fae537a71add9d6ff93c8e67284c5f45e/regex-2026.7.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93db40c8de0815baab96a06e08a984bac71f989d13bab789e382158c5d426797", size = 796708, upload-time = "2026-07-19T00:17:11.542Z" }, + { url = "https://files.pythonhosted.org/packages/78/b5/dc136af5629938a037cd2b304c12240e132ec92f38be8ff9cc89af2a1f2d/regex-2026.7.19-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:66bd62c59a5427746e8c44becae1d9b99d22fb13f30f492083dfb9ad7c45cc18", size = 865651, upload-time = "2026-07-19T00:17:13.312Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/67402ae3cd9c8c988a4c805d15ee3eef015e7ca4cb112cf3e640fc1f4153/regex-2026.7.19-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1649eb39fcc9ea80c4d2f110fde2b8ab2aef3877b98f02ab9b14e961f418c511", size = 911756, upload-time = "2026-07-19T00:17:15.015Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8e/096d00c7c480ef2ff4265349b14e2261d4ab787ba1f74e2e80d1c58079c3/regex-2026.7.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dce8ec9695f531a1b8a6f314fd4b393adcccf2ea861db480cdf97a301d01a68", size = 801798, upload-time = "2026-07-19T00:17:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f0/41/e7ecac6edb5722417f85cc67eaf386322fbe8acf6918ec2fdc37c20dd9d0/regex-2026.7.19-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3080a7fd38ef049bd489e01c970c97dd84ff446a885b0f1f6b26d9b1ad13ce11", size = 776933, upload-time = "2026-07-19T00:17:19.347Z" }, + { url = "https://files.pythonhosted.org/packages/6f/69/03c9b3f058d66403e0ca2c938696e81d51cd4c6d47ec5265f02f96948d9a/regex-2026.7.19-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d793a7988e04fcb1e2e135567443d82173225d657419ec09414a9b5a145b986", size = 784338, upload-time = "2026-07-19T00:17:21.057Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f7/b38ab3d43f284afbb618fcd15d0e77eb786ae461ce1f6bc7494619ddc0f2/regex-2026.7.19-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e8b0abe7d870f53ca5143895fef7d1041a0c831a140d3dc2c760dd7ba25d4a8b", size = 860452, upload-time = "2026-07-19T00:17:23.119Z" }, + { url = "https://files.pythonhosted.org/packages/15/5c/ff60ef0571121714f3cf9920bc183071e384a10b556d042e0fdb06cc07a5/regex-2026.7.19-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4e5413bd5f13d3a4e3539ca98f70f75e7fca92518dd7f117f030ebedd10b60cb", size = 765958, upload-time = "2026-07-19T00:17:24.81Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0f/bd34021162c0ab47f9a315bd56cd5642e920c8e5668a75ef6c6a6fca590d/regex-2026.7.19-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:73b133a9e6fb512858e7f065e96f1180aa46646bc74a83aea62f1d314f3dd035", size = 851765, upload-time = "2026-07-19T00:17:26.993Z" }, + { url = "https://files.pythonhosted.org/packages/2a/20/a2ca43edade0595cccfdc98636739f536d9e26898e7dbddc2b9e98898953/regex-2026.7.19-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbe6493fbd27321b1d1f2dd4f5c7e5bd4d8b1d7cab7f32fd67db3d0b2ed8248a", size = 789714, upload-time = "2026-07-19T00:17:28.699Z" }, + { url = "https://files.pythonhosted.org/packages/5d/47/e02db4015d424fc83c00ea0ac8c5e5ec14397943de9abf909d5ce3a25931/regex-2026.7.19-cp312-cp312-win32.whl", hash = "sha256:ddd67571c10869f65a5d7dde536d1e066e306cc90de57d7de4d5f34802428bb5", size = 267157, upload-time = "2026-07-19T00:17:31.051Z" }, + { url = "https://files.pythonhosted.org/packages/08/8e/c780c131f79b42ed22d1bd7da4096c2c35f813e835acd02ef0f018bd892c/regex-2026.7.19-cp312-cp312-win_amd64.whl", hash = "sha256:e30d40268a28d54ce0437031750497004c22602b8e3ab891f759b795a003b312", size = 277777, upload-time = "2026-07-19T00:17:32.848Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4c/e4d7e086449bdf379d89774bf1f89dc4a41943f3c5a6125a03905b34b5fb/regex-2026.7.19-cp312-cp312-win_arm64.whl", hash = "sha256:de9208bb427130c82a5dbfd104f92c8876fc9559278c880b3002755bbbe9c83d", size = 277136, upload-time = "2026-07-19T00:17:34.803Z" }, + { url = "https://files.pythonhosted.org/packages/5d/3d/84165e4299ff76f3a40fe1f2abf939e976f693383a08d2beea6af62bd2c1/regex-2026.7.19-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f035d9dc1d25eff9d361456572231c7d27b5ccd473ca7dc0adfce732bd006d40", size = 496552, upload-time = "2026-07-19T00:17:36.808Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/a65293e6e4cf28eb7ee1be5335a5386c40d6742e9f47fafc8fec785e16c7/regex-2026.7.19-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42572142ed0b9d5d261ba727157c426510da78e20828b66bbb855098b8a4e38", size = 296983, upload-time = "2026-07-19T00:17:38.816Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/2d0564e93d87bc48618360ddca232a2ca612bbdf53ce8465d45ca5ce14ee/regex-2026.7.19-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40b34dd88658e4fedd2fddbf0275ac970d00614b731357f425722a3ed1983d11", size = 291832, upload-time = "2026-07-19T00:17:40.726Z" }, + { url = "https://files.pythonhosted.org/packages/07/cd/42dfbabff3dfc9603c501c0e2e2c5adbb09d127b267bf5348de0af338c15/regex-2026.7.19-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c41c63992bf1874cebb6e7f56fd7d3c007924659a604ae3d90e427d40d4fd13", size = 796775, upload-time = "2026-07-19T00:17:42.382Z" }, + { url = "https://files.pythonhosted.org/packages/df/5d/f6a4839f2b934e3eed5973fd07f5929ee97d4c98939fb275ea23c274ee16/regex-2026.7.19-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d3372064506b94dd2c67c845f2db8062e9e9ba84d04e33cb96d7d33c11fe1ae", size = 865687, upload-time = "2026-07-19T00:17:44.185Z" }, + { url = "https://files.pythonhosted.org/packages/14/b0/b47d6c36049bc59806a50bd4c86ced70bbe058d787f80281b1d7a9b0e024/regex-2026.7.19-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fce7760bf283405b2c7999cab3da4e72f7deca6396013115e3f7a955db9760da", size = 911962, upload-time = "2026-07-19T00:17:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/2a/be/ff61f28f9273658cfe23acbbac5217221f6519960ed401e61dfdab12bc35/regex-2026.7.19-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0d702548d89d572b2929879bc883bb7a4c4709efafe4512cadee56c55c9bd15", size = 801817, upload-time = "2026-07-19T00:17:48.25Z" }, + { url = "https://files.pythonhosted.org/packages/c3/bb/8b4f7f26b333f9f79e1b453613c39bb4776f51d38ae66dd0ba31d6b354ca/regex-2026.7.19-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d446c6ac40bb6e05025ccee55b84d80fe9bf8e93010ffc4bb9484f13d498835f", size = 776908, upload-time = "2026-07-19T00:17:50.183Z" }, + { url = "https://files.pythonhosted.org/packages/09/13/610110fc5921d380516d03c26b652555f08aa0d23ea78a771231873c3638/regex-2026.7.19-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4c3501bfa814ab07b5580741f9bf78dfdfe146a04057f82df9e2402d2a975939", size = 784426, upload-time = "2026-07-19T00:17:52.454Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f5/1ef9e2a83a5947c57ebff0b377cb5727c3d5ec1992317a320d035cd0dbb6/regex-2026.7.19-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c4585c3e64b4f9e583b4d2683f18f5d5d872b3d71dcf24594b74ecc23602fa96", size = 860600, upload-time = "2026-07-19T00:17:54.229Z" }, + { url = "https://files.pythonhosted.org/packages/a0/02/073af33a3ec149241d11c80acea91e722aa0adbf05addd50f251c4fe89c3/regex-2026.7.19-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:571fde9741eb0ccde23dd4e0c1d50fbae910e901fa7e629faf39b2dda740d220", size = 765950, upload-time = "2026-07-19T00:17:56.041Z" }, + { url = "https://files.pythonhosted.org/packages/81/a9/d1e9f819dc394a568ef370cd56cf25394e957a2235f8370f23b576e5a475/regex-2026.7.19-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:15b364b9b98d6d2fe1a85034c23a3180ff913f46caddc3895f6fd65186255ccc", size = 851794, upload-time = "2026-07-19T00:17:57.897Z" }, + { url = "https://files.pythonhosted.org/packages/03/3a/8ae83eda7579feacdf984e71fb9e70635fb6f832eeddca58427ec4fca926/regex-2026.7.19-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffd8893ccc1c2fce6e0d6ca402d716fe1b29db70c7132609a05955e31b2aa8f2", size = 789845, upload-time = "2026-07-19T00:17:59.97Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/c195cbfe5a75fdec64d8f6554fd15237b837919d2c61bdc141d7c807b08b/regex-2026.7.19-cp313-cp313-win32.whl", hash = "sha256:f0fa4fa9c3632d708742baf2282f2055c11d888a790362670a403cbf48a2c404", size = 267135, upload-time = "2026-07-19T00:18:01.958Z" }, + { url = "https://files.pythonhosted.org/packages/b2/80/a11de8404b7272b70acb45c1c05987cce60b45d5693da2e176f0e390d564/regex-2026.7.19-cp313-cp313-win_amd64.whl", hash = "sha256:d51ffd3427640fa2da6ade574ceba932f210ad095f65fcc450a2b0a0d454868e", size = 277747, upload-time = "2026-07-19T00:18:04.121Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/0f5c8eff1b4f1f3d83276d365fccecf666afcc7d947420943bf394d07adb/regex-2026.7.19-cp313-cp313-win_arm64.whl", hash = "sha256:c670fe7be5b6020b76bc6e8d2196074657e1327595bca93a389e1a76ab130ad8", size = 277129, upload-time = "2026-07-19T00:18:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4c/44b74742052cedda40f9ae469532a037112f7311a36669a891fba8984bb0/regex-2026.7.19-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db47b561c9afd884baa1f96f797c9ca369872c4b65912bc691cfa99e68340af2", size = 501134, upload-time = "2026-07-19T00:18:07.567Z" }, + { url = "https://files.pythonhosted.org/packages/f0/45/bbd038b5e39ee5613a5a689290145b40058cc152c41de9cc23639d2b9734/regex-2026.7.19-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:65dcd28d3eba2ab7c2fd906485cc301392b47cc2234790d27d4e4814e02cdfda", size = 299418, upload-time = "2026-07-19T00:18:09.38Z" }, + { url = "https://files.pythonhosted.org/packages/65/38/c5bde94b4cedfd5850d64c3f08222d8e1600e84f6ee71d9b44b4b8163f74/regex-2026.7.19-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f2e7f8e2ab6c2922be02c7ec45185aa5bd771e2e57b95455ee343a44d8130dff", size = 294486, upload-time = "2026-07-19T00:18:11.188Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6a/2f5e107cb26c960b781967178899daf2787a7ab151844ed3c01d6fc95474/regex-2026.7.19-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe31f28c94402043161876a258a9c6f757cb485905c7614ce8d6cd40e6b7bdc1", size = 811643, upload-time = "2026-07-19T00:18:12.975Z" }, + { url = "https://files.pythonhosted.org/packages/37/d4/a2f963406d7d73a62eed84ba05a258afb6cad1b21aa4517443ce40506b78/regex-2026.7.19-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8f6fa298bb4f7f58a33334406218ba74716e68feddf5e4e54cd5d8082705abf", size = 871081, upload-time = "2026-07-19T00:18:14.733Z" }, + { url = "https://files.pythonhosted.org/packages/45/a3/44be546340bedb15f13063f5e7fe16793ea4d9ea2e805d09bd174ac27724/regex-2026.7.19-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cc1b2440423a851fad781309dd87843868f4f66a6bcd1ddb9225cf4ec2c84732", size = 917372, upload-time = "2026-07-19T00:18:16.724Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f6/e0870b0fd2a40dba0074e4b76e514b21313d37946c9248453e34ec43923e/regex-2026.7.19-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ac59a0900474a52b7c04af8196affc22bd9842acb0950df12f7b813e983609a", size = 816089, upload-time = "2026-07-19T00:18:18.617Z" }, + { url = "https://files.pythonhosted.org/packages/ae/27/957e8e22690ad6634572b39b71f130a6105f4d0718bb16849eac00fff147/regex-2026.7.19-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4896db1f4ce0576765b8272aa922df324e0f5b9bb2c3d03044ff32a7234a9aba", size = 785206, upload-time = "2026-07-19T00:18:20.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/a4/186e410941e731037c01166069ab86da9f65e8f8110c18009ccf4bd623ee/regex-2026.7.19-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4e6883a021db30511d9fb8cfb0f222ce1f2c369f7d4d8b0448f449a93ba0bdfc", size = 800431, upload-time = "2026-07-19T00:18:22.716Z" }, + { url = "https://files.pythonhosted.org/packages/73/9f/e4e10e023d291d64a33e246610b724493bf1ce98e0e59c9b7c837e5acfb7/regex-2026.7.19-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:09523a592938aa9f587fb74467c63ff0cf88fc3df14c82ab0f0517dcf76aaa62", size = 864906, upload-time = "2026-07-19T00:18:24.772Z" }, + { url = "https://files.pythonhosted.org/packages/24/57/ccb20b6be5f1f52a053d1ba2a8f7a077edb9d918248b8490d7506c6832b3/regex-2026.7.19-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:1ebac3474b8589fce2f9b225b650afd61448f7c73a5d0255a10cc6366471aed1", size = 773559, upload-time = "2026-07-19T00:18:27.008Z" }, + { url = "https://files.pythonhosted.org/packages/a3/82/f3b263cf8fad927dc102891da8502e718b7ff9d19af7a2a07c03865d7188/regex-2026.7.19-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4a0530bb1b8c1c985e7e2122e2b4d3aedd8a3c21c6bfddae6767c4405668b56e", size = 857739, upload-time = "2026-07-19T00:18:29.107Z" }, + { url = "https://files.pythonhosted.org/packages/47/2e/1687bd1b6c2aed5e672ccf845fc11557821fe7366d921b50889ea5ce57bf/regex-2026.7.19-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2ef7eeb108c47ce7bcc9513e51bcb1bf57e8f483d52fce68a8642e3527141ae0", size = 804522, upload-time = "2026-07-19T00:18:31.362Z" }, + { url = "https://files.pythonhosted.org/packages/76/7c/cc4e7655181b2d9235b704f2c5e19d8eff002bbc437bae59baee0e381aca/regex-2026.7.19-cp313-cp313t-win32.whl", hash = "sha256:64b6ca7391a1395c2638dd5c7456d67bea44fc6c5e8e92c5dc8aa6a8f23292b4", size = 269141, upload-time = "2026-07-19T00:18:33.479Z" }, + { url = "https://files.pythonhosted.org/packages/bb/14/961b4c7b05a2391c32dbc85e27773076671ef8f97f36cec70fe414734c02/regex-2026.7.19-cp313-cp313t-win_amd64.whl", hash = "sha256:f04b9f56b0e0614c0126be12c2c2d9f8850c1e57af302bd0a63bed379d4af974", size = 280036, upload-time = "2026-07-19T00:18:35.419Z" }, + { url = "https://files.pythonhosted.org/packages/ce/67/795644550d788ddbb6dc458c95895f8009978ea6d6ea76b005eb3f45e8c9/regex-2026.7.19-cp313-cp313t-win_arm64.whl", hash = "sha256:fcee38cd8e5089d6d4f048ba1233b3ad76e5954f545382180889112ff5cb712d", size = 279394, upload-time = "2026-07-19T00:18:37.454Z" }, + { url = "https://files.pythonhosted.org/packages/d2/25/0c4c452f8ef3efe456745b2f33195f5904b573fb4c2ff3f0cb9ec188461e/regex-2026.7.19-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a81758ed242b861b72e778ba34d41366441a2e10b16b472784c88da2dea7e2dd", size = 496750, upload-time = "2026-07-19T00:18:39.633Z" }, + { url = "https://files.pythonhosted.org/packages/24/9e/b70ca6c1704f6c7cd32a9e143c86cc5968d10981eca284bad670c245ea7d/regex-2026.7.19-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4aa5435cdb3eb6f55fe98a171b05e3fbcd95fadaa4aa32acf62afd9b0cfdbcac", size = 297093, upload-time = "2026-07-19T00:18:41.583Z" }, + { url = "https://files.pythonhosted.org/packages/87/74/0b692da2520d51fbff19c88b83d97e4c702909dd02386c585998b7e2dbed/regex-2026.7.19-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:60be8693a1dadc210bbcbc0db3e26da5f7d01d1d5a3da594e99b4fa42df404f5", size = 292043, upload-time = "2026-07-19T00:18:43.347Z" }, + { url = "https://files.pythonhosted.org/packages/e3/a7/1d478e614016045a33feae57446215f9fd65b665a5ceb2f891fb3183bc52/regex-2026.7.19-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19662dbedbe783d323196312d38f5ba53cf56296378252171985da6899887d3", size = 797214, upload-time = "2026-07-19T00:18:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ae/11b9c9411d92c30e3d2db32df5a31133e4a99a8fc397a604fd08f6c4bffb/regex-2026.7.19-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d15df07081d91b76ff20d43f94592ee110330152d617b730fdbe5ef9fb680053", size = 866433, upload-time = "2026-07-19T00:18:47.315Z" }, + { url = "https://files.pythonhosted.org/packages/b1/62/2b2efc4992f91d6d204b24c647c9f9412e85379d92b7c0ab9fdae622327e/regex-2026.7.19-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:56ad4d9f77df871a99e25c37091052a02528ec0eb059de928ee33956b854b45b", size = 911360, upload-time = "2026-07-19T00:18:49.588Z" }, + { url = "https://files.pythonhosted.org/packages/14/71/986ceea9aa3da548bf1357cad89b63915ec6d21ec957c8113b29ece567df/regex-2026.7.19-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7322ec6cc9fba9d49ab888bb82d67ac5625627aa168f0165139b17018df3fb8a", size = 801275, upload-time = "2026-07-19T00:18:51.767Z" }, + { url = "https://files.pythonhosted.org/packages/15/be/ce9d9534b2cda96eab32c548261224b9b4e220a4126f098f60f42ae7b4cd/regex-2026.7.19-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9c7472192ebfad53a6be7c4a8bfb2d64b81c0e93a1fc8c57e1dd0b638297b5d1", size = 777131, upload-time = "2026-07-19T00:18:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/58b5c710f2c3929515a25f3a1ca0dad0dcd4518d4fff3cf23bc7adb8dcd2/regex-2026.7.19-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c10b82c2634df08dfb13b1f04e38fe310d086ee092f4f69c0c8da234251e556e", size = 785020, upload-time = "2026-07-19T00:18:56.579Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/5fe091935b74f15fe0f97998c215cae418d1c0413f6258c7d4d2e83aa37f/regex-2026.7.19-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:17ed5692f6acc4183e98331101a5f9e4f64d72fe58b753da4d444a2c77d05b12", size = 861263, upload-time = "2026-07-19T00:18:58.64Z" }, + { url = "https://files.pythonhosted.org/packages/d8/fa/d60bf82e10841eef62a9e32aac401468f05fddfbcb2942e342b1ba3d2433/regex-2026.7.19-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:22a992de9a0d91bda927bf02b94351d737a0302905432c88a53de7c4b9ce62e2", size = 766199, upload-time = "2026-07-19T00:19:00.705Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5d/11e64d151b0662b81d6bf644c74dc118d461df85bdf2577fadbbf751788a/regex-2026.7.19-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:618a0aed532be87294c4477b0481f3aa0f1520f4014a4374dd4cf789b4cd2c97", size = 851317, upload-time = "2026-07-19T00:19:03.015Z" }, + { url = "https://files.pythonhosted.org/packages/7c/34/532efb87488d90807bae6a443d357ee5e2728a478c597619c8aaa17cc0bd/regex-2026.7.19-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ce9e679f776649746729b6c86382da519ef649c8e34cc41df0d2e5e0f6c36d4", size = 789557, upload-time = "2026-07-19T00:19:05.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/90/3a8d5ca977171ec3ae21a71207d2228b2663bde14d7f7ef0e6363ecf9290/regex-2026.7.19-cp314-cp314-win32.whl", hash = "sha256:73f272fba87b8ccfe70a137d02a54af386f6d27aa509fbffdd978f5947aae1aa", size = 272531, upload-time = "2026-07-19T00:19:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/96/e1/8862885e70409de70e8c005f57fb2e7be8d9ef0317250d60f4c9660a300d/regex-2026.7.19-cp314-cp314-win_amd64.whl", hash = "sha256:d721e53758b2cca74990185eb0671dd466d7a388a1a45d0c6f4c13cef41a68ac", size = 280831, upload-time = "2026-07-19T00:19:09.46Z" }, + { url = "https://files.pythonhosted.org/packages/08/82/2693e53e29f9104d9de95d37ce4dd826bd32d5f9c0085d3aa6ac042675c4/regex-2026.7.19-cp314-cp314-win_arm64.whl", hash = "sha256:65fa6cb38ed5e9c3637e68e544f598b39c3b86b808ed0627a67b68320384b459", size = 281099, upload-time = "2026-07-19T00:19:11.398Z" }, + { url = "https://files.pythonhosted.org/packages/92/b7/9a01aa16461a18cde9d7b9c3ab21e501db2ce33725f53014342b91df2b0a/regex-2026.7.19-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:5a2721c8720e2cb3c209925dfb9200199b4b07361c9e01d321719404b21458b3", size = 501121, upload-time = "2026-07-19T00:19:13.425Z" }, + { url = "https://files.pythonhosted.org/packages/f3/5e/bbaeca815dc9191c424c94a4fdc5c87c75748a64a6271821212ebdd4e1a3/regex-2026.7.19-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:199535629f25caf89698039af3d1ad5fcae7f933e2112c73f1cdf49165c99518", size = 299415, upload-time = "2026-07-19T00:19:15.43Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d6/0dd1a321afaab95eb7ff44aa0f637301786f1dc71c6b797b9ed236ed8890/regex-2026.7.19-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b60d7814174f059e5de4ab98271cc5ba9259cfea55273a81544dceea32dc8d9", size = 294483, upload-time = "2026-07-19T00:19:17.879Z" }, + { url = "https://files.pythonhosted.org/packages/92/5f/40bacf91d0904f812e13bbbab3864604c463eced8afdc54aeaa50492ea95/regex-2026.7.19-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbece16025afda5e3031af0c4059207e61dcf73ef13af844964f57f387d1c435", size = 811833, upload-time = "2026-07-19T00:19:20.102Z" }, + { url = "https://files.pythonhosted.org/packages/94/7c/4902744261f775aeede8b5627314b38482da29cf49a57b66a6fb753246c5/regex-2026.7.19-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d24ecb4f5e009ea0bd275ee37ad9953b32005e2e5e60f8bbae16da0dbbf0d3a0", size = 871270, upload-time = "2026-07-19T00:19:22.365Z" }, + { url = "https://files.pythonhosted.org/packages/16/70/6980c9be6bf21c0a60ed3e0aea39cf419ecf3b08d1d9947bc56e196ef186/regex-2026.7.19-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8cae6fd77a5b72dae505084b1a2ee0360139faf72fedbab667cd7cc65aae7a6a", size = 917534, upload-time = "2026-07-19T00:19:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/52/92/8b2bd872782ce8c42691e39acb38eb8efe014e5ddb78ad7d943d6f197ce9/regex-2026.7.19-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9724e6cb5e478cd7d8cabf027826178739cb18cf0e117d0e32814d479fa02276", size = 816135, upload-time = "2026-07-19T00:19:26.919Z" }, + { url = "https://files.pythonhosted.org/packages/de/2d/33a602f657bdc4041f17d79f92ab18261d255d91a06117a6e29df023e5e2/regex-2026.7.19-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:572fc57b0009c735ee56c175ea021b637a15551a312f56734277f923d6fd0f6c", size = 785492, upload-time = "2026-07-19T00:19:29.192Z" }, + { url = "https://files.pythonhosted.org/packages/9e/36/0987cf4cb271680064a70d24a475873775a151d0b7058698a006cb0cae4a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:20568e182eb82d39a6bf7cff3fd58566f14c75c6f74b2c8c96537eecf9010e3a", size = 800658, upload-time = "2026-07-19T00:19:31.392Z" }, + { url = "https://files.pythonhosted.org/packages/a8/24/c14f31c135e1ba55fa4f9a58ca98d0842512bf6188230763c31c8f449e3b/regex-2026.7.19-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1d58561843f0ff7dc78b4c28b5e2dc388f3eff94ebc8a232a3adba961fc00009", size = 865073, upload-time = "2026-07-19T00:19:33.485Z" }, + { url = "https://files.pythonhosted.org/packages/14/85/181a12211f22469f24d2de1ebddfe397d2396e2c29013b9a58134a91069a/regex-2026.7.19-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:61bb1bd45520aacd56dd80943bd34991fb5350afdd1f36f2282230fd5154a218", size = 773684, upload-time = "2026-07-19T00:19:35.599Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/bd1a0c1a62251366f8d21f41b1ea3c76994962071b8b6ea42f72d505c0f0/regex-2026.7.19-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:cd3584591ea4429026cdb931b054342c2bcf189b44ff367f8d5c15bc092a2966", size = 857769, upload-time = "2026-07-19T00:19:37.738Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4f/f7e2dad6756b2fe1fe75dd90a628c3b45f249d39f948dd90cd2476325417/regex-2026.7.19-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5cc26a66e212fa5d6c6170c3a40d99d888db3020c6fdab1523250d4341382e44", size = 804546, upload-time = "2026-07-19T00:19:40.229Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d7/01d31d5bdb09bc026fab77f59a371fdf8f9b292e4810546c56182ca70498/regex-2026.7.19-cp314-cp314t-win32.whl", hash = "sha256:2c4e61e2e1be56f63ec3cc618aa9e0de81ef6f43d177205451840022e24f5b78", size = 274526, upload-time = "2026-07-19T00:19:42.398Z" }, + { url = "https://files.pythonhosted.org/packages/52/0e/cea4ce73bc0a8247a0748228ae6669984c7e1f8134b6fa66e59c0572e0ea/regex-2026.7.19-cp314-cp314t-win_amd64.whl", hash = "sha256:c639ea314df70a7b2811e8020448c75af8c9445f5a60f8a4ced81c306a9380c2", size = 283763, upload-time = "2026-07-19T00:19:44.644Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b6/26e41975febae63b7a6e3e02f32cff6cff2e4f10d19c929082f56aebf7c6/regex-2026.7.19-cp314-cp314t-win_arm64.whl", hash = "sha256:9a15e785f244f3e07847b984ce8773fc3da10a9f3c131cc49a4c5b4d672b4547", size = 283451, upload-time = "2026-07-19T00:19:46.639Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] + +[[package]] +name = "setuptools-rust" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "semantic-version" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/ba/b31781d61bf9ee3c232a1d1160db11c11cdeae1d44e06c90723b25a8279f/setuptools_rust-1.13.0.tar.gz", hash = "sha256:f2afcf4baeee689910ce49cfa8aad4e08cce72f417449bcc32891b8664fdc726", size = 314100, upload-time = "2026-06-27T21:45:02.976Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/80/909e46e684e47b116ed145bf2a1a8f5f7c9d90e8c3f8f7fce6a529c0068d/setuptools_rust-1.13.0-py3-none-any.whl", hash = "sha256:666439c4d90e968bb625bcf87ec0aa02b4f49e599d2f5dc255c633a04e8eca99", size = 30536, upload-time = "2026-06-27T21:45:01.583Z" }, +] + +[[package]] +name = "tiktoken" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/e5/5f3cb2159769d0f4324c0e9e87f9de3c4b1cd45848a96b2eb3566ad5ca77/tiktoken-0.13.0.tar.gz", hash = "sha256:c9435714c3a84c2319499de9a300c0e604449dd0799ff246458b3bb6a7f433c1", size = 38986, upload-time = "2026-05-15T04:51:27.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/4c/1bc81f4cd53e827c4ee67ca951b5935724716049452d8dfa09b8b82372bb/tiktoken-0.13.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7bfe1849caa65d1e1d9871817170ec497bbb7984e182012e1bdce72f66608cdb", size = 1036353, upload-time = "2026-05-15T04:50:21.757Z" }, + { url = "https://files.pythonhosted.org/packages/75/91/10b9c7076bc02c246c853201fdbbe300a4b8c5ed7b84c25f7403f4e32655/tiktoken-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:91c180fe255bd5a86d8316210d2833a1d4d33d026cd86a67812f4773743c8d26", size = 984644, upload-time = "2026-05-15T04:50:23.256Z" }, + { url = "https://files.pythonhosted.org/packages/4e/e4/fceae98015fab47fcd49b8bd7f46145bcd187a47e0add1e5378ed67ef980/tiktoken-0.13.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:059c8ecf554eb5b41e6e054ba467b871b03277d267dee7244380aca4359747d4", size = 1119261, upload-time = "2026-05-15T04:50:24.348Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/fe42ad00de01a8c4a49ad8649a2c8a316835a9cad5961b11d21eac0020a5/tiktoken-0.13.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:36217497eaffc158607a3b26f065300db2aefd43b115263f3b9688ce38146173", size = 1138253, upload-time = "2026-05-15T04:50:25.505Z" }, + { url = "https://files.pythonhosted.org/packages/03/c4/ccee1ecccca107e9a16efcecdeeb964c325305038554d466ece65b42338f/tiktoken-0.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:303f7d91b4fce3baddbcde05c139091d4caa5026ac7214c1dc7ff7a71ee429ff", size = 1185747, upload-time = "2026-05-15T04:50:27.02Z" }, + { url = "https://files.pythonhosted.org/packages/9d/03/cd0cba295522b91eb55c6b2704f1df895f8226cfe60ab10d4d51d0cc9e69/tiktoken-0.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5d48843bee149630eb735a99e1f4a85b47308d21868ea63163f6e87768d3cfed", size = 1241265, upload-time = "2026-05-15T04:50:28.815Z" }, + { url = "https://files.pythonhosted.org/packages/7e/25/a10efd564402d82c2ff50d12057353ace447aa8007deceaa48641f63d35c/tiktoken-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc1c44cd37b43fc46bae593129164f4f281e82ea116b57a85aa81bda57eafc94", size = 876509, upload-time = "2026-05-15T04:50:30.026Z" }, + { url = "https://files.pythonhosted.org/packages/85/8e/144bde4e01df66b34bb865557c7cd754ed08b036217ebd79c9db5e9048a9/tiktoken-0.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:32ac870a806cfb260a02d0cb70426aef02e038297f8ad50df5040bb5af360791", size = 1034888, upload-time = "2026-05-15T04:50:31.579Z" }, + { url = "https://files.pythonhosted.org/packages/36/18/d4ac9d20956cdebca04841316660ed584c2fecdc2b81722a28bc7ad3b1e4/tiktoken-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d9980f11429ed2d737c463bb1fb78cf330caa026adf002f714aced7849a687b", size = 982970, upload-time = "2026-05-15T04:50:32.961Z" }, + { url = "https://files.pythonhosted.org/packages/74/ed/6bb8d05b9f731f749fee5c6f5ca63e981143c826a5985877330507bd13b7/tiktoken-0.13.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3f277ebea5edd7b8bf03c6f9431e1d67d517530115572b2dc1d465326e8f88c7", size = 1115741, upload-time = "2026-05-15T04:50:34.475Z" }, + { url = "https://files.pythonhosted.org/packages/34/de/2ca96b07a82d972b74fe4b46de055b79c904e45c7eab699354a0bfa697dc/tiktoken-0.13.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a116178fa7e1b4065bff05214360373a65cac22f965be7b3f73d00a0dbfe7649", size = 1136523, upload-time = "2026-05-15T04:50:35.782Z" }, + { url = "https://files.pythonhosted.org/packages/ee/dc/9dafec002c2d4424378563cf4cf5c7fb93631d2a55013c8b87554ee4012c/tiktoken-0.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c397ddda233208345b01bd30f2fca79ff730e55731d0108a603f9bc57f6af3b", size = 1181954, upload-time = "2026-05-15T04:50:36.99Z" }, + { url = "https://files.pythonhosted.org/packages/a1/d0/1f8578c45b2f24759b46f0b50d31878c63c73e6bf0f2227e10ec5c5408dc/tiktoken-0.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:95097e4f89b06403976e498abf61a0ee73a7497e73fb599cb211d8197a054d91", size = 1240069, upload-time = "2026-05-15T04:50:38.221Z" }, + { url = "https://files.pythonhosted.org/packages/aa/90/28d7f154888610aa9237e541986beb62b479df29d193a5a0617dbb1514d0/tiktoken-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8f2d16e7a7c783ad81f36e457d046d1f1c8af70b22aec8a13238efe531977c41", size = 874748, upload-time = "2026-05-15T04:50:39.587Z" }, + { url = "https://files.pythonhosted.org/packages/9c/83/b096c859c2a47c11731bf2f5885f4028b809dfe2396582883eed9cae372f/tiktoken-0.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5df5d1507bd245f1ccad4a074698240021239e455eb0bb4ced4e3d7181872154", size = 1034228, upload-time = "2026-05-15T04:50:40.988Z" }, + { url = "https://files.pythonhosted.org/packages/53/61/c68e123b6d753e3fc2751e9b18e732c9d8bf1e1926762e736eee935d931c/tiktoken-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8fe806a50664e83a6ffd56cbd1e4f5dcc6cd32a3e7538f70dc38b1a271384545", size = 982978, upload-time = "2026-05-15T04:50:42.195Z" }, + { url = "https://files.pythonhosted.org/packages/ef/8b/96cc178cc584e65d363134500f297790b06cd48cdeb1e8fcf7bbe60f4715/tiktoken-0.13.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:125bc05005e747f993a83dc67934249932d6e4209854452cd4c0b1d53fba3ba2", size = 1116355, upload-time = "2026-05-15T04:50:43.564Z" }, + { url = "https://files.pythonhosted.org/packages/86/f5/bab735d2c72ea55404b295d02d092644eb5f7cc6205e34d35eb9abfb9ab2/tiktoken-0.13.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5e6358911cab4adee6712da27d65573496a4f68cf8a2b5fca6a4ad10fc5748cf", size = 1135772, upload-time = "2026-05-15T04:50:44.782Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b9/6de04ebdf904edfaad87788011b3735087a0c9ea671b9027e1e4e965e8c8/tiktoken-0.13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:975cbd78d085d75d26b59660e262736dcaed1e35f8f142cd6291025c01d25486", size = 1182415, upload-time = "2026-05-15T04:50:46.422Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9c/470a05f3b1caf038f44880e334d47ab674e0c80d514c66b375d14d5afa10/tiktoken-0.13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:75ab9bc99fa020a4c283424590ecd7f3afd70c1c281cb3fa3192a6c3af9f9615", size = 1239879, upload-time = "2026-05-15T04:50:48.052Z" }, + { url = "https://files.pythonhosted.org/packages/42/a6/c1936d16055436cb32e6c6128d68629622e00f4768562f55653752d34768/tiktoken-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:6b1615f0ff71953d19729ceb18865429c185b0a23c5353f1bbca34a394bf60f7", size = 874829, upload-time = "2026-05-15T04:50:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/d6/07/acb5992c3772b5a36284f742cfb7a5895aa4471d1848ac31464ad50d7fdf/tiktoken-0.13.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6eb4a5bfbc6426938026b1a334e898ac53541360d62d8c689870160cc80abd67", size = 1033600, upload-time = "2026-05-15T04:50:50.4Z" }, + { url = "https://files.pythonhosted.org/packages/14/e9/742e9aec30f59b9f161f7ff7cd072e02ea836c9e1c0854a8076dfcd40d5c/tiktoken-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:43cee3e5400573b2046fbf092cc7a5bc30164f9e4c95ce20714da929df48737a", size = 982516, upload-time = "2026-05-15T04:50:52.03Z" }, + { url = "https://files.pythonhosted.org/packages/72/74/ca1541b053e7648254d2e4b42a253e1bb4359f2c91a0a8d49228c794e1a0/tiktoken-0.13.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7de52e3f566d19b3b11bd37eea552c6c305ad74081f736882bd44d148ed4c48d", size = 1115518, upload-time = "2026-05-15T04:50:53.543Z" }, + { url = "https://files.pythonhosted.org/packages/46/e3/93825eaf5a4a504795b787e5d5dea07fbeb3dabf97aa7b450be8bde59c89/tiktoken-0.13.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:51384448aa508e4df84c0f7c1dc3211c7f7b8096325660ee5fc82f3e11b381ce", size = 1136867, upload-time = "2026-05-15T04:50:55.191Z" }, + { url = "https://files.pythonhosted.org/packages/8c/46/002b68de6827091d5ae90b048f326e8aad8d953520950e5ce1508879414f/tiktoken-0.13.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e28157350f7ebf35008dd8e9e0fdb621f976e4230c881099c85e8cf07eaa50e2", size = 1181826, upload-time = "2026-05-15T04:50:56.296Z" }, + { url = "https://files.pythonhosted.org/packages/db/c6/d393e3185a276505182f7abd93fe714f3c444a2be9180798fa052347504e/tiktoken-0.13.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:165cf1820ea4a354985c2490a5205d4cc74661c934aca79dd0368232fff94e0f", size = 1239489, upload-time = "2026-05-15T04:50:57.918Z" }, + { url = "https://files.pythonhosted.org/packages/b7/4d/bc07d1f1635d4897a202acc0ae11c2886eaa7325c359ba4741b47bf8e225/tiktoken-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6c43a675ca14f6f2749ba7f12075d37456015a24b859f2517b9beb4ef30807ec", size = 873820, upload-time = "2026-05-15T04:50:59.528Z" }, + { url = "https://files.pythonhosted.org/packages/8c/93/0dd6adca026a616c3a92974566b43381eea4b475ce1f36c062b8271a9ac5/tiktoken-0.13.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaaaef47c2406277181d2086484c317bf7fc433e2d5d03ff94f56b0dcec87471", size = 1034977, upload-time = "2026-05-15T04:51:00.957Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5ec6e6bc5b30bed6d93f7f2162d8f6b32437b3ba27cb527cfe004f6109c9/tiktoken-0.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ca8b310bd93b3772cb1b7922d915446864860f562bdfe4825c63a0aed3fb28cd", size = 983635, upload-time = "2026-05-15T04:51:02.629Z" }, + { url = "https://files.pythonhosted.org/packages/94/b0/c8ae9aff00d625c50659b4513e707a0462c4bf5d4d6cc1b802103225c02e/tiktoken-0.13.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:32e0c12305105002c047b3bb1070b0dd9a73b0cb3b2856a8972b810e7a4f5881", size = 1116036, upload-time = "2026-05-15T04:51:04.082Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ac/6a5dddd1d0a6018ecb389bd0353e6b4a515eb4d2286611bd0ace1937b9e1/tiktoken-0.13.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5ba5fd62507a932d1241346179e3b39bc7bf7408f03c272652d93b3bedf5db24", size = 1135544, upload-time = "2026-05-15T04:51:05.229Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b8/585032b4384b2f7dcdaddcb52865c83a701a420d09e3c2b4a2be1c450c57/tiktoken-0.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d108bc2d470fc53c8ecd24f2c0fd2b5f98c33e87cdb6aa2e9b8c5dced703d273", size = 1182217, upload-time = "2026-05-15T04:51:06.517Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b6/993ff1ded3958215fd341a847b8e5ffeb5de473f435296870d314fc91ac4/tiktoken-0.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cb99cb5127449f58d0a2d5f5ccfb390d8dbdfd919c221246caaee29d8725ed51", size = 1239404, upload-time = "2026-05-15T04:51:07.843Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3d/fef7e06e3b33e7538db0ced734cf9fe23b6832d2ac4990c119c377aec55e/tiktoken-0.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:115c4f26ffa11caac8b54eea35c2ad38c612c20a48d35dd15d70a02ac6f51f58", size = 918686, upload-time = "2026-05-15T04:51:08.925Z" }, + { url = "https://files.pythonhosted.org/packages/c1/82/a7fc44582bc32ab00de988a2299bf77c077f59068b233109e34b7d6ca7e6/tiktoken-0.13.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:472527e9132952f2fbf77cd290658bacf003d4d5a3fabc18e5fbd407cbae4d9b", size = 1034454, upload-time = "2026-05-15T04:51:10.035Z" }, + { url = "https://files.pythonhosted.org/packages/37/d0/24d8a890c14f432a05cea669c17bebeaa99f96a7c79523b590f564246411/tiktoken-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e2f67d27c9626cdd25fe33d9313c5cdb3d8d82da646b68d6eb8e7e9c20e6448", size = 982976, upload-time = "2026-05-15T04:51:11.23Z" }, + { url = "https://files.pythonhosted.org/packages/49/b7/2ab43f62788a9266187a9bfc1d3af99ad83e5eaa25fbef168a69cd5ad14f/tiktoken-0.13.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:2b920b35805cd64585a37c3dc7ce65fba4d2d36016be01e1d7942482ca29093a", size = 1115526, upload-time = "2026-05-15T04:51:12.608Z" }, + { url = "https://files.pythonhosted.org/packages/64/39/1494321ed323ce7a14d88e3cd6cb9058625977df1c6961ddc492bd10a9f3/tiktoken-0.13.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:493af3aa28a4aaf2e3d2600a2ee717252c9bf5ab38fff94eb5a02db5ab77e5ad", size = 1136466, upload-time = "2026-05-15T04:51:13.926Z" }, + { url = "https://files.pythonhosted.org/packages/96/d9/dfd086aa2d918c563a140720e0ce296cada1634efd2783d5cf51e05f984e/tiktoken-0.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6644c9c2b5cf3916f5a3641d7d12fdb3f006a7b3d9ff6acdaec44e29ab1ff91e", size = 1181863, upload-time = "2026-05-15T04:51:15.025Z" }, + { url = "https://files.pythonhosted.org/packages/2f/68/a18b4f307086954fdae32714cb4f85562e34f9d34ab206e61f1816aa6018/tiktoken-0.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5cb65b60b9408563676d874a3a4ee573370066f0dc4e29d84e82e989c6517424", size = 1239218, upload-time = "2026-05-15T04:51:16.103Z" }, + { url = "https://files.pythonhosted.org/packages/16/5b/f2aa703a4fc5d2dff73460a7d46cc2f3f44aa0f3dd8eeb20d2a0ecf68862/tiktoken-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:85b78cc3a2c3d48723ca751fa981f1fedccd54194ca0471b957364353a898b07", size = 918110, upload-time = "2026-05-15T04:51:17.237Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "wheel" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, +] diff --git a/e2e/crossbuild/tools/BUILD.bazel b/e2e/crossbuild/tools/BUILD.bazel index 987e249f0..6c332822a 100644 --- a/e2e/crossbuild/tools/BUILD.bazel +++ b/e2e/crossbuild/tools/BUILD.bazel @@ -1,17 +1,62 @@ -# Shared helpers consumed by //... via load("//tools:..."). +# Shared helpers consumed via load("//tools:..."). -load("@aspect_rules_py//py:defs.bzl", "py_binary") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@rules_shell//shell:sh_test.bzl", "sh_test") +load(":ant_layer.bzl", "ant_home") +load(":rust_layer.bzl", "rust_pinned_sysroot") +load(":toolchain_test.bzl", "exec_python_path") -# Consumed cross-package by the `collect_wheels` macro (//tools:collect_wheels.bzl), -# which declares a py_test with this script as `main` in the caller's package. exports_files([ - "check_wheel_native.py", - "check_wheel_tags.py", + "assert_absent.py", + "check_so_arch.sh", + "check_so_suffix.sh", ]) -py_binary( - name = "collect_wheels_tool", - srcs = ["collect_wheels.py"], - main = "collect_wheels.py", +# The exec-platform (x86_64) rust_toolchain's sysroot, pinned by label so it's +# available even when the rest of the build is transitioned to arm64 — see +# rust_layer.bzl for why current_rust_toolchain alone isn't enough. +rust_pinned_sysroot( + name = "rust_host_sysroot", + # rust_linux_x86_64__x86_64-unknown-linux-gnu__stable (in @rust_toolchains) + # is the toolchain() *resolution* wrapper; the actual rust_toolchain rule + # instance (the one with ToolchainInfo/TemplateVariableInfo) is this repo. + actual = "@@rules_rust++rust+rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools//:rust_toolchain", visibility = ["//visibility:public"], ) + +# Ant is architecture-independent (bytecode + launcher scripts), so unlike +# the Rust sysroot there's no cross/native split — one $(ANT_HOME) covers +# both. +ant_home( + name = "ant_home", + all_files = "@apache_ant//:all_files", + ant_bin = "@apache_ant//:bin/ant", + visibility = ["//visibility:public"], +) + +# EXEC_TOOLS_TOOLCHAIN must resolve the exec-platform Python interpreter even +# when the target is arm64 — unpack.py runs on the exec side. Doesn't depend +# on any case's binary; the mechanism it checks is shared by all of them. +exec_python_path( + name = "unpack_path", +) + +exec_python_path( + name = "unpack_path_for_arm64", +) + +platform_transition_filegroup( + name = "unpack_path_for_arm64_transition", + srcs = [":unpack_path_for_arm64"], + target_platform = "//:arm64_linux", +) + +sh_test( + name = "exec_toolchain_resolution_test", + srcs = ["test_exec_toolchain.sh"], + data = [ + ":unpack_path", + ":unpack_path_for_arm64_transition", + ], + target_compatible_with = ["@platforms//os:linux"], +) diff --git a/e2e/crossbuild/tools/ant_layer.bzl b/e2e/crossbuild/tools/ant_layer.bzl new file mode 100644 index 000000000..e35005451 --- /dev/null +++ b/e2e/crossbuild/tools/ant_layer.bzl @@ -0,0 +1,33 @@ +"""Exposes a vendored Apache Ant install's bin/ dir as a Make variable. + +Ant is plain Java bytecode plus shell/bat launcher scripts — architecture +independent, so unlike the Rust toolchain there's no host/target split to +worry about: jpype1's CMake build only ever runs Ant to build a JAR (always +a host-executed step, regardless of what CPU the compiled .so targets). +""" + +def _ant_home_impl(ctx): + ant_bin = ctx.file.ant_bin + return [ + DefaultInfo(files = ctx.attr.all_files[DefaultInfo].files), + platform_common.TemplateVariableInfo({ + "ANT_HOME": ant_bin.dirname.rsplit("/", 1)[0], + "ANT_BIN_DIR": ant_bin.dirname, + }), + ] + +ant_home = rule( + implementation = _ant_home_impl, + attrs = { + "all_files": attr.label( + doc = "filegroup covering the whole extracted Ant distribution.", + mandatory = True, + ), + "ant_bin": attr.label( + allow_single_file = True, + doc = "The `bin/ant` launcher script.", + mandatory = True, + ), + }, + doc = "Exposes $(ANT_HOME) / $(ANT_BIN_DIR) for a vendored Ant distribution.", +) diff --git a/e2e/crossbuild/tools/assert_absent.py b/e2e/crossbuild/tools/assert_absent.py new file mode 100644 index 000000000..8cdcf7864 --- /dev/null +++ b/e2e/crossbuild/tools/assert_absent.py @@ -0,0 +1,49 @@ +"""Fail if a tar-listing file contains any forbidden path substring. + +Docker-free guard wired into `assert_tar_listing`: it scans the same layer +listing the snapshot test diffs, but asserts an *invariant* rather than exact +bytes, so it keeps holding even when a snapshot is regenerated. + +Guards the packaging policy that otherwise only surfaces inside a running +container: + + * `py_image_layer`'s pip-package layer strips `__pycache__`/`.pyc` and + install metadata (see `_should_skip_pkg_path`). Nothing may smuggle them + back in — in particular a reintroduced `_wheels/` venv tree, which + ships as a distinct declared output the source-layer dedup doesn't catch, + re-injecting both the duplicate wheel files and the stripped bytecode. + +Usage (from the macro): assert_absent.py ... +""" + +import sys + + +def main(argv: list[str]) -> None: + if len(argv) < 3: + sys.exit("usage: assert_absent.py ...") + listing_path = argv[1] + forbidden = argv[2:] + + with open(listing_path, encoding="utf-8") as f: + lines = f.read().splitlines() + + failures = [] + for line in lines: + for pat in forbidden: + if pat in line: + failures.append((pat, line.strip())) + + if failures: + msg = ["{} forbidden path(s) in {}:".format(len(failures), listing_path)] + for pat, line in failures[:20]: + msg.append(" [{}] {}".format(pat, line)) + if len(failures) > 20: + msg.append(" ... ({} more)".format(len(failures) - 20)) + sys.exit("\n".join(msg)) + + print("assert_absent: ok ({} lines, none matched {})".format(len(lines), forbidden)) + + +if __name__ == "__main__": + main(sys.argv) diff --git a/e2e/crossbuild/tools/asserts.bzl b/e2e/crossbuild/tools/asserts.bzl new file mode 100644 index 000000000..c3b3fea01 --- /dev/null +++ b/e2e/crossbuild/tools/asserts.bzl @@ -0,0 +1,107 @@ +"""Test helper""" + +load("@aspect_rules_py//py:defs.bzl", "py_test") +load("@bazel_lib//lib:write_source_files.bzl", "write_source_file") + +# Path substrings that must never appear in any image layer. These ship via +# the venv/runfiles source layer only if something bypasses the pip-package +# layer's `_should_skip_pkg_path` filter — e.g. a reintroduced +# `_wheels/` intermediate tree, which also re-duplicates wheel files. +# Asserted by a Docker-free py_test (see assert_tar_listing); intentionally an +# invariant, not exact bytes, so it survives snapshot regeneration. +_FORBIDDEN_LAYER_PATHS = [ + "__pycache__", + ".pyc", + "/_wheels/", +] + +# Paths whose byte size varies across Bazel releases or builds. We keep +# the rows in the listing (so a missing/renamed file would still be +# caught) but redact the size column so a single snapshot works across +# Bazel-version bumps. +_VOLATILE_SIZE_PATHS = [ + "/_repo_mapping", +] + +# Paths to drop from the listing entirely. Bazel 8 ships runfiles.bash via +# @bazel_tools, Bazel 9 routes it through @rules_shell at a different +# runfiles path — neither this rule nor the user-facing image cares which, +# so filter the row out so one snapshot works on both. +_FILTERED_PATHS = [ + "/bazel_tools/tools/bash/runfiles/runfiles.bash", +] + +# buildifier: disable=function-docstring +def assert_tar_listing(name, actual, expected, **kwargs): + actual_listing = "{}_listing".format(name) + native.genrule( + name = actual_listing, + srcs = actual, + testonly = True, + outs = ["_{}.listing".format(name)], + cmd = """\ +iter=0 +for f in $(SRCS); do + echo "---" + echo "layer: $$iter" + echo "files:" + # Redact the size column for known-volatile rows in place, replacing + # both the right-aligned padding spaces and the digits with a single + # ` *` token. Digit-count-agnostic so a single snapshot survives + # cross-platform size drift (e.g. `_repo_mapping` rendered as 4 vs 5 + # digits across builds). The size lives right before the `Jan 1 2023` + # timestamp that mtree pins on every entry, so ` Jan` + # is unambiguous. Loses column alignment on the redacted row only — + # snapshot diffs are byte-exact, not visual, so alignment doesn't + # matter. + TZ="UTC" LC_ALL="en_US.UTF-8" $(BSDTAR_BIN) -tvf $$f \\ + | awk -v volatile='{volatile}' -v filtered='{filtered}' ' + BEGIN {{ + n = split(volatile, paths, "|") + nf = split(filtered, fpaths, "|") + }} + {{ + # Drop rows for Bazel-version-sensitive paths entirely. + for (j = 1; j <= nf; j++) {{ + if (fpaths[j] != "" && index($$0, fpaths[j])) next + }} + for (i = 1; i <= n; i++) {{ + if (paths[i] != "" && index($$0, paths[i]) && match($$0, /[ ]+[0-9]+ Jan/)) {{ + # RLENGTH spans leading spaces + digits + " Jan". + # Keep the " Jan" suffix (4 chars); replace the rest. + $$0 = substr($$0, 1, RSTART - 1) " *" substr($$0, RSTART + RLENGTH - 4) + break + }} + }} + print + }}' \\ + | sort -k9 | sed "s/^/ - /g" + iter=$$(($$iter + 1)) +done > $@ +""".format( + volatile = "|".join(_VOLATILE_SIZE_PATHS), + filtered = "|".join(_FILTERED_PATHS), + ), + toolchains = ["@bsd_tar_toolchains//:resolved_toolchain"], + ) + + write_source_file( + name = name, + in_file = actual_listing, + out_file = "snapshots/{}".format(expected), + testonly = True, + **kwargs + ) + + # Docker-free invariant guard over the same listing: assert the stripped + # bytecode/metadata (and any `_wheels/` smuggling tree) never reappear + # in a layer. Complements the byte-exact snapshot above — regenerating the + # snapshot can't make this pass. + py_test( + name = "{}_no_forbidden_paths".format(name), + srcs = ["//tools:assert_absent.py"], + main = "//tools:assert_absent.py", + args = ["$(rootpath :{})".format(actual_listing)] + _FORBIDDEN_LAYER_PATHS, + data = [":{}".format(actual_listing)], + testonly = True, + ) diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh b/e2e/crossbuild/tools/check_so_arch.sh similarity index 52% rename from e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh rename to e2e/crossbuild/tools/check_so_arch.sh index 6b1569373..b41e0bc2f 100755 --- a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh +++ b/e2e/crossbuild/tools/check_so_arch.sh @@ -1,26 +1,31 @@ #!/usr/bin/env bash -# Check that _geohash.so inside a py_image_layer tar is ELF for the expected arch. +# Check that a native extension .so inside a tar is ELF for the expected arch. # # Uses only POSIX utilities (tar, od, find) — no Python dependency. # -# Usage: check_so_arch.sh +# Usage: check_so_arch.sh +# so_path_grep_pattern: grep -E pattern matching the .so's full path inside +# the tar, specific enough to pick exactly one .so if the tar bundles +# more than the package under test (e.g. a reference build for diffing). # expected_machine_le_hex: ELF e_machine as little-endian hex bytes # x86_64 (EM_X86_64 = 62 = 0x3e) → "3e00" # aarch64 (EM_AARCH64 = 183 = 0xb7) → "b700" set -euo pipefail -tar_file="${1:?usage: check_so_arch.sh }" -expected="${2:?expected ELF machine as little-endian hex}" +tar_file="${1:?usage: check_so_arch.sh }" +so_pattern="${2:?so path grep pattern}" +expected="${3:?expected ELF machine as little-endian hex}" tmp="$(mktemp -d)" trap 'rm -rf "$tmp"' EXIT tar xf "$tar_file" -C "$tmp" 2>/dev/null || true -so="$(find "$tmp" -name '_geohash*.so' -type f | head -1)" +so="$(cd "$tmp" && find . -type f | grep -E "$so_pattern" | head -1)" if [ -z "$so" ]; then - echo "FAIL: no _geohash*.so found in $tar_file" + echo "FAIL: no .so matching '$so_pattern' found in $tar_file" exit 1 fi +so="$tmp/$so" magic="$(od -A n -t x1 -N 4 "$so" | tr -d ' ')" if [ "$magic" != "7f454c46" ]; then diff --git a/e2e/crossbuild/tools/check_so_suffix.sh b/e2e/crossbuild/tools/check_so_suffix.sh new file mode 100755 index 000000000..701a3e460 --- /dev/null +++ b/e2e/crossbuild/tools/check_so_suffix.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Check that a native extension .so inside a tar has the correct platform +# suffix in its filename — i.e. EXT_SUFFIX and SOABI reflect the target +# platform, not the exec host. +# +# Usage: check_so_suffix.sh +# so_path_grep_pattern: grep -E pattern matching the .so's full path inside +# the tar, specific enough to pick exactly one .so if the tar bundles +# more than the package under test (e.g. a reference build for diffing). +set -euo pipefail + +tar_file="${1:?usage: check_so_suffix.sh }" +so_pattern="${2:?so path grep pattern}" +expected="${3:?expected suffix substring, e.g. cpython-312-x86_64-linux-gnu}" + +so_name=$(tar tf "$tar_file" | grep -E "$so_pattern" | head -1) +if [ -z "$so_name" ]; then + echo "FAIL: no .so matching '$so_pattern' in tar $tar_file" + exit 1 +fi + +echo ".so: $so_name" + +if ! echo "$so_name" | grep -q "$expected"; then + echo "FAIL: expected suffix '$expected' not found in filename" + exit 1 +fi + +echo "PASS: $so_name contains '$expected'" diff --git a/e2e/crossbuild/tools/checks.bzl b/e2e/crossbuild/tools/checks.bzl new file mode 100644 index 000000000..73b260491 --- /dev/null +++ b/e2e/crossbuild/tools/checks.bzl @@ -0,0 +1,49 @@ +"""Structural checks on a native extension .so inside a py_image_layer tar. + +Both check the *squashed* tar specifically — the "default" one is the +runfiles/source layer and never contains the installed pip package, only +"squashed" does. Neither proves the code runs correctly; pair with an +execution test (e.g. container_structure_test) for that. +""" + +load("@bazel_skylib//rules:build_test.bzl", "build_test") + +def _squashed_tar_check(name, actual, script, so_pattern, expected): + check_name = "_{}_check".format(name) + native.genrule( + name = check_name, + srcs = [actual], + outs = ["{}.ok".format(check_name)], + cmd = """ +tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep '_squashed\\.tar' | head -1) +$(location {script}) $$tar_file '{so_pattern}' '{expected}' +touch $@ +""".format(script = script, so_pattern = so_pattern, expected = expected), + tools = [script], + ) + build_test( + name = name, + targets = [":{}".format(check_name)], + ) + +def assert_so_arch(name, actual, so_pattern, expected_machine_hex): + """Checks the ELF e_machine of a native extension .so inside a py_image_layer tar. + + Args: + name: test name. + actual: the py_image_layer (or a platform_transition_filegroup wrapping one) to check. + so_pattern: grep -E pattern matching the .so's full path inside the tar. + expected_machine_hex: little-endian ELF e_machine hex, e.g. "3e00" (x86_64), "b700" (aarch64). + """ + _squashed_tar_check(name, actual, "//tools:check_so_arch.sh", so_pattern, expected_machine_hex) + +def assert_so_suffix(name, actual, so_pattern, expected_suffix): + """Checks the EXT_SUFFIX/SOABI in a native extension .so's filename inside a py_image_layer tar. + + Args: + name: test name. + actual: the py_image_layer (or a platform_transition_filegroup wrapping one) to check. + so_pattern: grep -E pattern matching the .so's full path inside the tar. + expected_suffix: substring expected in the matched filename, e.g. "cpython-312-x86_64-linux-gnu". + """ + _squashed_tar_check(name, actual, "//tools:check_so_suffix.sh", so_pattern, expected_suffix) diff --git a/e2e/crossbuild/tools/cross_case.bzl b/e2e/crossbuild/tools/cross_case.bzl new file mode 100644 index 000000000..1449c7b5f --- /dev/null +++ b/e2e/crossbuild/tools/cross_case.bzl @@ -0,0 +1,143 @@ +"""Shared scaffolding for a "build one real package for amd64+arm64, then +actually run it" e2e/crossbuild case. + +Every case here cross-compiles a package from the same amd64 exec host for +linux/amd64 and linux/arm64, then runs both — QEMU for arm64 — via +container_structure_test, plus a per-arch structural check (ELF machine, +and, where the .so's own filename carries one, its cpython ABI tag). This +macro is the ~90 lines every case shared verbatim; anything genuinely +case-specific (extra data deps, a diff-against-a-reference-wheel test +instead of a command test, macOS coverage) stays hand-written — see +//geohash and //zstandard, which aren't built from this macro for exactly +that reason. +""" + +load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@container_structure_test//:defs.bzl", "container_structure_test") +load("@rules_oci//oci:defs.bzl", "oci_image") +load(":checks.bzl", "assert_so_arch", "assert_so_suffix") + +def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = None, dep_group = None, image_command_test_config = None): + """Declares the amd64/arm64 build+run scaffolding for one e2e/crossbuild package. + + Produces (all unprefixed, matching the package's own BUILD.bazel): + "_bin", "layers", "{amd64,arm64}_layers", "_so_arch_{amd64,arm64}_test", + "_so_suffix_{amd64,arm64}_test" (if check_so_suffix), "image", + "{amd64,arm64}_image", "{amd64,arm64}_command_test". + + Args: + name: the package's own directory/case name, e.g. "bcrypt". Only + used to derive default filenames/labels below — every produced + target keeps its existing unprefixed name (":layers", not + ":_layers"), so migrating a case onto this macro doesn't + rename anything CI or a human already refers to. + deps: the py_binary's deps — the hub's target package, e.g. + ["@pypi_crossbuild_bcrypt//bcrypt"]. + so_pattern: grep -E pattern matching the compiled .so's path inside + the squashed tar (see //tools:checks.bzl). + check_so_suffix: whether the .so's filename carries a cpython + version/ABI tag worth asserting. False for ctypes-loaded .so's + (awkward_cpp), abi3 builds (psutil), or an unsuffixed .so + (jpype1's _jpype.so). + main: py_binary's main/srcs file; defaults to "_main.py". + dep_group: py_binary's dep_group; defaults to "crossbuild_". + image_command_test_config: the container_structure_test YAML; + defaults to "_image_command_test.yaml". + """ + main = main or (name + "_main.py") + dep_group = dep_group or ("crossbuild_" + name) + image_command_test_config = image_command_test_config or (name + "_image_command_test.yaml") + + py_binary( + name = name + "_bin", + srcs = [main], + dep_group = dep_group, + main = main, + python_version = "3.12", + deps = deps, + ) + + py_image_layer( + name = "layers", + binary = ":" + name + "_bin", + ) + + platform_transition_filegroup( + name = "amd64_layers", + srcs = [":layers"], + target_platform = "//:amd64_linux", + ) + + platform_transition_filegroup( + name = "arm64_layers", + srcs = [":layers"], + target_platform = "//:arm64_linux", + ) + + assert_so_arch( + name = name + "_so_arch_amd64_test", + actual = ":amd64_layers", + expected_machine_hex = "3e00", + so_pattern = so_pattern, + ) + + assert_so_arch( + name = name + "_so_arch_arm64_test", + actual = ":arm64_layers", + expected_machine_hex = "b700", + so_pattern = so_pattern, + ) + + if check_so_suffix: + assert_so_suffix( + name = name + "_so_suffix_amd64_test", + actual = ":amd64_layers", + expected_suffix = "cpython-312-x86_64-linux-gnu", + so_pattern = so_pattern, + ) + + assert_so_suffix( + name = name + "_so_suffix_arm64_test", + actual = ":arm64_layers", + expected_suffix = "cpython-312-aarch64-linux-gnu", + so_pattern = so_pattern, + ) + + oci_image( + name = "image", + base = "@ubuntu", + entrypoint = ["/app"], + tars = [":layers"], + ) + + platform_transition_filegroup( + name = "amd64_image", + srcs = [":image"], + target_platform = "//:amd64_linux", + ) + + platform_transition_filegroup( + name = "arm64_image", + srcs = [":image"], + target_platform = "//:arm64_linux", + ) + + container_structure_test( + name = "amd64_command_test", + configs = [image_command_test_config], + image = ":amd64_image", + platform = "linux/amd64", + tags = ["requires-docker"], + ) + + container_structure_test( + name = "arm64_command_test", + configs = [image_command_test_config], + image = ":arm64_image", + platform = "linux/aarch64", + tags = [ + "requires-docker", + "requires-qemu", + ], + ) diff --git a/e2e/crossbuild/tools/rust_layer.bzl b/e2e/crossbuild/tools/rust_layer.bzl new file mode 100644 index 000000000..0cae5a4d0 --- /dev/null +++ b/e2e/crossbuild/tools/rust_layer.bzl @@ -0,0 +1,31 @@ +"""Exposes a specific (non-ambient-resolved) rust_toolchain's sysroot. + +`@rules_rust//rust/toolchain:current_rust_toolchain` resolves against the +build's ambient --platforms, so under a cross (arm64) transition it returns +the arm64-*targeting* toolchain — whose sysroot only carries LLVM's shared +libs for x86_64, not the x86_64 rust-std a build script/proc-macro (always +compiled for the exec platform) needs. This rule instead pins to a specific +`rust_toolchain` target by label, bypassing toolchain resolution entirely, +so a package can also pull in the plain x86_64-targeting toolchain's sysroot +regardless of which platform the rest of the build is transitioned to. +""" + +def _rust_pinned_sysroot_impl(ctx): + toolchain = ctx.attr.actual[platform_common.ToolchainInfo] + return [ + DefaultInfo(files = toolchain.all_files), + platform_common.TemplateVariableInfo({ + "RUST_HOST_SYSROOT": toolchain.sysroot, + }), + ] + +rust_pinned_sysroot = rule( + implementation = _rust_pinned_sysroot_impl, + attrs = { + "actual": attr.label( + doc = "A rust_toolchain target (not a toolchain_type alias) to pin to.", + mandatory = True, + ), + }, + doc = "Exposes `actual`'s sysroot as $(RUST_HOST_SYSROOT), bypassing toolchain resolution.", +) diff --git a/e2e/crossbuild/tools/test_exec_toolchain.sh b/e2e/crossbuild/tools/test_exec_toolchain.sh new file mode 100755 index 000000000..ed40fff09 --- /dev/null +++ b/e2e/crossbuild/tools/test_exec_toolchain.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# EXEC_TOOLS_TOOLCHAIN must resolve the exec-platform Python interpreter even +# when the target platform is arm64 — unpack.py runs on the exec side, and an +# arm64 interpreter would fail with "Exec format error" on an amd64 host. +set -euo pipefail + +DIR="${TEST_SRCDIR}/_main/tools" + +native_path_file="$DIR/unpack_path.txt" +arm64_path_file="$DIR/unpack_path_for_arm64.txt" + +if [[ ! -f "$native_path_file" ]]; then + echo "FAIL: $native_path_file not found" + exit 1 +fi + +if [[ ! -f "$arm64_path_file" ]]; then + echo "FAIL: $arm64_path_file not found" + exit 1 +fi + +native_path=$(cat "$native_path_file") +arm64_path=$(cat "$arm64_path_file") + +echo "Native exec Python path: $native_path" +echo "Arm64-target exec Python path: $arm64_path" + +# The arm64 transition changes the config fingerprint (the ST-* hash in the +# path) even when the resolved interpreter is the same exec tool, so path +# equality isn't a valid assertion — check neither path names an arm64/aarch64 +# interpreter instead. +if [[ "$arm64_path" == *"arm64"* ]] || [[ "$arm64_path" == *"aarch64"* ]]; then + echo "FAIL: arm64-target exec Python path contains arm64/aarch64 — exec platform not honoured." + echo " Path: $arm64_path" + exit 1 +fi + +if [[ "$native_path" == *"arm64"* ]] || [[ "$native_path" == *"aarch64"* ]]; then + echo "FAIL: native exec Python path unexpectedly contains arm64/aarch64." + echo " Path: $native_path" + exit 1 +fi + +echo "PASS: EXEC_TOOLS_TOOLCHAIN resolved exec-platform Python for arm64 target ($(uname -m) host)" \ No newline at end of file diff --git a/e2e/cases/uv-deps-650/crossbuild/toolchain_test.bzl b/e2e/crossbuild/tools/toolchain_test.bzl similarity index 100% rename from e2e/cases/uv-deps-650/crossbuild/toolchain_test.bzl rename to e2e/crossbuild/tools/toolchain_test.bzl diff --git a/e2e/cases/uv-deps-650/crossbuild/uv.lock b/e2e/crossbuild/uv.lock similarity index 68% rename from e2e/cases/uv-deps-650/crossbuild/uv.lock rename to e2e/crossbuild/uv.lock index 85263a4e5..0aed06f66 100644 --- a/e2e/cases/uv-deps-650/crossbuild/uv.lock +++ b/e2e/crossbuild/uv.lock @@ -130,7 +130,6 @@ source = { virtual = "." } dependencies = [ { name = "build" }, { name = "cffi" }, - { name = "psycopg2-binary" }, { name = "python-geohash" }, { name = "setuptools" }, ] @@ -139,7 +138,6 @@ dependencies = [ requires-dist = [ { name = "build" }, { name = "cffi" }, - { name = "psycopg2-binary" }, { name = "python-geohash", specifier = "==0.8.5" }, { name = "setuptools" }, ] @@ -153,58 +151,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, ] -[[package]] -name = "psycopg2-binary" -version = "2.9.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ac/6c/8767aaa597ba424643dc87348c6f1754dd9f48e80fdc1b9f7ca5c3a7c213/psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c", size = 379620, upload-time = "2025-10-10T11:14:48.041Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/ae/8d8266f6dd183ab4d48b95b9674034e1b482a3f8619b33a0d86438694577/psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10", size = 3756452, upload-time = "2025-10-10T11:11:11.583Z" }, - { url = "https://files.pythonhosted.org/packages/4b/34/aa03d327739c1be70e09d01182619aca8ebab5970cd0cfa50dd8b9cec2ac/psycopg2_binary-2.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:763c93ef1df3da6d1a90f86ea7f3f806dc06b21c198fa87c3c25504abec9404a", size = 3863957, upload-time = "2025-10-10T11:11:16.932Z" }, - { url = "https://files.pythonhosted.org/packages/48/89/3fdb5902bdab8868bbedc1c6e6023a4e08112ceac5db97fc2012060e0c9a/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4", size = 4410955, upload-time = "2025-10-10T11:11:21.21Z" }, - { url = "https://files.pythonhosted.org/packages/ce/24/e18339c407a13c72b336e0d9013fbbbde77b6fd13e853979019a1269519c/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7", size = 4468007, upload-time = "2025-10-10T11:11:24.831Z" }, - { url = "https://files.pythonhosted.org/packages/91/7e/b8441e831a0f16c159b5381698f9f7f7ed54b77d57bc9c5f99144cc78232/psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee", size = 4165012, upload-time = "2025-10-10T11:11:29.51Z" }, - { url = "https://files.pythonhosted.org/packages/0d/61/4aa89eeb6d751f05178a13da95516c036e27468c5d4d2509bb1e15341c81/psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb", size = 3981881, upload-time = "2025-10-30T02:55:07.332Z" }, - { url = "https://files.pythonhosted.org/packages/76/a1/2f5841cae4c635a9459fe7aca8ed771336e9383b6429e05c01267b0774cf/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f", size = 3650985, upload-time = "2025-10-10T11:11:34.975Z" }, - { url = "https://files.pythonhosted.org/packages/84/74/4defcac9d002bca5709951b975173c8c2fa968e1a95dc713f61b3a8d3b6a/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94", size = 3296039, upload-time = "2025-10-10T11:11:40.432Z" }, - { url = "https://files.pythonhosted.org/packages/6d/c2/782a3c64403d8ce35b5c50e1b684412cf94f171dc18111be8c976abd2de1/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f", size = 3043477, upload-time = "2025-10-30T02:55:11.182Z" }, - { url = "https://files.pythonhosted.org/packages/c8/31/36a1d8e702aa35c38fc117c2b8be3f182613faa25d794b8aeaab948d4c03/psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908", size = 3345842, upload-time = "2025-10-10T11:11:45.366Z" }, - { url = "https://files.pythonhosted.org/packages/6e/b4/a5375cda5b54cb95ee9b836930fea30ae5a8f14aa97da7821722323d979b/psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03", size = 2713894, upload-time = "2025-10-10T11:11:48.775Z" }, - { url = "https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4", size = 3756603, upload-time = "2025-10-10T11:11:52.213Z" }, - { url = "https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f090b7ddd13ca842ebfe301cd587a76a4cf0913b1e429eb92c1be5dbeb1a19bc", size = 3864509, upload-time = "2025-10-10T11:11:56.452Z" }, - { url = "https://files.pythonhosted.org/packages/2d/75/364847b879eb630b3ac8293798e380e441a957c53657995053c5ec39a316/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a", size = 4411159, upload-time = "2025-10-10T11:12:00.49Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a0/567f7ea38b6e1c62aafd58375665a547c00c608a471620c0edc364733e13/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e", size = 4468234, upload-time = "2025-10-10T11:12:04.892Z" }, - { url = "https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db", size = 4166236, upload-time = "2025-10-10T11:12:11.674Z" }, - { url = "https://files.pythonhosted.org/packages/3c/94/c1777c355bc560992af848d98216148be5f1be001af06e06fc49cbded578/psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757", size = 3983083, upload-time = "2025-10-30T02:55:15.73Z" }, - { url = "https://files.pythonhosted.org/packages/bd/42/c9a21edf0e3daa7825ed04a4a8588686c6c14904344344a039556d78aa58/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3", size = 3652281, upload-time = "2025-10-10T11:12:17.713Z" }, - { url = "https://files.pythonhosted.org/packages/12/22/dedfbcfa97917982301496b6b5e5e6c5531d1f35dd2b488b08d1ebc52482/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a", size = 3298010, upload-time = "2025-10-10T11:12:22.671Z" }, - { url = "https://files.pythonhosted.org/packages/66/ea/d3390e6696276078bd01b2ece417deac954dfdd552d2edc3d03204416c0c/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34", size = 3044641, upload-time = "2025-10-30T02:55:19.929Z" }, - { url = "https://files.pythonhosted.org/packages/12/9a/0402ded6cbd321da0c0ba7d34dc12b29b14f5764c2fc10750daa38e825fc/psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d", size = 3347940, upload-time = "2025-10-10T11:12:26.529Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d2/99b55e85832ccde77b211738ff3925a5d73ad183c0b37bcbbe5a8ff04978/psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d", size = 2714147, upload-time = "2025-10-10T11:12:29.535Z" }, - { url = "https://files.pythonhosted.org/packages/ff/a8/a2709681b3ac11b0b1786def10006b8995125ba268c9a54bea6f5ae8bd3e/psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c", size = 3756572, upload-time = "2025-10-10T11:12:32.873Z" }, - { url = "https://files.pythonhosted.org/packages/62/e1/c2b38d256d0dafd32713e9f31982a5b028f4a3651f446be70785f484f472/psycopg2_binary-2.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:366df99e710a2acd90efed3764bb1e28df6c675d33a7fb40df9b7281694432ee", size = 3864529, upload-time = "2025-10-10T11:12:36.791Z" }, - { url = "https://files.pythonhosted.org/packages/11/32/b2ffe8f3853c181e88f0a157c5fb4e383102238d73c52ac6d93a5c8bffe6/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0", size = 4411242, upload-time = "2025-10-10T11:12:42.388Z" }, - { url = "https://files.pythonhosted.org/packages/10/04/6ca7477e6160ae258dc96f67c371157776564679aefd247b66f4661501a2/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766", size = 4468258, upload-time = "2025-10-10T11:12:48.654Z" }, - { url = "https://files.pythonhosted.org/packages/3c/7e/6a1a38f86412df101435809f225d57c1a021307dd0689f7a5e7fe83588b1/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3", size = 4166295, upload-time = "2025-10-10T11:12:52.525Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7d/c07374c501b45f3579a9eb761cbf2604ddef3d96ad48679112c2c5aa9c25/psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f", size = 3983133, upload-time = "2025-10-30T02:55:24.329Z" }, - { url = "https://files.pythonhosted.org/packages/82/56/993b7104cb8345ad7d4516538ccf8f0d0ac640b1ebd8c754a7b024e76878/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4", size = 3652383, upload-time = "2025-10-10T11:12:56.387Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ac/eaeb6029362fd8d454a27374d84c6866c82c33bfc24587b4face5a8e43ef/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c", size = 3298168, upload-time = "2025-10-10T11:13:00.403Z" }, - { url = "https://files.pythonhosted.org/packages/2b/39/50c3facc66bded9ada5cbc0de867499a703dc6bca6be03070b4e3b65da6c/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60", size = 3044712, upload-time = "2025-10-30T02:55:27.975Z" }, - { url = "https://files.pythonhosted.org/packages/9c/8e/b7de019a1f562f72ada81081a12823d3c1590bedc48d7d2559410a2763fe/psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1", size = 3347549, upload-time = "2025-10-10T11:13:03.971Z" }, - { url = "https://files.pythonhosted.org/packages/80/2d/1bb683f64737bbb1f86c82b7359db1eb2be4e2c0c13b947f80efefa7d3e5/psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa", size = 2714215, upload-time = "2025-10-10T11:13:07.14Z" }, - { url = "https://files.pythonhosted.org/packages/64/12/93ef0098590cf51d9732b4f139533732565704f45bdc1ffa741b7c95fb54/psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1", size = 3756567, upload-time = "2025-10-10T11:13:11.885Z" }, - { url = "https://files.pythonhosted.org/packages/7c/a9/9d55c614a891288f15ca4b5209b09f0f01e3124056924e17b81b9fa054cc/psycopg2_binary-2.9.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e0deeb03da539fa3577fcb0b3f2554a97f7e5477c246098dbb18091a4a01c16f", size = 3864755, upload-time = "2025-10-10T11:13:17.727Z" }, - { url = "https://files.pythonhosted.org/packages/13/1e/98874ce72fd29cbde93209977b196a2edae03f8490d1bd8158e7f1daf3a0/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5", size = 4411646, upload-time = "2025-10-10T11:13:24.432Z" }, - { url = "https://files.pythonhosted.org/packages/5a/bd/a335ce6645334fb8d758cc358810defca14a1d19ffbc8a10bd38a2328565/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8", size = 4468701, upload-time = "2025-10-10T11:13:29.266Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/c8b4f53f34e295e45709b7568bf9b9407a612ea30387d35eb9fa84f269b4/psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c", size = 4166293, upload-time = "2025-10-10T11:13:33.336Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e0/f8cc36eadd1b716ab36bb290618a3292e009867e5c97ce4aba908cb99644/psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f", size = 3983184, upload-time = "2025-10-30T02:55:32.483Z" }, - { url = "https://files.pythonhosted.org/packages/53/3e/2a8fe18a4e61cfb3417da67b6318e12691772c0696d79434184a511906dc/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747", size = 3652650, upload-time = "2025-10-10T11:13:38.181Z" }, - { url = "https://files.pythonhosted.org/packages/76/36/03801461b31b29fe58d228c24388f999fe814dfc302856e0d17f97d7c54d/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f", size = 3298663, upload-time = "2025-10-10T11:13:44.878Z" }, - { url = "https://files.pythonhosted.org/packages/97/77/21b0ea2e1a73aa5fa9222b2a6b8ba325c43c3a8d54272839c991f2345656/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b", size = 3044737, upload-time = "2025-10-30T02:55:35.69Z" }, - { url = "https://files.pythonhosted.org/packages/67/69/f36abe5f118c1dca6d3726ceae164b9356985805480731ac6712a63f24f0/psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d", size = 3347643, upload-time = "2025-10-10T11:13:53.499Z" }, - { url = "https://files.pythonhosted.org/packages/e1/36/9c0c326fe3a4227953dfb29f5d0c8ae3b8eb8c1cd2967aa569f50cb3c61f/psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316", size = 2803913, upload-time = "2025-10-10T11:13:57.058Z" }, -] - [[package]] name = "pycparser" version = "3.0" diff --git a/e2e/crossbuild/zstandard/BUILD.bazel b/e2e/crossbuild/zstandard/BUILD.bazel new file mode 100644 index 000000000..9ebfd0bab --- /dev/null +++ b/e2e/crossbuild/zstandard/BUILD.bazel @@ -0,0 +1,117 @@ +# zstandard ships official prebuilt wheels for linux/amd64 and linux/arm64, +# but [tool.uv] no-binary-package forces it to build from sdist here — same +# pep517_native_whl cross path as //geohash, on a package with a known-good +# binary to diff against instead of a hardcoded expected value. + +load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@container_structure_test//:defs.bzl", "container_structure_test") +load("@rules_oci//oci:defs.bzl", "oci_image") +load("//tools:checks.bzl", "assert_so_arch", "assert_so_suffix") + +# Matches only our own build's backend_c.so (installed under a +# whl_install__crossbuild_zstandard path), not the two official reference +# .so's bundled as compare_bin's data. +_SO_PATTERN = "whl_install__crossbuild_zstandard.*backend_c.*\\.so$$" + +py_binary( + name = "compare_bin", + srcs = ["compare_backend.py"], + data = [ + "@official_zstandard_amd64_linux//:backend_c", + "@official_zstandard_arm64_linux//:backend_c", + ], + dep_group = "crossbuild_zstandard", + main = "compare_backend.py", + python_version = "3.12", + deps = [ + "@bazel_tools//tools/python/runfiles", + "@pypi_crossbuild_zstandard//zstandard", + ], +) + +py_image_layer( + name = "layers", + binary = ":compare_bin", +) + +platform_transition_filegroup( + name = "amd64_layers", + srcs = [":layers"], + target_platform = "//:amd64_linux", +) + +platform_transition_filegroup( + name = "arm64_layers", + srcs = [":layers"], + target_platform = "//:arm64_linux", +) + +# ELF machine byte and EXT_SUFFIX/SOABI of our cross-compiled .so. Cheaper +# and faster to fail than amd64_diff_test/arm64_diff_test below, though +# those already imply this — a wrong-arch .so wouldn't load there either. +assert_so_arch( + name = "zstandard_so_arch_amd64_test", + actual = ":amd64_layers", + expected_machine_hex = "3e00", + so_pattern = _SO_PATTERN, +) + +assert_so_arch( + name = "zstandard_so_arch_arm64_test", + actual = ":arm64_layers", + expected_machine_hex = "b700", + so_pattern = _SO_PATTERN, +) + +assert_so_suffix( + name = "zstandard_so_suffix_amd64_test", + actual = ":amd64_layers", + expected_suffix = "cpython-312-x86_64-linux-gnu", + so_pattern = _SO_PATTERN, +) + +assert_so_suffix( + name = "zstandard_so_suffix_arm64_test", + actual = ":arm64_layers", + expected_suffix = "cpython-312-aarch64-linux-gnu", + so_pattern = _SO_PATTERN, +) + +oci_image( + name = "image", + base = "@ubuntu", + entrypoint = ["/app"], + tars = [":layers"], +) + +platform_transition_filegroup( + name = "amd64_image", + srcs = [":image"], + target_platform = "//:amd64_linux", +) + +platform_transition_filegroup( + name = "arm64_image", + srcs = [":image"], + target_platform = "//:arm64_linux", +) + +container_structure_test( + name = "amd64_diff_test", + configs = ["zstandard_diff_test.yaml"], + image = ":amd64_image", + platform = "linux/amd64", + tags = ["requires-docker"], +) + +container_structure_test( + name = "arm64_diff_test", + configs = ["zstandard_diff_test.yaml"], + image = ":arm64_image", + platform = "linux/aarch64", + tags = [ + "requires-docker", + "requires-qemu", + ], +) diff --git a/e2e/crossbuild/zstandard/compare_backend.py b/e2e/crossbuild/zstandard/compare_backend.py new file mode 100644 index 000000000..317fcfd18 --- /dev/null +++ b/e2e/crossbuild/zstandard/compare_backend.py @@ -0,0 +1,52 @@ +"""Compares our cross-compiled zstandard backend_c against PyPI's official wheel. + +Loads both .so files (ours via the normal import, the official one from an +arbitrary path via importlib) into the same process and checks they agree — +not just that both look like the right architecture, but that they actually +compute identical results. +""" + +import importlib.util +import platform +import sys +import types + +import zstandard.backend_c as ours +from bazel_tools.tools.python.runfiles import runfiles + +_DATA = b"The quick brown fox jumps over the lazy dog. " * 500 + +_OFFICIAL_SO = { + "x86_64": "official_zstandard_amd64_linux/zstandard/backend_c.cpython-312-x86_64-linux-gnu.so", + "aarch64": "official_zstandard_arm64_linux/zstandard/backend_c.cpython-312-aarch64-linux-gnu.so", +} + + +def _load(path: str) -> types.ModuleType: + spec = importlib.util.spec_from_file_location("backend_c", path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +def main() -> None: + machine = platform.machine() + rlocation = _OFFICIAL_SO.get(machine) + if not rlocation: + sys.exit("unsupported machine: {}".format(machine)) + + official_path = runfiles.Create().Rlocation(rlocation) + official = _load(official_path) + + ours_compressed = ours.ZstdCompressor(level=3).compress(_DATA) + official_compressed = official.ZstdCompressor(level=3).compress(_DATA) + + assert ours_compressed == official_compressed, "compressed output differs between our build and the official wheel" + assert official.ZstdDecompressor().decompress(ours_compressed) == _DATA + assert ours.ZstdDecompressor().decompress(official_compressed) == _DATA + + print("PASS: identical compressed output, cross-decompression OK") + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/zstandard/pyproject.toml b/e2e/crossbuild/zstandard/pyproject.toml new file mode 100644 index 000000000..be35ac14a --- /dev/null +++ b/e2e/crossbuild/zstandard/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "crossbuild_zstandard" +version = "0.0.0" +requires-python = ">=3.11" +dependencies = [ + "build", + "cffi", + "setuptools", + "wheel", + "zstandard==0.22.0", +] + +[tool.uv] +no-binary-package = ["zstandard"] diff --git a/e2e/crossbuild/zstandard/uv.lock b/e2e/crossbuild/zstandard/uv.lock new file mode 100644 index 000000000..ce0553cfb --- /dev/null +++ b/e2e/crossbuild/zstandard/uv.lock @@ -0,0 +1,222 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crossbuild-zstandard" +version = "0.0.0" +source = { virtual = "." } +dependencies = [ + { name = "build" }, + { name = "cffi" }, + { name = "setuptools" }, + { name = "wheel" }, + { name = "zstandard" }, +] + +[package.metadata] +requires-dist = [ + { name = "build" }, + { name = "cffi" }, + { name = "setuptools" }, + { name = "wheel" }, + { name = "zstandard", specifier = "==0.22.0" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "setuptools" +version = "83.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" }, +] + +[[package]] +name = "wheel" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/1b/9e33c09813d65e248f7f773119148a612516a4bea93e9c6f545f78455b7c/wheel-0.47.0-py3-none-any.whl", hash = "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", size = 32218, upload-time = "2026-04-22T15:51:26.296Z" }, +] + +[[package]] +name = "zstandard" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation == 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/91/2162ab4239b3bd6743e8e407bc2442fca0d326e2d77b3f4a88d90ad5a1fa/zstandard-0.22.0.tar.gz", hash = "sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70", size = 660738, upload-time = "2023-11-01T06:57:31.719Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/41/80fc08ed96e68df920d28592710f5ed96fb288fda1fbb4b6aee5fdbaa5f6/zstandard-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08", size = 921016, upload-time = "2023-11-01T06:49:32.023Z" }, + { url = "https://files.pythonhosted.org/packages/54/fc/c1b1a1e140451f3362789f546731b3ef36c78668be19d7fc6fbd4326b535/zstandard-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26", size = 703352, upload-time = "2023-11-01T06:49:36.263Z" }, + { url = "https://files.pythonhosted.org/packages/68/fb/0a9389ee8ccc532ac4567562c7746bd7537d16bc5b079b2696fe3c510c37/zstandard-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09", size = 4918211, upload-time = "2023-11-01T06:49:54.265Z" }, + { url = "https://files.pythonhosted.org/packages/80/6a/f8a618f84aafb9c373a959e7e51ad34bda73f1d99cd856c05c8f0b78e87f/zstandard-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775", size = 5433363, upload-time = "2023-11-01T06:50:14.145Z" }, + { url = "https://files.pythonhosted.org/packages/a4/e1/0b29be2d3a8d86053f284add5a0b4174c820fefc96183b01d5cbcedd498d/zstandard-0.22.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8", size = 4847234, upload-time = "2023-11-01T06:50:35.646Z" }, + { url = "https://files.pythonhosted.org/packages/55/0b/b23b1a6e4d4525f663162344d4896f396267e7f65607f16f7a62e1862a23/zstandard-0.22.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94", size = 4923512, upload-time = "2023-11-01T06:50:53.934Z" }, + { url = "https://files.pythonhosted.org/packages/9f/da/e16b2a5613141aaa719e4b09cdadf5eb3fb099311ffc8c0b13785bdcbe1a/zstandard-0.22.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88", size = 5447292, upload-time = "2023-11-01T06:51:16.79Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1d/ecca5dee2d173b3b70fa8d6bdeec17f9a875aa6fdac4a6bfaadf7c9668a1/zstandard-0.22.0-cp311-cp311-win32.whl", hash = "sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440", size = 442566, upload-time = "2023-11-01T06:51:20.56Z" }, + { url = "https://files.pythonhosted.org/packages/8a/bc/878a5b8f413d5fe902842fde08ecf317d3979c9728135034a519c409ce3f/zstandard-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd", size = 511638, upload-time = "2023-11-01T06:51:24.548Z" }, + { url = "https://files.pythonhosted.org/packages/0f/f9/6b531e83f2e61bb9d66508113fd68557d990639be3dd37116af272932614/zstandard-0.22.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a", size = 920922, upload-time = "2023-11-01T06:51:29.476Z" }, + { url = "https://files.pythonhosted.org/packages/7d/80/9e40e57ba17dbbf6c55bcf0ac4ee533c367285209f309bdd9ab290c40536/zstandard-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912", size = 703142, upload-time = "2023-11-01T06:51:33.594Z" }, + { url = "https://files.pythonhosted.org/packages/47/44/be2d67304ba9bf4694ffcaa99d146814d70c4cb0bfc00e0e86fdfae66a31/zstandard-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f", size = 4918778, upload-time = "2023-11-01T06:51:53.663Z" }, + { url = "https://files.pythonhosted.org/packages/e5/01/080939755ca12ebbb7fc38b6f4ddecd5e8c416d571d4927ece1360baba2c/zstandard-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c", size = 5426393, upload-time = "2023-11-01T06:52:14.784Z" }, + { url = "https://files.pythonhosted.org/packages/e1/68/66f1edfa9760213e9a85cf70a6c78a9db1a9d9bf0a36c7fdf9ed117bf163/zstandard-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4", size = 4845899, upload-time = "2023-11-01T06:52:35.365Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c5/d5f4521c5444f3d1e8bd0dc32b40766b0de1950eee46c734a3a98ddc8f96/zstandard-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc", size = 4920875, upload-time = "2023-11-01T06:52:55.355Z" }, + { url = "https://files.pythonhosted.org/packages/f9/7a/2702eb29c3851a04f42e63443420520b392e432bdb30cb21c11dac1f5eb3/zstandard-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45", size = 5451783, upload-time = "2023-11-01T06:53:15.066Z" }, + { url = "https://files.pythonhosted.org/packages/08/3e/4b78e8378dfdb25f51a1123ec4e44f98a490d58ccf51104a3a9c6f821eb1/zstandard-0.22.0-cp312-cp312-win32.whl", hash = "sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2", size = 442885, upload-time = "2023-11-01T06:53:19.076Z" }, + { url = "https://files.pythonhosted.org/packages/b6/91/15feaf0d389f7d696ed0fbd75b51c6cbc04e9b8b474292a3bb2b5157e093/zstandard-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c", size = 511809, upload-time = "2023-11-01T06:53:22.745Z" }, +] diff --git a/e2e/crossbuild/zstandard/zstandard_diff_test.yaml b/e2e/crossbuild/zstandard/zstandard_diff_test.yaml new file mode 100644 index 000000000..7eb22a14e --- /dev/null +++ b/e2e/crossbuild/zstandard/zstandard_diff_test.yaml @@ -0,0 +1,7 @@ +schemaVersion: 2.0.0 + +commandTests: + - name: cross-compiled zstandard matches the official wheel + exitCode: 0 + command: /app + expectedOutput: ["PASS: identical compressed output, cross-decompression OK"] From 62b3a96d9ed2b37b1d8fa6d78edce1cc50b95784 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 7 Aug 2026 11:29:24 -0600 Subject: [PATCH 17/56] crossbuild helper --- uv/private/pep517_whl/build_helper.py | 525 +++++++++++++++++- uv/private/pep517_whl/cc_layer.bzl | 2 +- uv/private/pep517_whl/tests/BUILD.bazel | 12 + .../tests/build_helper_cross_test.py | 92 +++ 4 files changed, 608 insertions(+), 23 deletions(-) create mode 100644 uv/private/pep517_whl/tests/build_helper_cross_test.py diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index afc641e99..97df4e73b 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -12,9 +12,11 @@ import importlib import os import platform as _platform +import re import shlex import shutil import sys +import textwrap from os import chmod, defpath, listdir, makedirs, path, pathsep from subprocess import CalledProcessError, check_call, check_output, STDOUT, run from tempfile import TemporaryFile @@ -37,14 +39,39 @@ # to locate sibling tools and resources. Clang does so under -no-canonical-prefixes: # https://github.com/llvm/llvm-project/blob/llvmorg-22.1.4/clang/tools/driver/driver.cpp#L63-L78 _DEBUG_FLAG = "-fdebug-default-version=4" + +# gcc_toolchain's tool_path for the cpp_compile/cpp_link_dynamic_library +# actions is plain "gcc", not "g++": Bazel toolchains dispatch C vs C++ by +# file extension/-x, not by driver name, and gcc_toolchain's link flags carry +# no -lstdc++. `-static-libstdc++` alone is a no-op there — that flag only +# modifies an *implicit* libstdc++ link that only the "g++" argv[0] spec adds +# in the first place. `-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic` forces the static +# archive regardless of driver name, making a C++ extension self-contained +# instead of depending on the target's libstdc++.so.6 matching ours — and +# without it, cross-arch (and even native) C++ extensions can build and even +# import (borrowing symbols another already-loaded .so happened to pull in) +# yet fail once nothing else in the process provides them. GNU-ld-only +# syntax: skipped on Darwin, where clang++ already links libc++ implicitly. +_STATIC_LIBSTDCXX_FLAGS = ("-Wl,-Bstatic", "-lstdc++", "-Wl,-Bdynamic") + _COMPILER_WRAPPER = """#!/usr/bin/env python3 import os import sys filtered_args = [arg for arg in sys.argv[1:] if arg != "{debug_flag}"] +is_cxx = {is_cxx!r} +is_darwin = {is_darwin!r} +is_link = "-c" not in filtered_args +if is_cxx and is_link and not is_darwin: + filtered_args = filtered_args + {static_libstdcxx_flags!r} sysroot = {sysroot!r} if sysroot and "-isysroot" not in filtered_args: filtered_args = ["-isysroot", sysroot] + filtered_args + +# argv[0] must be the compiler's full path, not just its basename: GCC's +# driver resolves prefix-relative resources (libstdc++.a, LTO plugins) off +# argv[0], not /proc/self/exe. A basename-only argv[0] makes it silently +# search relative to our wrapper's own directory instead and miss them. os.execv("{compiler_path}", ["{compiler_path}"] + filtered_args) """ @@ -90,6 +117,9 @@ drop_prefixes = {drop_prefixes!r} lld_path = {lld_path!r} debug_flag = {debug_flag!r} +is_cxx = {is_cxx!r} +is_darwin = {is_darwin!r} +static_libstdcxx_flags = {static_libstdcxx_flags!r} is_link = "-c" not in args filtered = [] @@ -105,6 +135,29 @@ filtered.append(a) i += 1 +# Standalone (non-"-shared") executables built by this cross toolchain are +# never the actual wheel deliverable — always some build tool's own +# throwaway sanity-check/feature-probe binary (e.g. meson's own compiler +# check, or a project's cc.run() call) that an exe_wrapper immediately +# executes under QEMU. Dynamically-linked target-arch PIE binaries hit a +# real qemu-user/glibc bug there ("Inconsistency detected by ld.so: +# ... DT_VERSYM ... Assertion failed") on process startup's own relocation +# path, verified independent of any toolchain mismatch (a single-toolchain +# hello-world binary reproduces it); statically linking sidesteps it +# entirely, since it never touches ld.so's dynamic-executable-startup path. +# The actual .so deliverables this wrapper also builds are unaffected — +# they always pass "-shared" and load via dlopen()'s own, unrelated path. +# Mutually exclusive with the static-libstdc++-only trick below: a trailing +# "-Wl,-Bdynamic" there would undo a preceding bare "-static" for whatever +# the driver appends after our args (libc included), reintroducing the same +# bug — and full static linking already covers libstdc++ too, making that +# partial trick redundant for a binary that's never shipped anyway. +is_shared = "-shared" in filtered +if is_link and not is_shared and not is_darwin: + filtered.append("-static") +elif is_cxx and is_link and not is_darwin: + filtered.extend(static_libstdcxx_flags) + if is_link and lld_path: os.environ.setdefault("PATH", "") os.environ["PATH"] = os.path.dirname(lld_path) + os.pathsep + os.environ["PATH"] @@ -112,7 +165,7 @@ filtered.insert(0, "-fuse-ld=lld") real = {compiler_path!r} -os.execv(real, [os.path.basename(real)] + wrapper_flags + filtered) +os.execv(real, [real] + wrapper_flags + filtered) """ @@ -176,22 +229,37 @@ def _local_cxx_companion(current: Optional[str], compiler_path: str) -> str: return compiler_path +def _write_generated_file(file_path: str, content: str, executable: bool = False) -> str: + """Write content to file_path, creating parent dirs. Returns file_path for chaining.""" + makedirs(path.dirname(file_path), exist_ok=True) + with open(file_path, "w") as f: + f.write(content) + if executable: + chmod(file_path, 0o755) + return file_path + + def _make_compiler_wrapper( tmpdir: str, name: str, compiler_path: str, sysroot: Optional[str] = None, + is_cxx: bool = False, + is_darwin: bool = False, ) -> str: wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) - makedirs(path.dirname(wrapper), exist_ok=True) - with open(wrapper, "w") as f: - f.write(_COMPILER_WRAPPER.format( + return _write_generated_file( + wrapper, + _COMPILER_WRAPPER.format( debug_flag=_DEBUG_FLAG, compiler_path=compiler_path, sysroot=sysroot, - )) - chmod(wrapper, 0o755) - return wrapper + is_cxx=is_cxx, + is_darwin=is_darwin, + static_libstdcxx_flags=list(_STATIC_LIBSTDCXX_FLAGS), + ), + executable=True, + ) def _get_wrapper_flags(cflags: str) -> list[str]: @@ -234,11 +302,13 @@ def _make_cross_compiler_wrapper( compiler_path: str, wrapper_flags: list[str], lld_path: Optional[str] = None, + is_cxx: bool = False, + is_darwin: bool = False, ) -> str: wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) - makedirs(path.dirname(wrapper), exist_ok=True) - with open(wrapper, "w") as f: - f.write(_CROSS_COMPILER_WRAPPER.format( + return _write_generated_file( + wrapper, + _CROSS_COMPILER_WRAPPER.format( compiler_path=compiler_path, wrapper_flags=wrapper_flags, drop_exact=sorted(_DROP_LINKER_FLAGS), @@ -246,9 +316,12 @@ def _make_cross_compiler_wrapper( drop_prefixes=list(_DROP_LINKER_PREFIXES), lld_path=lld_path, debug_flag=_DEBUG_FLAG, - )) - chmod(wrapper, 0o755) - return wrapper + is_cxx=is_cxx, + is_darwin=is_darwin, + static_libstdcxx_flags=list(_STATIC_LIBSTDCXX_FLAGS), + ), + executable=True, + ) def _override_tool(env: Dict[str, str], key: str, wrapper: str) -> None: @@ -263,7 +336,7 @@ def _override_tool(env: Dict[str, str], key: str, wrapper: str) -> None: def _absolutize_tool_paths(env: Dict[str, str]) -> None: """Resolve toolchain paths before the backend changes cwd.""" - for key in ("JAVA_HOME", "JAVA"): + for key in ("JAVA_HOME", "JAVA", "CARGO", "RUSTC", "RULES_PY_RUST_HOST_SYSROOT", "ANT_HOME", "RULES_PY_ANT_BIN_DIR"): value = env.get(key) if value: env[key] = _absolutize_path(value) @@ -282,6 +355,8 @@ def _compiler_env( tmpdir: str, execroot_marker: Optional[str] = None, cross: bool = False, + target_os: str = "", + target_cpu: str = "", ) -> Dict[str, str]: env = dict(os.environ) if execroot_marker: @@ -301,14 +376,48 @@ def _compiler_env( "RUNFILES_MANIFEST_ONLY", ): env.pop(key, None) + # A build dependency's console-script wrappers resolve their own bundled + # binary via Python import machinery (ninja, meson), so they never need + # PATH. Some (maturin) instead ship a plain wheel-data script under + # /bin — rules_py's venv assembly only merges each + # dep's lib/site-packages into the shared venv, not its bin/, so that + # script never lands on sys.path or PATH by itself. Its files are still + # real runfiles under the runfiles root, just not indexed anywhere else, + # so find it the same way Bazel's own runfiles resolution would: walk + # the runfiles tree for a whl_install output's bin/ directory. + bin_dirs = [] + for runfiles_root in sys.path: + if not path.isdir(runfiles_root) or "runfiles" not in runfiles_root: + continue + for entry in os.listdir(runfiles_root): + bin_dir = path.join(runfiles_root, entry, "actual_install.install", "bin") + if path.isdir(bin_dir): + bin_dirs.append(bin_dir) + env["PATH"] = pathsep.join([ path.dirname(sys.executable), + *bin_dirs, env.get("PATH", defpath), ]) env["TMP"] = tmpdir env["TEMP"] = tmpdir env["TEMPDIR"] = tmpdir + # python-build-standalone interpreters (our python_interpreters toolchain) + # bake their *original build-time* prefix into sysconfig's LIBDIR + # (observed: "/install/lib", nonexistent once relocated into a Bazel + # toolchain) — harmless for pure-Python builds, but anything that needs + # to actually link against libpythonX.Y (meson's own Cython compiler + # sanity check does, to link its transpiled-and-compiled test program) + # fails with "cannot find -lpythonX.Y". The toolchain's own pkg-config + # file resolves paths relative to itself instead (${pcfiledir}/../..), + # so pointing PKG_CONFIG_PATH at it sidesteps the broken sysconfig value + # entirely for any tool that tries pkg-config before falling back to it. + interpreter_root = path.dirname(path.dirname(path.realpath(sys.executable))) + pkgconfig_dir = path.join(interpreter_root, "lib", "pkgconfig") + if path.isdir(pkgconfig_dir): + env["PKG_CONFIG_PATH"] = pathsep.join([pkgconfig_dir, env.get("PKG_CONFIG_PATH", "")]).rstrip(pathsep) + # Bazel expands tool paths relative to the execroot. Resolve them while the # helper still runs there; bare tool names deliberately remain on PATH. _absolutize_tool_paths(env) @@ -319,15 +428,25 @@ def _compiler_env( cxx_path = _local_cxx_companion(env.get("CXX"), cxx_path) sysroot = _darwin_sysroot() + is_darwin = target_os == "darwin" if cross else _platform.system() == "Darwin" if cross: wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) lld_path = _find_lld(cc_path) - cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path) - cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path) + cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin) + cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin) + + # gcc_toolchain's own layout (/xbin/gcc, /sysroot/...): + # a target-arch binary linked by this compiler needs ITS glibc/loader + # to run, not whatever the exec host or an unrelated toolchain (e.g. + # our python_interpreters build) happens to provide. Only meson's + # exe_wrapper (see _generate_meson_cross_file) uses this today. + target_gcc_sysroot = path.join(path.dirname(path.dirname(cc_path)), "sysroot") + if not is_darwin and path.isdir(target_gcc_sysroot): + env["RULES_PY_TARGET_GCC_SYSROOT"] = target_gcc_sysroot else: - cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot) - cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot) + cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot, is_darwin=is_darwin) + cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot, is_cxx=True, is_darwin=is_darwin) env.setdefault("CC", cc) env.setdefault("CXX", cxx) @@ -346,6 +465,10 @@ def _compiler_env( env["_PYTHON_SYSCONFIGDATA_NAME"] = module_name env["PYTHONPATH"] = sysconfig_dir + pathsep + env.get("PYTHONPATH", "") + if target_os and target_cpu: + site_dir = _generate_cross_site(tmpdir, target_os, target_cpu) + env["PYTHONPATH"] = site_dir + pathsep + env.get("PYTHONPATH", "") + # MPI builds (e.g. mpi4py) consult $MPICC before searching PATH, so a # plain C compiler here would shadow the real mpicc. Only set it when # a system mpicc exists, wrapped to keep the debug-flag stripping. @@ -363,6 +486,26 @@ def _compiler_env( ]: _override_tool(env, key, wrapper) + # maturin's PEP 517 wrapper (and setuptools-rust) locate cargo via + # shutil.which("cargo"), not just $CARGO — otherwise they fall back to + # auto-installing a Rust toolchain via the puccinialin package, which + # isn't one of our declared build deps. + cargo_path = env.get("CARGO") + if cargo_path: + env["PATH"] = pathsep.join([path.dirname(cargo_path), env.get("PATH", defpath)]) + + # Cargo defaults its registry cache to $CARGO_HOME (~/.cargo), which + # in the sandbox is a read-only path outside the action's writable + # tree — give it a real, writable home instead. + cargo_home = path.join(tmpdir, ".cargo_home") + makedirs(cargo_home, exist_ok=True) + env.setdefault("CARGO_HOME", cargo_home) + + # CMake's find_program(ANT_EXECUTABLE) (jpype1 et al.) needs ant on PATH. + ant_bin_dir = env.pop("RULES_PY_ANT_BIN_DIR", None) + if ant_bin_dir: + env["PATH"] = pathsep.join([ant_bin_dir, env.get("PATH", defpath)]) + return env @@ -386,9 +529,305 @@ def _load_pyproject_data(worktree: str) -> Optional[Dict[str, object]]: return None -def _legacy_metadata_conflicts_with_pyproject(worktree: str) -> bool: +# Our lowercase target_os values, Title-Cased for whatever tool wants that +# spelling: CMAKE_SYSTEM_NAME and the faked platform.system()/os.uname() +# sysname both use it. +_TITLECASE_OS = {"linux": "Linux", "darwin": "Darwin", "windows": "Windows"} + + +def _generate_cmake_toolchain_file( + tmpdir: str, + build_env: Dict[str, str], + target_os: str, + target_cpu: str, +) -> str: + """Cross toolchain file for scikit-build-core/CMake. + + scikit-build-core's cross-compile detection only covers macOS + ARCHFLAGS/CMAKE_OSX_ARCHITECTURES (see its builder.py); a generic + Linux-arch cross build gets none of that, so CMake configures as a + native build. It still compiles/links fine off $CC/$CXX, but + CMAKE_STRIP falls back to `find_program`'s host `strip` rather than + ours, which then rejects the foreign-arch .so ("Unable to recognise + the format of the input file"). Setting CMAKE_SYSTEM_NAME also puts + CMake into real CMAKE_CROSSCOMPILING mode. + """ + return _write_generated_file( + path.join(tmpdir, "cross_toolchain.cmake"), + textwrap.dedent("""\ + set(CMAKE_SYSTEM_NAME {system}) + set(CMAKE_SYSTEM_PROCESSOR {processor}) + set(CMAKE_C_COMPILER {cc}) + set(CMAKE_CXX_COMPILER {cxx}) + set(CMAKE_AR {ar}) + set(CMAKE_STRIP {strip}) + """).format( + system=_TITLECASE_OS.get(target_os, target_os), + processor=target_cpu, + cc=build_env["CC"], + cxx=build_env["CXX"], + ar=build_env.get("AR", "ar"), + strip=build_env.get("STRIP", "strip"), + ), + ) + + +_MESON_EXE_WRAPPER = """#!/usr/bin/env python3 +import os +import sys + +qemu_ld_prefix = {qemu_ld_prefix!r} +if qemu_ld_prefix: + os.environ["QEMU_LD_PREFIX"] = qemu_ld_prefix +os.execv(sys.argv[1], sys.argv[1:]) +""" + + +def _generate_meson_cross_file( + tmpdir: str, + build_env: Dict[str, str], + target_os: str, + target_cpu: str, +) -> str: + """Cross file for meson-python. + + meson-python only auto-synthesizes a cross file for macOS ARCHFLAGS, + cibuildwheel/Android, and iOS (see its __init__.py); a generic + Linux-arch cross build gets none of that and configures as a native + build, so meson tries to run its compiler sanity-check binary and + fails with "not runnable". `needs_exe_wrapper` alone only covers + meson's OWN compiler sanity checks (which just skip running anything + when it's set) — some projects' meson.build also call `cc.run()` + directly (numpy does, for a runtime feature check), which instead + hard-errors ("Can not run test applications in this cross + environment") unless an actual `exe_wrapper` program is configured. + binfmt_misc on this host already runs target-arch ELFs transparently + (verified: qemu-aarch64 is registered), so the wrapper mostly just + needs to exec straight through — it's meson's contract that needs a + program here, not anything the emulation itself is missing. The one + thing it does add is QEMU_LD_PREFIX, pointed at the gcc cross + toolchain's own sysroot: meson's *compiler* sanity check links a tiny + test binary against that sysroot's glibc, and without QEMU_LD_PREFIX + qemu-user falls back to searching the exec host's own filesystem for + ld-linux-aarch64.so.1 (an amd64 Linux box has none) — an entirely + different failure mode than the earlier "not runnable" one, but the + same root cause of not telling qemu-user which glibc actually matches. + """ + exe_wrapper = _write_generated_file( + path.join(tmpdir, "meson_exe_wrapper.py"), + _MESON_EXE_WRAPPER.format(qemu_ld_prefix=build_env.get("RULES_PY_TARGET_GCC_SYSROOT", "")), + executable=True, + ) + return _write_generated_file( + path.join(tmpdir, "cross_file.ini"), + textwrap.dedent("""\ + [binaries] + c = '{cc}' + cpp = '{cxx}' + ar = '{ar}' + strip = '{strip}' + exe_wrapper = ['{exe_wrapper}'] + + [host_machine] + system = '{system}' + cpu_family = '{cpu_family}' + cpu = '{cpu}' + endian = 'little' + + [properties] + needs_exe_wrapper = true + """).format( + cc=build_env["CC"], + cxx=build_env["CXX"], + exe_wrapper=exe_wrapper, + ar=build_env.get("AR", "ar"), + strip=build_env.get("STRIP", "strip"), + system=target_os, + cpu_family=target_cpu, + cpu=target_cpu, + ), + ) + + +_RUST_TARGET_OS = {"linux": "unknown-linux-gnu", "darwin": "apple-darwin"} + +_RUSTC_WRAPPER = """#!/usr/bin/env python3 +import os +import sys + +os.execv({rustc!r}, [{rustc!r}, "--sysroot", {sysroot!r}] + sys.argv[1:]) +""" + + +def _merge_rust_sysroot(tmpdir: str, target_rustc: str, host_sysroot: str) -> str: + """Symlink-merge the target toolchain's sysroot with the host's rust-std. + + A rules_rust cross rust_toolchain's sysroot only bundles the exec + platform's LLVM shared libs (needed to *run* rustc), not its rust-std — + cargo still needs a real exec-platform rust-std to compile build + scripts/proc-macros, which are always host artifacts regardless of + --target. rustup-based cross setups don't hit this because one rustc + install holds every added target's std side by side; recreate that here + by merging the two Bazel-fetched, single-target sysroots into one. + """ + target_sysroot = path.dirname(path.dirname(target_rustc)) + merged = path.join(tmpdir, ".rust_sysroot") + if path.exists(merged): + return merged + makedirs(merged) + for entry in os.listdir(target_sysroot): + if entry != "lib": + os.symlink(path.join(target_sysroot, entry), path.join(merged, entry)) + merged_lib = path.join(merged, "lib") + makedirs(merged_lib) + for entry in os.listdir(path.join(target_sysroot, "lib")): + if entry != "rustlib": + os.symlink(path.join(target_sysroot, "lib", entry), path.join(merged_lib, entry)) + merged_rustlib = path.join(merged_lib, "rustlib") + makedirs(merged_rustlib) + host_rustlib = path.join(host_sysroot, "lib", "rustlib") + target_rustlib = path.join(target_sysroot, "lib", "rustlib") + overridden = set() + for entry in os.listdir(host_rustlib): + os.symlink(path.join(host_rustlib, entry), path.join(merged_rustlib, entry)) + overridden.add(entry) + for entry in os.listdir(target_rustlib): + if entry not in overridden: + os.symlink(path.join(target_rustlib, entry), path.join(merged_rustlib, entry)) + return merged + + +def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os: str, target_cpu: str) -> None: + """Cross env vars for maturin/setuptools-rust (Cargo-driven PyO3 builds). + + Cargo has no cross auto-detection to piggyback on the way meson-python's + macOS ARCHFLAGS case does — a cross build always needs an explicit + --target, and cargo has no idea which linker can actually produce a + binary for that target unless told via CARGO_TARGET__LINKER, so + it falls back to $CC (the *host* driver) and fails at the link step. + """ + os_suffix = _RUST_TARGET_OS.get(target_os, target_os) + triple = "{}-{}".format(target_cpu, os_suffix) + build_env["CARGO_BUILD_TARGET"] = triple + linker_var = "CARGO_TARGET_{}_LINKER".format(triple.upper().replace("-", "_")) + build_env[linker_var] = build_env["CC"] + + # PyO3's build script (pyo3-ffi) refuses to cross-compile without either + # an abi3-py3* feature or an explicit target Python version — maturin + # works around this itself (PYO3_CONFIG_FILE), but setuptools-rust just + # shells out to plain `cargo rustc` with no PyO3-specific help at all. + # Harmless to set even for non-PyO3 crates (simply unused). + build_env["PYO3_CROSS_PYTHON_VERSION"] = "{}.{}".format(sys.version_info.major, sys.version_info.minor) + + host_sysroot = build_env.get("RULES_PY_RUST_HOST_SYSROOT") + if host_sysroot: + merged_sysroot = _merge_rust_sysroot(tmpdir, build_env["RUSTC"], host_sysroot) + build_env["RUSTC"] = _write_generated_file( + path.join(tmpdir, ".aspect_rules_py_rustc", "rustc"), + _RUSTC_WRAPPER.format(rustc=build_env["RUSTC"], sysroot=merged_sysroot), + executable=True, + ) + + # maturin's PEP 517 wrapper passes -i by default so it + # can inspect the target interpreter's ABI. In cross mode it refuses to + # actually execute that path (it may not be host-runnable) and instead + # name-parses it for a "pythonX.Y"-shaped basename — but our venv's + # sys.executable is the generic "python" symlink, which fails that + # parse. Point it at the versioned sibling instead, which the venv's + # bin dir (already on $PATH) also provides. + build_env["MATURIN_PEP517_ARGS"] = "--interpreter python{}.{}".format( + sys.version_info.major, + sys.version_info.minor, + ) + + +_SITECUSTOMIZE_TEMPLATE = """\ +import os +import platform +import collections + +_machine = {machine!r} +_sysname = {sysname!r} + +os.uname = lambda: os.uname_result((_sysname, "build", "", "", _machine)) + +# CS_GLIBC_LIB_VERSION otherwise leaks the *host's* glibc version, which +# feeds manylinux-tag determination in pip/packaging/subprocess. +if hasattr(os, "confstr"): + _real_confstr = os.confstr + + def _confstr(name): + if name == "CS_GLIBC_LIB_VERSION": + return "glibc_unknown" + return _real_confstr(name) + + os.confstr = _confstr + +# platform.uname_result.processor is a lazily-computed property that falls +# back to the real host on this field, so build our own namedtuple instead +# of the real type (mirrors crossenv's platform-patch.py). +_PlatformUname = collections.namedtuple("uname_result", "system node release version machine processor") +_platform_uname = _PlatformUname(_sysname, "build", "", "", _machine, _machine) + +platform.uname = lambda: _platform_uname +platform.system = lambda: _sysname +platform.machine = lambda: _machine +platform.libc_ver = lambda *a, **k: ("", "") + +# packaging.tags._linux_platforms derives its arch from sysconfig.get_platform() +# (already correctly faked via $_PYTHON_HOST_PLATFORM), not from platform.machine() +# — no patch needed there. Only the manylinux-compatibility gate below is ours to +# set, via the top-level _manylinux hook packaging._manylinux itself looks for. +""" + +_MANYLINUX_HOOK = """\ +# Cross build: we have no verified manylinux compatibility for the target +# (no target glibc version is threaded through yet), so refuse rather than +# silently claim host-arch manylinux tags are usable on the target. +def manylinux_compatible(tag_major, tag_minor, tag_arch): + return False + + +manylinux1_compatible = False +manylinux2010_compatible = False +manylinux2014_compatible = False +""" + + +def _generate_cross_site(tmpdir: str, target_os: str, target_cpu: str) -> str: + """sitecustomize + _manylinux hook faking the target's runtime identity. + + sysconfig.get_platform()/_get_sysconfigdata_name() are already faked via + env vars that CPython itself reads (_PYTHON_HOST_PLATFORM, + _PYTHON_SYSCONFIGDATA_NAME) — no patching needed there. But some build + backends and package setup.py scripts branch on os.uname()/ + platform.machine() directly (e.g. to pick vectorized/arch-specific code + paths), which env vars can't reach. sitecustomize.py runs automatically + on interpreter startup — before any backend code executes — and patches + the already-imported os/platform modules in place. Modeled on crossenv's + os-patch.py/platform-patch.py/_manylinux.py, minus what rules_py doesn't + need (dual venvs, distutils.sysconfig, importlib.machinery interception). + """ + site_dir = path.join(tmpdir, ".cross_site") + _write_generated_file( + path.join(site_dir, "sitecustomize.py"), + _SITECUSTOMIZE_TEMPLATE.format(machine=target_cpu, sysname=_TITLECASE_OS.get(target_os, target_os)), + ) + _write_generated_file(path.join(site_dir, "_manylinux.py"), _MANYLINUX_HOOK) + return site_dir + + +_REQUIREMENT_NAME_RE = re.compile(r"^\s*([A-Za-z0-9][A-Za-z0-9._-]*)") + + +def _requirement_name(requirement: str) -> str: + """PEP 508 requirement string -> bare package name, extras/specifiers/markers stripped.""" + match = _REQUIREMENT_NAME_RE.match(requirement) + return match.group(1) if match else "" + + +def _legacy_metadata_conflicts_with_pyproject(worktree: str, pyproject_data: Optional[Dict[str, object]]) -> bool: setup_py = path.join(worktree, "setup.py") - pyproject_data = _load_pyproject_data(worktree) if not (pyproject_data and path.exists(setup_py)): return False @@ -525,9 +964,17 @@ def _validate_wheel_platform(wheel_filename: str) -> None: # and re-point CC/CXX/etc. through wrapper scripts in tmp_root so the # Bazel-supplied workspace-relative compiler paths survive the cwd # change into the worktree. -build_env = _compiler_env(tmp_root, opts.execroot_marker, cross=opts.cross) +build_env = _compiler_env( + tmp_root, + opts.execroot_marker, + cross=opts.cross, + target_os=opts.target_os, + target_cpu=opts.target_cpu, +) -if _legacy_metadata_conflicts_with_pyproject(t): +pyproject_data = _load_pyproject_data(t) + +if _legacy_metadata_conflicts_with_pyproject(t, pyproject_data): print( "Warning: falling back to setup.py because pyproject.toml omits dynamic dependency metadata " "that setuptools still reads from setup.py/setup.cfg.", @@ -564,6 +1011,40 @@ def _validate_wheel_platform(wheel_filename: str) -> None: "--skip-dependency-check", "--outdir", outdir, ] + build_system = (pyproject_data or {}).get("build-system", {}) + build_backend = build_system.get("build-backend") if isinstance(build_system, dict) else None + + # meson-python has no auto-detection for a missing system BLAS/LAPACK + # the way it does for a missing cross-file (see below) — a package that + # needs one (numpy) has to pass its own -Dblas=none/-Dlapack=none (or + # similar) setup-args, and needs them for a native build here too, since + # our build venv never has a system BLAS/LAPACK either. meson-python's + # "setup-args" config-setting is list-typed, and `build`'s -C flag + # accumulates repeated keys into a list, so this can't collide with the + # --cross-file argument the cross branch below adds separately. + if build_backend == "mesonpy": + for arg in shlex.split(build_env.get("RULES_PY_MESON_SETUP_ARGS", "")): + cmd += ["-C", "setup-args=" + arg] + + if opts.cross: + build_requires = build_system.get("requires", []) if isinstance(build_system, dict) else [] + if not isinstance(build_requires, list): + build_requires = [] + # setuptools-rust has no build-backend value of its own — it's just + # setuptools.build_meta with an extra requirement — and no --target + # flag of its own either: it shells out to plain `cargo rustc` and + # relies on $CARGO_BUILD_TARGET, same as maturin does once we set it. + uses_setuptools_rust = build_backend in _SETUPTOOLS_BACKENDS and any( + isinstance(req, str) and _requirement_name(req) == "setuptools-rust" for req in build_requires + ) + if build_backend == "mesonpy": + cross_file = _generate_meson_cross_file(tmp_root, build_env, opts.target_os, opts.target_cpu) + cmd += ["-C", "setup-args=--cross-file=" + cross_file] + elif build_backend == "scikit_build_core.build": + toolchain = _generate_cmake_toolchain_file(tmp_root, build_env, opts.target_os, opts.target_cpu) + cmd += ["-C", "cmake.toolchain-file=" + toolchain] + elif (build_backend == "maturin" or uses_setuptools_rust) and build_env.get("CARGO"): + _configure_cargo_cross_env(build_env, tmp_root, opts.target_os, opts.target_cpu) else: print("Error: Unable to detect build command! Neither pyproject.toml nor setup.py found!", file=sys.stderr) raise SystemExit(1) diff --git a/uv/private/pep517_whl/cc_layer.bzl b/uv/private/pep517_whl/cc_layer.bzl index 74a0da98d..9a0b2841d 100644 --- a/uv/private/pep517_whl/cc_layer.bzl +++ b/uv/private/pep517_whl/cc_layer.bzl @@ -11,7 +11,7 @@ _CC_DISABLED_FEATURES = [ "layering_check", ] -_PATH_FLAG_PREFIXES = ("-I", "-L", "-isysroot", "-iwithsysroot", "-B") +_PATH_FLAG_PREFIXES = ("-I", "-L", "-isysroot", "-iwithsysroot", "-isystem", "-B") CC_LAYER_ATTRS = { "_os_linux": attr.label(default = "@platforms//os:linux"), diff --git a/uv/private/pep517_whl/tests/BUILD.bazel b/uv/private/pep517_whl/tests/BUILD.bazel index 3f4d9346f..7c886f3a5 100644 --- a/uv/private/pep517_whl/tests/BUILD.bazel +++ b/uv/private/pep517_whl/tests/BUILD.bazel @@ -26,6 +26,18 @@ py_test( deps = ["//uv/private/pep517_whl:memory_monitor"], ) +py_test( + name = "build_helper_cross_test", + srcs = ["build_helper_cross_test.py"], + data = ["//uv/private/pep517_whl:build_helper.py"], + main = "build_helper_cross_test.py", + target_compatible_with = ["@platforms//os:linux"], + deps = [ + "@pypi//build", + "@pypi//setuptools", + ], +) + py_test( name = "local_cxx_companion_test", srcs = ["local_cxx_companion_test.py"], diff --git a/uv/private/pep517_whl/tests/build_helper_cross_test.py b/uv/private/pep517_whl/tests/build_helper_cross_test.py new file mode 100644 index 000000000..b120d3c3e --- /dev/null +++ b/uv/private/pep517_whl/tests/build_helper_cross_test.py @@ -0,0 +1,92 @@ +"""Verify build_helper.py's cross-build runtime-identity faking end to end. + +A package's setup.py can branch on platform.machine()/os.uname() directly +(e.g. to pick a vectorized code path) — sysconfig.get_platform() env vars +don't reach that. This drives build_helper.py exactly as sdist_build's +generated build_tool does (a plain subprocess against a real sdist), so it +also exercises exactly what pycross-distutils-probe/uv-sdist-mpicc rely on: +build_helper.py must stay importable as a bare script with no sibling-module +dependencies, since those tests find it by path and run it standalone. +""" + +import os +import subprocess +import sys +import tarfile +import tempfile + +_SETUP_PY = """\ +import os +import platform +import sys + +from setuptools import setup + +expected = os.environ.get("EXPECTED_MACHINE") +if expected is not None: + if platform.machine() != expected: + sys.exit("WRONG_PLATFORM_MACHINE: saw {!r}, expected {!r}".format(platform.machine(), expected)) + if os.uname().machine != expected: + sys.exit("WRONG_UNAME_MACHINE: saw {!r}, expected {!r}".format(os.uname().machine, expected)) + if os.environ.get("EXPECT_MANYLINUX_DISABLED") == "1": + import _manylinux + if _manylinux.manylinux_compatible(2, 17, expected): + sys.exit("MANYLINUX_NOT_DISABLED") + +setup(name="cross_site_probe", version="1.0", py_modules=[]) +""" + + +def _make_sdist(workdir: str) -> str: + pkgdir = os.path.join(workdir, "cross_site_probe-1.0") + os.makedirs(pkgdir) + with open(os.path.join(pkgdir, "setup.py"), "w") as f: + f.write(_SETUP_PY) + sdist = os.path.join(workdir, "cross_site_probe-1.0.tar.gz") + with tarfile.open(sdist, "w:gz") as archive: + archive.add(pkgdir, arcname="cross_site_probe-1.0") + return sdist + + +def _run(helper: str, sdist: str, workdir: str, label: str, env: dict, args: list) -> None: + outdir = os.path.join(workdir, "out-" + label) + full_env = {"HOME": workdir, "PATH": "/usr/bin:/bin"} + full_env.update(env) + result = subprocess.run( + [sys.executable, helper, *args, sdist, outdir], + capture_output=True, + cwd=workdir, + env=full_env, + text=True, + ) + if result.returncode: + raise AssertionError("build_helper failed for {}:\n{}\n{}".format(label, result.stdout, result.stderr)) + + +def main() -> None: + workdir = tempfile.mkdtemp(dir=os.environ["TEST_TMPDIR"]) + sdist = _make_sdist(workdir) + helper = os.path.join(os.path.dirname(os.path.dirname(__file__)), "build_helper.py") + + real_machine = os.uname().machine + fake_machine = "aarch64" if real_machine != "aarch64" else "x86_64" + + # Cross build: setup.py must see the FAKED target arch, not the host's, + # and manylinux compatibility must be refused for it. + _run( + helper, + sdist, + workdir, + "cross", + {"EXPECTED_MACHINE": fake_machine, "EXPECT_MANYLINUX_DISABLED": "1"}, + ["--cross", "--target-os", "linux", "--target-cpu", fake_machine], + ) + + # Native build: no faking involved — setup.py must see the real host arch. + _run(helper, sdist, workdir, "native", {"EXPECTED_MACHINE": real_machine}, []) + + print("OK") + + +if __name__ == "__main__": + main() From 4965c22b3a36113471fb573ec72df699390bae5a Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 7 Aug 2026 11:37:12 -0600 Subject: [PATCH 18/56] typing e2e --- .../uv_gazelle_778.gazelle_python.yaml | 1 - e2e/cases/uv-deps-650/crossbuild/BUILD.bazel | 278 --- e2e/cases/uv-deps-650/crossbuild/__main__.py | 5 - .../uv-deps-650/crossbuild/check_so_suffix.sh | 25 - .../snapshots/app_amd64_layers_listing.yaml | 1943 ----------------- .../snapshots/app_arm64_layers_listing.yaml | 1943 ----------------- .../crossbuild/test_crossbuild_pyc.sh | 25 - .../crossbuild/test_exec_toolchain.sh | 56 - e2e/cases/uv-deps-650/setup.MODULE.bazel | 17 - e2e/cases/uv-gazelle-778/BUILD.bazel | 3 +- e2e/cases/uv-sdist-jdk-build/BUILD.bazel | 21 +- 11 files changed, 12 insertions(+), 4305 deletions(-) delete mode 100644 e2e/cases/uv-deps-650/crossbuild/BUILD.bazel delete mode 100644 e2e/cases/uv-deps-650/crossbuild/__main__.py delete mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh delete mode 100644 e2e/cases/uv-deps-650/crossbuild/snapshots/app_amd64_layers_listing.yaml delete mode 100644 e2e/cases/uv-deps-650/crossbuild/snapshots/app_arm64_layers_listing.yaml delete mode 100755 e2e/cases/uv-deps-650/crossbuild/test_crossbuild_pyc.sh delete mode 100755 e2e/cases/uv-deps-650/crossbuild/test_exec_toolchain.sh diff --git a/e2e/cases/snapshots/uv_gazelle_778.gazelle_python.yaml b/e2e/cases/snapshots/uv_gazelle_778.gazelle_python.yaml index 5056bd9a6..d1fa6108d 100644 --- a/e2e/cases/snapshots/uv_gazelle_778.gazelle_python.yaml +++ b/e2e/cases/snapshots/uv_gazelle_778.gazelle_python.yaml @@ -143,7 +143,6 @@ manifest: pkg_resources: setuptools pluggy: pluggy psutil: psutil - psycopg2: psycopg2_binary pycparser: pycparser pydantic: pydantic pydantic_core: pydantic_core diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel deleted file mode 100644 index e68e771c2..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ /dev/null @@ -1,278 +0,0 @@ -load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") -load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -load("@bazel_skylib//rules:build_test.bzl", "build_test") -load("@rules_oci//oci:defs.bzl", "oci_image", "oci_image_index") -load("@rules_shell//shell:sh_test.bzl", "sh_test") -load("//tools:asserts.bzl", "assert_tar_listing") -load(":toolchain_test.bzl", "exec_python_path") - -exports_files(["require_cxx_driver.patch"]) - -platform( - name = "arm64_linux", - constraint_values = [ - "@platforms//os:linux", - "@platforms//cpu:aarch64", - ], - flags = [ - "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", - "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", - "--stripopt=--strip-all", - ], -) - -platform( - name = "amd64_linux", - constraint_values = [ - "@platforms//os:linux", - "@platforms//cpu:x86_64", - ], - flags = [ - "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", - "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", - "--stripopt=--strip-all", - ], -) - -py_binary( - name = "app_bin", - srcs = ["__main__.py"], - dep_group = "crossbuild", - main = "__main__.py", - python_version = "3.12", - deps = [ - "@pypi_uv_deps_650//psycopg2_binary", - ], -) - -py_image_layer( - name = "app_layers", - binary = ":app_bin", -) - -platform_transition_filegroup( - name = "amd64_layers", - srcs = [":app_layers"], - target_platform = ":amd64_linux", -) - -assert_tar_listing( - name = "app_amd64_layers", - actual = [":amd64_layers"], - expected = "app_amd64_layers_listing.yaml", - tags = ["skip-on-bazel9"], -) - -platform_transition_filegroup( - name = "arm64_layers", - srcs = [":app_layers"], - target_platform = ":arm64_linux", -) - -assert_tar_listing( - name = "app_arm64_layers", - actual = [":arm64_layers"], - expected = "app_arm64_layers_listing.yaml", - tags = ["skip-on-bazel9"], -) - -oci_image( - name = "image", - # This is defined by an oci.pull() call in /MODULE.bazel - base = "@ubuntu", - entrypoint = ["/{}/app_bin".format(package_name())], - tars = [":app_layers"], -) - -platform_transition_filegroup( - name = "amd64_image", - srcs = [":image"], - target_platform = ":amd64_linux", -) - -platform_transition_filegroup( - name = "arm64_image", - srcs = [":image"], - target_platform = ":arm64_linux", -) - -oci_image_index( - name = "image_index", - images = [ - ":arm64_image", - ":amd64_image", - ], -) - -# ── Test: EXEC_TOOLS_TOOLCHAIN resolves exec-platform Python (analysis-time) ── -# -# Verifies that ctx.toolchains[EXEC_TOOLS_TOOLCHAIN] selects the exec-platform -# Python interpreter even when the target platform is arm64. The unpack.py -# script runs on this interpreter, so exec-platform resolution is the critical -# invariant for hermetic cross-arch wheel installs. - -exec_python_path( - name = "unpack_path", -) - -# A second rule instance whose output is named unpack_path_for_arm64.txt. -# platform_transition_filegroup re-exports its srcs' files unchanged, so the -# source rule's name determines the filename visible in the test's runfiles. -exec_python_path( - name = "unpack_path_for_arm64", -) - -platform_transition_filegroup( - name = "unpack_path_for_arm64_transition", - srcs = [":unpack_path_for_arm64"], - target_platform = ":arm64_linux", -) - -sh_test( - name = "exec_toolchain_resolution_test", - srcs = ["test_exec_toolchain.sh"], - data = [ - ":unpack_path", - ":unpack_path_for_arm64_transition", - ], - target_compatible_with = ["@platforms//os:linux"], -) - -# ── Test: cross-arch whl_install with compile_pyc (build-time) ────────────── -# -# Building arm64_layers on an amd64 host exercises whl_install with -# compile_pyc=True against a non-host target platform. The compileall action -# must use the exec-platform interpreter; if it selects the arm64 interpreter -# instead, the action fails with "Exec format error" and the test fails to build. - -sh_test( - name = "crossbuild_compile_pyc_test", - srcs = ["test_crossbuild_pyc.sh"], - data = [":arm64_layers"], - target_compatible_with = ["@platforms//os:linux"], -) - -# Bazel-version-agnostic cross-arch build coverage. The snapshot tests above -# already build the same layers, but they skip on Bazel 9; this build_test -# keeps the cross-arch whl_install + compile_pyc path exercised everywhere. -build_test( - name = "crossbuild_build_test", - targets = [ - ":amd64_layers", - ":arm64_layers", - ":geohash_amd64_layers", - ":geohash_arm64_layers", - ], -) - -py_binary( - name = "geohash_bin", - srcs = ["geohash_main.py"], - dep_group = "crossbuild", - main = "geohash_main.py", - python_version = "3.12", - deps = [ - "@pypi_uv_deps_650//python_geohash", - ], -) - -platform_transition_filegroup( - name = "geohash_amd64_linux", - srcs = [":geohash_bin"], - target_platform = ":amd64_linux", -) - -platform_transition_filegroup( - name = "geohash_arm64_linux", - srcs = [":geohash_bin"], - target_platform = ":arm64_linux", -) - -# ── Verify .so architecture ── - -py_image_layer( - name = "geohash_layers", - binary = ":geohash_bin", -) - -platform_transition_filegroup( - name = "geohash_amd64_layers", - srcs = [":geohash_layers"], - target_platform = ":amd64_linux", -) - -platform_transition_filegroup( - name = "geohash_arm64_layers", - srcs = [":geohash_layers"], - target_platform = ":arm64_linux", -) - -genrule( - name = "_geohash_amd64_so_arch_check", - srcs = [":geohash_amd64_layers"], - outs = ["_geohash_amd64_so_arch.ok"], - cmd = """ -tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) -$(location check_so_arch.sh) $$tar_file 3e00 -touch $@ -""", - tools = [":check_so_arch.sh"], -) - -genrule( - name = "_geohash_arm64_so_arch_check", - srcs = [":geohash_arm64_layers"], - outs = ["_geohash_arm64_so_arch.ok"], - cmd = """ -tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) -$(location check_so_arch.sh) $$tar_file b700 -touch $@ -""", - tools = [":check_so_arch.sh"], -) - -build_test( - name = "geohash_so_arch_amd64_test", - targets = [":_geohash_amd64_so_arch_check"], -) - -build_test( - name = "geohash_so_arch_arm64_test", - targets = [":_geohash_arm64_so_arch_check"], -) - -# ── Verify .so filename suffix (EXT_SUFFIX / SOABI) ── - -genrule( - name = "_geohash_amd64_so_suffix_check", - srcs = [":geohash_amd64_layers"], - outs = ["_geohash_amd64_so_suffix.ok"], - cmd = """ -tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) -$(location check_so_suffix.sh) $$tar_file cpython-312-x86_64-linux-gnu -touch $@ -""", - tools = [":check_so_suffix.sh"], -) - -genrule( - name = "_geohash_arm64_so_suffix_check", - srcs = [":geohash_arm64_layers"], - outs = ["_geohash_arm64_so_suffix.ok"], - cmd = """ -tar_file=$$(echo $(SRCS) | tr ' ' '\\n' | grep 'geohash_layers.*\\.tar' | head -1) -$(location check_so_suffix.sh) $$tar_file cpython-312-aarch64-linux-gnu -touch $@ -""", - tools = [":check_so_suffix.sh"], -) - -build_test( - name = "geohash_so_suffix_amd64_test", - targets = [":_geohash_amd64_so_suffix_check"], -) - -build_test( - name = "geohash_so_suffix_arm64_test", - targets = [":_geohash_arm64_so_suffix_check"], -) diff --git a/e2e/cases/uv-deps-650/crossbuild/__main__.py b/e2e/cases/uv-deps-650/crossbuild/__main__.py deleted file mode 100644 index 7699804a4..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/__main__.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 - -import psycopg2 - -print(psycopg2.__file__) diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh deleted file mode 100755 index d3df61ed3..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Check that _geohash.so inside a py_image_layer tar has the correct platform -# suffix in its filename — i.e. EXT_SUFFIX and SOABI reflect the target -# platform, not the exec host. -# -# Usage: check_so_suffix.sh -set -euo pipefail - -tar_file="${1:?usage: check_so_suffix.sh }" -expected="${2:?expected suffix substring, e.g. cpython-312-x86_64-linux-gnu}" - -so_name=$(tar tf "$tar_file" | grep '_geohash.*\.so$' | head -1) -if [ -z "$so_name" ]; then - echo "FAIL: no _geohash*.so in tar $tar_file" - exit 1 -fi - -echo ".so: $so_name" - -if ! echo "$so_name" | grep -q "$expected"; then - echo "FAIL: expected suffix '$expected' not found in filename" - exit 1 -fi - -echo "PASS: $so_name contains '$expected'" diff --git a/e2e/cases/uv-deps-650/crossbuild/snapshots/app_amd64_layers_listing.yaml b/e2e/cases/uv-deps-650/crossbuild/snapshots/app_amd64_layers_listing.yaml deleted file mode 100644 index 4c1de51c0..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/snapshots/app_amd64_layers_listing.yaml +++ /dev/null @@ -1,1943 +0,0 @@ ---- -layer: 0 -files: - - -rwxr-xr-x 0 0 0 4768 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/__init__.py - - -rwxr-xr-x 0 0 0 2922 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_ipaddress.py - - -rwxr-xr-x 0 0 0 7153 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_json.py - - -rwxr-xr-x 0 0 0 339185 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_psycopg.cpython-312-x86_64-linux-gnu.so - - -rwxr-xr-x 0 0 0 18494 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_range.py - - -rwxr-xr-x 0 0 0 14512 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/errorcodes.py - - -rwxr-xr-x 0 0 0 1425 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/errors.py - - -rwxr-xr-x 0 0 0 6797 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/extensions.py - - -rwxr-xr-x 0 0 0 44215 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/extras.py - - -rwxr-xr-x 0 0 0 6316 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/pool.py - - -rwxr-xr-x 0 0 0 14779 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/sql.py - - -rwxr-xr-x 0 0 0 4870 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/tz.py - - -rwxr-xr-x 0 0 0 4936 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/METADATA - - -rwxr-xr-x 0 0 0 2238 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/licenses/LICENSE - - -rwxr-xr-x 0 0 0 9 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/top_level.txt - - -rwxr-xr-x 0 0 0 17497 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libcom_err-2abe824b.so.2.1 - - -rwxr-xr-x 0 0 0 6489873 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libcrypto-81d66ed9.so.3 - - -rwxr-xr-x 0 0 0 345209 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libgssapi_krb5-497db0c6.so.2.2 - - -rwxr-xr-x 0 0 0 219953 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libk5crypto-b1f99d5c.so.3.1 - - -rwxr-xr-x 0 0 0 17913 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkeyutils-dfe70bd6.so.1.5 - - -rwxr-xr-x 0 0 0 1018953 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkrb5-fcafa220.so.3.3 - - -rwxr-xr-x 0 0 0 76873 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkrb5support-d0bcff84.so.0.1 - - -rwxr-xr-x 0 0 0 60977 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/liblber-568fe118.so.2.0.200 - - -rwxr-xr-x 0 0 0 451425 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libldap-1accf1ee.so.2.0.200 - - -rwxr-xr-x 0 0 0 406817 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libpcre-9513aab5.so.1.2.0 - - -rwxr-xr-x 0 0 0 387497 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libpq-9b38f5e3.so.5.17 - - -rwxr-xr-x 0 0 0 119217 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libsasl2-883649fd.so.3.0.0 - - -rwxr-xr-x 0 0 0 178337 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libselinux-0922c95c.so.1 - - -rwxr-xr-x 0 0 0 1139041 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libssl-81ffa89e.so.3 ---- -layer: 1 -files: - - -rwxr-xr-x 0 0 0 18856 Jan 1 2023 ./app - - -rwxr-xr-x 0 0 0 2100 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/activate - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python -> ../../../../../aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python3 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python3 -> python - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python3.12 -> python - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/_app_bin.venv.pth - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2 -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2_binary.libs -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs - - -rwxr-xr-x 0 0 0 111 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/pyvenv.cfg - - -rwxr-xr-x 0 0 0 66 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/__main__.py - - -rwxr-xr-x 0 0 0 * Jan 1 2023 ./app.runfiles/_repo_mapping - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/2to3 -> 2to3-3.12 - - -rwxr-xr-x 0 0 0 158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/2to3-3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/idle3 -> idle3.12 - - -rwxr-xr-x 0 0 0 156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/idle3.12 - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/pip - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/pip3 - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/pip3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/pydoc3 -> pydoc3.12 - - -rwxr-xr-x 0 0 0 141 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/pydoc3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python -> python3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python3 -> python3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python3-config -> python3.12-config - - -rwxr-xr-x 0 0 0 95359104 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python3.12 - - -rwxr-xr-x 0 0 0 3082 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/bin/python3.12-config - - -rwxr-xr-x 0 0 0 2854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/Python.h - - -rwxr-xr-x 0 0 0 32616 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/abstract.h - - -rwxr-xr-x 0 0 0 264 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/bltinmodule.h - - -rwxr-xr-x 0 0 0 1136 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/boolobject.h - - -rwxr-xr-x 0 0 0 1466 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/bytearrayobject.h - - -rwxr-xr-x 0 0 0 2619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/bytesobject.h - - -rwxr-xr-x 0 0 0 6267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/ceval.h - - -rwxr-xr-x 0 0 0 7071 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/codecs.h - - -rwxr-xr-x 0 0 0 448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/compile.h - - -rwxr-xr-x 0 0 0 728 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/complexobject.h - - -rwxr-xr-x 0 0 0 7870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/abstract.h - - -rwxr-xr-x 0 0 0 1163 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/bytearrayobject.h - - -rwxr-xr-x 0 0 0 4660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/bytesobject.h - - -rwxr-xr-x 0 0 0 1076 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/cellobject.h - - -rwxr-xr-x 0 0 0 1650 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/ceval.h - - -rwxr-xr-x 0 0 0 2245 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/classobject.h - - -rwxr-xr-x 0 0 0 16188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/code.h - - -rwxr-xr-x 0 0 0 2660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/compile.h - - -rwxr-xr-x 0 0 0 1248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/complexobject.h - - -rwxr-xr-x 0 0 0 1965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/context.h - - -rwxr-xr-x 0 0 0 1642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/descrobject.h - - -rwxr-xr-x 0 0 0 4686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/dictobject.h - - -rwxr-xr-x 0 0 0 818 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/fileobject.h - - -rwxr-xr-x 0 0 0 232 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/fileutils.h - - -rwxr-xr-x 0 0 0 900 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/floatobject.h - - -rwxr-xr-x 0 0 0 1108 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/frameobject.h - - -rwxr-xr-x 0 0 0 7188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/funcobject.h - - -rwxr-xr-x 0 0 0 3316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/genobject.h - - -rwxr-xr-x 0 0 0 1623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/import.h - - -rwxr-xr-x 0 0 0 7820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/initconfig.h - - -rwxr-xr-x 0 0 0 387 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/interpreteridobject.h - - -rwxr-xr-x 0 0 0 1633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/listobject.h - - -rwxr-xr-x 0 0 0 4889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/longintrepr.h - - -rwxr-xr-x 0 0 0 4679 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/longobject.h - - -rwxr-xr-x 0 0 0 2272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/memoryobject.h - - -rwxr-xr-x 0 0 0 2276 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/methodobject.h - - -rwxr-xr-x 0 0 0 4336 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/modsupport.h - - -rwxr-xr-x 0 0 0 21212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/object.h - - -rwxr-xr-x 0 0 0 3316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/objimpl.h - - -rwxr-xr-x 0 0 0 1311 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/odictobject.h - - -rwxr-xr-x 0 0 0 848 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/picklebufobject.h - - -rwxr-xr-x 0 0 0 3505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pthread_stubs.h - - -rwxr-xr-x 0 0 0 1387 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pyctype.h - - -rwxr-xr-x 0 0 0 1413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pydebug.h - - -rwxr-xr-x 0 0 0 4276 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pyerrors.h - - -rwxr-xr-x 0 0 0 444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pyfpe.h - - -rwxr-xr-x 0 0 0 1479 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pyframe.h - - -rwxr-xr-x 0 0 0 3423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pylifecycle.h - - -rwxr-xr-x 0 0 0 3379 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pymem.h - - -rwxr-xr-x 0 0 0 17228 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pystate.h - - -rwxr-xr-x 0 0 0 4903 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pythonrun.h - - -rwxr-xr-x 0 0 0 1418 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pythread.h - - -rwxr-xr-x 0 0 0 12402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/pytime.h - - -rwxr-xr-x 0 0 0 2146 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/setobject.h - - -rwxr-xr-x 0 0 0 489 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/sysmodule.h - - -rwxr-xr-x 0 0 0 444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/traceback.h - - -rwxr-xr-x 0 0 0 1377 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/tupleobject.h - - -rwxr-xr-x 0 0 0 35296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/unicodeobject.h - - -rwxr-xr-x 0 0 0 564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/warnings.h - - -rwxr-xr-x 0 0 0 2032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/cpython/weakrefobject.h - - -rwxr-xr-x 0 0 0 9769 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/datetime.h - - -rwxr-xr-x 0 0 0 3080 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/descrobject.h - - -rwxr-xr-x 0 0 0 3860 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/dictobject.h - - -rwxr-xr-x 0 0 0 22471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/dynamic_annotations.h - - -rwxr-xr-x 0 0 0 253 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/enumobject.h - - -rwxr-xr-x 0 0 0 1779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/errcode.h - - -rwxr-xr-x 0 0 0 1267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/exports.h - - -rwxr-xr-x 0 0 0 1650 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/fileobject.h - - -rwxr-xr-x 0 0 0 507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/fileutils.h - - -rwxr-xr-x 0 0 0 1532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/floatobject.h - - -rwxr-xr-x 0 0 0 336 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/frameobject.h - - -rwxr-xr-x 0 0 0 334 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/genericaliasobject.h - - -rwxr-xr-x 0 0 0 3033 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/import.h - - -rwxr-xr-x 0 0 0 611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_abstract.h - - -rwxr-xr-x 0 0 0 3035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_asdl.h - - -rwxr-xr-x 0 0 0 31288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_ast.h - - -rwxr-xr-x 0 0 0 6749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_ast_state.h - - -rwxr-xr-x 0 0 0 1149 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_atexit.h - - -rwxr-xr-x 0 0 0 16979 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_atomic.h - - -rwxr-xr-x 0 0 0 2438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_atomic_funcs.h - - -rwxr-xr-x 0 0 0 6062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_bitutils.h - - -rwxr-xr-x 0 0 0 8688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_blocks_output_buffer.h - - -rwxr-xr-x 0 0 0 3384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_bytes_methods.h - - -rwxr-xr-x 0 0 0 1339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_bytesobject.h - - -rwxr-xr-x 0 0 0 3920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_call.h - - -rwxr-xr-x 0 0 0 5265 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_ceval.h - - -rwxr-xr-x 0 0 0 2744 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_ceval_state.h - - -rwxr-xr-x 0 0 0 15835 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_code.h - - -rwxr-xr-x 0 0 0 3453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_compile.h - - -rwxr-xr-x 0 0 0 2909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_condvar.h - - -rwxr-xr-x 0 0 0 1301 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_context.h - - -rwxr-xr-x 0 0 0 499 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_descrobject.h - - -rwxr-xr-x 0 0 0 6384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_dict.h - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_dict_state.h - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_dtoa.h - - -rwxr-xr-x 0 0 0 562 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_emscripten_signal.h - - -rwxr-xr-x 0 0 0 842 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_exceptions.h - - -rwxr-xr-x 0 0 0 2220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_faulthandler.h - - -rwxr-xr-x 0 0 0 7910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_fileutils.h - - -rwxr-xr-x 0 0 0 2724 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_fileutils_windows.h - - -rwxr-xr-x 0 0 0 1578 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_floatobject.h - - -rwxr-xr-x 0 0 0 4630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_flowgraph.h - - -rwxr-xr-x 0 0 0 480 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_format.h - - -rwxr-xr-x 0 0 0 9255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_frame.h - - -rwxr-xr-x 0 0 0 611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_function.h - - -rwxr-xr-x 0 0 0 7658 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_gc.h - - -rwxr-xr-x 0 0 0 1186 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_genobject.h - - -rwxr-xr-x 0 0 0 490 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_getopt.h - - -rwxr-xr-x 0 0 0 1565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_gil.h - - -rwxr-xr-x 0 0 0 3035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_global_objects.h - - -rwxr-xr-x 0 0 0 115361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_global_objects_fini_generated.h - - -rwxr-xr-x 0 0 0 25438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_global_strings.h - - -rwxr-xr-x 0 0 0 3742 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_hamt.h - - -rwxr-xr-x 0 0 0 4286 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_hashtable.h - - -rwxr-xr-x 0 0 0 6358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_import.h - - -rwxr-xr-x 0 0 0 5706 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_initconfig.h - - -rwxr-xr-x 0 0 0 2998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_instruments.h - - -rwxr-xr-x 0 0 0 9086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_interp.h - - -rwxr-xr-x 0 0 0 1397 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_intrinsics.h - - -rwxr-xr-x 0 0 0 1980 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_list.h - - -rwxr-xr-x 0 0 0 7805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_long.h - - -rwxr-xr-x 0 0 0 383 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_memoryobject.h - - -rwxr-xr-x 0 0 0 1192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_moduleobject.h - - -rwxr-xr-x 0 0 0 392 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_namespace.h - - -rwxr-xr-x 0 0 0 14917 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_object.h - - -rwxr-xr-x 0 0 0 1016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_object_state.h - - -rwxr-xr-x 0 0 0 27284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_obmalloc.h - - -rwxr-xr-x 0 0 0 2085 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_obmalloc_init.h - - -rwxr-xr-x 0 0 0 20081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_opcode.h - - -rwxr-xr-x 0 0 0 2686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_opcode_utils.h - - -rwxr-xr-x 0 0 0 1358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_parser.h - - -rwxr-xr-x 0 0 0 606 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pathconfig.h - - -rwxr-xr-x 0 0 0 2733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pyarena.h - - -rwxr-xr-x 0 0 0 3110 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pyerrors.h - - -rwxr-xr-x 0 0 0 709 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pyhash.h - - -rwxr-xr-x 0 0 0 3365 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pylifecycle.h - - -rwxr-xr-x 0 0 0 8600 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pymath.h - - -rwxr-xr-x 0 0 0 3040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pymem.h - - -rwxr-xr-x 0 0 0 2654 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pymem_init.h - - -rwxr-xr-x 0 0 0 4982 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pystate.h - - -rwxr-xr-x 0 0 0 2075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_pythread.h - - -rwxr-xr-x 0 0 0 346 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_range.h - - -rwxr-xr-x 0 0 0 8429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime.h - - -rwxr-xr-x 0 0 0 5912 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime_init.h - - -rwxr-xr-x 0 0 0 45751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime_init_generated.h - - -rwxr-xr-x 0 0 0 2611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_signal.h - - -rwxr-xr-x 0 0 0 414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_sliceobject.h - - -rwxr-xr-x 0 0 0 937 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_strhex.h - - -rwxr-xr-x 0 0 0 923 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_structseq.h - - -rwxr-xr-x 0 0 0 7035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_symtable.h - - -rwxr-xr-x 0 0 0 999 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_sysmodule.h - - -rwxr-xr-x 0 0 0 388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_time.h - - -rwxr-xr-x 0 0 0 3050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_token.h - - -rwxr-xr-x 0 0 0 3501 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_traceback.h - - -rwxr-xr-x 0 0 0 3075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_tracemalloc.h - - -rwxr-xr-x 0 0 0 2197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_tuple.h - - -rwxr-xr-x 0 0 0 4731 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_typeobject.h - - -rwxr-xr-x 0 0 0 763 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_typevarobject.h - - -rwxr-xr-x 0 0 0 898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_ucnhash.h - - -rwxr-xr-x 0 0 0 2657 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_unicodeobject.h - - -rwxr-xr-x 0 0 0 125516 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_unicodeobject_generated.h - - -rwxr-xr-x 0 0 0 682 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_unionobject.h - - -rwxr-xr-x 0 0 0 740 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/internal/pycore_warnings.h - - -rwxr-xr-x 0 0 0 333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/interpreteridobject.h - - -rwxr-xr-x 0 0 0 772 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/intrcheck.h - - -rwxr-xr-x 0 0 0 597 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/iterobject.h - - -rwxr-xr-x 0 0 0 1782 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/listobject.h - - -rwxr-xr-x 0 0 0 3739 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/longobject.h - - -rwxr-xr-x 0 0 0 827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/marshal.h - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/memoryobject.h - - -rwxr-xr-x 0 0 0 5076 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/methodobject.h - - -rwxr-xr-x 0 0 0 6515 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/modsupport.h - - -rwxr-xr-x 0 0 0 3559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/moduleobject.h - - -rwxr-xr-x 0 0 0 37155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/object.h - - -rwxr-xr-x 0 0 0 9238 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/objimpl.h - - -rwxr-xr-x 0 0 0 12808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/opcode.h - - -rwxr-xr-x 0 0 0 737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/osdefs.h - - -rwxr-xr-x 0 0 0 291 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/osmodule.h - - -rwxr-xr-x 0 0 0 1301 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/patchlevel.h - - -rwxr-xr-x 0 0 0 2473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/py_curses.h - - -rwxr-xr-x 0 0 0 5282 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pybuffer.h - - -rwxr-xr-x 0 0 0 1727 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pycapsule.h - - -rwxr-xr-x 0 0 0 55951 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyconfig.h - - -rwxr-xr-x 0 0 0 2404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pydtrace.h - - -rwxr-xr-x 0 0 0 13017 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyerrors.h - - -rwxr-xr-x 0 0 0 2850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyexpat.h - - -rwxr-xr-x 0 0 0 551 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyframe.h - - -rwxr-xr-x 0 0 0 4154 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyhash.h - - -rwxr-xr-x 0 0 0 2249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pylifecycle.h - - -rwxr-xr-x 0 0 0 2810 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pymacconfig.h - - -rwxr-xr-x 0 0 0 6656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pymacro.h - - -rwxr-xr-x 0 0 0 1688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pymath.h - - -rwxr-xr-x 0 0 0 3914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pymem.h - - -rwxr-xr-x 0 0 0 25593 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pyport.h - - -rwxr-xr-x 0 0 0 4635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pystate.h - - -rwxr-xr-x 0 0 0 2741 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pystats.h - - -rwxr-xr-x 0 0 0 436 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pystrcmp.h - - -rwxr-xr-x 0 0 0 1557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pystrtod.h - - -rwxr-xr-x 0 0 0 1313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pythonrun.h - - -rwxr-xr-x 0 0 0 4875 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pythread.h - - -rwxr-xr-x 0 0 0 851 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/pytypedefs.h - - -rwxr-xr-x 0 0 0 630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/rangeobject.h - - -rwxr-xr-x 0 0 0 1557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/setobject.h - - -rwxr-xr-x 0 0 0 2518 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/sliceobject.h - - -rwxr-xr-x 0 0 0 1645 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/structmember.h - - -rwxr-xr-x 0 0 0 1398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/structseq.h - - -rwxr-xr-x 0 0 0 1729 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/sysmodule.h - - -rwxr-xr-x 0 0 0 585 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/traceback.h - - -rwxr-xr-x 0 0 0 2285 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/tracemalloc.h - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/tupleobject.h - - -rwxr-xr-x 0 0 0 2342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/typeslots.h - - -rwxr-xr-x 0 0 0 35164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/unicodeobject.h - - -rwxr-xr-x 0 0 0 1129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/warnings.h - - -rwxr-xr-x 0 0 0 1234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/include/python3.12/weakrefobject.h - - -rwxr-xr-x 0 0 0 5162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/itcl.tcl - - -rwxr-xr-x 0 0 0 2886 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/itclConfig.sh - - -rwxr-xr-x 0 0 0 19378 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/itclHullCmds.tcl - - -rwxr-xr-x 0 0 0 12114 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/itclWidget.tcl - - -rwxr-xr-x 0 0 0 2348 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/libitclstub.a - - -rwxr-xr-x 0 0 0 2348 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/libitclstub4.3.5.a - - -rwxr-xr-x 0 0 0 306344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/libtcl9itcl4.3.5.so - - -rwxr-xr-x 0 0 0 436 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/itcl4.3.5/pkgIndex.tcl - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/libpython3.12.so -> libpython3.12.so.1.0 - - -rwxr-xr-x 0 0 0 205968800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/libpython3.12.so.1.0 - - -rwxr-xr-x 0 0 0 16800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/libpython3.so - - -rwxr-xr-x 0 0 0 2385136 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/libtcl9.0.so - - -rwxr-xr-x 0 0 0 3119304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/libtcl9tk9.0.so - - -rwxr-xr-x 0 0 0 312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/pkgconfig/python-3.12-embed.pc - - -rwxr-xr-x 0 0 0 298 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/pkgconfig/python-3.12.pc - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/pkgconfig/python3-embed.pc -> python-3.12-embed.pc - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/pkgconfig/python3.pc -> python-3.12.pc - - -rwxr-xr-x 0 0 0 13936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/LICENSE.txt - - -rwxr-xr-x 0 0 0 5218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/__future__.py - - -rwxr-xr-x 0 0 0 227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/__hello__.py - - -rwxr-xr-x 0 0 0 97 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/__phello__/__init__.py - - -rwxr-xr-x 0 0 0 97 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/__phello__/spam.py - - -rwxr-xr-x 0 0 0 4021 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_aix_support.py - - -rwxr-xr-x 0 0 0 32089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_collections_abc.py - - -rwxr-xr-x 0 0 0 8761 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_compat_pickle.py - - -rwxr-xr-x 0 0 0 5681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_compression.py - - -rwxr-xr-x 0 0 0 14653 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_markupbase.py - - -rwxr-xr-x 0 0 0 22023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_osx_support.py - - -rwxr-xr-x 0 0 0 6189 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_py_abc.py - - -rwxr-xr-x 0 0 0 92087 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_pydatetime.py - - -rwxr-xr-x 0 0 0 227283 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_pydecimal.py - - -rwxr-xr-x 0 0 0 93593 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_pyio.py - - -rwxr-xr-x 0 0 0 10790 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_pylong.py - - -rwxr-xr-x 0 0 0 3128 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_sitebuiltins.py - - -rwxr-xr-x 0 0 0 28393 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_strptime.py - - -rwxr-xr-x 0 0 0 43790 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_sysconfigdata__linux_x86_64-linux-gnu.py - - -rwxr-xr-x 0 0 0 7220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_threading_local.py - - -rwxr-xr-x 0 0 0 5893 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/_weakrefset.py - - -rwxr-xr-x 0 0 0 6538 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/abc.py - - -rwxr-xr-x 0 0 0 34211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/aifc.py - - -rwxr-xr-x 0 0 0 500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/antigravity.py - - -rwxr-xr-x 0 0 0 101155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/argparse.py - - -rwxr-xr-x 0 0 0 64452 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ast.py - - -rwxr-xr-x 0 0 0 1220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/__init__.py - - -rwxr-xr-x 0 0 0 3491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/__main__.py - - -rwxr-xr-x 0 0 0 78567 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/base_events.py - - -rwxr-xr-x 0 0 0 1974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/base_futures.py - - -rwxr-xr-x 0 0 0 8869 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/base_subprocess.py - - -rwxr-xr-x 0 0 0 2672 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/base_tasks.py - - -rwxr-xr-x 0 0 0 1413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/constants.py - - -rwxr-xr-x 0 0 0 3342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/coroutines.py - - -rwxr-xr-x 0 0 0 29339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/events.py - - -rwxr-xr-x 0 0 0 1752 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/exceptions.py - - -rwxr-xr-x 0 0 0 2404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/format_helpers.py - - -rwxr-xr-x 0 0 0 14340 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/futures.py - - -rwxr-xr-x 0 0 0 18995 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/locks.py - - -rwxr-xr-x 0 0 0 124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/log.py - - -rwxr-xr-x 0 0 0 481 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/mixins.py - - -rwxr-xr-x 0 0 0 33500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/proactor_events.py - - -rwxr-xr-x 0 0 0 6957 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/protocols.py - - -rwxr-xr-x 0 0 0 7974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/queues.py - - -rwxr-xr-x 0 0 0 7230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/runners.py - - -rwxr-xr-x 0 0 0 48332 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/selector_events.py - - -rwxr-xr-x 0 0 0 31899 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/sslproto.py - - -rwxr-xr-x 0 0 0 7077 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/staggered.py - - -rwxr-xr-x 0 0 0 27619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/streams.py - - -rwxr-xr-x 0 0 0 7737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/subprocess.py - - -rwxr-xr-x 0 0 0 9559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/taskgroups.py - - -rwxr-xr-x 0 0 0 37362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/tasks.py - - -rwxr-xr-x 0 0 0 790 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/threads.py - - -rwxr-xr-x 0 0 0 5321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/timeouts.py - - -rwxr-xr-x 0 0 0 10722 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/transports.py - - -rwxr-xr-x 0 0 0 2475 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/trsock.py - - -rwxr-xr-x 0 0 0 53124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/unix_events.py - - -rwxr-xr-x 0 0 0 32587 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/windows_events.py - - -rwxr-xr-x 0 0 0 5060 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/asyncio/windows_utils.py - - -rwxr-xr-x 0 0 0 20635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/base64.py - - -rwxr-xr-x 0 0 0 33573 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/bdb.py - - -rwxr-xr-x 0 0 0 3423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/bisect.py - - -rwxr-xr-x 0 0 0 11847 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/bz2.py - - -rwxr-xr-x 0 0 0 6556 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/cProfile.py - - -rwxr-xr-x 0 0 0 25864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/calendar.py - - -rwxr-xr-x 0 0 0 34479 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/cgi.py - - -rwxr-xr-x 0 0 0 12421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/cgitb.py - - -rwxr-xr-x 0 0 0 5500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/chunk.py - - -rwxr-xr-x 0 0 0 14873 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/cmd.py - - -rwxr-xr-x 0 0 0 10962 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/code.py - - -rwxr-xr-x 0 0 0 36870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/codecs.py - - -rwxr-xr-x 0 0 0 5908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/codeop.py - - -rwxr-xr-x 0 0 0 52378 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/collections/__init__.py - - -rwxr-xr-x 0 0 0 119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/collections/abc.py - - -rwxr-xr-x 0 0 0 4062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/colorsys.py - - -rwxr-xr-x 0 0 0 20507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/compileall.py - - -rwxr-xr-x 0 0 0 38 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/concurrent/__init__.py - - -rwxr-xr-x 0 0 0 1583 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/concurrent/futures/__init__.py - - -rwxr-xr-x 0 0 0 22833 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/concurrent/futures/_base.py - - -rwxr-xr-x 0 0 0 35854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/concurrent/futures/process.py - - -rwxr-xr-x 0 0 0 8946 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/concurrent/futures/thread.py - - -rwxr-xr-x 0 0 0 167611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/Makefile - - -rwxr-xr-x 0 0 0 11525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/Setup - - -rwxr-xr-x 0 0 0 902 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/Setup.bootstrap - - -rwxr-xr-x 0 0 0 3365 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/Setup.local - - -rwxr-xr-x 0 0 0 6396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/Setup.stdlib - - -rwxr-xr-x 0 0 0 8716 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/config.c - - -rwxr-xr-x 0 0 0 1752 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/config.c.in - - -rwxr-xr-x 0 0 0 15358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/install-sh - - -rwxr-xr-x 0 0 0 9312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/makesetup - - -rwxr-xr-x 0 0 0 2100 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/python-config.py - - -rwxr-xr-x 0 0 0 4096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/config-3.12-x86_64-linux-gnu/python.o - - -rwxr-xr-x 0 0 0 53789 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/configparser.py - - -rwxr-xr-x 0 0 0 27637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/contextlib.py - - -rwxr-xr-x 0 0 0 129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/contextvars.py - - -rwxr-xr-x 0 0 0 8412 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/copy.py - - -rwxr-xr-x 0 0 0 7614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/copyreg.py - - -rwxr-xr-x 0 0 0 3913 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/crypt.py - - -rwxr-xr-x 0 0 0 16386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/csv.py - - -rwxr-xr-x 0 0 0 18268 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/__init__.py - - -rwxr-xr-x 0 0 0 12505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/_aix.py - - -rwxr-xr-x 0 0 0 2535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/_endian.py - - -rwxr-xr-x 0 0 0 296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/README.ctypes - - -rwxr-xr-x 0 0 0 154 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/__init__.py - - -rwxr-xr-x 0 0 0 5024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/dyld.py - - -rwxr-xr-x 0 0 0 960 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/dylib.py - - -rwxr-xr-x 0 0 0 84 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/fetch_macholib - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/fetch_macholib.bat - - -rwxr-xr-x 0 0 0 1105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/framework.py - - -rwxr-xr-x 0 0 0 13959 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/util.py - - -rwxr-xr-x 0 0 0 5629 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ctypes/wintypes.py - - -rwxr-xr-x 0 0 0 3369 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/curses/__init__.py - - -rwxr-xr-x 0 0 0 2543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/curses/ascii.py - - -rwxr-xr-x 0 0 0 5634 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/curses/has_key.py - - -rwxr-xr-x 0 0 0 87 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/curses/panel.py - - -rwxr-xr-x 0 0 0 7754 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/curses/textpad.py - - -rwxr-xr-x 0 0 0 62085 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dataclasses.py - - -rwxr-xr-x 0 0 0 268 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/datetime.py - - -rwxr-xr-x 0 0 0 5882 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dbm/__init__.py - - -rwxr-xr-x 0 0 0 11594 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dbm/dumb.py - - -rwxr-xr-x 0 0 0 72 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dbm/gnu.py - - -rwxr-xr-x 0 0 0 70 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dbm/ndbm.py - - -rwxr-xr-x 0 0 0 2805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/decimal.py - - -rwxr-xr-x 0 0 0 83368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/difflib.py - - -rwxr-xr-x 0 0 0 30227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/dis.py - - -rwxr-xr-x 0 0 0 106749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/doctest.py - - -rwxr-xr-x 0 0 0 1764 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/__init__.py - - -rwxr-xr-x 0 0 0 8541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/_encoded_words.py - - -rwxr-xr-x 0 0 0 111685 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/_header_value_parser.py - - -rwxr-xr-x 0 0 0 17821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/_parseaddr.py - - -rwxr-xr-x 0 0 0 15535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/_policybase.py - - -rwxr-xr-x 0 0 0 9561 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/architecture.rst - - -rwxr-xr-x 0 0 0 3551 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/base64mime.py - - -rwxr-xr-x 0 0 0 17063 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/charset.py - - -rwxr-xr-x 0 0 0 10588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/contentmanager.py - - -rwxr-xr-x 0 0 0 1778 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/encoders.py - - -rwxr-xr-x 0 0 0 3814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/errors.py - - -rwxr-xr-x 0 0 0 22796 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/feedparser.py - - -rwxr-xr-x 0 0 0 21403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/generator.py - - -rwxr-xr-x 0 0 0 24092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/header.py - - -rwxr-xr-x 0 0 0 20819 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/headerregistry.py - - -rwxr-xr-x 0 0 0 2129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/iterators.py - - -rwxr-xr-x 0 0 0 48396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/message.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/__init__.py - - -rwxr-xr-x 0 0 0 1321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/application.py - - -rwxr-xr-x 0 0 0 3094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/audio.py - - -rwxr-xr-x 0 0 0 914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/base.py - - -rwxr-xr-x 0 0 0 3726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/image.py - - -rwxr-xr-x 0 0 0 1315 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/message.py - - -rwxr-xr-x 0 0 0 1619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/multipart.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/nonmultipart.py - - -rwxr-xr-x 0 0 0 1394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/mime/text.py - - -rwxr-xr-x 0 0 0 4975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/parser.py - - -rwxr-xr-x 0 0 0 10614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/policy.py - - -rwxr-xr-x 0 0 0 9864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/quoprimime.py - - -rwxr-xr-x 0 0 0 16071 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/email/utils.py - - -rwxr-xr-x 0 0 0 5884 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/__init__.py - - -rwxr-xr-x 0 0 0 15677 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/aliases.py - - -rwxr-xr-x 0 0 0 1248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/ascii.py - - -rwxr-xr-x 0 0 0 1533 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/base64_codec.py - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/big5.py - - -rwxr-xr-x 0 0 0 1039 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/big5hkscs.py - - -rwxr-xr-x 0 0 0 2249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/bz2_codec.py - - -rwxr-xr-x 0 0 0 2084 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/charmap.py - - -rwxr-xr-x 0 0 0 13121 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp037.py - - -rwxr-xr-x 0 0 0 13568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1006.py - - -rwxr-xr-x 0 0 0 13113 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1026.py - - -rwxr-xr-x 0 0 0 34597 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1125.py - - -rwxr-xr-x 0 0 0 13105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1140.py - - -rwxr-xr-x 0 0 0 13686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1250.py - - -rwxr-xr-x 0 0 0 13361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1251.py - - -rwxr-xr-x 0 0 0 13511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1252.py - - -rwxr-xr-x 0 0 0 13094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1253.py - - -rwxr-xr-x 0 0 0 13502 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1254.py - - -rwxr-xr-x 0 0 0 12466 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1255.py - - -rwxr-xr-x 0 0 0 12814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1256.py - - -rwxr-xr-x 0 0 0 13374 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1257.py - - -rwxr-xr-x 0 0 0 13364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp1258.py - - -rwxr-xr-x 0 0 0 14132 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp273.py - - -rwxr-xr-x 0 0 0 12055 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp424.py - - -rwxr-xr-x 0 0 0 34564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp437.py - - -rwxr-xr-x 0 0 0 13121 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp500.py - - -rwxr-xr-x 0 0 0 13686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp720.py - - -rwxr-xr-x 0 0 0 34681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp737.py - - -rwxr-xr-x 0 0 0 34476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp775.py - - -rwxr-xr-x 0 0 0 34105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp850.py - - -rwxr-xr-x 0 0 0 35002 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp852.py - - -rwxr-xr-x 0 0 0 33850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp855.py - - -rwxr-xr-x 0 0 0 12423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp856.py - - -rwxr-xr-x 0 0 0 33908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp857.py - - -rwxr-xr-x 0 0 0 34015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp858.py - - -rwxr-xr-x 0 0 0 34681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp860.py - - -rwxr-xr-x 0 0 0 34633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp861.py - - -rwxr-xr-x 0 0 0 33370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp862.py - - -rwxr-xr-x 0 0 0 34252 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp863.py - - -rwxr-xr-x 0 0 0 33663 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp864.py - - -rwxr-xr-x 0 0 0 34618 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp865.py - - -rwxr-xr-x 0 0 0 34396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp866.py - - -rwxr-xr-x 0 0 0 32965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp869.py - - -rwxr-xr-x 0 0 0 12595 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp874.py - - -rwxr-xr-x 0 0 0 12854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp875.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp932.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp949.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/cp950.py - - -rwxr-xr-x 0 0 0 1051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/euc_jis_2004.py - - -rwxr-xr-x 0 0 0 1051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/euc_jisx0213.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/euc_jp.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/euc_kr.py - - -rwxr-xr-x 0 0 0 1031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/gb18030.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/gb2312.py - - -rwxr-xr-x 0 0 0 1015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/gbk.py - - -rwxr-xr-x 0 0 0 1508 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/hex_codec.py - - -rwxr-xr-x 0 0 0 13475 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/hp_roman8.py - - -rwxr-xr-x 0 0 0 1011 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/hz.py - - -rwxr-xr-x 0 0 0 9710 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/idna.py - - -rwxr-xr-x 0 0 0 1053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_1.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_2.py - - -rwxr-xr-x 0 0 0 1073 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_2004.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_3.py - - -rwxr-xr-x 0 0 0 1069 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_ext.py - - -rwxr-xr-x 0 0 0 1053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_kr.py - - -rwxr-xr-x 0 0 0 13176 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_1.py - - -rwxr-xr-x 0 0 0 13589 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_10.py - - -rwxr-xr-x 0 0 0 12335 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_11.py - - -rwxr-xr-x 0 0 0 13271 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_13.py - - -rwxr-xr-x 0 0 0 13652 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_14.py - - -rwxr-xr-x 0 0 0 13212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_15.py - - -rwxr-xr-x 0 0 0 13557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_16.py - - -rwxr-xr-x 0 0 0 13404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_2.py - - -rwxr-xr-x 0 0 0 13089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_3.py - - -rwxr-xr-x 0 0 0 13376 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_4.py - - -rwxr-xr-x 0 0 0 13015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_5.py - - -rwxr-xr-x 0 0 0 10833 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_6.py - - -rwxr-xr-x 0 0 0 12844 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_7.py - - -rwxr-xr-x 0 0 0 11036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_8.py - - -rwxr-xr-x 0 0 0 13156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_9.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/johab.py - - -rwxr-xr-x 0 0 0 13779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/koi8_r.py - - -rwxr-xr-x 0 0 0 13193 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/koi8_t.py - - -rwxr-xr-x 0 0 0 13762 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/koi8_u.py - - -rwxr-xr-x 0 0 0 13723 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/kz1048.py - - -rwxr-xr-x 0 0 0 1264 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/latin_1.py - - -rwxr-xr-x 0 0 0 36467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_arabic.py - - -rwxr-xr-x 0 0 0 13633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_croatian.py - - -rwxr-xr-x 0 0 0 13454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_cyrillic.py - - -rwxr-xr-x 0 0 0 15170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_farsi.py - - -rwxr-xr-x 0 0 0 13721 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_greek.py - - -rwxr-xr-x 0 0 0 13498 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_iceland.py - - -rwxr-xr-x 0 0 0 14118 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_latin2.py - - -rwxr-xr-x 0 0 0 13480 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_roman.py - - -rwxr-xr-x 0 0 0 13661 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_romanian.py - - -rwxr-xr-x 0 0 0 13513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mac_turkish.py - - -rwxr-xr-x 0 0 0 1211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/mbcs.py - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/oem.py - - -rwxr-xr-x 0 0 0 13519 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/palmos.py - - -rwxr-xr-x 0 0 0 14015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/ptcp154.py - - -rwxr-xr-x 0 0 0 6883 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/punycode.py - - -rwxr-xr-x 0 0 0 1525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/quopri_codec.py - - -rwxr-xr-x 0 0 0 1332 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/raw_unicode_escape.py - - -rwxr-xr-x 0 0 0 2448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/rot_13.py - - -rwxr-xr-x 0 0 0 1039 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/shift_jis.py - - -rwxr-xr-x 0 0 0 1059 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/shift_jis_2004.py - - -rwxr-xr-x 0 0 0 1059 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/shift_jisx0213.py - - -rwxr-xr-x 0 0 0 12300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/tis_620.py - - -rwxr-xr-x 0 0 0 1299 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/undefined.py - - -rwxr-xr-x 0 0 0 1304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/unicode_escape.py - - -rwxr-xr-x 0 0 0 5236 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_16.py - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_16_be.py - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_16_le.py - - -rwxr-xr-x 0 0 0 5129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_32.py - - -rwxr-xr-x 0 0 0 930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_32_be.py - - -rwxr-xr-x 0 0 0 930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_32_le.py - - -rwxr-xr-x 0 0 0 946 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_7.py - - -rwxr-xr-x 0 0 0 1005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_8.py - - -rwxr-xr-x 0 0 0 4133 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/utf_8_sig.py - - -rwxr-xr-x 0 0 0 2851 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/uu_codec.py - - -rwxr-xr-x 0 0 0 2204 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/encodings/zlib_codec.py - - -rwxr-xr-x 0 0 0 9445 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ensurepip/__init__.py - - -rwxr-xr-x 0 0 0 88 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ensurepip/__main__.py - - -rwxr-xr-x 0 0 0 1841526 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ensurepip/_bundled/pip-25.0.1-py3-none-any.whl - - -rwxr-xr-x 0 0 0 808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ensurepip/_uninstall.py - - -rwxr-xr-x 0 0 0 81540 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/enum.py - - -rwxr-xr-x 0 0 0 10381 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/filecmp.py - - -rwxr-xr-x 0 0 0 15714 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/fileinput.py - - -rwxr-xr-x 0 0 0 5999 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/fnmatch.py - - -rwxr-xr-x 0 0 0 38147 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/fractions.py - - -rwxr-xr-x 0 0 0 34735 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ftplib.py - - -rwxr-xr-x 0 0 0 37940 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/functools.py - - -rwxr-xr-x 0 0 0 5572 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/genericpath.py - - -rwxr-xr-x 0 0 0 7488 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/getopt.py - - -rwxr-xr-x 0 0 0 5990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/getpass.py - - -rwxr-xr-x 0 0 0 21320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/gettext.py - - -rwxr-xr-x 0 0 0 8732 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/glob.py - - -rwxr-xr-x 0 0 0 9648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/graphlib.py - - -rwxr-xr-x 0 0 0 25402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/gzip.py - - -rwxr-xr-x 0 0 0 9349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/hashlib.py - - -rwxr-xr-x 0 0 0 23024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/heapq.py - - -rwxr-xr-x 0 0 0 7716 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/hmac.py - - -rwxr-xr-x 0 0 0 4775 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/html/__init__.py - - -rwxr-xr-x 0 0 0 75512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/html/entities.py - - -rwxr-xr-x 0 0 0 20858 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/html/parser.py - - -rwxr-xr-x 0 0 0 8308 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/http/__init__.py - - -rwxr-xr-x 0 0 0 58041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/http/client.py - - -rwxr-xr-x 0 0 0 77438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/http/cookiejar.py - - -rwxr-xr-x 0 0 0 20854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/http/cookies.py - - -rwxr-xr-x 0 0 0 49202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/http/server.py - - -rwxr-xr-x 0 0 0 2148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/CREDITS.txt - - -rwxr-xr-x 0 0 0 56360 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/ChangeLog - - -rwxr-xr-x 0 0 0 10313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/HISTORY.txt - - -rwxr-xr-x 0 0 0 1935 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/README.txt - - -rwxr-xr-x 0 0 0 120 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/folder.gif - - -rwxr-xr-x 0 0 0 57746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle.ico - - -rwxr-xr-x 0 0 0 634 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_16.gif - - -rwxr-xr-x 0 0 0 1031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_16.png - - -rwxr-xr-x 0 0 0 39205 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_256.png - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_32.gif - - -rwxr-xr-x 0 0 0 2036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_32.png - - -rwxr-xr-x 0 0 0 1388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_48.gif - - -rwxr-xr-x 0 0 0 3977 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_48.png - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/minusnode.gif - - -rwxr-xr-x 0 0 0 125 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/openfolder.gif - - -rwxr-xr-x 0 0 0 78 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/plusnode.gif - - -rwxr-xr-x 0 0 0 380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/python.gif - - -rwxr-xr-x 0 0 0 72 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/tk.gif - - -rwxr-xr-x 0 0 0 27172 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/NEWS2x.txt - - -rwxr-xr-x 0 0 0 56500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/News3.txt - - -rwxr-xr-x 0 0 0 11653 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/README.txt - - -rwxr-xr-x 0 0 0 8477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/TODO.txt - - -rwxr-xr-x 0 0 0 396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/__init__.py - - -rwxr-xr-x 0 0 0 107 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/__main__.py - - -rwxr-xr-x 0 0 0 9354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/autocomplete.py - - -rwxr-xr-x 0 0 0 20863 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/autocomplete_w.py - - -rwxr-xr-x 0 0 0 3216 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/autoexpand.py - - -rwxr-xr-x 0 0 0 8588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/browser.py - - -rwxr-xr-x 0 0 0 7267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/calltip.py - - -rwxr-xr-x 0 0 0 7083 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/calltip_w.py - - -rwxr-xr-x 0 0 0 11420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/codecontext.py - - -rwxr-xr-x 0 0 0 14783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/colorizer.py - - -rwxr-xr-x 0 0 0 2266 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config-extensions.def - - -rwxr-xr-x 0 0 0 2864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config-highlight.def - - -rwxr-xr-x 0 0 0 10910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config-keys.def - - -rwxr-xr-x 0 0 0 3168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config-main.def - - -rwxr-xr-x 0 0 0 38403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config.py - - -rwxr-xr-x 0 0 0 15230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/config_key.py - - -rwxr-xr-x 0 0 0 105310 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/configdialog.py - - -rwxr-xr-x 0 0 0 20991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/debugger.py - - -rwxr-xr-x 0 0 0 12115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/debugger_r.py - - -rwxr-xr-x 0 0 0 4177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/debugobj.py - - -rwxr-xr-x 0 0 0 1082 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/debugobj_r.py - - -rwxr-xr-x 0 0 0 1044 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/delegator.py - - -rwxr-xr-x 0 0 0 1993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/dynoption.py - - -rwxr-xr-x 0 0 0 69561 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/editor.py - - -rwxr-xr-x 0 0 0 3632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/extend.txt - - -rwxr-xr-x 0 0 0 3871 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/filelist.py - - -rwxr-xr-x 0 0 0 15777 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/format.py - - -rwxr-xr-x 0 0 0 7521 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/grep.py - - -rwxr-xr-x 0 0 0 60566 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/help.html - - -rwxr-xr-x 0 0 0 11843 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/help.py - - -rwxr-xr-x 0 0 0 9023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/help_about.py - - -rwxr-xr-x 0 0 0 4065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/history.py - - -rwxr-xr-x 0 0 0 12889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/hyperparser.py - - -rwxr-xr-x 0 0 0 177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/idle.bat - - -rwxr-xr-x 0 0 0 454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/idle.py - - -rwxr-xr-x 0 0 0 570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/idle.pyw - - -rwxr-xr-x 0 0 0 16159 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/iomenu.py - - -rwxr-xr-x 0 0 0 9290 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/macosx.py - - -rwxr-xr-x 0 0 0 3938 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/mainmenu.py - - -rwxr-xr-x 0 0 0 18652 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/multicall.py - - -rwxr-xr-x 0 0 0 5705 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/outwin.py - - -rwxr-xr-x 0 0 0 7204 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/parenmatch.py - - -rwxr-xr-x 0 0 0 3093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/pathbrowser.py - - -rwxr-xr-x 0 0 0 3568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/percolator.py - - -rwxr-xr-x 0 0 0 19864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/pyparse.py - - -rwxr-xr-x 0 0 0 62194 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/pyshell.py - - -rwxr-xr-x 0 0 0 15067 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/query.py - - -rwxr-xr-x 0 0 0 6777 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/redirector.py - - -rwxr-xr-x 0 0 0 9841 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/replace.py - - -rwxr-xr-x 0 0 0 21078 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/rpc.py - - -rwxr-xr-x 0 0 0 21654 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/run.py - - -rwxr-xr-x 0 0 0 8273 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/runscript.py - - -rwxr-xr-x 0 0 0 4478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/scrolledlist.py - - -rwxr-xr-x 0 0 0 5567 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/search.py - - -rwxr-xr-x 0 0 0 7852 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/searchbase.py - - -rwxr-xr-x 0 0 0 7415 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/searchengine.py - - -rwxr-xr-x 0 0 0 20338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/sidebar.py - - -rwxr-xr-x 0 0 0 12834 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/squeezer.py - - -rwxr-xr-x 0 0 0 4016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/stackviewer.py - - -rwxr-xr-x 0 0 0 1474 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/statusbar.py - - -rwxr-xr-x 0 0 0 6808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/textview.py - - -rwxr-xr-x 0 0 0 6665 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/tooltip.py - - -rwxr-xr-x 0 0 0 16773 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/tree.py - - -rwxr-xr-x 0 0 0 11016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/undo.py - - -rwxr-xr-x 0 0 0 1312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/util.py - - -rwxr-xr-x 0 0 0 2616 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/window.py - - -rwxr-xr-x 0 0 0 4203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/zoomheight.py - - -rwxr-xr-x 0 0 0 2005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/idlelib/zzdummy.py - - -rwxr-xr-x 0 0 0 54040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/imaplib.py - - -rwxr-xr-x 0 0 0 4398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/imghdr.py - - -rwxr-xr-x 0 0 0 4784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/__init__.py - - -rwxr-xr-x 0 0 0 1354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/_abc.py - - -rwxr-xr-x 0 0 0 57057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/_bootstrap.py - - -rwxr-xr-x 0 0 0 69406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/_bootstrap_external.py - - -rwxr-xr-x 0 0 0 7612 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/abc.py - - -rwxr-xr-x 0 0 0 880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/machinery.py - - -rwxr-xr-x 0 0 0 28757 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/__init__.py - - -rwxr-xr-x 0 0 0 2406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_adapters.py - - -rwxr-xr-x 0 0 0 743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_collections.py - - -rwxr-xr-x 0 0 0 2895 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_functools.py - - -rwxr-xr-x 0 0 0 2068 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_itertools.py - - -rwxr-xr-x 0 0 0 1590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_meta.py - - -rwxr-xr-x 0 0 0 2166 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_text.py - - -rwxr-xr-x 0 0 0 327 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/readers.py - - -rwxr-xr-x 0 0 0 532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/__init__.py - - -rwxr-xr-x 0 0 0 4482 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/_adapters.py - - -rwxr-xr-x 0 0 0 5486 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/_common.py - - -rwxr-xr-x 0 0 0 1277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/_itertools.py - - -rwxr-xr-x 0 0 0 2949 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/_legacy.py - - -rwxr-xr-x 0 0 0 5203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/abc.py - - -rwxr-xr-x 0 0 0 4370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/readers.py - - -rwxr-xr-x 0 0 0 2584 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/resources/simple.py - - -rwxr-xr-x 0 0 0 354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/simple.py - - -rwxr-xr-x 0 0 0 10994 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/importlib/util.py - - -rwxr-xr-x 0 0 0 127125 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/inspect.py - - -rwxr-xr-x 0 0 0 3582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/io.py - - -rwxr-xr-x 0 0 0 81414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ipaddress.py - - -rwxr-xr-x 0 0 0 14020 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/json/__init__.py - - -rwxr-xr-x 0 0 0 12525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/json/decoder.py - - -rwxr-xr-x 0 0 0 16075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/json/encoder.py - - -rwxr-xr-x 0 0 0 2434 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/json/scanner.py - - -rwxr-xr-x 0 0 0 3339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/json/tool.py - - -rwxr-xr-x 0 0 0 1073 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/keyword.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib-dynload/.empty - - -rwxr-xr-x 0 0 0 36904 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib-dynload/_crypt.cpython-312-x86_64-linux-gnu.so - - -rwxr-xr-x 0 0 0 111512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib-dynload/_ctypes_test.cpython-312-x86_64-linux-gnu.so - - -rwxr-xr-x 0 0 0 2530960 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib-dynload/_dbm.cpython-312-x86_64-linux-gnu.so - - -rwxr-xr-x 0 0 0 593656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so - - -rwxr-xr-x 0 0 0 8696 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/Grammar.txt - - -rwxr-xr-x 0 0 0 15313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/Grammar3.12.13.final.0.pickle - - -rwxr-xr-x 0 0 0 793 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/PatternGrammar.txt - - -rwxr-xr-x 0 0 0 1225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/PatternGrammar3.12.13.final.0.pickle - - -rwxr-xr-x 0 0 0 156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/__init__.py - - -rwxr-xr-x 0 0 0 67 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/__main__.py - - -rwxr-xr-x 0 0 0 6623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/btm_matcher.py - - -rwxr-xr-x 0 0 0 9945 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/btm_utils.py - - -rwxr-xr-x 0 0 0 6690 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixer_base.py - - -rwxr-xr-x 0 0 0 15206 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixer_util.py - - -rwxr-xr-x 0 0 0 47 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/__init__.py - - -rwxr-xr-x 0 0 0 2346 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_apply.py - - -rwxr-xr-x 0 0 0 984 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_asserts.py - - -rwxr-xr-x 0 0 0 320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_basestring.py - - -rwxr-xr-x 0 0 0 590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_buffer.py - - -rwxr-xr-x 0 0 0 3760 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_dict.py - - -rwxr-xr-x 0 0 0 3344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_except.py - - -rwxr-xr-x 0 0 0 979 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_exec.py - - -rwxr-xr-x 0 0 0 2048 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_execfile.py - - -rwxr-xr-x 0 0 0 2495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_exitfunc.py - - -rwxr-xr-x 0 0 0 2765 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_filter.py - - -rwxr-xr-x 0 0 0 644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_funcattrs.py - - -rwxr-xr-x 0 0 0 547 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_future.py - - -rwxr-xr-x 0 0 0 451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_getcwdu.py - - -rwxr-xr-x 0 0 0 3196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_has_key.py - - -rwxr-xr-x 0 0 0 4876 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_idioms.py - - -rwxr-xr-x 0 0 0 3256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_import.py - - -rwxr-xr-x 0 0 0 5684 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_imports.py - - -rwxr-xr-x 0 0 0 289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_imports2.py - - -rwxr-xr-x 0 0 0 708 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_input.py - - -rwxr-xr-x 0 0 0 1144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_intern.py - - -rwxr-xr-x 0 0 0 1608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_isinstance.py - - -rwxr-xr-x 0 0 0 1548 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_itertools.py - - -rwxr-xr-x 0 0 0 2086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_itertools_imports.py - - -rwxr-xr-x 0 0 0 476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_long.py - - -rwxr-xr-x 0 0 0 3640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_map.py - - -rwxr-xr-x 0 0 0 8197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_metaclass.py - - -rwxr-xr-x 0 0 0 606 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_methodattrs.py - - -rwxr-xr-x 0 0 0 571 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_ne.py - - -rwxr-xr-x 0 0 0 3174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_next.py - - -rwxr-xr-x 0 0 0 591 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_nonzero.py - - -rwxr-xr-x 0 0 0 768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_numliterals.py - - -rwxr-xr-x 0 0 0 3426 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_operator.py - - -rwxr-xr-x 0 0 0 1226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_paren.py - - -rwxr-xr-x 0 0 0 2844 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_print.py - - -rwxr-xr-x 0 0 0 2926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_raise.py - - -rwxr-xr-x 0 0 0 454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_raw_input.py - - -rwxr-xr-x 0 0 0 837 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_reduce.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_reload.py - - -rwxr-xr-x 0 0 0 2221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_renames.py - - -rwxr-xr-x 0 0 0 613 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_repr.py - - -rwxr-xr-x 0 0 0 1697 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_set_literal.py - - -rwxr-xr-x 0 0 0 449 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_standarderror.py - - -rwxr-xr-x 0 0 0 1034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_sys_exc.py - - -rwxr-xr-x 0 0 0 1582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_throw.py - - -rwxr-xr-x 0 0 0 5565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_tuple_params.py - - -rwxr-xr-x 0 0 0 1774 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_types.py - - -rwxr-xr-x 0 0 0 1256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_unicode.py - - -rwxr-xr-x 0 0 0 8367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_urllib.py - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_ws_comma.py - - -rwxr-xr-x 0 0 0 2694 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_xrange.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_xreadlines.py - - -rwxr-xr-x 0 0 0 1289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_zip.py - - -rwxr-xr-x 0 0 0 11854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/main.py - - -rwxr-xr-x 0 0 0 7054 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/patcomp.py - - -rwxr-xr-x 0 0 0 143 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/__init__.py - - -rwxr-xr-x 0 0 0 9642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/conv.py - - -rwxr-xr-x 0 0 0 5969 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/driver.py - - -rwxr-xr-x 0 0 0 5552 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/grammar.py - - -rwxr-xr-x 0 0 0 1635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/literals.py - - -rwxr-xr-x 0 0 0 8155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/parse.py - - -rwxr-xr-x 0 0 0 13830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/pgen.py - - -rwxr-xr-x 0 0 0 1302 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/token.py - - -rwxr-xr-x 0 0 0 21119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/tokenize.py - - -rwxr-xr-x 0 0 0 1305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pygram.py - - -rwxr-xr-x 0 0 0 27974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/pytree.py - - -rwxr-xr-x 0 0 0 27507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lib2to3/refactor.py - - -rwxr-xr-x 0 0 0 5800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/linecache.py - - -rwxr-xr-x 0 0 0 78599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/locale.py - - -rwxr-xr-x 0 0 0 83437 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/logging/__init__.py - - -rwxr-xr-x 0 0 0 42798 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/logging/config.py - - -rwxr-xr-x 0 0 0 62596 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/logging/handlers.py - - -rwxr-xr-x 0 0 0 13277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/lzma.py - - -rwxr-xr-x 0 0 0 78911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/mailbox.py - - -rwxr-xr-x 0 0 0 9333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/mailcap.py - - -rwxr-xr-x 0 0 0 23037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/mimetypes.py - - -rwxr-xr-x 0 0 0 23699 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/modulefinder.py - - -rwxr-xr-x 0 0 0 916 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/__init__.py - - -rwxr-xr-x 0 0 0 41398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/connection.py - - -rwxr-xr-x 0 0 0 11673 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/context.py - - -rwxr-xr-x 0 0 0 3061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/dummy/__init__.py - - -rwxr-xr-x 0 0 0 1598 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/dummy/connection.py - - -rwxr-xr-x 0 0 0 12202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/forkserver.py - - -rwxr-xr-x 0 0 0 11626 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/heap.py - - -rwxr-xr-x 0 0 0 47893 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/managers.py - - -rwxr-xr-x 0 0 0 32760 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/pool.py - - -rwxr-xr-x 0 0 0 2377 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_fork.py - - -rwxr-xr-x 0 0 0 2230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_forkserver.py - - -rwxr-xr-x 0 0 0 2029 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_spawn_posix.py - - -rwxr-xr-x 0 0 0 4515 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_spawn_win32.py - - -rwxr-xr-x 0 0 0 12139 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/process.py - - -rwxr-xr-x 0 0 0 12693 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/queues.py - - -rwxr-xr-x 0 0 0 9512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/reduction.py - - -rwxr-xr-x 0 0 0 5145 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/resource_sharer.py - - -rwxr-xr-x 0 0 0 11077 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/resource_tracker.py - - -rwxr-xr-x 0 0 0 18458 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/shared_memory.py - - -rwxr-xr-x 0 0 0 6306 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/sharedctypes.py - - -rwxr-xr-x 0 0 0 9644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/spawn.py - - -rwxr-xr-x 0 0 0 12272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/synchronize.py - - -rwxr-xr-x 0 0 0 14261 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/multiprocessing/util.py - - -rwxr-xr-x 0 0 0 6922 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/netrc.py - - -rwxr-xr-x 0 0 0 41087 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/nntplib.py - - -rwxr-xr-x 0 0 0 30404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ntpath.py - - -rwxr-xr-x 0 0 0 2374 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/nturl2path.py - - -rwxr-xr-x 0 0 0 11467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/numbers.py - - -rwxr-xr-x 0 0 0 13174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/opcode.py - - -rwxr-xr-x 0 0 0 10965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/operator.py - - -rwxr-xr-x 0 0 0 60369 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/optparse.py - - -rwxr-xr-x 0 0 0 40821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/os.py - - -rwxr-xr-x 0 0 0 51052 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pathlib.py - - -rwxr-xr-x 0 0 0 70298 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pdb.py - - -rwxr-xr-x 0 0 0 66911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pickle.py - - -rwxr-xr-x 0 0 0 94052 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pickletools.py - - -rwxr-xr-x 0 0 0 8978 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pipes.py - - -rwxr-xr-x 0 0 0 18281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pkgutil.py - - -rwxr-xr-x 0 0 0 43388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/platform.py - - -rwxr-xr-x 0 0 0 28582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/plistlib.py - - -rwxr-xr-x 0 0 0 14619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/poplib.py - - -rwxr-xr-x 0 0 0 17356 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/posixpath.py - - -rwxr-xr-x 0 0 0 24158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pprint.py - - -rwxr-xr-x 0 0 0 23093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/profile.py - - -rwxr-xr-x 0 0 0 29289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pstats.py - - -rwxr-xr-x 0 0 0 6137 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pty.py - - -rwxr-xr-x 0 0 0 7837 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/py_compile.py - - -rwxr-xr-x 0 0 0 11396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pyclbr.py - - -rwxr-xr-x 0 0 0 113508 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pydoc.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pydoc_data/__init__.py - - -rwxr-xr-x 0 0 0 1325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pydoc_data/_pydoc.css - - -rwxr-xr-x 0 0 0 519590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/pydoc_data/topics.py - - -rwxr-xr-x 0 0 0 11496 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/queue.py - - -rwxr-xr-x 0 0 0 7184 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/quopri.py - - -rwxr-xr-x 0 0 0 34689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/random.py - - -rwxr-xr-x 0 0 0 16315 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/re/__init__.py - - -rwxr-xr-x 0 0 0 5444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/re/_casefix.py - - -rwxr-xr-x 0 0 0 26399 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/re/_compiler.py - - -rwxr-xr-x 0 0 0 5930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/re/_constants.py - - -rwxr-xr-x 0 0 0 41201 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/re/_parser.py - - -rwxr-xr-x 0 0 0 7148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/reprlib.py - - -rwxr-xr-x 0 0 0 7827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/rlcompleter.py - - -rwxr-xr-x 0 0 0 12885 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/runpy.py - - -rwxr-xr-x 0 0 0 6351 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sched.py - - -rwxr-xr-x 0 0 0 1984 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/secrets.py - - -rwxr-xr-x 0 0 0 19671 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/selectors.py - - -rwxr-xr-x 0 0 0 8560 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/shelve.py - - -rwxr-xr-x 0 0 0 13353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/shlex.py - - -rwxr-xr-x 0 0 0 56762 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/shutil.py - - -rwxr-xr-x 0 0 0 2495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/signal.py - - -rwxr-xr-x 0 0 0 119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/README.txt - - -rwxr-xr-x 0 0 0 4 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/INSTALLER - - -rwxr-xr-x 0 0 0 4675 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/METADATA - - -rwxr-xr-x 0 0 0 68854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/RECORD - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/REQUESTED - - -rwxr-xr-x 0 0 0 82 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/WHEEL - - -rwxr-xr-x 0 0 0 243 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/direct_url.json - - -rwxr-xr-x 0 0 0 84 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/entry_points.txt - - -rwxr-xr-x 0 0 0 11731 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt - - -rwxr-xr-x 0 0 0 558 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE - - -rwxr-xr-x 0 0 0 1099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt - - -rwxr-xr-x 0 0 0 14531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt - - -rwxr-xr-x 0 0 0 11325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md - - -rwxr-xr-x 0 0 0 614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING - - -rwxr-xr-x 0 0 0 197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE - - -rwxr-xr-x 0 0 0 10174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE - - -rwxr-xr-x 0 0 0 1344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE - - -rwxr-xr-x 0 0 0 1089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE - - -rwxr-xr-x 0 0 0 10142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE - - -rwxr-xr-x 0 0 0 751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE - - -rwxr-xr-x 0 0 0 1056 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE - - -rwxr-xr-x 0 0 0 1086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE - - -rwxr-xr-x 0 0 0 1115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt - - -rwxr-xr-x 0 0 0 355 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__init__.py - - -rwxr-xr-x 0 0 0 854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__main__.py - - -rwxr-xr-x 0 0 0 1450 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__pip-runner__.py - - -rwxr-xr-x 0 0 0 511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/__init__.py - - -rwxr-xr-x 0 0 0 21911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/build_env.py - - -rwxr-xr-x 0 0 0 10345 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cache.py - - -rwxr-xr-x 0 0 0 131 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/__init__.py - - -rwxr-xr-x 0 0 0 7193 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py - - -rwxr-xr-x 0 0 0 9168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/base_command.py - - -rwxr-xr-x 0 0 0 36164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py - - -rwxr-xr-x 0 0 0 817 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/command_context.py - - -rwxr-xr-x 0 0 0 6484 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/index_command.py - - -rwxr-xr-x 0 0 0 3137 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/main.py - - -rwxr-xr-x 0 0 0 4403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py - - -rwxr-xr-x 0 0 0 13827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/parser.py - - -rwxr-xr-x 0 0 0 4706 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py - - -rwxr-xr-x 0 0 0 16482 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/req_command.py - - -rwxr-xr-x 0 0 0 7362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/spinners.py - - -rwxr-xr-x 0 0 0 116 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py - - -rwxr-xr-x 0 0 0 4026 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/__init__.py - - -rwxr-xr-x 0 0 0 9142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/cache.py - - -rwxr-xr-x 0 0 0 2244 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/check.py - - -rwxr-xr-x 0 0 0 4565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/completion.py - - -rwxr-xr-x 0 0 0 10105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/configuration.py - - -rwxr-xr-x 0 0 0 6805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/debug.py - - -rwxr-xr-x 0 0 0 5178 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/download.py - - -rwxr-xr-x 0 0 0 3099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/freeze.py - - -rwxr-xr-x 0 0 0 1679 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/hash.py - - -rwxr-xr-x 0 0 0 1108 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/help.py - - -rwxr-xr-x 0 0 0 5520 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/index.py - - -rwxr-xr-x 0 0 0 3177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/inspect.py - - -rwxr-xr-x 0 0 0 30588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/install.py - - -rwxr-xr-x 0 0 0 13497 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/list.py - - -rwxr-xr-x 0 0 0 6027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/lock.py - - -rwxr-xr-x 0 0 0 5782 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/search.py - - -rwxr-xr-x 0 0 0 8066 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/show.py - - -rwxr-xr-x 0 0 0 3868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py - - -rwxr-xr-x 0 0 0 5880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/wheel.py - - -rwxr-xr-x 0 0 0 14568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/configuration.py - - -rwxr-xr-x 0 0 0 858 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py - - -rwxr-xr-x 0 0 0 1830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/base.py - - -rwxr-xr-x 0 0 0 929 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/installed.py - - -rwxr-xr-x 0 0 0 6627 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py - - -rwxr-xr-x 0 0 0 1364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py - - -rwxr-xr-x 0 0 0 32165 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/exceptions.py - - -rwxr-xr-x 0 0 0 29 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/__init__.py - - -rwxr-xr-x 0 0 0 16144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/collector.py - - -rwxr-xr-x 0 0 0 41776 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/package_finder.py - - -rwxr-xr-x 0 0 0 8639 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/sources.py - - -rwxr-xr-x 0 0 0 14157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/__init__.py - - -rwxr-xr-x 0 0 0 5975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py - - -rwxr-xr-x 0 0 0 7779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py - - -rwxr-xr-x 0 0 0 2550 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/base.py - - -rwxr-xr-x 0 0 0 338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/main.py - - -rwxr-xr-x 0 0 0 5824 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py - - -rwxr-xr-x 0 0 0 2711 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/_json.py - - -rwxr-xr-x 0 0 0 25420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/base.py - - -rwxr-xr-x 0 0 0 135 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py - - -rwxr-xr-x 0 0 0 2804 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py - - -rwxr-xr-x 0 0 0 8420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py - - -rwxr-xr-x 0 0 0 5333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py - - -rwxr-xr-x 0 0 0 10544 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py - - -rwxr-xr-x 0 0 0 62 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/__init__.py - - -rwxr-xr-x 0 0 0 753 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/candidate.py - - -rwxr-xr-x 0 0 0 6555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/direct_url.py - - -rwxr-xr-x 0 0 0 2471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/format_control.py - - -rwxr-xr-x 0 0 0 1030 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/index.py - - -rwxr-xr-x 0 0 0 2839 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/installation_report.py - - -rwxr-xr-x 0 0 0 21992 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/link.py - - -rwxr-xr-x 0 0 0 3403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/release_control.py - - -rwxr-xr-x 0 0 0 575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/scheme.py - - -rwxr-xr-x 0 0 0 4507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/search_scope.py - - -rwxr-xr-x 0 0 0 2221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py - - -rwxr-xr-x 0 0 0 4243 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/target_python.py - - -rwxr-xr-x 0 0 0 2920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/wheel.py - - -rwxr-xr-x 0 0 0 49 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/__init__.py - - -rwxr-xr-x 0 0 0 20806 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/auth.py - - -rwxr-xr-x 0 0 0 4862 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/cache.py - - -rwxr-xr-x 0 0 0 12667 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/download.py - - -rwxr-xr-x 0 0 0 7646 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py - - -rwxr-xr-x 0 0 0 19555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/session.py - - -rwxr-xr-x 0 0 0 4091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/utils.py - - -rwxr-xr-x 0 0 0 1830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/__init__.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py - - -rwxr-xr-x 0 0 0 4771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py - - -rwxr-xr-x 0 0 0 1421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py - - -rwxr-xr-x 0 0 0 1509 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py - - -rwxr-xr-x 0 0 0 1136 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py - - -rwxr-xr-x 0 0 0 1478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py - - -rwxr-xr-x 0 0 0 5894 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/check.py - - -rwxr-xr-x 0 0 0 9854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/freeze.py - - -rwxr-xr-x 0 0 0 50 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py - - -rwxr-xr-x 0 0 0 27923 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py - - -rwxr-xr-x 0 0 0 28830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/prepare.py - - -rwxr-xr-x 0 0 0 4555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/pyproject.py - - -rwxr-xr-x 0 0 0 3041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/__init__.py - - -rwxr-xr-x 0 0 0 18688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/constructors.py - - -rwxr-xr-x 0 0 0 1225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/pep723.py - - -rwxr-xr-x 0 0 0 2618 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_dependency_group.py - - -rwxr-xr-x 0 0 0 20685 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_file.py - - -rwxr-xr-x 0 0 0 31273 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_install.py - - -rwxr-xr-x 0 0 0 2828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_set.py - - -rwxr-xr-x 0 0 0 24099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py - - -rwxr-xr-x 0 0 0 577 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/base.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py - - -rwxr-xr-x 0 0 0 24060 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py - - -rwxr-xr-x 0 0 0 5047 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py - - -rwxr-xr-x 0 0 0 20454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py - - -rwxr-xr-x 0 0 0 34028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py - - -rwxr-xr-x 0 0 0 6018 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py - - -rwxr-xr-x 0 0 0 11441 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py - - -rwxr-xr-x 0 0 0 3909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py - - -rwxr-xr-x 0 0 0 8239 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py - - -rwxr-xr-x 0 0 0 13437 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py - - -rwxr-xr-x 0 0 0 8284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/__init__.py - - -rwxr-xr-x 0 0 0 3350 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py - - -rwxr-xr-x 0 0 0 1015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/_log.py - - -rwxr-xr-x 0 0 0 1681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py - - -rwxr-xr-x 0 0 0 2514 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/compat.py - - -rwxr-xr-x 0 0 0 6630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py - - -rwxr-xr-x 0 0 0 868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/datetime.py - - -rwxr-xr-x 0 0 0 3696 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py - - -rwxr-xr-x 0 0 0 3200 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py - - -rwxr-xr-x 0 0 0 2459 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py - - -rwxr-xr-x 0 0 0 3324 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py - - -rwxr-xr-x 0 0 0 6892 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py - - -rwxr-xr-x 0 0 0 3726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/glibc.py - - -rwxr-xr-x 0 0 0 4998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/hashes.py - - -rwxr-xr-x 0 0 0 13414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/logging.py - - -rwxr-xr-x 0 0 0 23722 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/misc.py - - -rwxr-xr-x 0 0 0 1601 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/packaging.py - - -rwxr-xr-x 0 0 0 3817 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/pylock.py - - -rwxr-xr-x 0 0 0 1461 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/retry.py - - -rwxr-xr-x 0 0 0 8983 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py - - -rwxr-xr-x 0 0 0 9307 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py - - -rwxr-xr-x 0 0 0 12972 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py - - -rwxr-xr-x 0 0 0 1601 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/urls.py - - -rwxr-xr-x 0 0 0 3455 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py - - -rwxr-xr-x 0 0 0 4468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/wheel.py - - -rwxr-xr-x 0 0 0 596 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py - - -rwxr-xr-x 0 0 0 3734 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py - - -rwxr-xr-x 0 0 0 19144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/git.py - - -rwxr-xr-x 0 0 0 5575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py - - -rwxr-xr-x 0 0 0 11787 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py - - -rwxr-xr-x 0 0 0 22599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py - - -rwxr-xr-x 0 0 0 9010 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/wheel_builder.py - - -rwxr-xr-x 0 0 0 9394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/README.rst - - -rwxr-xr-x 0 0 0 4907 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/__init__.py - - -rwxr-xr-x 0 0 0 558 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/LICENSE.txt - - -rwxr-xr-x 0 0 0 820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py - - -rwxr-xr-x 0 0 0 1737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py - - -rwxr-xr-x 0 0 0 6586 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py - - -rwxr-xr-x 0 0 0 1953 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py - - -rwxr-xr-x 0 0 0 303 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py - - -rwxr-xr-x 0 0 0 4117 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py - - -rwxr-xr-x 0 0 0 1386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py - - -rwxr-xr-x 0 0 0 19102 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py - - -rwxr-xr-x 0 0 0 4354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py - - -rwxr-xr-x 0 0 0 4881 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed - - -rwxr-xr-x 0 0 0 5163 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py - - -rwxr-xr-x 0 0 0 1417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/LICENSE - - -rwxr-xr-x 0 0 0 94 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py - - -rwxr-xr-x 0 0 0 255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py - - -rwxr-xr-x 0 0 0 270954 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem - - -rwxr-xr-x 0 0 0 3442 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/core.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed - - -rwxr-xr-x 0 0 0 1099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/LICENSE.txt - - -rwxr-xr-x 0 0 0 250 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/__init__.py - - -rwxr-xr-x 0 0 0 1709 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/__main__.py - - -rwxr-xr-x 0 0 0 8041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_implementation.py - - -rwxr-xr-x 0 0 0 1710 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py - - -rwxr-xr-x 0 0 0 1865 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py - - -rwxr-xr-x 0 0 0 285 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_toml_compat.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/py.typed - - -rwxr-xr-x 0 0 0 14531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/LICENSE.txt - - -rwxr-xr-x 0 0 0 625 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py - - -rwxr-xr-x 0 0 0 41467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py - - -rwxr-xr-x 0 0 0 10820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py - - -rwxr-xr-x 0 0 0 18612 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py - - -rwxr-xr-x 0 0 0 97792 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe - - -rwxr-xr-x 0 0 0 182784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe - - -rwxr-xr-x 0 0 0 108032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe - - -rwxr-xr-x 0 0 0 66682 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/util.py - - -rwxr-xr-x 0 0 0 91648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe - - -rwxr-xr-x 0 0 0 168448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe - - -rwxr-xr-x 0 0 0 101888 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe - - -rwxr-xr-x 0 0 0 11325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/LICENSE - - -rwxr-xr-x 0 0 0 981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py - - -rwxr-xr-x 0 0 0 64 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py - - -rwxr-xr-x 0 0 0 49430 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/distro.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/py.typed - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/LICENSE.md - - -rwxr-xr-x 0 0 0 868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py - - -rwxr-xr-x 0 0 0 3438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/codec.py - - -rwxr-xr-x 0 0 0 316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/compat.py - - -rwxr-xr-x 0 0 0 13246 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/core.py - - -rwxr-xr-x 0 0 0 79623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py - - -rwxr-xr-x 0 0 0 1898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py - - -rwxr-xr-x 0 0 0 21 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/py.typed - - -rwxr-xr-x 0 0 0 243725 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py - - -rwxr-xr-x 0 0 0 614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/COPYING - - -rwxr-xr-x 0 0 0 1109 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py - - -rwxr-xr-x 0 0 0 5726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py - - -rwxr-xr-x 0 0 0 32390 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py - - -rwxr-xr-x 0 0 0 197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE - - -rwxr-xr-x 0 0 0 10174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.APACHE - - -rwxr-xr-x 0 0 0 1344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.BSD - - -rwxr-xr-x 0 0 0 494 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py - - -rwxr-xr-x 0 0 0 3211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py - - -rwxr-xr-x 0 0 0 9559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py - - -rwxr-xr-x 0 0 0 2707 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py - - -rwxr-xr-x 0 0 0 10518 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py - - -rwxr-xr-x 0 0 0 1514 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py - - -rwxr-xr-x 0 0 0 5421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py - - -rwxr-xr-x 0 0 0 5819 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py - - -rwxr-xr-x 0 0 0 51122 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py - - -rwxr-xr-x 0 0 0 12771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py - - -rwxr-xr-x 0 0 0 39360 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed - - -rwxr-xr-x 0 0 0 22537 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/pylock.py - - -rwxr-xr-x 0 0 0 2870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py - - -rwxr-xr-x 0 0 0 40821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py - - -rwxr-xr-x 0 0 0 22856 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py - - -rwxr-xr-x 0 0 0 5040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py - - -rwxr-xr-x 0 0 0 23284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/version.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pkg_resources/LICENSE - - -rwxr-xr-x 0 0 0 124451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py - - -rwxr-xr-x 0 0 0 1089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/LICENSE - - -rwxr-xr-x 0 0 0 22344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py - - -rwxr-xr-x 0 0 0 1505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py - - -rwxr-xr-x 0 0 0 9013 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py - - -rwxr-xr-x 0 0 0 9281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py - - -rwxr-xr-x 0 0 0 6322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed - - -rwxr-xr-x 0 0 0 10458 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py - - -rwxr-xr-x 0 0 0 704 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py - - -rwxr-xr-x 0 0 0 10362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/LICENSE - - -rwxr-xr-x 0 0 0 2983 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py - - -rwxr-xr-x 0 0 0 353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py - - -rwxr-xr-x 0 0 0 1718 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/console.py - - -rwxr-xr-x 0 0 0 1910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py - - -rwxr-xr-x 0 0 0 40392 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py - - -rwxr-xr-x 0 0 0 4390 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py - - -rwxr-xr-x 0 0 0 5385 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py - - -rwxr-xr-x 0 0 0 4176 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py - - -rwxr-xr-x 0 0 0 35349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py - - -rwxr-xr-x 0 0 0 12115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py - - -rwxr-xr-x 0 0 0 77602 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py - - -rwxr-xr-x 0 0 0 53853 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py - - -rwxr-xr-x 0 0 0 1005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py - - -rwxr-xr-x 0 0 0 1891 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py - - -rwxr-xr-x 0 0 0 3072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py - - -rwxr-xr-x 0 0 0 3092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py - - -rwxr-xr-x 0 0 0 7981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py - - -rwxr-xr-x 0 0 0 6420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/style.py - - -rwxr-xr-x 0 0 0 2042 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py - - -rwxr-xr-x 0 0 0 3312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/styles/_mapping.py - - -rwxr-xr-x 0 0 0 6226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/token.py - - -rwxr-xr-x 0 0 0 63208 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py - - -rwxr-xr-x 0 0 0 10031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/util.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/LICENSE - - -rwxr-xr-x 0 0 0 691 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py - - -rwxr-xr-x 0 0 0 14936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py - - -rwxr-xr-x 0 0 0 557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py - - -rwxr-xr-x 0 0 0 12216 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/py.typed - - -rwxr-xr-x 0 0 0 10142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/LICENSE - - -rwxr-xr-x 0 0 0 5057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py - - -rwxr-xr-x 0 0 0 435 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py - - -rwxr-xr-x 0 0 0 1495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py - - -rwxr-xr-x 0 0 0 26429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py - - -rwxr-xr-x 0 0 0 6449 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/api.py - - -rwxr-xr-x 0 0 0 10186 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/auth.py - - -rwxr-xr-x 0 0 0 441 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/certs.py - - -rwxr-xr-x 0 0 0 1822 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/compat.py - - -rwxr-xr-x 0 0 0 18590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py - - -rwxr-xr-x 0 0 0 4272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py - - -rwxr-xr-x 0 0 0 3813 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/help.py - - -rwxr-xr-x 0 0 0 733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py - - -rwxr-xr-x 0 0 0 35575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/models.py - - -rwxr-xr-x 0 0 0 1057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/packages.py - - -rwxr-xr-x 0 0 0 30503 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py - - -rwxr-xr-x 0 0 0 4322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py - - -rwxr-xr-x 0 0 0 2912 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/structures.py - - -rwxr-xr-x 0 0 0 33225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/utils.py - - -rwxr-xr-x 0 0 0 751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/LICENSE - - -rwxr-xr-x 0 0 0 541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py - - -rwxr-xr-x 0 0 0 8914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/py.typed - - -rwxr-xr-x 0 0 0 2037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py - - -rwxr-xr-x 0 0 0 640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py - - -rwxr-xr-x 0 0 0 1543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py - - -rwxr-xr-x 0 0 0 1768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py - - -rwxr-xr-x 0 0 0 1768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py - - -rwxr-xr-x 0 0 0 24212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py - - -rwxr-xr-x 0 0 0 6420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py - - -rwxr-xr-x 0 0 0 1056 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/LICENSE - - -rwxr-xr-x 0 0 0 6090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py - - -rwxr-xr-x 0 0 0 7896 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py - - -rwxr-xr-x 0 0 0 10209 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py - - -rwxr-xr-x 0 0 0 140235 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py - - -rwxr-xr-x 0 0 0 1064 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py - - -rwxr-xr-x 0 0 0 2128 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py - - -rwxr-xr-x 0 0 0 265 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py - - -rwxr-xr-x 0 0 0 799 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py - - -rwxr-xr-x 0 0 0 9656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py - - -rwxr-xr-x 0 0 0 3225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py - - -rwxr-xr-x 0 0 0 1236 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py - - -rwxr-xr-x 0 0 0 1394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py - - -rwxr-xr-x 0 0 0 7063 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py - - -rwxr-xr-x 0 0 0 423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py - - -rwxr-xr-x 0 0 0 5325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py - - -rwxr-xr-x 0 0 0 19919 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py - - -rwxr-xr-x 0 0 0 351 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py - - -rwxr-xr-x 0 0 0 417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py - - -rwxr-xr-x 0 0 0 22755 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py - - -rwxr-xr-x 0 0 0 1925 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py - - -rwxr-xr-x 0 0 0 2783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py - - -rwxr-xr-x 0 0 0 3404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py - - -rwxr-xr-x 0 0 0 890 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/abc.py - - -rwxr-xr-x 0 0 0 10324 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/align.py - - -rwxr-xr-x 0 0 0 6921 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py - - -rwxr-xr-x 0 0 0 3263 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/bar.py - - -rwxr-xr-x 0 0 0 10686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/box.py - - -rwxr-xr-x 0 0 0 5130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/cells.py - - -rwxr-xr-x 0 0 0 18211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/color.py - - -rwxr-xr-x 0 0 0 1054 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py - - -rwxr-xr-x 0 0 0 7131 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/columns.py - - -rwxr-xr-x 0 0 0 100849 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/console.py - - -rwxr-xr-x 0 0 0 1288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py - - -rwxr-xr-x 0 0 0 5502 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/containers.py - - -rwxr-xr-x 0 0 0 6487 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/control.py - - -rwxr-xr-x 0 0 0 8257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py - - -rwxr-xr-x 0 0 0 1025 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py - - -rwxr-xr-x 0 0 0 2367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py - - -rwxr-xr-x 0 0 0 642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/errors.py - - -rwxr-xr-x 0 0 0 1683 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py - - -rwxr-xr-x 0 0 0 2484 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py - - -rwxr-xr-x 0 0 0 9586 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py - - -rwxr-xr-x 0 0 0 5031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/json.py - - -rwxr-xr-x 0 0 0 3252 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py - - -rwxr-xr-x 0 0 0 14004 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/layout.py - - -rwxr-xr-x 0 0 0 15180 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/live.py - - -rwxr-xr-x 0 0 0 3521 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py - - -rwxr-xr-x 0 0 0 12468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/logging.py - - -rwxr-xr-x 0 0 0 8451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/markup.py - - -rwxr-xr-x 0 0 0 5305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/measure.py - - -rwxr-xr-x 0 0 0 4908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/padding.py - - -rwxr-xr-x 0 0 0 828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/pager.py - - -rwxr-xr-x 0 0 0 3396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/palette.py - - -rwxr-xr-x 0 0 0 11157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/panel.py - - -rwxr-xr-x 0 0 0 36391 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py - - -rwxr-xr-x 0 0 0 60408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/progress.py - - -rwxr-xr-x 0 0 0 8162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py - - -rwxr-xr-x 0 0 0 12447 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py - - -rwxr-xr-x 0 0 0 1391 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/py.typed - - -rwxr-xr-x 0 0 0 166 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/region.py - - -rwxr-xr-x 0 0 0 4431 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/repr.py - - -rwxr-xr-x 0 0 0 4602 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/rule.py - - -rwxr-xr-x 0 0 0 2843 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/scope.py - - -rwxr-xr-x 0 0 0 1591 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/screen.py - - -rwxr-xr-x 0 0 0 24743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/segment.py - - -rwxr-xr-x 0 0 0 4214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py - - -rwxr-xr-x 0 0 0 4424 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/status.py - - -rwxr-xr-x 0 0 0 26990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/style.py - - -rwxr-xr-x 0 0 0 1258 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/styled.py - - -rwxr-xr-x 0 0 0 36371 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py - - -rwxr-xr-x 0 0 0 40049 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/table.py - - -rwxr-xr-x 0 0 0 3370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py - - -rwxr-xr-x 0 0 0 47552 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/text.py - - -rwxr-xr-x 0 0 0 3771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/theme.py - - -rwxr-xr-x 0 0 0 102 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/themes.py - - -rwxr-xr-x 0 0 0 35861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py - - -rwxr-xr-x 0 0 0 9451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/tree.py - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/LICENSE - - -rwxr-xr-x 0 0 0 314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py - - -rwxr-xr-x 0 0 0 25778 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py - - -rwxr-xr-x 0 0 0 3235 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py - - -rwxr-xr-x 0 0 0 26 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/LICENSE - - -rwxr-xr-x 0 0 0 169 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/__init__.py - - -rwxr-xr-x 0 0 0 6961 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/_writer.py - - -rwxr-xr-x 0 0 0 26 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/py.typed - - -rwxr-xr-x 0 0 0 1086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/LICENSE - - -rwxr-xr-x 0 0 0 1320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py - - -rwxr-xr-x 0 0 0 11413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py - - -rwxr-xr-x 0 0 0 20503 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py - - -rwxr-xr-x 0 0 0 2412 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py - - -rwxr-xr-x 0 0 0 1130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py - - -rwxr-xr-x 0 0 0 17993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed - - -rwxr-xr-x 0 0 0 1115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/LICENSE.txt - - -rwxr-xr-x 0 0 0 3333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py - - -rwxr-xr-x 0 0 0 11372 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py - - -rwxr-xr-x 0 0 0 64 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py - - -rwxr-xr-x 0 0 0 20314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py - - -rwxr-xr-x 0 0 0 40408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py - - -rwxr-xr-x 0 0 0 957 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py - - -rwxr-xr-x 0 0 0 17632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py - - -rwxr-xr-x 0 0 0 13922 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py - - -rwxr-xr-x 0 0 0 11036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py - - -rwxr-xr-x 0 0 0 4528 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py - - -rwxr-xr-x 0 0 0 17081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py - - -rwxr-xr-x 0 0 0 34446 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py - - -rwxr-xr-x 0 0 0 7097 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py - - -rwxr-xr-x 0 0 0 8217 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py - - -rwxr-xr-x 0 0 0 8579 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py - - -rwxr-xr-x 0 0 0 2440 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py - - -rwxr-xr-x 0 0 0 1417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py - - -rwxr-xr-x 0 0 0 5343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py - - -rwxr-xr-x 0 0 0 34665 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py - - -rwxr-xr-x 0 0 0 19990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py - - -rwxr-xr-x 0 0 0 6691 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py - - -rwxr-xr-x 0 0 0 30641 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py - - -rwxr-xr-x 0 0 0 1155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py - - -rwxr-xr-x 0 0 0 4901 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py - - -rwxr-xr-x 0 0 0 1605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py - - -rwxr-xr-x 0 0 0 498 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py - - -rwxr-xr-x 0 0 0 3997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py - - -rwxr-xr-x 0 0 0 3510 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py - - -rwxr-xr-x 0 0 0 22050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py - - -rwxr-xr-x 0 0 0 17460 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py - - -rwxr-xr-x 0 0 0 5758 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py - - -rwxr-xr-x 0 0 0 6895 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py - - -rwxr-xr-x 0 0 0 10168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py - - -rwxr-xr-x 0 0 0 14296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py - - -rwxr-xr-x 0 0 0 5403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py - - -rwxr-xr-x 0 0 0 342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/vendor.txt - - -rwxr-xr-x 0 0 0 286 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site-packages/pip/py.typed - - -rwxr-xr-x 0 0 0 23198 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/site.py - - -rwxr-xr-x 0 0 0 43532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/smtplib.py - - -rwxr-xr-x 0 0 0 7448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sndhdr.py - - -rwxr-xr-x 0 0 0 37815 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/socket.py - - -rwxr-xr-x 0 0 0 28065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/socketserver.py - - -rwxr-xr-x 0 0 0 2501 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sqlite3/__init__.py - - -rwxr-xr-x 0 0 0 3855 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sqlite3/__main__.py - - -rwxr-xr-x 0 0 0 3631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sqlite3/dbapi2.py - - -rwxr-xr-x 0 0 0 3538 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sqlite3/dump.py - - -rwxr-xr-x 0 0 0 231 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sre_compile.py - - -rwxr-xr-x 0 0 0 232 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sre_constants.py - - -rwxr-xr-x 0 0 0 229 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sre_parse.py - - -rwxr-xr-x 0 0 0 50904 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/ssl.py - - -rwxr-xr-x 0 0 0 5485 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/stat.py - - -rwxr-xr-x 0 0 0 50227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/statistics.py - - -rwxr-xr-x 0 0 0 11786 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/string.py - - -rwxr-xr-x 0 0 0 12917 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/stringprep.py - - -rwxr-xr-x 0 0 0 257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/struct.py - - -rwxr-xr-x 0 0 0 88747 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/subprocess.py - - -rwxr-xr-x 0 0 0 18478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sunau.py - - -rwxr-xr-x 0 0 0 12477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/symtable.py - - -rwxr-xr-x 0 0 0 31850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/sysconfig.py - - -rwxr-xr-x 0 0 0 11532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tabnanny.py - - -rwxr-xr-x 0 0 0 112569 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tarfile.py - - -rwxr-xr-x 0 0 0 23334 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/telnetlib.py - - -rwxr-xr-x 0 0 0 32386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tempfile.py - - -rwxr-xr-x 0 0 0 19718 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/textwrap.py - - -rwxr-xr-x 0 0 0 1003 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/this.py - - -rwxr-xr-x 0 0 0 60200 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/threading.py - - -rwxr-xr-x 0 0 0 13464 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/timeit.py - - -rwxr-xr-x 0 0 0 173168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/__init__.py - - -rwxr-xr-x 0 0 0 148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/__main__.py - - -rwxr-xr-x 0 0 0 2660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/colorchooser.py - - -rwxr-xr-x 0 0 0 1289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/commondialog.py - - -rwxr-xr-x 0 0 0 1493 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/constants.py - - -rwxr-xr-x 0 0 0 1535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/dialog.py - - -rwxr-xr-x 0 0 0 11644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/dnd.py - - -rwxr-xr-x 0 0 0 14939 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/filedialog.py - - -rwxr-xr-x 0 0 0 7000 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/font.py - - -rwxr-xr-x 0 0 0 3861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/messagebox.py - - -rwxr-xr-x 0 0 0 1816 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/scrolledtext.py - - -rwxr-xr-x 0 0 0 11753 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/simpledialog.py - - -rwxr-xr-x 0 0 0 77032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/tix.py - - -rwxr-xr-x 0 0 0 56318 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tkinter/ttk.py - - -rwxr-xr-x 0 0 0 2511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/token.py - - -rwxr-xr-x 0 0 0 21570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tokenize.py - - -rwxr-xr-x 0 0 0 308 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tomllib/__init__.py - - -rwxr-xr-x 0 0 0 22631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tomllib/_parser.py - - -rwxr-xr-x 0 0 0 2943 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tomllib/_re.py - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tomllib/_types.py - - -rwxr-xr-x 0 0 0 29352 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/trace.py - - -rwxr-xr-x 0 0 0 46393 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/traceback.py - - -rwxr-xr-x 0 0 0 18047 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tracemalloc.py - - -rwxr-xr-x 0 0 0 2035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/tty.py - - -rwxr-xr-x 0 0 0 146363 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtle.py - - -rwxr-xr-x 0 0 0 314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/__init__.py - - -rwxr-xr-x 0 0 0 15375 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/__main__.py - - -rwxr-xr-x 0 0 0 4248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/bytedesign.py - - -rwxr-xr-x 0 0 0 951 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/chaos.py - - -rwxr-xr-x 0 0 0 3304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/clock.py - - -rwxr-xr-x 0 0 0 1339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/colormixer.py - - -rwxr-xr-x 0 0 0 2966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/forest.py - - -rwxr-xr-x 0 0 0 3473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/fractalcurves.py - - -rwxr-xr-x 0 0 0 2434 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/lindenmayer.py - - -rwxr-xr-x 0 0 0 2051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/minimal_hanoi.py - - -rwxr-xr-x 0 0 0 6513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/nim.py - - -rwxr-xr-x 0 0 0 1291 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/paint.py - - -rwxr-xr-x 0 0 0 1066 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/peace.py - - -rwxr-xr-x 0 0 0 3380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/penrose.py - - -rwxr-xr-x 0 0 0 2825 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/planet_and_moon.py - - -rwxr-xr-x 0 0 0 1361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/rosette.py - - -rwxr-xr-x 0 0 0 1804 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/round_dance.py - - -rwxr-xr-x 0 0 0 5053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/sorting_animate.py - - -rwxr-xr-x 0 0 0 1401 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/tree.py - - -rwxr-xr-x 0 0 0 160 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/turtle.cfg - - -rwxr-xr-x 0 0 0 1119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/two_canvases.py - - -rwxr-xr-x 0 0 0 821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/turtledemo/yinyang.py - - -rwxr-xr-x 0 0 0 10993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/types.py - - -rwxr-xr-x 0 0 0 118836 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/typing.py - - -rwxr-xr-x 0 0 0 3487 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/__init__.py - - -rwxr-xr-x 0 0 0 472 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/__main__.py - - -rwxr-xr-x 0 0 0 2746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/_log.py - - -rwxr-xr-x 0 0 0 5483 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/async_case.py - - -rwxr-xr-x 0 0 0 57531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/case.py - - -rwxr-xr-x 0 0 0 21116 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/loader.py - - -rwxr-xr-x 0 0 0 11991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/main.py - - -rwxr-xr-x 0 0 0 106317 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/mock.py - - -rwxr-xr-x 0 0 0 9130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/result.py - - -rwxr-xr-x 0 0 0 10368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/runner.py - - -rwxr-xr-x 0 0 0 2403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/signals.py - - -rwxr-xr-x 0 0 0 13512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/suite.py - - -rwxr-xr-x 0 0 0 5215 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/unittest/util.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/__init__.py - - -rwxr-xr-x 0 0 0 2415 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/error.py - - -rwxr-xr-x 0 0 0 45676 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/parse.py - - -rwxr-xr-x 0 0 0 103724 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/request.py - - -rwxr-xr-x 0 0 0 2361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/response.py - - -rwxr-xr-x 0 0 0 9468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/urllib/robotparser.py - - -rwxr-xr-x 0 0 0 7365 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/uu.py - - -rwxr-xr-x 0 0 0 29656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/uuid.py - - -rwxr-xr-x 0 0 0 26750 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/__init__.py - - -rwxr-xr-x 0 0 0 145 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/__main__.py - - -rwxr-xr-x 0 0 0 9033 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/scripts/common/Activate.ps1 - - -rwxr-xr-x 0 0 0 2170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/scripts/common/activate - - -rwxr-xr-x 0 0 0 934 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/scripts/posix/activate.csh - - -rwxr-xr-x 0 0 0 2209 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/venv/scripts/posix/activate.fish - - -rwxr-xr-x 0 0 0 21909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/warnings.py - - -rwxr-xr-x 0 0 0 22769 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wave.py - - -rwxr-xr-x 0 0 0 21513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/weakref.py - - -rwxr-xr-x 0 0 0 23733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/webbrowser.py - - -rwxr-xr-x 0 0 0 657 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/__init__.py - - -rwxr-xr-x 0 0 0 21664 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/handlers.py - - -rwxr-xr-x 0 0 0 7370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/headers.py - - -rwxr-xr-x 0 0 0 5171 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/simple_server.py - - -rwxr-xr-x 0 0 0 1717 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/types.py - - -rwxr-xr-x 0 0 0 5472 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/util.py - - -rwxr-xr-x 0 0 0 15036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/wsgiref/validate.py - - -rwxr-xr-x 0 0 0 5942 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xdrlib.py - - -rwxr-xr-x 0 0 0 557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/__init__.py - - -rwxr-xr-x 0 0 0 936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/NodeFilter.py - - -rwxr-xr-x 0 0 0 4019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/__init__.py - - -rwxr-xr-x 0 0 0 3451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/domreg.py - - -rwxr-xr-x 0 0 0 35693 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/expatbuilder.py - - -rwxr-xr-x 0 0 0 3367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/minicompat.py - - -rwxr-xr-x 0 0 0 67982 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/minidom.py - - -rwxr-xr-x 0 0 0 11637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/pulldom.py - - -rwxr-xr-x 0 0 0 12420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/dom/xmlbuilder.py - - -rwxr-xr-x 0 0 0 6952 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementInclude.py - - -rwxr-xr-x 0 0 0 13997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementPath.py - - -rwxr-xr-x 0 0 0 74017 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementTree.py - - -rwxr-xr-x 0 0 0 1605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/etree/__init__.py - - -rwxr-xr-x 0 0 0 82 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/etree/cElementTree.py - - -rwxr-xr-x 0 0 0 167 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/parsers/__init__.py - - -rwxr-xr-x 0 0 0 248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/parsers/expat.py - - -rwxr-xr-x 0 0 0 3238 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/__init__.py - - -rwxr-xr-x 0 0 0 4699 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/_exceptions.py - - -rwxr-xr-x 0 0 0 16034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/expatreader.py - - -rwxr-xr-x 0 0 0 15617 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/handler.py - - -rwxr-xr-x 0 0 0 12255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/saxutils.py - - -rwxr-xr-x 0 0 0 12624 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xml/sax/xmlreader.py - - -rwxr-xr-x 0 0 0 38 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xmlrpc/__init__.py - - -rwxr-xr-x 0 0 0 49331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xmlrpc/client.py - - -rwxr-xr-x 0 0 0 36822 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/xmlrpc/server.py - - -rwxr-xr-x 0 0 0 7543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipapp.py - - -rwxr-xr-x 0 0 0 88998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipfile/__init__.py - - -rwxr-xr-x 0 0 0 58 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipfile/__main__.py - - -rwxr-xr-x 0 0 0 10860 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipfile/_path/__init__.py - - -rwxr-xr-x 0 0 0 1158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipfile/_path/glob.py - - -rwxr-xr-x 0 0 0 27840 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zipimport.py - - -rwxr-xr-x 0 0 0 703 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zoneinfo/__init__.py - - -rwxr-xr-x 0 0 0 5294 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zoneinfo/_common.py - - -rwxr-xr-x 0 0 0 5388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zoneinfo/_tzpath.py - - -rwxr-xr-x 0 0 0 24674 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/python3.12/zoneinfo/_zoneinfo.py - - -rwxr-xr-x 0 0 0 22932 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/auto.tcl - - -rwxr-xr-x 0 0 0 60997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/clock.tcl - - -rwxr-xr-x 0 0 0 21330 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/cookiejar.tcl - - -rwxr-xr-x 0 0 0 7453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/idna.tcl - - -rwxr-xr-x 0 0 0 214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 70835 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/public_suffix_list.dat.gz - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/ascii.enc - - -rwxr-xr-x 0 0 0 92873 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/big5.enc - - -rwxr-xr-x 0 0 0 97050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cns11643.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1250.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1251.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1252.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1253.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1254.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1255.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1256.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1257.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1258.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp165.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp437.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp737.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp775.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp850.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp852.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp855.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp857.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp860.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp861.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp862.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp863.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp864.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp865.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp866.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp869.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp874.enc - - -rwxr-xr-x 0 0 0 48207 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp932.enc - - -rwxr-xr-x 0 0 0 132509 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp936.enc - - -rwxr-xr-x 0 0 0 130423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp949.enc - - -rwxr-xr-x 0 0 0 91831 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/cp950.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/dingbats.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/ebcdic.enc - - -rwxr-xr-x 0 0 0 85574 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-cn.enc - - -rwxr-xr-x 0 0 0 82537 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-jp.enc - - -rwxr-xr-x 0 0 0 93918 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-kr.enc - - -rwxr-xr-x 0 0 0 86619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/gb12345.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/gb1988.enc - - -rwxr-xr-x 0 0 0 84532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/gb2312-raw.enc - - -rwxr-xr-x 0 0 0 85574 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/gb2312.enc - - -rwxr-xr-x 0 0 0 192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022-jp.enc - - -rwxr-xr-x 0 0 0 115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022-kr.enc - - -rwxr-xr-x 0 0 0 226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-1.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-10.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-11.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-13.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-14.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-15.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-16.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-2.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-3.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-4.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-5.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-6.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-7.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-8.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-9.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0201.enc - - -rwxr-xr-x 0 0 0 80453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0208.enc - - -rwxr-xr-x 0 0 0 70974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0212.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-r.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-ru.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-t.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-u.enc - - -rwxr-xr-x 0 0 0 92877 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/ksc5601.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macCentEuro.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macCroatian.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macCyrillic.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macDingbats.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macGreek.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macIceland.enc - - -rwxr-xr-x 0 0 0 48028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macJapan.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macRoman.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macRomania.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macThai.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macTurkish.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/macUkraine.enc - - -rwxr-xr-x 0 0 0 41862 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/shiftjis.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/symbol.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/encoding/tis-620.enc - - -rwxr-xr-x 0 0 0 608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/foreachline.tcl - - -rwxr-xr-x 0 0 0 7899 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/history.tcl - - -rwxr-xr-x 0 0 0 3861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/icu.tcl - - -rwxr-xr-x 0 0 0 23575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/init.tcl - - -rwxr-xr-x 0 0 0 7313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/install.tcl - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/af.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/af_za.msg - - -rwxr-xr-x 0 0 0 1340 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ar.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_in.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_jo.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_lb.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_sy.msg - - -rwxr-xr-x 0 0 0 1345 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/be.msg - - -rwxr-xr-x 0 0 0 1267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/bg.msg - - -rwxr-xr-x 0 0 0 1545 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/bn.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/bn_in.msg - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ca.msg - - -rwxr-xr-x 0 0 0 1212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/cs.msg - - -rwxr-xr-x 0 0 0 1140 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/da.msg - - -rwxr-xr-x 0 0 0 1218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/de.msg - - -rwxr-xr-x 0 0 0 796 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/de_at.msg - - -rwxr-xr-x 0 0 0 1215 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/de_be.msg - - -rwxr-xr-x 0 0 0 1396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/el.msg - - -rwxr-xr-x 0 0 0 300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_au.msg - - -rwxr-xr-x 0 0 0 305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_be.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_bw.msg - - -rwxr-xr-x 0 0 0 288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ca.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_gb.msg - - -rwxr-xr-x 0 0 0 321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_hk.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ie.msg - - -rwxr-xr-x 0 0 0 310 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_in.msg - - -rwxr-xr-x 0 0 0 300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_nz.msg - - -rwxr-xr-x 0 0 0 321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ph.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_sg.msg - - -rwxr-xr-x 0 0 0 245 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_za.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/en_zw.msg - - -rwxr-xr-x 0 0 0 1207 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/eo.msg - - -rwxr-xr-x 0 0 0 1164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es.msg - - -rwxr-xr-x 0 0 0 242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ar.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_bo.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_cl.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_co.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_cr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_do.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ec.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_gt.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_hn.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_mx.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ni.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pa.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pe.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_py.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_sv.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_uy.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ve.msg - - -rwxr-xr-x 0 0 0 1170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/et.msg - - -rwxr-xr-x 0 0 0 985 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/eu.msg - - -rwxr-xr-x 0 0 0 287 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/eu_es.msg - - -rwxr-xr-x 0 0 0 1062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fa.msg - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fa_in.msg - - -rwxr-xr-x 0 0 0 381 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fa_ir.msg - - -rwxr-xr-x 0 0 0 1129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fi.msg - - -rwxr-xr-x 0 0 0 950 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fo.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fo_fo.msg - - -rwxr-xr-x 0 0 0 1181 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fr.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_be.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_ca.msg - - -rwxr-xr-x 0 0 0 281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_ch.msg - - -rwxr-xr-x 0 0 0 1029 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ga.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ga_ie.msg - - -rwxr-xr-x 0 0 0 926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/gl.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/gl_es.msg - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/gv.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/gv_gb.msg - - -rwxr-xr-x 0 0 0 1288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/he.msg - - -rwxr-xr-x 0 0 0 1192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/hi.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/hi_in.msg - - -rwxr-xr-x 0 0 0 1097 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/hr.msg - - -rwxr-xr-x 0 0 0 1247 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/hu.msg - - -rwxr-xr-x 0 0 0 914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/id.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/id_id.msg - - -rwxr-xr-x 0 0 0 1147 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/is.msg - - -rwxr-xr-x 0 0 0 1220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/it.msg - - -rwxr-xr-x 0 0 0 244 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/it_ch.msg - - -rwxr-xr-x 0 0 0 1426 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ja.msg - - -rwxr-xr-x 0 0 0 978 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kl.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kl_gl.msg - - -rwxr-xr-x 0 0 0 1368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ko.msg - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ko_kr.msg - - -rwxr-xr-x 0 0 0 1304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kok.msg - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kok_in.msg - - -rwxr-xr-x 0 0 0 966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kw.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/kw_gb.msg - - -rwxr-xr-x 0 0 0 1203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/lt.msg - - -rwxr-xr-x 0 0 0 1175 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/lv.msg - - -rwxr-xr-x 0 0 0 1361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/mk.msg - - -rwxr-xr-x 0 0 0 1228 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/mr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/mr_in.msg - - -rwxr-xr-x 0 0 0 910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ms.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ms_my.msg - - -rwxr-xr-x 0 0 0 674 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/mt.msg - - -rwxr-xr-x 0 0 0 1141 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/nb.msg - - -rwxr-xr-x 0 0 0 1079 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/nl.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/nl_be.msg - - -rwxr-xr-x 0 0 0 1140 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/nn.msg - - -rwxr-xr-x 0 0 0 1167 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/pl.msg - - -rwxr-xr-x 0 0 0 1111 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/pt.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/pt_br.msg - - -rwxr-xr-x 0 0 0 1148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ro.msg - - -rwxr-xr-x 0 0 0 1323 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ru.msg - - -rwxr-xr-x 0 0 0 242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ru_ua.msg - - -rwxr-xr-x 0 0 0 1152 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sh.msg - - -rwxr-xr-x 0 0 0 1151 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sk.msg - - -rwxr-xr-x 0 0 0 1152 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sl.msg - - -rwxr-xr-x 0 0 0 1227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sq.msg - - -rwxr-xr-x 0 0 0 1323 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sr.msg - - -rwxr-xr-x 0 0 0 1143 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sv.msg - - -rwxr-xr-x 0 0 0 991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/sw.msg - - -rwxr-xr-x 0 0 0 1241 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ta.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/ta_in.msg - - -rwxr-xr-x 0 0 0 1424 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/te.msg - - -rwxr-xr-x 0 0 0 363 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/te_in.msg - - -rwxr-xr-x 0 0 0 1678 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/th.msg - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/tr.msg - - -rwxr-xr-x 0 0 0 1349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/uk.msg - - -rwxr-xr-x 0 0 0 1221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/vi.msg - - -rwxr-xr-x 0 0 0 2256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/zh.msg - - -rwxr-xr-x 0 0 0 303 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_cn.msg - - -rwxr-xr-x 0 0 0 677 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_hk.msg - - -rwxr-xr-x 0 0 0 327 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_sg.msg - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_tw.msg - - -rwxr-xr-x 0 0 0 30422 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/opt0.4/optparse.tcl - - -rwxr-xr-x 0 0 0 625 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/opt0.4/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 23749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/package.tcl - - -rwxr-xr-x 0 0 0 814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/parray.tcl - - -rwxr-xr-x 0 0 0 599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/readfile.tcl - - -rwxr-xr-x 0 0 0 46997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/safe.tcl - - -rwxr-xr-x 0 0 0 4852 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/tclAppInit.c - - -rwxr-xr-x 0 0 0 9866 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/tclIndex - - -rwxr-xr-x 0 0 0 11904 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/tm.tcl - - -rwxr-xr-x 0 0 0 4764 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/word.tcl - - -rwxr-xr-x 0 0 0 911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9.0/writefile.tcl - - -rwxr-xr-x 0 0 0 180267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9/9.0/http-2.10.1.tm - - -rwxr-xr-x 0 0 0 37407 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9/9.0/msgcat-1.7.1.tm - - -rwxr-xr-x 0 0 0 11053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9/9.0/platform-1.1.0.tm - - -rwxr-xr-x 0 0 0 5975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9/9.0/platform/shell-1.1.4.tm - - -rwxr-xr-x 0 0 0 104783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tcl9/9.0/tcltest-2.5.10.tm - - -rwxr-xr-x 0 0 0 110144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/thread3.0.4/libtcl9thread3.0.4.so - - -rwxr-xr-x 0 0 0 2151 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/thread3.0.4/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 24364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/thread3.0.4/ttrace.tcl - - -rwxr-xr-x 0 0 0 8924 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/bgerror.tcl - - -rwxr-xr-x 0 0 0 20834 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/button.tcl - - -rwxr-xr-x 0 0 0 9681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/choosedir.tcl - - -rwxr-xr-x 0 0 0 21550 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/clrpick.tcl - - -rwxr-xr-x 0 0 0 8355 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/comdlg.tcl - - -rwxr-xr-x 0 0 0 32084 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/console.tcl - - -rwxr-xr-x 0 0 0 2082 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/README - - -rwxr-xr-x 0 0 0 7127 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/anilabel.tcl - - -rwxr-xr-x 0 0 0 3608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/aniwave.tcl - - -rwxr-xr-x 0 0 0 8715 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/arrow.tcl - - -rwxr-xr-x 0 0 0 3075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/bind.tcl - - -rwxr-xr-x 0 0 0 1411 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/bitmap.tcl - - -rwxr-xr-x 0 0 0 1756 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/browse - - -rwxr-xr-x 0 0 0 1507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/button.tcl - - -rwxr-xr-x 0 0 0 2317 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/check.tcl - - -rwxr-xr-x 0 0 0 1431 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/clrpick.tcl - - -rwxr-xr-x 0 0 0 5009 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/colors.tcl - - -rwxr-xr-x 0 0 0 2064 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/combo.tcl - - -rwxr-xr-x 0 0 0 4015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/cscroll.tcl - - -rwxr-xr-x 0 0 0 6312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ctext.tcl - - -rwxr-xr-x 0 0 0 974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/dialog1.tcl - - -rwxr-xr-x 0 0 0 828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/dialog2.tcl - - -rwxr-xr-x 0 0 0 4402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/en.msg - - -rwxr-xr-x 0 0 0 1465 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/entry1.tcl - - -rwxr-xr-x 0 0 0 2197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/entry2.tcl - - -rwxr-xr-x 0 0 0 6146 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/entry3.tcl - - -rwxr-xr-x 0 0 0 2384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/filebox.tcl - - -rwxr-xr-x 0 0 0 81247 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/floor.tcl - - -rwxr-xr-x 0 0 0 1692 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/fontchoose.tcl - - -rwxr-xr-x 0 0 0 1046 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/form.tcl - - -rwxr-xr-x 0 0 0 61196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/goldberg.tcl - - -rwxr-xr-x 0 0 0 512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/hello - - -rwxr-xr-x 0 0 0 1656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/hscale.tcl - - -rwxr-xr-x 0 0 0 2065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/icon.tcl - - -rwxr-xr-x 0 0 0 1408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/image1.tcl - - -rwxr-xr-x 0 0 0 3535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/image2.tcl - - -rwxr-xr-x 0 0 0 6497 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/Tcl.svg - - -rwxr-xr-x 0 0 0 11700 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/Tk_feather.png - - -rwxr-xr-x 0 0 0 51559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/earth.gif - - -rwxr-xr-x 0 0 0 8157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/earthmenu.png - - -rwxr-xr-x 0 0 0 6343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/earthris.gif - - -rwxr-xr-x 0 0 0 1886 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/flagdown.xbm - - -rwxr-xr-x 0 0 0 1880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/flagup.xbm - - -rwxr-xr-x 0 0 0 275 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/gray25.xbm - - -rwxr-xr-x 0 0 0 1883 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/letters.xbm - - -rwxr-xr-x 0 0 0 1889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/noletter.xbm - - -rwxr-xr-x 0 0 0 54257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/ouster.png - - -rwxr-xr-x 0 0 0 272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/pattern.xbm - - -rwxr-xr-x 0 0 0 68476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/plowed_field.png - - -rwxr-xr-x 0 0 0 82214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/starry_night.png - - -rwxr-xr-x 0 0 0 2341 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/tcllogo.gif - - -rwxr-xr-x 0 0 0 196623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/images/teapot.ppm - - -rwxr-xr-x 0 0 0 10571 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/items.tcl - - -rwxr-xr-x 0 0 0 8083 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ixset - - -rwxr-xr-x 0 0 0 8806 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/knightstour.tcl - - -rwxr-xr-x 0 0 0 1721 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/label.tcl - - -rwxr-xr-x 0 0 0 1809 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/labelframe.tcl - - -rwxr-xr-x 0 0 0 2267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/license.terms - - -rwxr-xr-x 0 0 0 10926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/mac_styles.tcl - - -rwxr-xr-x 0 0 0 2293 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/mac_tabs.tcl - - -rwxr-xr-x 0 0 0 8746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/mac_wm.tcl - - -rwxr-xr-x 0 0 0 5743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/mclist.tcl - - -rwxr-xr-x 0 0 0 7607 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/menu.tcl - - -rwxr-xr-x 0 0 0 4429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/menubu.tcl - - -rwxr-xr-x 0 0 0 2004 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/msgbox.tcl - - -rwxr-xr-x 0 0 0 7398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/nl.msg - - -rwxr-xr-x 0 0 0 1149 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/paned1.tcl - - -rwxr-xr-x 0 0 0 2263 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/paned2.tcl - - -rwxr-xr-x 0 0 0 8256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/pendulum.tcl - - -rwxr-xr-x 0 0 0 2918 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/plot.tcl - - -rwxr-xr-x 0 0 0 4687 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/print.tcl - - -rwxr-xr-x 0 0 0 2605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/puzzle.tcl - - -rwxr-xr-x 0 0 0 2784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/radio.tcl - - -rwxr-xr-x 0 0 0 5316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/rmt - - -rwxr-xr-x 0 0 0 8316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/rolodex - - -rwxr-xr-x 0 0 0 5333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ruler.tcl - - -rwxr-xr-x 0 0 0 2275 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/sayings.tcl - - -rwxr-xr-x 0 0 0 4406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/search.tcl - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/spin.tcl - - -rwxr-xr-x 0 0 0 2030 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/states.tcl - - -rwxr-xr-x 0 0 0 6938 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/style.tcl - - -rwxr-xr-x 0 0 0 2668 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/systray.tcl - - -rwxr-xr-x 0 0 0 5471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/tclIndex - - -rwxr-xr-x 0 0 0 11253 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/tcolor - - -rwxr-xr-x 0 0 0 4277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/text.tcl - - -rwxr-xr-x 0 0 0 2188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/textpeer.tcl - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/timer - - -rwxr-xr-x 0 0 0 3271 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/toolbar.tcl - - -rwxr-xr-x 0 0 0 3178 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/tree.tcl - - -rwxr-xr-x 0 0 0 3421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkbut.tcl - - -rwxr-xr-x 0 0 0 2420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkmenu.tcl - - -rwxr-xr-x 0 0 0 2343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttknote.tcl - - -rwxr-xr-x 0 0 0 4180 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkpane.tcl - - -rwxr-xr-x 0 0 0 1533 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkprogress.tcl - - -rwxr-xr-x 0 0 0 1422 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkscale.tcl - - -rwxr-xr-x 0 0 0 1631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/ttkspin.tcl - - -rwxr-xr-x 0 0 0 11980 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/twind.tcl - - -rwxr-xr-x 0 0 0 3969 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/unicodeout.tcl - - -rwxr-xr-x 0 0 0 1640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/vscale.tcl - - -rwxr-xr-x 0 0 0 23966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/widget - - -rwxr-xr-x 0 0 0 5771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/demos/windowicons.tcl - - -rwxr-xr-x 0 0 0 5800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/dialog.tcl - - -rwxr-xr-x 0 0 0 18658 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/entry.tcl - - -rwxr-xr-x 0 0 0 4856 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/focus.tcl - - -rwxr-xr-x 0 0 0 15648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/fontchooser.tcl - - -rwxr-xr-x 0 0 0 13074 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/iconbadges.tcl - - -rwxr-xr-x 0 0 0 16403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/iconlist.tcl - - -rwxr-xr-x 0 0 0 2380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/icons.tcl - - -rwxr-xr-x 0 0 0 322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/README - - -rwxr-xr-x 0 0 0 32891 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/logo.eps - - -rwxr-xr-x 0 0 0 2341 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/logo100.gif - - -rwxr-xr-x 0 0 0 1670 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/logo64.gif - - -rwxr-xr-x 0 0 0 11000 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/logoLarge.gif - - -rwxr-xr-x 0 0 0 3889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/logoMed.gif - - -rwxr-xr-x 0 0 0 27800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo.eps - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo100.gif - - -rwxr-xr-x 0 0 0 2489 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo150.gif - - -rwxr-xr-x 0 0 0 2981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo175.gif - - -rwxr-xr-x 0 0 0 3491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo200.gif - - -rwxr-xr-x 0 0 0 1171 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo75.gif - - -rwxr-xr-x 0 0 0 5473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/images/tai-ku.gif - - -rwxr-xr-x 0 0 0 13771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/listbox.tcl - - -rwxr-xr-x 0 0 0 9570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/megawidget.tcl - - -rwxr-xr-x 0 0 0 38199 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/menu.tcl - - -rwxr-xr-x 0 0 0 29352 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/mkpsenc.tcl - - -rwxr-xr-x 0 0 0 17249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgbox.tcl - - -rwxr-xr-x 0 0 0 4632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/cs.msg - - -rwxr-xr-x 0 0 0 4604 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/da.msg - - -rwxr-xr-x 0 0 0 5495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/de.msg - - -rwxr-xr-x 0 0 0 6249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/el.msg - - -rwxr-xr-x 0 0 0 3882 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/en.msg - - -rwxr-xr-x 0 0 0 63 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/en_gb.msg - - -rwxr-xr-x 0 0 0 4643 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/eo.msg - - -rwxr-xr-x 0 0 0 4611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/es.msg - - -rwxr-xr-x 0 0 0 5649 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/fi.msg - - -rwxr-xr-x 0 0 0 4491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/fr.msg - - -rwxr-xr-x 0 0 0 4871 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/hu.msg - - -rwxr-xr-x 0 0 0 4423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/it.msg - - -rwxr-xr-x 0 0 0 5196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/nl.msg - - -rwxr-xr-x 0 0 0 5419 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/pl.msg - - -rwxr-xr-x 0 0 0 4578 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/pt.msg - - -rwxr-xr-x 0 0 0 6260 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/ru.msg - - -rwxr-xr-x 0 0 0 4471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/sv.msg - - -rwxr-xr-x 0 0 0 5920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/msgs/zh_cn.msg - - -rwxr-xr-x 0 0 0 1580 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/optMenu.tcl - - -rwxr-xr-x 0 0 0 9491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/palette.tcl - - -rwxr-xr-x 0 0 0 5162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/panedwindow.tcl - - -rwxr-xr-x 0 0 0 220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 42564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/print.tcl - - -rwxr-xr-x 0 0 0 7372 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/safetk.tcl - - -rwxr-xr-x 0 0 0 7928 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/scale.tcl - - -rwxr-xr-x 0 0 0 6496 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/scaling.tcl - - -rwxr-xr-x 0 0 0 14049 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/scrlbar.tcl - - -rwxr-xr-x 0 0 0 15637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/spinbox.tcl - - -rwxr-xr-x 0 0 0 14520 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/systray.tcl - - -rwxr-xr-x 0 0 0 20142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/tclIndex - - -rwxr-xr-x 0 0 0 4439 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/tearoff.tcl - - -rwxr-xr-x 0 0 0 36150 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/text.tcl - - -rwxr-xr-x 0 0 0 26717 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/tk.tcl - - -rwxr-xr-x 0 0 0 5543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/tkAppInit.c - - -rwxr-xr-x 0 0 0 37326 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/tkfbox.tcl - - -rwxr-xr-x 0 0 0 5338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/altTheme.tcl - - -rwxr-xr-x 0 0 0 5342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/aquaTheme.tcl - - -rwxr-xr-x 0 0 0 2916 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/button.tcl - - -rwxr-xr-x 0 0 0 6619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/clamTheme.tcl - - -rwxr-xr-x 0 0 0 4739 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/classicTheme.tcl - - -rwxr-xr-x 0 0 0 15488 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/combobox.tcl - - -rwxr-xr-x 0 0 0 4439 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/cursors.tcl - - -rwxr-xr-x 0 0 0 7477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/defaults.tcl - - -rwxr-xr-x 0 0 0 18034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/entry.tcl - - -rwxr-xr-x 0 0 0 5031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/fonts.tcl - - -rwxr-xr-x 0 0 0 6202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/menubutton.tcl - - -rwxr-xr-x 0 0 0 7242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/notebook.tcl - - -rwxr-xr-x 0 0 0 2028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/panedwindow.tcl - - -rwxr-xr-x 0 0 0 1218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/progress.tcl - - -rwxr-xr-x 0 0 0 2580 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/scale.tcl - - -rwxr-xr-x 0 0 0 2956 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/scrollbar.tcl - - -rwxr-xr-x 0 0 0 2353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/sizegrip.tcl - - -rwxr-xr-x 0 0 0 5309 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/spinbox.tcl - - -rwxr-xr-x 0 0 0 11898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/treeview.tcl - - -rwxr-xr-x 0 0 0 6444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/ttk.tcl - - -rwxr-xr-x 0 0 0 7293 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/utils.tcl - - -rwxr-xr-x 0 0 0 9358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/vistaTheme.tcl - - -rwxr-xr-x 0 0 0 3894 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/winTheme.tcl - - -rwxr-xr-x 0 0 0 3139 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/ttk/xpTheme.tcl - - -rwxr-xr-x 0 0 0 25855 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/lib/tk9.0/xmfbox.tcl - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/share/man/man1/python3.1 -> python3.12.1 - - -rwxr-xr-x 0 0 0 20124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_x86_64_unknown_linux_gnu/share/man/man1/python3.12.1 diff --git a/e2e/cases/uv-deps-650/crossbuild/snapshots/app_arm64_layers_listing.yaml b/e2e/cases/uv-deps-650/crossbuild/snapshots/app_arm64_layers_listing.yaml deleted file mode 100644 index 5f09c82d8..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/snapshots/app_arm64_layers_listing.yaml +++ /dev/null @@ -1,1943 +0,0 @@ ---- -layer: 0 -files: - - -rwxr-xr-x 0 0 0 4768 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/__init__.py - - -rwxr-xr-x 0 0 0 2922 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_ipaddress.py - - -rwxr-xr-x 0 0 0 7153 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_json.py - - -rwxr-xr-x 0 0 0 470249 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_psycopg.cpython-312-aarch64-linux-gnu.so - - -rwxr-xr-x 0 0 0 18494 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/_range.py - - -rwxr-xr-x 0 0 0 14512 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/errorcodes.py - - -rwxr-xr-x 0 0 0 1425 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/errors.py - - -rwxr-xr-x 0 0 0 6797 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/extensions.py - - -rwxr-xr-x 0 0 0 44215 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/extras.py - - -rwxr-xr-x 0 0 0 6316 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/pool.py - - -rwxr-xr-x 0 0 0 14779 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/sql.py - - -rwxr-xr-x 0 0 0 4870 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2/tz.py - - -rwxr-xr-x 0 0 0 4936 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/METADATA - - -rwxr-xr-x 0 0 0 2238 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/licenses/LICENSE - - -rwxr-xr-x 0 0 0 9 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info/top_level.txt - - -rwxr-xr-x 0 0 0 132193 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libcom_err-057ba42b.so.2.1 - - -rwxr-xr-x 0 0 0 6067905 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libcrypto-88e3da85.so.3 - - -rwxr-xr-x 0 0 0 468081 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libgssapi_krb5-fec99a71.so.2.2 - - -rwxr-xr-x 0 0 0 396073 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libk5crypto-47ac5e52.so.3.1 - - -rwxr-xr-x 0 0 0 67145 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkeyutils-19c64d08.so.1.5 - - -rwxr-xr-x 0 0 0 1133617 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkrb5-90a0ef7c.so.3.3 - - -rwxr-xr-x 0 0 0 199737 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libkrb5support-73f3f43d.so.0.1 - - -rwxr-xr-x 0 0 0 134681 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/liblber-33741b08.so.2.0.200 - - -rwxr-xr-x 0 0 0 607017 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libldap-e13ca69f.so.2.0.200 - - -rwxr-xr-x 0 0 0 329017 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libpcre-6b975b27.so.1.2.0 - - -rwxr-xr-x 0 0 0 596369 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libpq-320873a1.so.5.17 - - -rwxr-xr-x 0 0 0 201129 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libsasl2-68c9cb0a.so.3.0.0 - - -rwxr-xr-x 0 0 0 333953 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libselinux-ae24b712.so.1 - - -rwxr-xr-x 0 0 0 1204537 Jan 1 2023 ./app.runfiles/aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs/libssl-92369ee6.so.3 ---- -layer: 1 -files: - - -rwxr-xr-x 0 0 0 17808 Jan 1 2023 ./app - - -rwxr-xr-x 0 0 0 2100 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/activate - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python -> ../../../../../aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python3 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python3 -> python - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/bin/python3.12 -> python - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/_app_bin.venv.pth - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2 -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary-2.9.11.dist-info - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/lib/python3.12/site-packages/psycopg2_binary.libs -> ../../../../../../../aspect_rules_py++uv+whl_install__crossbuild__psycopg2_binary__2_9_11/actual_install.install/lib/python3.12/site-packages/psycopg2_binary.libs - - -rwxr-xr-x 0 0 0 111 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/._app_bin.venv/pyvenv.cfg - - -rwxr-xr-x 0 0 0 66 Jan 1 2023 ./app.runfiles/_main/uv-deps-650/crossbuild/__main__.py - - -rwxr-xr-x 0 0 0 * Jan 1 2023 ./app.runfiles/_repo_mapping - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/2to3 -> 2to3-3.12 - - -rwxr-xr-x 0 0 0 158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/2to3-3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/idle3 -> idle3.12 - - -rwxr-xr-x 0 0 0 156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/idle3.12 - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/pip - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/pip3 - - -rwxr-xr-x 0 0 0 234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/pip3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/pydoc3 -> pydoc3.12 - - -rwxr-xr-x 0 0 0 141 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/pydoc3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python -> python3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python3 -> python3.12 - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python3-config -> python3.12-config - - -rwxr-xr-x 0 0 0 91873488 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python3.12 - - -rwxr-xr-x 0 0 0 3084 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/bin/python3.12-config - - -rwxr-xr-x 0 0 0 2854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/Python.h - - -rwxr-xr-x 0 0 0 32616 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/abstract.h - - -rwxr-xr-x 0 0 0 264 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/bltinmodule.h - - -rwxr-xr-x 0 0 0 1136 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/boolobject.h - - -rwxr-xr-x 0 0 0 1466 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/bytearrayobject.h - - -rwxr-xr-x 0 0 0 2619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/bytesobject.h - - -rwxr-xr-x 0 0 0 6267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/ceval.h - - -rwxr-xr-x 0 0 0 7071 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/codecs.h - - -rwxr-xr-x 0 0 0 448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/compile.h - - -rwxr-xr-x 0 0 0 728 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/complexobject.h - - -rwxr-xr-x 0 0 0 7870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/abstract.h - - -rwxr-xr-x 0 0 0 1163 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/bytearrayobject.h - - -rwxr-xr-x 0 0 0 4660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/bytesobject.h - - -rwxr-xr-x 0 0 0 1076 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/cellobject.h - - -rwxr-xr-x 0 0 0 1650 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/ceval.h - - -rwxr-xr-x 0 0 0 2245 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/classobject.h - - -rwxr-xr-x 0 0 0 16188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/code.h - - -rwxr-xr-x 0 0 0 2660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/compile.h - - -rwxr-xr-x 0 0 0 1248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/complexobject.h - - -rwxr-xr-x 0 0 0 1965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/context.h - - -rwxr-xr-x 0 0 0 1642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/descrobject.h - - -rwxr-xr-x 0 0 0 4686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/dictobject.h - - -rwxr-xr-x 0 0 0 818 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/fileobject.h - - -rwxr-xr-x 0 0 0 232 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/fileutils.h - - -rwxr-xr-x 0 0 0 900 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/floatobject.h - - -rwxr-xr-x 0 0 0 1108 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/frameobject.h - - -rwxr-xr-x 0 0 0 7188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/funcobject.h - - -rwxr-xr-x 0 0 0 3316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/genobject.h - - -rwxr-xr-x 0 0 0 1623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/import.h - - -rwxr-xr-x 0 0 0 7820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/initconfig.h - - -rwxr-xr-x 0 0 0 387 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/interpreteridobject.h - - -rwxr-xr-x 0 0 0 1633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/listobject.h - - -rwxr-xr-x 0 0 0 4889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/longintrepr.h - - -rwxr-xr-x 0 0 0 4679 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/longobject.h - - -rwxr-xr-x 0 0 0 2272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/memoryobject.h - - -rwxr-xr-x 0 0 0 2276 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/methodobject.h - - -rwxr-xr-x 0 0 0 4336 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/modsupport.h - - -rwxr-xr-x 0 0 0 21212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/object.h - - -rwxr-xr-x 0 0 0 3316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/objimpl.h - - -rwxr-xr-x 0 0 0 1311 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/odictobject.h - - -rwxr-xr-x 0 0 0 848 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/picklebufobject.h - - -rwxr-xr-x 0 0 0 3505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pthread_stubs.h - - -rwxr-xr-x 0 0 0 1387 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pyctype.h - - -rwxr-xr-x 0 0 0 1413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pydebug.h - - -rwxr-xr-x 0 0 0 4276 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pyerrors.h - - -rwxr-xr-x 0 0 0 444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pyfpe.h - - -rwxr-xr-x 0 0 0 1479 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pyframe.h - - -rwxr-xr-x 0 0 0 3423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pylifecycle.h - - -rwxr-xr-x 0 0 0 3379 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pymem.h - - -rwxr-xr-x 0 0 0 17228 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pystate.h - - -rwxr-xr-x 0 0 0 4903 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pythonrun.h - - -rwxr-xr-x 0 0 0 1418 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pythread.h - - -rwxr-xr-x 0 0 0 12402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/pytime.h - - -rwxr-xr-x 0 0 0 2146 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/setobject.h - - -rwxr-xr-x 0 0 0 489 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/sysmodule.h - - -rwxr-xr-x 0 0 0 444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/traceback.h - - -rwxr-xr-x 0 0 0 1377 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/tupleobject.h - - -rwxr-xr-x 0 0 0 35296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/unicodeobject.h - - -rwxr-xr-x 0 0 0 564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/warnings.h - - -rwxr-xr-x 0 0 0 2032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/cpython/weakrefobject.h - - -rwxr-xr-x 0 0 0 9769 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/datetime.h - - -rwxr-xr-x 0 0 0 3080 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/descrobject.h - - -rwxr-xr-x 0 0 0 3860 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/dictobject.h - - -rwxr-xr-x 0 0 0 22471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/dynamic_annotations.h - - -rwxr-xr-x 0 0 0 253 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/enumobject.h - - -rwxr-xr-x 0 0 0 1779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/errcode.h - - -rwxr-xr-x 0 0 0 1267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/exports.h - - -rwxr-xr-x 0 0 0 1650 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/fileobject.h - - -rwxr-xr-x 0 0 0 507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/fileutils.h - - -rwxr-xr-x 0 0 0 1532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/floatobject.h - - -rwxr-xr-x 0 0 0 336 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/frameobject.h - - -rwxr-xr-x 0 0 0 334 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/genericaliasobject.h - - -rwxr-xr-x 0 0 0 3033 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/import.h - - -rwxr-xr-x 0 0 0 611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_abstract.h - - -rwxr-xr-x 0 0 0 3035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_asdl.h - - -rwxr-xr-x 0 0 0 31288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_ast.h - - -rwxr-xr-x 0 0 0 6749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_ast_state.h - - -rwxr-xr-x 0 0 0 1149 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_atexit.h - - -rwxr-xr-x 0 0 0 16979 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_atomic.h - - -rwxr-xr-x 0 0 0 2438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_atomic_funcs.h - - -rwxr-xr-x 0 0 0 6062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_bitutils.h - - -rwxr-xr-x 0 0 0 8688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_blocks_output_buffer.h - - -rwxr-xr-x 0 0 0 3384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_bytes_methods.h - - -rwxr-xr-x 0 0 0 1339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_bytesobject.h - - -rwxr-xr-x 0 0 0 3920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_call.h - - -rwxr-xr-x 0 0 0 5265 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_ceval.h - - -rwxr-xr-x 0 0 0 2744 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_ceval_state.h - - -rwxr-xr-x 0 0 0 15835 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_code.h - - -rwxr-xr-x 0 0 0 3453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_compile.h - - -rwxr-xr-x 0 0 0 2909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_condvar.h - - -rwxr-xr-x 0 0 0 1301 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_context.h - - -rwxr-xr-x 0 0 0 499 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_descrobject.h - - -rwxr-xr-x 0 0 0 6384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_dict.h - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_dict_state.h - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_dtoa.h - - -rwxr-xr-x 0 0 0 562 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_emscripten_signal.h - - -rwxr-xr-x 0 0 0 842 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_exceptions.h - - -rwxr-xr-x 0 0 0 2220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_faulthandler.h - - -rwxr-xr-x 0 0 0 7910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_fileutils.h - - -rwxr-xr-x 0 0 0 2724 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_fileutils_windows.h - - -rwxr-xr-x 0 0 0 1578 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_floatobject.h - - -rwxr-xr-x 0 0 0 4630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_flowgraph.h - - -rwxr-xr-x 0 0 0 480 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_format.h - - -rwxr-xr-x 0 0 0 9255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_frame.h - - -rwxr-xr-x 0 0 0 611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_function.h - - -rwxr-xr-x 0 0 0 7658 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_gc.h - - -rwxr-xr-x 0 0 0 1186 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_genobject.h - - -rwxr-xr-x 0 0 0 490 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_getopt.h - - -rwxr-xr-x 0 0 0 1565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_gil.h - - -rwxr-xr-x 0 0 0 3035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_global_objects.h - - -rwxr-xr-x 0 0 0 115361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_global_objects_fini_generated.h - - -rwxr-xr-x 0 0 0 25438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_global_strings.h - - -rwxr-xr-x 0 0 0 3742 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_hamt.h - - -rwxr-xr-x 0 0 0 4286 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_hashtable.h - - -rwxr-xr-x 0 0 0 6358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_import.h - - -rwxr-xr-x 0 0 0 5706 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_initconfig.h - - -rwxr-xr-x 0 0 0 2998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_instruments.h - - -rwxr-xr-x 0 0 0 9086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_interp.h - - -rwxr-xr-x 0 0 0 1397 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_intrinsics.h - - -rwxr-xr-x 0 0 0 1980 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_list.h - - -rwxr-xr-x 0 0 0 7805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_long.h - - -rwxr-xr-x 0 0 0 383 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_memoryobject.h - - -rwxr-xr-x 0 0 0 1192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_moduleobject.h - - -rwxr-xr-x 0 0 0 392 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_namespace.h - - -rwxr-xr-x 0 0 0 14917 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_object.h - - -rwxr-xr-x 0 0 0 1016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_object_state.h - - -rwxr-xr-x 0 0 0 27284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_obmalloc.h - - -rwxr-xr-x 0 0 0 2085 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_obmalloc_init.h - - -rwxr-xr-x 0 0 0 20081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_opcode.h - - -rwxr-xr-x 0 0 0 2686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_opcode_utils.h - - -rwxr-xr-x 0 0 0 1358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_parser.h - - -rwxr-xr-x 0 0 0 606 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pathconfig.h - - -rwxr-xr-x 0 0 0 2733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pyarena.h - - -rwxr-xr-x 0 0 0 3110 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pyerrors.h - - -rwxr-xr-x 0 0 0 709 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pyhash.h - - -rwxr-xr-x 0 0 0 3365 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pylifecycle.h - - -rwxr-xr-x 0 0 0 8600 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pymath.h - - -rwxr-xr-x 0 0 0 3040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pymem.h - - -rwxr-xr-x 0 0 0 2654 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pymem_init.h - - -rwxr-xr-x 0 0 0 4982 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pystate.h - - -rwxr-xr-x 0 0 0 2075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_pythread.h - - -rwxr-xr-x 0 0 0 346 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_range.h - - -rwxr-xr-x 0 0 0 8429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime.h - - -rwxr-xr-x 0 0 0 5912 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime_init.h - - -rwxr-xr-x 0 0 0 45751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_runtime_init_generated.h - - -rwxr-xr-x 0 0 0 2611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_signal.h - - -rwxr-xr-x 0 0 0 414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_sliceobject.h - - -rwxr-xr-x 0 0 0 937 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_strhex.h - - -rwxr-xr-x 0 0 0 923 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_structseq.h - - -rwxr-xr-x 0 0 0 7035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_symtable.h - - -rwxr-xr-x 0 0 0 999 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_sysmodule.h - - -rwxr-xr-x 0 0 0 388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_time.h - - -rwxr-xr-x 0 0 0 3050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_token.h - - -rwxr-xr-x 0 0 0 3501 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_traceback.h - - -rwxr-xr-x 0 0 0 3075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_tracemalloc.h - - -rwxr-xr-x 0 0 0 2197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_tuple.h - - -rwxr-xr-x 0 0 0 4731 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_typeobject.h - - -rwxr-xr-x 0 0 0 763 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_typevarobject.h - - -rwxr-xr-x 0 0 0 898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_ucnhash.h - - -rwxr-xr-x 0 0 0 2657 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_unicodeobject.h - - -rwxr-xr-x 0 0 0 125516 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_unicodeobject_generated.h - - -rwxr-xr-x 0 0 0 682 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_unionobject.h - - -rwxr-xr-x 0 0 0 740 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/internal/pycore_warnings.h - - -rwxr-xr-x 0 0 0 333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/interpreteridobject.h - - -rwxr-xr-x 0 0 0 772 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/intrcheck.h - - -rwxr-xr-x 0 0 0 597 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/iterobject.h - - -rwxr-xr-x 0 0 0 1782 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/listobject.h - - -rwxr-xr-x 0 0 0 3739 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/longobject.h - - -rwxr-xr-x 0 0 0 827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/marshal.h - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/memoryobject.h - - -rwxr-xr-x 0 0 0 5076 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/methodobject.h - - -rwxr-xr-x 0 0 0 6515 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/modsupport.h - - -rwxr-xr-x 0 0 0 3559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/moduleobject.h - - -rwxr-xr-x 0 0 0 37155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/object.h - - -rwxr-xr-x 0 0 0 9238 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/objimpl.h - - -rwxr-xr-x 0 0 0 12808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/opcode.h - - -rwxr-xr-x 0 0 0 737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/osdefs.h - - -rwxr-xr-x 0 0 0 291 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/osmodule.h - - -rwxr-xr-x 0 0 0 1301 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/patchlevel.h - - -rwxr-xr-x 0 0 0 2473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/py_curses.h - - -rwxr-xr-x 0 0 0 5282 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pybuffer.h - - -rwxr-xr-x 0 0 0 1727 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pycapsule.h - - -rwxr-xr-x 0 0 0 55942 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyconfig.h - - -rwxr-xr-x 0 0 0 2404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pydtrace.h - - -rwxr-xr-x 0 0 0 13017 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyerrors.h - - -rwxr-xr-x 0 0 0 2850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyexpat.h - - -rwxr-xr-x 0 0 0 551 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyframe.h - - -rwxr-xr-x 0 0 0 4154 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyhash.h - - -rwxr-xr-x 0 0 0 2249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pylifecycle.h - - -rwxr-xr-x 0 0 0 2810 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pymacconfig.h - - -rwxr-xr-x 0 0 0 6656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pymacro.h - - -rwxr-xr-x 0 0 0 1688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pymath.h - - -rwxr-xr-x 0 0 0 3914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pymem.h - - -rwxr-xr-x 0 0 0 25593 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pyport.h - - -rwxr-xr-x 0 0 0 4635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pystate.h - - -rwxr-xr-x 0 0 0 2741 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pystats.h - - -rwxr-xr-x 0 0 0 436 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pystrcmp.h - - -rwxr-xr-x 0 0 0 1557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pystrtod.h - - -rwxr-xr-x 0 0 0 1313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pythonrun.h - - -rwxr-xr-x 0 0 0 4875 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pythread.h - - -rwxr-xr-x 0 0 0 851 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/pytypedefs.h - - -rwxr-xr-x 0 0 0 630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/rangeobject.h - - -rwxr-xr-x 0 0 0 1557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/setobject.h - - -rwxr-xr-x 0 0 0 2518 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/sliceobject.h - - -rwxr-xr-x 0 0 0 1645 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/structmember.h - - -rwxr-xr-x 0 0 0 1398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/structseq.h - - -rwxr-xr-x 0 0 0 1729 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/sysmodule.h - - -rwxr-xr-x 0 0 0 585 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/traceback.h - - -rwxr-xr-x 0 0 0 2285 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/tracemalloc.h - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/tupleobject.h - - -rwxr-xr-x 0 0 0 2342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/typeslots.h - - -rwxr-xr-x 0 0 0 35164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/unicodeobject.h - - -rwxr-xr-x 0 0 0 1129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/warnings.h - - -rwxr-xr-x 0 0 0 1234 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/include/python3.12/weakrefobject.h - - -rwxr-xr-x 0 0 0 5162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/itcl.tcl - - -rwxr-xr-x 0 0 0 2886 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/itclConfig.sh - - -rwxr-xr-x 0 0 0 19378 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/itclHullCmds.tcl - - -rwxr-xr-x 0 0 0 12114 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/itclWidget.tcl - - -rwxr-xr-x 0 0 0 2540 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/libitclstub.a - - -rwxr-xr-x 0 0 0 2540 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/libitclstub4.3.5.a - - -rwxr-xr-x 0 0 0 358640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/libtcl9itcl4.3.5.so - - -rwxr-xr-x 0 0 0 436 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/itcl4.3.5/pkgIndex.tcl - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/libpython3.12.so -> libpython3.12.so.1.0 - - -rwxr-xr-x 0 0 0 91870112 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/libpython3.12.so.1.0 - - -rwxr-xr-x 0 0 0 131536 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/libpython3.so - - -rwxr-xr-x 0 0 0 2372632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/libtcl9.0.so - - -rwxr-xr-x 0 0 0 3149872 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/libtcl9tk9.0.so - - -rwxr-xr-x 0 0 0 312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/pkgconfig/python-3.12-embed.pc - - -rwxr-xr-x 0 0 0 298 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/pkgconfig/python-3.12.pc - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/pkgconfig/python3-embed.pc -> python-3.12-embed.pc - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/pkgconfig/python3.pc -> python-3.12.pc - - -rwxr-xr-x 0 0 0 13936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/LICENSE.txt - - -rwxr-xr-x 0 0 0 5218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/__future__.py - - -rwxr-xr-x 0 0 0 227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/__hello__.py - - -rwxr-xr-x 0 0 0 97 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/__phello__/__init__.py - - -rwxr-xr-x 0 0 0 97 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/__phello__/spam.py - - -rwxr-xr-x 0 0 0 4021 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_aix_support.py - - -rwxr-xr-x 0 0 0 32089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_collections_abc.py - - -rwxr-xr-x 0 0 0 8761 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_compat_pickle.py - - -rwxr-xr-x 0 0 0 5681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_compression.py - - -rwxr-xr-x 0 0 0 14653 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_markupbase.py - - -rwxr-xr-x 0 0 0 22023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_osx_support.py - - -rwxr-xr-x 0 0 0 6189 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_py_abc.py - - -rwxr-xr-x 0 0 0 92087 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_pydatetime.py - - -rwxr-xr-x 0 0 0 227283 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_pydecimal.py - - -rwxr-xr-x 0 0 0 93593 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_pyio.py - - -rwxr-xr-x 0 0 0 10790 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_pylong.py - - -rwxr-xr-x 0 0 0 3128 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_sitebuiltins.py - - -rwxr-xr-x 0 0 0 28393 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_strptime.py - - -rwxr-xr-x 0 0 0 43589 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_sysconfigdata__linux_aarch64-linux-gnu.py - - -rwxr-xr-x 0 0 0 7220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_threading_local.py - - -rwxr-xr-x 0 0 0 5893 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/_weakrefset.py - - -rwxr-xr-x 0 0 0 6538 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/abc.py - - -rwxr-xr-x 0 0 0 34211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/aifc.py - - -rwxr-xr-x 0 0 0 500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/antigravity.py - - -rwxr-xr-x 0 0 0 101155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/argparse.py - - -rwxr-xr-x 0 0 0 64452 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ast.py - - -rwxr-xr-x 0 0 0 1220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/__init__.py - - -rwxr-xr-x 0 0 0 3491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/__main__.py - - -rwxr-xr-x 0 0 0 78567 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/base_events.py - - -rwxr-xr-x 0 0 0 1974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/base_futures.py - - -rwxr-xr-x 0 0 0 8869 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/base_subprocess.py - - -rwxr-xr-x 0 0 0 2672 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/base_tasks.py - - -rwxr-xr-x 0 0 0 1413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/constants.py - - -rwxr-xr-x 0 0 0 3342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/coroutines.py - - -rwxr-xr-x 0 0 0 29339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/events.py - - -rwxr-xr-x 0 0 0 1752 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/exceptions.py - - -rwxr-xr-x 0 0 0 2404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/format_helpers.py - - -rwxr-xr-x 0 0 0 14340 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/futures.py - - -rwxr-xr-x 0 0 0 18995 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/locks.py - - -rwxr-xr-x 0 0 0 124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/log.py - - -rwxr-xr-x 0 0 0 481 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/mixins.py - - -rwxr-xr-x 0 0 0 33500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/proactor_events.py - - -rwxr-xr-x 0 0 0 6957 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/protocols.py - - -rwxr-xr-x 0 0 0 7974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/queues.py - - -rwxr-xr-x 0 0 0 7230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/runners.py - - -rwxr-xr-x 0 0 0 48332 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/selector_events.py - - -rwxr-xr-x 0 0 0 31899 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/sslproto.py - - -rwxr-xr-x 0 0 0 7077 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/staggered.py - - -rwxr-xr-x 0 0 0 27619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/streams.py - - -rwxr-xr-x 0 0 0 7737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/subprocess.py - - -rwxr-xr-x 0 0 0 9559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/taskgroups.py - - -rwxr-xr-x 0 0 0 37362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/tasks.py - - -rwxr-xr-x 0 0 0 790 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/threads.py - - -rwxr-xr-x 0 0 0 5321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/timeouts.py - - -rwxr-xr-x 0 0 0 10722 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/transports.py - - -rwxr-xr-x 0 0 0 2475 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/trsock.py - - -rwxr-xr-x 0 0 0 53124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/unix_events.py - - -rwxr-xr-x 0 0 0 32587 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/windows_events.py - - -rwxr-xr-x 0 0 0 5060 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/asyncio/windows_utils.py - - -rwxr-xr-x 0 0 0 20635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/base64.py - - -rwxr-xr-x 0 0 0 33573 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/bdb.py - - -rwxr-xr-x 0 0 0 3423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/bisect.py - - -rwxr-xr-x 0 0 0 11847 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/bz2.py - - -rwxr-xr-x 0 0 0 6556 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/cProfile.py - - -rwxr-xr-x 0 0 0 25864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/calendar.py - - -rwxr-xr-x 0 0 0 34479 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/cgi.py - - -rwxr-xr-x 0 0 0 12421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/cgitb.py - - -rwxr-xr-x 0 0 0 5500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/chunk.py - - -rwxr-xr-x 0 0 0 14873 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/cmd.py - - -rwxr-xr-x 0 0 0 10962 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/code.py - - -rwxr-xr-x 0 0 0 36870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/codecs.py - - -rwxr-xr-x 0 0 0 5908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/codeop.py - - -rwxr-xr-x 0 0 0 52378 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/collections/__init__.py - - -rwxr-xr-x 0 0 0 119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/collections/abc.py - - -rwxr-xr-x 0 0 0 4062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/colorsys.py - - -rwxr-xr-x 0 0 0 20507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/compileall.py - - -rwxr-xr-x 0 0 0 38 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/concurrent/__init__.py - - -rwxr-xr-x 0 0 0 1583 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/concurrent/futures/__init__.py - - -rwxr-xr-x 0 0 0 22833 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/concurrent/futures/_base.py - - -rwxr-xr-x 0 0 0 35854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/concurrent/futures/process.py - - -rwxr-xr-x 0 0 0 8946 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/concurrent/futures/thread.py - - -rwxr-xr-x 0 0 0 167414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/Makefile - - -rwxr-xr-x 0 0 0 11525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/Setup - - -rwxr-xr-x 0 0 0 902 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/Setup.bootstrap - - -rwxr-xr-x 0 0 0 3335 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/Setup.local - - -rwxr-xr-x 0 0 0 6396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/Setup.stdlib - - -rwxr-xr-x 0 0 0 8716 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/config.c - - -rwxr-xr-x 0 0 0 1752 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/config.c.in - - -rwxr-xr-x 0 0 0 15358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/install-sh - - -rwxr-xr-x 0 0 0 9312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/makesetup - - -rwxr-xr-x 0 0 0 2100 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/python-config.py - - -rwxr-xr-x 0 0 0 4132 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/config-3.12-aarch64-linux-gnu/python.o - - -rwxr-xr-x 0 0 0 53789 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/configparser.py - - -rwxr-xr-x 0 0 0 27637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/contextlib.py - - -rwxr-xr-x 0 0 0 129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/contextvars.py - - -rwxr-xr-x 0 0 0 8412 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/copy.py - - -rwxr-xr-x 0 0 0 7614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/copyreg.py - - -rwxr-xr-x 0 0 0 3913 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/crypt.py - - -rwxr-xr-x 0 0 0 16386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/csv.py - - -rwxr-xr-x 0 0 0 18268 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/__init__.py - - -rwxr-xr-x 0 0 0 12505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/_aix.py - - -rwxr-xr-x 0 0 0 2535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/_endian.py - - -rwxr-xr-x 0 0 0 296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/README.ctypes - - -rwxr-xr-x 0 0 0 154 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/__init__.py - - -rwxr-xr-x 0 0 0 5024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/dyld.py - - -rwxr-xr-x 0 0 0 960 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/dylib.py - - -rwxr-xr-x 0 0 0 84 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/fetch_macholib - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/fetch_macholib.bat - - -rwxr-xr-x 0 0 0 1105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/macholib/framework.py - - -rwxr-xr-x 0 0 0 13959 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/util.py - - -rwxr-xr-x 0 0 0 5629 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ctypes/wintypes.py - - -rwxr-xr-x 0 0 0 3369 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/curses/__init__.py - - -rwxr-xr-x 0 0 0 2543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/curses/ascii.py - - -rwxr-xr-x 0 0 0 5634 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/curses/has_key.py - - -rwxr-xr-x 0 0 0 87 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/curses/panel.py - - -rwxr-xr-x 0 0 0 7754 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/curses/textpad.py - - -rwxr-xr-x 0 0 0 62085 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dataclasses.py - - -rwxr-xr-x 0 0 0 268 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/datetime.py - - -rwxr-xr-x 0 0 0 5882 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dbm/__init__.py - - -rwxr-xr-x 0 0 0 11594 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dbm/dumb.py - - -rwxr-xr-x 0 0 0 72 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dbm/gnu.py - - -rwxr-xr-x 0 0 0 70 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dbm/ndbm.py - - -rwxr-xr-x 0 0 0 2805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/decimal.py - - -rwxr-xr-x 0 0 0 83368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/difflib.py - - -rwxr-xr-x 0 0 0 30227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/dis.py - - -rwxr-xr-x 0 0 0 106749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/doctest.py - - -rwxr-xr-x 0 0 0 1764 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/__init__.py - - -rwxr-xr-x 0 0 0 8541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/_encoded_words.py - - -rwxr-xr-x 0 0 0 111685 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/_header_value_parser.py - - -rwxr-xr-x 0 0 0 17821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/_parseaddr.py - - -rwxr-xr-x 0 0 0 15535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/_policybase.py - - -rwxr-xr-x 0 0 0 9561 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/architecture.rst - - -rwxr-xr-x 0 0 0 3551 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/base64mime.py - - -rwxr-xr-x 0 0 0 17063 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/charset.py - - -rwxr-xr-x 0 0 0 10588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/contentmanager.py - - -rwxr-xr-x 0 0 0 1778 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/encoders.py - - -rwxr-xr-x 0 0 0 3814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/errors.py - - -rwxr-xr-x 0 0 0 22796 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/feedparser.py - - -rwxr-xr-x 0 0 0 21403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/generator.py - - -rwxr-xr-x 0 0 0 24092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/header.py - - -rwxr-xr-x 0 0 0 20819 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/headerregistry.py - - -rwxr-xr-x 0 0 0 2129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/iterators.py - - -rwxr-xr-x 0 0 0 48396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/message.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/__init__.py - - -rwxr-xr-x 0 0 0 1321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/application.py - - -rwxr-xr-x 0 0 0 3094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/audio.py - - -rwxr-xr-x 0 0 0 914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/base.py - - -rwxr-xr-x 0 0 0 3726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/image.py - - -rwxr-xr-x 0 0 0 1315 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/message.py - - -rwxr-xr-x 0 0 0 1619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/multipart.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/nonmultipart.py - - -rwxr-xr-x 0 0 0 1394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/mime/text.py - - -rwxr-xr-x 0 0 0 4975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/parser.py - - -rwxr-xr-x 0 0 0 10614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/policy.py - - -rwxr-xr-x 0 0 0 9864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/quoprimime.py - - -rwxr-xr-x 0 0 0 16071 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/email/utils.py - - -rwxr-xr-x 0 0 0 5884 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/__init__.py - - -rwxr-xr-x 0 0 0 15677 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/aliases.py - - -rwxr-xr-x 0 0 0 1248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/ascii.py - - -rwxr-xr-x 0 0 0 1533 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/base64_codec.py - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/big5.py - - -rwxr-xr-x 0 0 0 1039 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/big5hkscs.py - - -rwxr-xr-x 0 0 0 2249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/bz2_codec.py - - -rwxr-xr-x 0 0 0 2084 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/charmap.py - - -rwxr-xr-x 0 0 0 13121 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp037.py - - -rwxr-xr-x 0 0 0 13568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1006.py - - -rwxr-xr-x 0 0 0 13113 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1026.py - - -rwxr-xr-x 0 0 0 34597 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1125.py - - -rwxr-xr-x 0 0 0 13105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1140.py - - -rwxr-xr-x 0 0 0 13686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1250.py - - -rwxr-xr-x 0 0 0 13361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1251.py - - -rwxr-xr-x 0 0 0 13511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1252.py - - -rwxr-xr-x 0 0 0 13094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1253.py - - -rwxr-xr-x 0 0 0 13502 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1254.py - - -rwxr-xr-x 0 0 0 12466 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1255.py - - -rwxr-xr-x 0 0 0 12814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1256.py - - -rwxr-xr-x 0 0 0 13374 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1257.py - - -rwxr-xr-x 0 0 0 13364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp1258.py - - -rwxr-xr-x 0 0 0 14132 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp273.py - - -rwxr-xr-x 0 0 0 12055 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp424.py - - -rwxr-xr-x 0 0 0 34564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp437.py - - -rwxr-xr-x 0 0 0 13121 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp500.py - - -rwxr-xr-x 0 0 0 13686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp720.py - - -rwxr-xr-x 0 0 0 34681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp737.py - - -rwxr-xr-x 0 0 0 34476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp775.py - - -rwxr-xr-x 0 0 0 34105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp850.py - - -rwxr-xr-x 0 0 0 35002 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp852.py - - -rwxr-xr-x 0 0 0 33850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp855.py - - -rwxr-xr-x 0 0 0 12423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp856.py - - -rwxr-xr-x 0 0 0 33908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp857.py - - -rwxr-xr-x 0 0 0 34015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp858.py - - -rwxr-xr-x 0 0 0 34681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp860.py - - -rwxr-xr-x 0 0 0 34633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp861.py - - -rwxr-xr-x 0 0 0 33370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp862.py - - -rwxr-xr-x 0 0 0 34252 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp863.py - - -rwxr-xr-x 0 0 0 33663 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp864.py - - -rwxr-xr-x 0 0 0 34618 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp865.py - - -rwxr-xr-x 0 0 0 34396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp866.py - - -rwxr-xr-x 0 0 0 32965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp869.py - - -rwxr-xr-x 0 0 0 12595 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp874.py - - -rwxr-xr-x 0 0 0 12854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp875.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp932.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp949.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/cp950.py - - -rwxr-xr-x 0 0 0 1051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/euc_jis_2004.py - - -rwxr-xr-x 0 0 0 1051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/euc_jisx0213.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/euc_jp.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/euc_kr.py - - -rwxr-xr-x 0 0 0 1031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/gb18030.py - - -rwxr-xr-x 0 0 0 1027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/gb2312.py - - -rwxr-xr-x 0 0 0 1015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/gbk.py - - -rwxr-xr-x 0 0 0 1508 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/hex_codec.py - - -rwxr-xr-x 0 0 0 13475 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/hp_roman8.py - - -rwxr-xr-x 0 0 0 1011 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/hz.py - - -rwxr-xr-x 0 0 0 9710 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/idna.py - - -rwxr-xr-x 0 0 0 1053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_1.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_2.py - - -rwxr-xr-x 0 0 0 1073 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_2004.py - - -rwxr-xr-x 0 0 0 1061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_3.py - - -rwxr-xr-x 0 0 0 1069 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_jp_ext.py - - -rwxr-xr-x 0 0 0 1053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso2022_kr.py - - -rwxr-xr-x 0 0 0 13176 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_1.py - - -rwxr-xr-x 0 0 0 13589 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_10.py - - -rwxr-xr-x 0 0 0 12335 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_11.py - - -rwxr-xr-x 0 0 0 13271 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_13.py - - -rwxr-xr-x 0 0 0 13652 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_14.py - - -rwxr-xr-x 0 0 0 13212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_15.py - - -rwxr-xr-x 0 0 0 13557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_16.py - - -rwxr-xr-x 0 0 0 13404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_2.py - - -rwxr-xr-x 0 0 0 13089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_3.py - - -rwxr-xr-x 0 0 0 13376 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_4.py - - -rwxr-xr-x 0 0 0 13015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_5.py - - -rwxr-xr-x 0 0 0 10833 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_6.py - - -rwxr-xr-x 0 0 0 12844 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_7.py - - -rwxr-xr-x 0 0 0 11036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_8.py - - -rwxr-xr-x 0 0 0 13156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/iso8859_9.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/johab.py - - -rwxr-xr-x 0 0 0 13779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/koi8_r.py - - -rwxr-xr-x 0 0 0 13193 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/koi8_t.py - - -rwxr-xr-x 0 0 0 13762 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/koi8_u.py - - -rwxr-xr-x 0 0 0 13723 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/kz1048.py - - -rwxr-xr-x 0 0 0 1264 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/latin_1.py - - -rwxr-xr-x 0 0 0 36467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_arabic.py - - -rwxr-xr-x 0 0 0 13633 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_croatian.py - - -rwxr-xr-x 0 0 0 13454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_cyrillic.py - - -rwxr-xr-x 0 0 0 15170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_farsi.py - - -rwxr-xr-x 0 0 0 13721 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_greek.py - - -rwxr-xr-x 0 0 0 13498 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_iceland.py - - -rwxr-xr-x 0 0 0 14118 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_latin2.py - - -rwxr-xr-x 0 0 0 13480 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_roman.py - - -rwxr-xr-x 0 0 0 13661 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_romanian.py - - -rwxr-xr-x 0 0 0 13513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mac_turkish.py - - -rwxr-xr-x 0 0 0 1211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/mbcs.py - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/oem.py - - -rwxr-xr-x 0 0 0 13519 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/palmos.py - - -rwxr-xr-x 0 0 0 14015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/ptcp154.py - - -rwxr-xr-x 0 0 0 6883 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/punycode.py - - -rwxr-xr-x 0 0 0 1525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/quopri_codec.py - - -rwxr-xr-x 0 0 0 1332 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/raw_unicode_escape.py - - -rwxr-xr-x 0 0 0 2448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/rot_13.py - - -rwxr-xr-x 0 0 0 1039 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/shift_jis.py - - -rwxr-xr-x 0 0 0 1059 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/shift_jis_2004.py - - -rwxr-xr-x 0 0 0 1059 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/shift_jisx0213.py - - -rwxr-xr-x 0 0 0 12300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/tis_620.py - - -rwxr-xr-x 0 0 0 1299 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/undefined.py - - -rwxr-xr-x 0 0 0 1304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/unicode_escape.py - - -rwxr-xr-x 0 0 0 5236 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_16.py - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_16_be.py - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_16_le.py - - -rwxr-xr-x 0 0 0 5129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_32.py - - -rwxr-xr-x 0 0 0 930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_32_be.py - - -rwxr-xr-x 0 0 0 930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_32_le.py - - -rwxr-xr-x 0 0 0 946 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_7.py - - -rwxr-xr-x 0 0 0 1005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_8.py - - -rwxr-xr-x 0 0 0 4133 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/utf_8_sig.py - - -rwxr-xr-x 0 0 0 2851 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/uu_codec.py - - -rwxr-xr-x 0 0 0 2204 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/encodings/zlib_codec.py - - -rwxr-xr-x 0 0 0 9445 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ensurepip/__init__.py - - -rwxr-xr-x 0 0 0 88 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ensurepip/__main__.py - - -rwxr-xr-x 0 0 0 1841526 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ensurepip/_bundled/pip-25.0.1-py3-none-any.whl - - -rwxr-xr-x 0 0 0 808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ensurepip/_uninstall.py - - -rwxr-xr-x 0 0 0 81540 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/enum.py - - -rwxr-xr-x 0 0 0 10381 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/filecmp.py - - -rwxr-xr-x 0 0 0 15714 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/fileinput.py - - -rwxr-xr-x 0 0 0 5999 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/fnmatch.py - - -rwxr-xr-x 0 0 0 38147 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/fractions.py - - -rwxr-xr-x 0 0 0 34735 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ftplib.py - - -rwxr-xr-x 0 0 0 37940 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/functools.py - - -rwxr-xr-x 0 0 0 5572 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/genericpath.py - - -rwxr-xr-x 0 0 0 7488 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/getopt.py - - -rwxr-xr-x 0 0 0 5990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/getpass.py - - -rwxr-xr-x 0 0 0 21320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/gettext.py - - -rwxr-xr-x 0 0 0 8732 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/glob.py - - -rwxr-xr-x 0 0 0 9648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/graphlib.py - - -rwxr-xr-x 0 0 0 25402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/gzip.py - - -rwxr-xr-x 0 0 0 9349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/hashlib.py - - -rwxr-xr-x 0 0 0 23024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/heapq.py - - -rwxr-xr-x 0 0 0 7716 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/hmac.py - - -rwxr-xr-x 0 0 0 4775 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/html/__init__.py - - -rwxr-xr-x 0 0 0 75512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/html/entities.py - - -rwxr-xr-x 0 0 0 20858 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/html/parser.py - - -rwxr-xr-x 0 0 0 8308 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/http/__init__.py - - -rwxr-xr-x 0 0 0 58041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/http/client.py - - -rwxr-xr-x 0 0 0 77438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/http/cookiejar.py - - -rwxr-xr-x 0 0 0 20854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/http/cookies.py - - -rwxr-xr-x 0 0 0 49202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/http/server.py - - -rwxr-xr-x 0 0 0 2148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/CREDITS.txt - - -rwxr-xr-x 0 0 0 56360 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/ChangeLog - - -rwxr-xr-x 0 0 0 10313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/HISTORY.txt - - -rwxr-xr-x 0 0 0 1935 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/README.txt - - -rwxr-xr-x 0 0 0 120 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/folder.gif - - -rwxr-xr-x 0 0 0 57746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle.ico - - -rwxr-xr-x 0 0 0 634 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_16.gif - - -rwxr-xr-x 0 0 0 1031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_16.png - - -rwxr-xr-x 0 0 0 39205 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_256.png - - -rwxr-xr-x 0 0 0 1019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_32.gif - - -rwxr-xr-x 0 0 0 2036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_32.png - - -rwxr-xr-x 0 0 0 1388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_48.gif - - -rwxr-xr-x 0 0 0 3977 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/idle_48.png - - -rwxr-xr-x 0 0 0 75 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/minusnode.gif - - -rwxr-xr-x 0 0 0 125 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/openfolder.gif - - -rwxr-xr-x 0 0 0 78 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/plusnode.gif - - -rwxr-xr-x 0 0 0 380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/python.gif - - -rwxr-xr-x 0 0 0 72 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/Icons/tk.gif - - -rwxr-xr-x 0 0 0 27172 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/NEWS2x.txt - - -rwxr-xr-x 0 0 0 56500 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/News3.txt - - -rwxr-xr-x 0 0 0 11653 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/README.txt - - -rwxr-xr-x 0 0 0 8477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/TODO.txt - - -rwxr-xr-x 0 0 0 396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/__init__.py - - -rwxr-xr-x 0 0 0 107 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/__main__.py - - -rwxr-xr-x 0 0 0 9354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/autocomplete.py - - -rwxr-xr-x 0 0 0 20863 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/autocomplete_w.py - - -rwxr-xr-x 0 0 0 3216 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/autoexpand.py - - -rwxr-xr-x 0 0 0 8588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/browser.py - - -rwxr-xr-x 0 0 0 7267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/calltip.py - - -rwxr-xr-x 0 0 0 7083 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/calltip_w.py - - -rwxr-xr-x 0 0 0 11420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/codecontext.py - - -rwxr-xr-x 0 0 0 14783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/colorizer.py - - -rwxr-xr-x 0 0 0 2266 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config-extensions.def - - -rwxr-xr-x 0 0 0 2864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config-highlight.def - - -rwxr-xr-x 0 0 0 10910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config-keys.def - - -rwxr-xr-x 0 0 0 3168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config-main.def - - -rwxr-xr-x 0 0 0 38403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config.py - - -rwxr-xr-x 0 0 0 15230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/config_key.py - - -rwxr-xr-x 0 0 0 105310 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/configdialog.py - - -rwxr-xr-x 0 0 0 20991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/debugger.py - - -rwxr-xr-x 0 0 0 12115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/debugger_r.py - - -rwxr-xr-x 0 0 0 4177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/debugobj.py - - -rwxr-xr-x 0 0 0 1082 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/debugobj_r.py - - -rwxr-xr-x 0 0 0 1044 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/delegator.py - - -rwxr-xr-x 0 0 0 1993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/dynoption.py - - -rwxr-xr-x 0 0 0 69561 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/editor.py - - -rwxr-xr-x 0 0 0 3632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/extend.txt - - -rwxr-xr-x 0 0 0 3871 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/filelist.py - - -rwxr-xr-x 0 0 0 15777 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/format.py - - -rwxr-xr-x 0 0 0 7521 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/grep.py - - -rwxr-xr-x 0 0 0 60566 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/help.html - - -rwxr-xr-x 0 0 0 11843 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/help.py - - -rwxr-xr-x 0 0 0 9023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/help_about.py - - -rwxr-xr-x 0 0 0 4065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/history.py - - -rwxr-xr-x 0 0 0 12889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/hyperparser.py - - -rwxr-xr-x 0 0 0 177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/idle.bat - - -rwxr-xr-x 0 0 0 454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/idle.py - - -rwxr-xr-x 0 0 0 570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/idle.pyw - - -rwxr-xr-x 0 0 0 16159 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/iomenu.py - - -rwxr-xr-x 0 0 0 9290 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/macosx.py - - -rwxr-xr-x 0 0 0 3938 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/mainmenu.py - - -rwxr-xr-x 0 0 0 18652 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/multicall.py - - -rwxr-xr-x 0 0 0 5705 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/outwin.py - - -rwxr-xr-x 0 0 0 7204 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/parenmatch.py - - -rwxr-xr-x 0 0 0 3093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/pathbrowser.py - - -rwxr-xr-x 0 0 0 3568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/percolator.py - - -rwxr-xr-x 0 0 0 19864 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/pyparse.py - - -rwxr-xr-x 0 0 0 62194 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/pyshell.py - - -rwxr-xr-x 0 0 0 15067 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/query.py - - -rwxr-xr-x 0 0 0 6777 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/redirector.py - - -rwxr-xr-x 0 0 0 9841 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/replace.py - - -rwxr-xr-x 0 0 0 21078 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/rpc.py - - -rwxr-xr-x 0 0 0 21654 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/run.py - - -rwxr-xr-x 0 0 0 8273 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/runscript.py - - -rwxr-xr-x 0 0 0 4478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/scrolledlist.py - - -rwxr-xr-x 0 0 0 5567 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/search.py - - -rwxr-xr-x 0 0 0 7852 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/searchbase.py - - -rwxr-xr-x 0 0 0 7415 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/searchengine.py - - -rwxr-xr-x 0 0 0 20338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/sidebar.py - - -rwxr-xr-x 0 0 0 12834 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/squeezer.py - - -rwxr-xr-x 0 0 0 4016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/stackviewer.py - - -rwxr-xr-x 0 0 0 1474 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/statusbar.py - - -rwxr-xr-x 0 0 0 6808 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/textview.py - - -rwxr-xr-x 0 0 0 6665 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/tooltip.py - - -rwxr-xr-x 0 0 0 16773 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/tree.py - - -rwxr-xr-x 0 0 0 11016 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/undo.py - - -rwxr-xr-x 0 0 0 1312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/util.py - - -rwxr-xr-x 0 0 0 2616 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/window.py - - -rwxr-xr-x 0 0 0 4203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/zoomheight.py - - -rwxr-xr-x 0 0 0 2005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/idlelib/zzdummy.py - - -rwxr-xr-x 0 0 0 54040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/imaplib.py - - -rwxr-xr-x 0 0 0 4398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/imghdr.py - - -rwxr-xr-x 0 0 0 4784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/__init__.py - - -rwxr-xr-x 0 0 0 1354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/_abc.py - - -rwxr-xr-x 0 0 0 57057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/_bootstrap.py - - -rwxr-xr-x 0 0 0 69406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/_bootstrap_external.py - - -rwxr-xr-x 0 0 0 7612 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/abc.py - - -rwxr-xr-x 0 0 0 880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/machinery.py - - -rwxr-xr-x 0 0 0 28757 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/__init__.py - - -rwxr-xr-x 0 0 0 2406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_adapters.py - - -rwxr-xr-x 0 0 0 743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_collections.py - - -rwxr-xr-x 0 0 0 2895 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_functools.py - - -rwxr-xr-x 0 0 0 2068 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_itertools.py - - -rwxr-xr-x 0 0 0 1590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_meta.py - - -rwxr-xr-x 0 0 0 2166 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/metadata/_text.py - - -rwxr-xr-x 0 0 0 327 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/readers.py - - -rwxr-xr-x 0 0 0 532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/__init__.py - - -rwxr-xr-x 0 0 0 4482 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/_adapters.py - - -rwxr-xr-x 0 0 0 5486 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/_common.py - - -rwxr-xr-x 0 0 0 1277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/_itertools.py - - -rwxr-xr-x 0 0 0 2949 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/_legacy.py - - -rwxr-xr-x 0 0 0 5203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/abc.py - - -rwxr-xr-x 0 0 0 4370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/readers.py - - -rwxr-xr-x 0 0 0 2584 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/resources/simple.py - - -rwxr-xr-x 0 0 0 354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/simple.py - - -rwxr-xr-x 0 0 0 10994 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/importlib/util.py - - -rwxr-xr-x 0 0 0 127125 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/inspect.py - - -rwxr-xr-x 0 0 0 3582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/io.py - - -rwxr-xr-x 0 0 0 81414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ipaddress.py - - -rwxr-xr-x 0 0 0 14020 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/json/__init__.py - - -rwxr-xr-x 0 0 0 12525 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/json/decoder.py - - -rwxr-xr-x 0 0 0 16075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/json/encoder.py - - -rwxr-xr-x 0 0 0 2434 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/json/scanner.py - - -rwxr-xr-x 0 0 0 3339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/json/tool.py - - -rwxr-xr-x 0 0 0 1073 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/keyword.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib-dynload/.empty - - -rwxr-xr-x 0 0 0 80840 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib-dynload/_crypt.cpython-312-aarch64-linux-gnu.so - - -rwxr-xr-x 0 0 0 191408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib-dynload/_ctypes_test.cpython-312-aarch64-linux-gnu.so - - -rwxr-xr-x 0 0 0 1726872 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib-dynload/_dbm.cpython-312-aarch64-linux-gnu.so - - -rwxr-xr-x 0 0 0 327896 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib-dynload/_tkinter.cpython-312-aarch64-linux-gnu.so - - -rwxr-xr-x 0 0 0 8696 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/Grammar.txt - - -rwxr-xr-x 0 0 0 15313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/Grammar3.12.13.final.0.pickle - - -rwxr-xr-x 0 0 0 793 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/PatternGrammar.txt - - -rwxr-xr-x 0 0 0 1225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/PatternGrammar3.12.13.final.0.pickle - - -rwxr-xr-x 0 0 0 156 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/__init__.py - - -rwxr-xr-x 0 0 0 67 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/__main__.py - - -rwxr-xr-x 0 0 0 6623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/btm_matcher.py - - -rwxr-xr-x 0 0 0 9945 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/btm_utils.py - - -rwxr-xr-x 0 0 0 6690 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixer_base.py - - -rwxr-xr-x 0 0 0 15206 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixer_util.py - - -rwxr-xr-x 0 0 0 47 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/__init__.py - - -rwxr-xr-x 0 0 0 2346 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_apply.py - - -rwxr-xr-x 0 0 0 984 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_asserts.py - - -rwxr-xr-x 0 0 0 320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_basestring.py - - -rwxr-xr-x 0 0 0 590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_buffer.py - - -rwxr-xr-x 0 0 0 3760 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_dict.py - - -rwxr-xr-x 0 0 0 3344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_except.py - - -rwxr-xr-x 0 0 0 979 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_exec.py - - -rwxr-xr-x 0 0 0 2048 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_execfile.py - - -rwxr-xr-x 0 0 0 2495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_exitfunc.py - - -rwxr-xr-x 0 0 0 2765 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_filter.py - - -rwxr-xr-x 0 0 0 644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_funcattrs.py - - -rwxr-xr-x 0 0 0 547 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_future.py - - -rwxr-xr-x 0 0 0 451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_getcwdu.py - - -rwxr-xr-x 0 0 0 3196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_has_key.py - - -rwxr-xr-x 0 0 0 4876 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_idioms.py - - -rwxr-xr-x 0 0 0 3256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_import.py - - -rwxr-xr-x 0 0 0 5684 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_imports.py - - -rwxr-xr-x 0 0 0 289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_imports2.py - - -rwxr-xr-x 0 0 0 708 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_input.py - - -rwxr-xr-x 0 0 0 1144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_intern.py - - -rwxr-xr-x 0 0 0 1608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_isinstance.py - - -rwxr-xr-x 0 0 0 1548 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_itertools.py - - -rwxr-xr-x 0 0 0 2086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_itertools_imports.py - - -rwxr-xr-x 0 0 0 476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_long.py - - -rwxr-xr-x 0 0 0 3640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_map.py - - -rwxr-xr-x 0 0 0 8197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_metaclass.py - - -rwxr-xr-x 0 0 0 606 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_methodattrs.py - - -rwxr-xr-x 0 0 0 571 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_ne.py - - -rwxr-xr-x 0 0 0 3174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_next.py - - -rwxr-xr-x 0 0 0 591 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_nonzero.py - - -rwxr-xr-x 0 0 0 768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_numliterals.py - - -rwxr-xr-x 0 0 0 3426 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_operator.py - - -rwxr-xr-x 0 0 0 1226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_paren.py - - -rwxr-xr-x 0 0 0 2844 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_print.py - - -rwxr-xr-x 0 0 0 2926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_raise.py - - -rwxr-xr-x 0 0 0 454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_raw_input.py - - -rwxr-xr-x 0 0 0 837 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_reduce.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_reload.py - - -rwxr-xr-x 0 0 0 2221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_renames.py - - -rwxr-xr-x 0 0 0 613 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_repr.py - - -rwxr-xr-x 0 0 0 1697 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_set_literal.py - - -rwxr-xr-x 0 0 0 449 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_standarderror.py - - -rwxr-xr-x 0 0 0 1034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_sys_exc.py - - -rwxr-xr-x 0 0 0 1582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_throw.py - - -rwxr-xr-x 0 0 0 5565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_tuple_params.py - - -rwxr-xr-x 0 0 0 1774 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_types.py - - -rwxr-xr-x 0 0 0 1256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_unicode.py - - -rwxr-xr-x 0 0 0 8367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_urllib.py - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_ws_comma.py - - -rwxr-xr-x 0 0 0 2694 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_xrange.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_xreadlines.py - - -rwxr-xr-x 0 0 0 1289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/fixes/fix_zip.py - - -rwxr-xr-x 0 0 0 11854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/main.py - - -rwxr-xr-x 0 0 0 7054 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/patcomp.py - - -rwxr-xr-x 0 0 0 143 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/__init__.py - - -rwxr-xr-x 0 0 0 9642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/conv.py - - -rwxr-xr-x 0 0 0 5969 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/driver.py - - -rwxr-xr-x 0 0 0 5552 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/grammar.py - - -rwxr-xr-x 0 0 0 1635 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/literals.py - - -rwxr-xr-x 0 0 0 8155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/parse.py - - -rwxr-xr-x 0 0 0 13830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/pgen.py - - -rwxr-xr-x 0 0 0 1302 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/token.py - - -rwxr-xr-x 0 0 0 21119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pgen2/tokenize.py - - -rwxr-xr-x 0 0 0 1305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pygram.py - - -rwxr-xr-x 0 0 0 27974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/pytree.py - - -rwxr-xr-x 0 0 0 27507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lib2to3/refactor.py - - -rwxr-xr-x 0 0 0 5800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/linecache.py - - -rwxr-xr-x 0 0 0 78599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/locale.py - - -rwxr-xr-x 0 0 0 83437 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/logging/__init__.py - - -rwxr-xr-x 0 0 0 42798 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/logging/config.py - - -rwxr-xr-x 0 0 0 62596 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/logging/handlers.py - - -rwxr-xr-x 0 0 0 13277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/lzma.py - - -rwxr-xr-x 0 0 0 78911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/mailbox.py - - -rwxr-xr-x 0 0 0 9333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/mailcap.py - - -rwxr-xr-x 0 0 0 23037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/mimetypes.py - - -rwxr-xr-x 0 0 0 23699 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/modulefinder.py - - -rwxr-xr-x 0 0 0 916 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/__init__.py - - -rwxr-xr-x 0 0 0 41398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/connection.py - - -rwxr-xr-x 0 0 0 11673 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/context.py - - -rwxr-xr-x 0 0 0 3061 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/dummy/__init__.py - - -rwxr-xr-x 0 0 0 1598 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/dummy/connection.py - - -rwxr-xr-x 0 0 0 12202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/forkserver.py - - -rwxr-xr-x 0 0 0 11626 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/heap.py - - -rwxr-xr-x 0 0 0 47893 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/managers.py - - -rwxr-xr-x 0 0 0 32760 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/pool.py - - -rwxr-xr-x 0 0 0 2377 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_fork.py - - -rwxr-xr-x 0 0 0 2230 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_forkserver.py - - -rwxr-xr-x 0 0 0 2029 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_spawn_posix.py - - -rwxr-xr-x 0 0 0 4515 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/popen_spawn_win32.py - - -rwxr-xr-x 0 0 0 12139 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/process.py - - -rwxr-xr-x 0 0 0 12693 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/queues.py - - -rwxr-xr-x 0 0 0 9512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/reduction.py - - -rwxr-xr-x 0 0 0 5145 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/resource_sharer.py - - -rwxr-xr-x 0 0 0 11077 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/resource_tracker.py - - -rwxr-xr-x 0 0 0 18458 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/shared_memory.py - - -rwxr-xr-x 0 0 0 6306 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/sharedctypes.py - - -rwxr-xr-x 0 0 0 9644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/spawn.py - - -rwxr-xr-x 0 0 0 12272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/synchronize.py - - -rwxr-xr-x 0 0 0 14261 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/multiprocessing/util.py - - -rwxr-xr-x 0 0 0 6922 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/netrc.py - - -rwxr-xr-x 0 0 0 41087 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/nntplib.py - - -rwxr-xr-x 0 0 0 30404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ntpath.py - - -rwxr-xr-x 0 0 0 2374 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/nturl2path.py - - -rwxr-xr-x 0 0 0 11467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/numbers.py - - -rwxr-xr-x 0 0 0 13174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/opcode.py - - -rwxr-xr-x 0 0 0 10965 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/operator.py - - -rwxr-xr-x 0 0 0 60369 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/optparse.py - - -rwxr-xr-x 0 0 0 40821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/os.py - - -rwxr-xr-x 0 0 0 51052 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pathlib.py - - -rwxr-xr-x 0 0 0 70298 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pdb.py - - -rwxr-xr-x 0 0 0 66911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pickle.py - - -rwxr-xr-x 0 0 0 94052 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pickletools.py - - -rwxr-xr-x 0 0 0 8978 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pipes.py - - -rwxr-xr-x 0 0 0 18281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pkgutil.py - - -rwxr-xr-x 0 0 0 43388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/platform.py - - -rwxr-xr-x 0 0 0 28582 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/plistlib.py - - -rwxr-xr-x 0 0 0 14619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/poplib.py - - -rwxr-xr-x 0 0 0 17356 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/posixpath.py - - -rwxr-xr-x 0 0 0 24158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pprint.py - - -rwxr-xr-x 0 0 0 23093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/profile.py - - -rwxr-xr-x 0 0 0 29289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pstats.py - - -rwxr-xr-x 0 0 0 6137 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pty.py - - -rwxr-xr-x 0 0 0 7837 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/py_compile.py - - -rwxr-xr-x 0 0 0 11396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pyclbr.py - - -rwxr-xr-x 0 0 0 113508 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pydoc.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pydoc_data/__init__.py - - -rwxr-xr-x 0 0 0 1325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pydoc_data/_pydoc.css - - -rwxr-xr-x 0 0 0 519590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/pydoc_data/topics.py - - -rwxr-xr-x 0 0 0 11496 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/queue.py - - -rwxr-xr-x 0 0 0 7184 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/quopri.py - - -rwxr-xr-x 0 0 0 34689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/random.py - - -rwxr-xr-x 0 0 0 16315 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/re/__init__.py - - -rwxr-xr-x 0 0 0 5444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/re/_casefix.py - - -rwxr-xr-x 0 0 0 26399 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/re/_compiler.py - - -rwxr-xr-x 0 0 0 5930 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/re/_constants.py - - -rwxr-xr-x 0 0 0 41201 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/re/_parser.py - - -rwxr-xr-x 0 0 0 7148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/reprlib.py - - -rwxr-xr-x 0 0 0 7827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/rlcompleter.py - - -rwxr-xr-x 0 0 0 12885 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/runpy.py - - -rwxr-xr-x 0 0 0 6351 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sched.py - - -rwxr-xr-x 0 0 0 1984 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/secrets.py - - -rwxr-xr-x 0 0 0 19671 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/selectors.py - - -rwxr-xr-x 0 0 0 8560 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/shelve.py - - -rwxr-xr-x 0 0 0 13353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/shlex.py - - -rwxr-xr-x 0 0 0 56762 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/shutil.py - - -rwxr-xr-x 0 0 0 2495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/signal.py - - -rwxr-xr-x 0 0 0 119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/README.txt - - -rwxr-xr-x 0 0 0 4 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/INSTALLER - - -rwxr-xr-x 0 0 0 4675 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/METADATA - - -rwxr-xr-x 0 0 0 68854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/RECORD - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/REQUESTED - - -rwxr-xr-x 0 0 0 82 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/WHEEL - - -rwxr-xr-x 0 0 0 243 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/direct_url.json - - -rwxr-xr-x 0 0 0 84 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/entry_points.txt - - -rwxr-xr-x 0 0 0 11731 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt - - -rwxr-xr-x 0 0 0 558 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE - - -rwxr-xr-x 0 0 0 1099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt - - -rwxr-xr-x 0 0 0 14531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt - - -rwxr-xr-x 0 0 0 11325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md - - -rwxr-xr-x 0 0 0 614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING - - -rwxr-xr-x 0 0 0 197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE - - -rwxr-xr-x 0 0 0 10174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE - - -rwxr-xr-x 0 0 0 1344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE - - -rwxr-xr-x 0 0 0 1089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE - - -rwxr-xr-x 0 0 0 10142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE - - -rwxr-xr-x 0 0 0 751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE - - -rwxr-xr-x 0 0 0 1056 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE - - -rwxr-xr-x 0 0 0 1086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE - - -rwxr-xr-x 0 0 0 1115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt - - -rwxr-xr-x 0 0 0 355 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__init__.py - - -rwxr-xr-x 0 0 0 854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__main__.py - - -rwxr-xr-x 0 0 0 1450 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/__pip-runner__.py - - -rwxr-xr-x 0 0 0 511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/__init__.py - - -rwxr-xr-x 0 0 0 21911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/build_env.py - - -rwxr-xr-x 0 0 0 10345 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cache.py - - -rwxr-xr-x 0 0 0 131 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/__init__.py - - -rwxr-xr-x 0 0 0 7193 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py - - -rwxr-xr-x 0 0 0 9168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/base_command.py - - -rwxr-xr-x 0 0 0 36164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py - - -rwxr-xr-x 0 0 0 817 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/command_context.py - - -rwxr-xr-x 0 0 0 6484 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/index_command.py - - -rwxr-xr-x 0 0 0 3137 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/main.py - - -rwxr-xr-x 0 0 0 4403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py - - -rwxr-xr-x 0 0 0 13827 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/parser.py - - -rwxr-xr-x 0 0 0 4706 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py - - -rwxr-xr-x 0 0 0 16482 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/req_command.py - - -rwxr-xr-x 0 0 0 7362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/spinners.py - - -rwxr-xr-x 0 0 0 116 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py - - -rwxr-xr-x 0 0 0 4026 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/__init__.py - - -rwxr-xr-x 0 0 0 9142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/cache.py - - -rwxr-xr-x 0 0 0 2244 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/check.py - - -rwxr-xr-x 0 0 0 4565 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/completion.py - - -rwxr-xr-x 0 0 0 10105 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/configuration.py - - -rwxr-xr-x 0 0 0 6805 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/debug.py - - -rwxr-xr-x 0 0 0 5178 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/download.py - - -rwxr-xr-x 0 0 0 3099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/freeze.py - - -rwxr-xr-x 0 0 0 1679 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/hash.py - - -rwxr-xr-x 0 0 0 1108 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/help.py - - -rwxr-xr-x 0 0 0 5520 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/index.py - - -rwxr-xr-x 0 0 0 3177 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/inspect.py - - -rwxr-xr-x 0 0 0 30588 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/install.py - - -rwxr-xr-x 0 0 0 13497 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/list.py - - -rwxr-xr-x 0 0 0 6027 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/lock.py - - -rwxr-xr-x 0 0 0 5782 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/search.py - - -rwxr-xr-x 0 0 0 8066 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/show.py - - -rwxr-xr-x 0 0 0 3868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py - - -rwxr-xr-x 0 0 0 5880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/commands/wheel.py - - -rwxr-xr-x 0 0 0 14568 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/configuration.py - - -rwxr-xr-x 0 0 0 858 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py - - -rwxr-xr-x 0 0 0 1830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/base.py - - -rwxr-xr-x 0 0 0 929 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/installed.py - - -rwxr-xr-x 0 0 0 6627 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py - - -rwxr-xr-x 0 0 0 1364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py - - -rwxr-xr-x 0 0 0 32165 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/exceptions.py - - -rwxr-xr-x 0 0 0 29 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/__init__.py - - -rwxr-xr-x 0 0 0 16144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/collector.py - - -rwxr-xr-x 0 0 0 41776 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/package_finder.py - - -rwxr-xr-x 0 0 0 8639 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/index/sources.py - - -rwxr-xr-x 0 0 0 14157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/__init__.py - - -rwxr-xr-x 0 0 0 5975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py - - -rwxr-xr-x 0 0 0 7779 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py - - -rwxr-xr-x 0 0 0 2550 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/locations/base.py - - -rwxr-xr-x 0 0 0 338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/main.py - - -rwxr-xr-x 0 0 0 5824 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py - - -rwxr-xr-x 0 0 0 2711 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/_json.py - - -rwxr-xr-x 0 0 0 25420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/base.py - - -rwxr-xr-x 0 0 0 135 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py - - -rwxr-xr-x 0 0 0 2804 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py - - -rwxr-xr-x 0 0 0 8420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py - - -rwxr-xr-x 0 0 0 5333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py - - -rwxr-xr-x 0 0 0 10544 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py - - -rwxr-xr-x 0 0 0 62 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/__init__.py - - -rwxr-xr-x 0 0 0 753 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/candidate.py - - -rwxr-xr-x 0 0 0 6555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/direct_url.py - - -rwxr-xr-x 0 0 0 2471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/format_control.py - - -rwxr-xr-x 0 0 0 1030 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/index.py - - -rwxr-xr-x 0 0 0 2839 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/installation_report.py - - -rwxr-xr-x 0 0 0 21992 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/link.py - - -rwxr-xr-x 0 0 0 3403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/release_control.py - - -rwxr-xr-x 0 0 0 575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/scheme.py - - -rwxr-xr-x 0 0 0 4507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/search_scope.py - - -rwxr-xr-x 0 0 0 2221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py - - -rwxr-xr-x 0 0 0 4243 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/target_python.py - - -rwxr-xr-x 0 0 0 2920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/models/wheel.py - - -rwxr-xr-x 0 0 0 49 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/__init__.py - - -rwxr-xr-x 0 0 0 20806 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/auth.py - - -rwxr-xr-x 0 0 0 4862 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/cache.py - - -rwxr-xr-x 0 0 0 12667 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/download.py - - -rwxr-xr-x 0 0 0 7646 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py - - -rwxr-xr-x 0 0 0 19555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/session.py - - -rwxr-xr-x 0 0 0 4091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/utils.py - - -rwxr-xr-x 0 0 0 1830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/__init__.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py - - -rwxr-xr-x 0 0 0 4771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py - - -rwxr-xr-x 0 0 0 1421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py - - -rwxr-xr-x 0 0 0 1509 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py - - -rwxr-xr-x 0 0 0 1136 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py - - -rwxr-xr-x 0 0 0 1478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py - - -rwxr-xr-x 0 0 0 5894 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/check.py - - -rwxr-xr-x 0 0 0 9854 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/freeze.py - - -rwxr-xr-x 0 0 0 50 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py - - -rwxr-xr-x 0 0 0 27923 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py - - -rwxr-xr-x 0 0 0 28830 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/operations/prepare.py - - -rwxr-xr-x 0 0 0 4555 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/pyproject.py - - -rwxr-xr-x 0 0 0 3041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/__init__.py - - -rwxr-xr-x 0 0 0 18688 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/constructors.py - - -rwxr-xr-x 0 0 0 1225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/pep723.py - - -rwxr-xr-x 0 0 0 2618 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_dependency_group.py - - -rwxr-xr-x 0 0 0 20685 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_file.py - - -rwxr-xr-x 0 0 0 31273 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_install.py - - -rwxr-xr-x 0 0 0 2828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_set.py - - -rwxr-xr-x 0 0 0 24099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py - - -rwxr-xr-x 0 0 0 577 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/base.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py - - -rwxr-xr-x 0 0 0 24060 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py - - -rwxr-xr-x 0 0 0 5047 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py - - -rwxr-xr-x 0 0 0 20454 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py - - -rwxr-xr-x 0 0 0 34028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py - - -rwxr-xr-x 0 0 0 6018 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py - - -rwxr-xr-x 0 0 0 11441 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py - - -rwxr-xr-x 0 0 0 3909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py - - -rwxr-xr-x 0 0 0 8239 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py - - -rwxr-xr-x 0 0 0 13437 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py - - -rwxr-xr-x 0 0 0 8284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/__init__.py - - -rwxr-xr-x 0 0 0 3350 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py - - -rwxr-xr-x 0 0 0 1015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/_log.py - - -rwxr-xr-x 0 0 0 1681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py - - -rwxr-xr-x 0 0 0 2514 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/compat.py - - -rwxr-xr-x 0 0 0 6630 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py - - -rwxr-xr-x 0 0 0 868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/datetime.py - - -rwxr-xr-x 0 0 0 3696 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py - - -rwxr-xr-x 0 0 0 3200 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py - - -rwxr-xr-x 0 0 0 2459 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py - - -rwxr-xr-x 0 0 0 3324 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py - - -rwxr-xr-x 0 0 0 6892 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py - - -rwxr-xr-x 0 0 0 689 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py - - -rwxr-xr-x 0 0 0 3726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/glibc.py - - -rwxr-xr-x 0 0 0 4998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/hashes.py - - -rwxr-xr-x 0 0 0 13414 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/logging.py - - -rwxr-xr-x 0 0 0 23722 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/misc.py - - -rwxr-xr-x 0 0 0 1601 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/packaging.py - - -rwxr-xr-x 0 0 0 3817 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/pylock.py - - -rwxr-xr-x 0 0 0 1461 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/retry.py - - -rwxr-xr-x 0 0 0 8983 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py - - -rwxr-xr-x 0 0 0 9307 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py - - -rwxr-xr-x 0 0 0 12972 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py - - -rwxr-xr-x 0 0 0 1601 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/urls.py - - -rwxr-xr-x 0 0 0 3455 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py - - -rwxr-xr-x 0 0 0 4468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/utils/wheel.py - - -rwxr-xr-x 0 0 0 596 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py - - -rwxr-xr-x 0 0 0 3734 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py - - -rwxr-xr-x 0 0 0 19144 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/git.py - - -rwxr-xr-x 0 0 0 5575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py - - -rwxr-xr-x 0 0 0 11787 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py - - -rwxr-xr-x 0 0 0 22599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py - - -rwxr-xr-x 0 0 0 9010 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_internal/wheel_builder.py - - -rwxr-xr-x 0 0 0 9394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/README.rst - - -rwxr-xr-x 0 0 0 4907 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/__init__.py - - -rwxr-xr-x 0 0 0 558 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/LICENSE.txt - - -rwxr-xr-x 0 0 0 820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py - - -rwxr-xr-x 0 0 0 1737 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py - - -rwxr-xr-x 0 0 0 6586 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py - - -rwxr-xr-x 0 0 0 1953 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py - - -rwxr-xr-x 0 0 0 303 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py - - -rwxr-xr-x 0 0 0 4117 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py - - -rwxr-xr-x 0 0 0 1386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py - - -rwxr-xr-x 0 0 0 19102 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py - - -rwxr-xr-x 0 0 0 4354 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py - - -rwxr-xr-x 0 0 0 4881 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed - - -rwxr-xr-x 0 0 0 5163 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py - - -rwxr-xr-x 0 0 0 1417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/LICENSE - - -rwxr-xr-x 0 0 0 94 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py - - -rwxr-xr-x 0 0 0 255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py - - -rwxr-xr-x 0 0 0 270954 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem - - -rwxr-xr-x 0 0 0 3442 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/core.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed - - -rwxr-xr-x 0 0 0 1099 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/LICENSE.txt - - -rwxr-xr-x 0 0 0 250 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/__init__.py - - -rwxr-xr-x 0 0 0 1709 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/__main__.py - - -rwxr-xr-x 0 0 0 8041 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_implementation.py - - -rwxr-xr-x 0 0 0 1710 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py - - -rwxr-xr-x 0 0 0 1865 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py - - -rwxr-xr-x 0 0 0 285 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/_toml_compat.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/dependency_groups/py.typed - - -rwxr-xr-x 0 0 0 14531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/LICENSE.txt - - -rwxr-xr-x 0 0 0 625 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py - - -rwxr-xr-x 0 0 0 41467 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py - - -rwxr-xr-x 0 0 0 10820 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py - - -rwxr-xr-x 0 0 0 18612 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py - - -rwxr-xr-x 0 0 0 97792 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe - - -rwxr-xr-x 0 0 0 182784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe - - -rwxr-xr-x 0 0 0 108032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe - - -rwxr-xr-x 0 0 0 66682 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/util.py - - -rwxr-xr-x 0 0 0 91648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe - - -rwxr-xr-x 0 0 0 168448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe - - -rwxr-xr-x 0 0 0 101888 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe - - -rwxr-xr-x 0 0 0 11325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/LICENSE - - -rwxr-xr-x 0 0 0 981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py - - -rwxr-xr-x 0 0 0 64 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py - - -rwxr-xr-x 0 0 0 49430 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/distro.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/distro/py.typed - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/LICENSE.md - - -rwxr-xr-x 0 0 0 868 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py - - -rwxr-xr-x 0 0 0 3438 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/codec.py - - -rwxr-xr-x 0 0 0 316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/compat.py - - -rwxr-xr-x 0 0 0 13246 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/core.py - - -rwxr-xr-x 0 0 0 79623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py - - -rwxr-xr-x 0 0 0 1898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py - - -rwxr-xr-x 0 0 0 21 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/py.typed - - -rwxr-xr-x 0 0 0 243725 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py - - -rwxr-xr-x 0 0 0 614 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/COPYING - - -rwxr-xr-x 0 0 0 1109 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py - - -rwxr-xr-x 0 0 0 5726 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py - - -rwxr-xr-x 0 0 0 32390 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py - - -rwxr-xr-x 0 0 0 197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE - - -rwxr-xr-x 0 0 0 10174 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.APACHE - - -rwxr-xr-x 0 0 0 1344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.BSD - - -rwxr-xr-x 0 0 0 494 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py - - -rwxr-xr-x 0 0 0 3211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py - - -rwxr-xr-x 0 0 0 9559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py - - -rwxr-xr-x 0 0 0 2707 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py - - -rwxr-xr-x 0 0 0 10518 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py - - -rwxr-xr-x 0 0 0 1514 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py - - -rwxr-xr-x 0 0 0 5421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py - - -rwxr-xr-x 0 0 0 5819 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py - - -rwxr-xr-x 0 0 0 51122 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py - - -rwxr-xr-x 0 0 0 12771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py - - -rwxr-xr-x 0 0 0 39360 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed - - -rwxr-xr-x 0 0 0 22537 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/pylock.py - - -rwxr-xr-x 0 0 0 2870 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py - - -rwxr-xr-x 0 0 0 40821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py - - -rwxr-xr-x 0 0 0 22856 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py - - -rwxr-xr-x 0 0 0 5040 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py - - -rwxr-xr-x 0 0 0 23284 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/packaging/version.py - - -rwxr-xr-x 0 0 0 1023 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pkg_resources/LICENSE - - -rwxr-xr-x 0 0 0 124451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py - - -rwxr-xr-x 0 0 0 1089 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/LICENSE - - -rwxr-xr-x 0 0 0 22344 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py - - -rwxr-xr-x 0 0 0 1505 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py - - -rwxr-xr-x 0 0 0 9013 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py - - -rwxr-xr-x 0 0 0 9281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py - - -rwxr-xr-x 0 0 0 6322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed - - -rwxr-xr-x 0 0 0 10458 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py - - -rwxr-xr-x 0 0 0 704 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py - - -rwxr-xr-x 0 0 0 10362 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/LICENSE - - -rwxr-xr-x 0 0 0 2983 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py - - -rwxr-xr-x 0 0 0 353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py - - -rwxr-xr-x 0 0 0 1718 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/console.py - - -rwxr-xr-x 0 0 0 1910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py - - -rwxr-xr-x 0 0 0 40392 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py - - -rwxr-xr-x 0 0 0 4390 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py - - -rwxr-xr-x 0 0 0 5385 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py - - -rwxr-xr-x 0 0 0 4176 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py - - -rwxr-xr-x 0 0 0 35349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py - - -rwxr-xr-x 0 0 0 12115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py - - -rwxr-xr-x 0 0 0 77602 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py - - -rwxr-xr-x 0 0 0 53853 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py - - -rwxr-xr-x 0 0 0 1005 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py - - -rwxr-xr-x 0 0 0 1891 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py - - -rwxr-xr-x 0 0 0 3072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py - - -rwxr-xr-x 0 0 0 3092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py - - -rwxr-xr-x 0 0 0 7981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py - - -rwxr-xr-x 0 0 0 6420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/style.py - - -rwxr-xr-x 0 0 0 2042 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py - - -rwxr-xr-x 0 0 0 3312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/styles/_mapping.py - - -rwxr-xr-x 0 0 0 6226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/token.py - - -rwxr-xr-x 0 0 0 63208 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py - - -rwxr-xr-x 0 0 0 10031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pygments/util.py - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/LICENSE - - -rwxr-xr-x 0 0 0 691 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py - - -rwxr-xr-x 0 0 0 14936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py - - -rwxr-xr-x 0 0 0 557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py - - -rwxr-xr-x 0 0 0 12216 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/py.typed - - -rwxr-xr-x 0 0 0 10142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/LICENSE - - -rwxr-xr-x 0 0 0 5057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py - - -rwxr-xr-x 0 0 0 435 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py - - -rwxr-xr-x 0 0 0 1495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py - - -rwxr-xr-x 0 0 0 26429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py - - -rwxr-xr-x 0 0 0 6449 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/api.py - - -rwxr-xr-x 0 0 0 10186 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/auth.py - - -rwxr-xr-x 0 0 0 441 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/certs.py - - -rwxr-xr-x 0 0 0 1822 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/compat.py - - -rwxr-xr-x 0 0 0 18590 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py - - -rwxr-xr-x 0 0 0 4272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py - - -rwxr-xr-x 0 0 0 3813 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/help.py - - -rwxr-xr-x 0 0 0 733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py - - -rwxr-xr-x 0 0 0 35575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/models.py - - -rwxr-xr-x 0 0 0 1057 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/packages.py - - -rwxr-xr-x 0 0 0 30503 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py - - -rwxr-xr-x 0 0 0 4322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py - - -rwxr-xr-x 0 0 0 2912 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/structures.py - - -rwxr-xr-x 0 0 0 33225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/requests/utils.py - - -rwxr-xr-x 0 0 0 751 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/LICENSE - - -rwxr-xr-x 0 0 0 541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py - - -rwxr-xr-x 0 0 0 8914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/py.typed - - -rwxr-xr-x 0 0 0 2037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py - - -rwxr-xr-x 0 0 0 640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py - - -rwxr-xr-x 0 0 0 1543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py - - -rwxr-xr-x 0 0 0 1768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py - - -rwxr-xr-x 0 0 0 1768 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py - - -rwxr-xr-x 0 0 0 24212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py - - -rwxr-xr-x 0 0 0 6420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py - - -rwxr-xr-x 0 0 0 1056 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/LICENSE - - -rwxr-xr-x 0 0 0 6090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py - - -rwxr-xr-x 0 0 0 7896 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py - - -rwxr-xr-x 0 0 0 10209 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py - - -rwxr-xr-x 0 0 0 140235 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py - - -rwxr-xr-x 0 0 0 1064 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py - - -rwxr-xr-x 0 0 0 2128 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py - - -rwxr-xr-x 0 0 0 265 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py - - -rwxr-xr-x 0 0 0 799 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py - - -rwxr-xr-x 0 0 0 9656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py - - -rwxr-xr-x 0 0 0 3225 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py - - -rwxr-xr-x 0 0 0 1236 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py - - -rwxr-xr-x 0 0 0 1394 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py - - -rwxr-xr-x 0 0 0 7063 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py - - -rwxr-xr-x 0 0 0 423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py - - -rwxr-xr-x 0 0 0 5325 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py - - -rwxr-xr-x 0 0 0 19919 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py - - -rwxr-xr-x 0 0 0 351 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py - - -rwxr-xr-x 0 0 0 417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py - - -rwxr-xr-x 0 0 0 22755 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py - - -rwxr-xr-x 0 0 0 1925 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py - - -rwxr-xr-x 0 0 0 2783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py - - -rwxr-xr-x 0 0 0 3404 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py - - -rwxr-xr-x 0 0 0 890 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/abc.py - - -rwxr-xr-x 0 0 0 10324 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/align.py - - -rwxr-xr-x 0 0 0 6921 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py - - -rwxr-xr-x 0 0 0 3263 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/bar.py - - -rwxr-xr-x 0 0 0 10686 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/box.py - - -rwxr-xr-x 0 0 0 5130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/cells.py - - -rwxr-xr-x 0 0 0 18211 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/color.py - - -rwxr-xr-x 0 0 0 1054 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py - - -rwxr-xr-x 0 0 0 7131 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/columns.py - - -rwxr-xr-x 0 0 0 100849 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/console.py - - -rwxr-xr-x 0 0 0 1288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py - - -rwxr-xr-x 0 0 0 5502 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/containers.py - - -rwxr-xr-x 0 0 0 6487 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/control.py - - -rwxr-xr-x 0 0 0 8257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py - - -rwxr-xr-x 0 0 0 1025 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py - - -rwxr-xr-x 0 0 0 2367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py - - -rwxr-xr-x 0 0 0 642 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/errors.py - - -rwxr-xr-x 0 0 0 1683 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py - - -rwxr-xr-x 0 0 0 2484 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py - - -rwxr-xr-x 0 0 0 9586 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py - - -rwxr-xr-x 0 0 0 5031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/json.py - - -rwxr-xr-x 0 0 0 3252 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py - - -rwxr-xr-x 0 0 0 14004 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/layout.py - - -rwxr-xr-x 0 0 0 15180 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/live.py - - -rwxr-xr-x 0 0 0 3521 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py - - -rwxr-xr-x 0 0 0 12468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/logging.py - - -rwxr-xr-x 0 0 0 8451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/markup.py - - -rwxr-xr-x 0 0 0 5305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/measure.py - - -rwxr-xr-x 0 0 0 4908 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/padding.py - - -rwxr-xr-x 0 0 0 828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/pager.py - - -rwxr-xr-x 0 0 0 3396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/palette.py - - -rwxr-xr-x 0 0 0 11157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/panel.py - - -rwxr-xr-x 0 0 0 36391 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py - - -rwxr-xr-x 0 0 0 60408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/progress.py - - -rwxr-xr-x 0 0 0 8162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py - - -rwxr-xr-x 0 0 0 12447 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py - - -rwxr-xr-x 0 0 0 1391 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/py.typed - - -rwxr-xr-x 0 0 0 166 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/region.py - - -rwxr-xr-x 0 0 0 4431 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/repr.py - - -rwxr-xr-x 0 0 0 4602 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/rule.py - - -rwxr-xr-x 0 0 0 2843 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/scope.py - - -rwxr-xr-x 0 0 0 1591 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/screen.py - - -rwxr-xr-x 0 0 0 24743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/segment.py - - -rwxr-xr-x 0 0 0 4214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py - - -rwxr-xr-x 0 0 0 4424 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/status.py - - -rwxr-xr-x 0 0 0 26990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/style.py - - -rwxr-xr-x 0 0 0 1258 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/styled.py - - -rwxr-xr-x 0 0 0 36371 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py - - -rwxr-xr-x 0 0 0 40049 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/table.py - - -rwxr-xr-x 0 0 0 3370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py - - -rwxr-xr-x 0 0 0 47552 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/text.py - - -rwxr-xr-x 0 0 0 3771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/theme.py - - -rwxr-xr-x 0 0 0 102 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/themes.py - - -rwxr-xr-x 0 0 0 35861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py - - -rwxr-xr-x 0 0 0 9451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/rich/tree.py - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/LICENSE - - -rwxr-xr-x 0 0 0 314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py - - -rwxr-xr-x 0 0 0 25778 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py - - -rwxr-xr-x 0 0 0 3235 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py - - -rwxr-xr-x 0 0 0 26 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed - - -rwxr-xr-x 0 0 0 1072 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/LICENSE - - -rwxr-xr-x 0 0 0 169 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/__init__.py - - -rwxr-xr-x 0 0 0 6961 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/_writer.py - - -rwxr-xr-x 0 0 0 26 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/tomli_w/py.typed - - -rwxr-xr-x 0 0 0 1086 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/LICENSE - - -rwxr-xr-x 0 0 0 1320 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py - - -rwxr-xr-x 0 0 0 11413 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py - - -rwxr-xr-x 0 0 0 20503 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py - - -rwxr-xr-x 0 0 0 2412 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py - - -rwxr-xr-x 0 0 0 1130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py - - -rwxr-xr-x 0 0 0 17993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed - - -rwxr-xr-x 0 0 0 1115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/LICENSE.txt - - -rwxr-xr-x 0 0 0 3333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py - - -rwxr-xr-x 0 0 0 11372 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py - - -rwxr-xr-x 0 0 0 64 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py - - -rwxr-xr-x 0 0 0 20314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py - - -rwxr-xr-x 0 0 0 40408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py - - -rwxr-xr-x 0 0 0 957 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py - - -rwxr-xr-x 0 0 0 17632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py - - -rwxr-xr-x 0 0 0 13922 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py - - -rwxr-xr-x 0 0 0 11036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py - - -rwxr-xr-x 0 0 0 4528 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py - - -rwxr-xr-x 0 0 0 17081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py - - -rwxr-xr-x 0 0 0 34446 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py - - -rwxr-xr-x 0 0 0 7097 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py - - -rwxr-xr-x 0 0 0 8217 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py - - -rwxr-xr-x 0 0 0 8579 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py - - -rwxr-xr-x 0 0 0 2440 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py - - -rwxr-xr-x 0 0 0 1417 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py - - -rwxr-xr-x 0 0 0 5343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py - - -rwxr-xr-x 0 0 0 34665 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py - - -rwxr-xr-x 0 0 0 19990 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py - - -rwxr-xr-x 0 0 0 6691 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py - - -rwxr-xr-x 0 0 0 30641 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py - - -rwxr-xr-x 0 0 0 1155 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py - - -rwxr-xr-x 0 0 0 4901 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py - - -rwxr-xr-x 0 0 0 1605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py - - -rwxr-xr-x 0 0 0 498 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py - - -rwxr-xr-x 0 0 0 3997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py - - -rwxr-xr-x 0 0 0 3510 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py - - -rwxr-xr-x 0 0 0 22050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py - - -rwxr-xr-x 0 0 0 17460 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py - - -rwxr-xr-x 0 0 0 5758 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py - - -rwxr-xr-x 0 0 0 6895 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py - - -rwxr-xr-x 0 0 0 10168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py - - -rwxr-xr-x 0 0 0 14296 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py - - -rwxr-xr-x 0 0 0 5403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py - - -rwxr-xr-x 0 0 0 342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/_vendor/vendor.txt - - -rwxr-xr-x 0 0 0 286 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site-packages/pip/py.typed - - -rwxr-xr-x 0 0 0 23198 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/site.py - - -rwxr-xr-x 0 0 0 43532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/smtplib.py - - -rwxr-xr-x 0 0 0 7448 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sndhdr.py - - -rwxr-xr-x 0 0 0 37815 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/socket.py - - -rwxr-xr-x 0 0 0 28065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/socketserver.py - - -rwxr-xr-x 0 0 0 2501 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sqlite3/__init__.py - - -rwxr-xr-x 0 0 0 3855 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sqlite3/__main__.py - - -rwxr-xr-x 0 0 0 3631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sqlite3/dbapi2.py - - -rwxr-xr-x 0 0 0 3538 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sqlite3/dump.py - - -rwxr-xr-x 0 0 0 231 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sre_compile.py - - -rwxr-xr-x 0 0 0 232 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sre_constants.py - - -rwxr-xr-x 0 0 0 229 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sre_parse.py - - -rwxr-xr-x 0 0 0 50904 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/ssl.py - - -rwxr-xr-x 0 0 0 5485 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/stat.py - - -rwxr-xr-x 0 0 0 50227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/statistics.py - - -rwxr-xr-x 0 0 0 11786 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/string.py - - -rwxr-xr-x 0 0 0 12917 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/stringprep.py - - -rwxr-xr-x 0 0 0 257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/struct.py - - -rwxr-xr-x 0 0 0 88747 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/subprocess.py - - -rwxr-xr-x 0 0 0 18478 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sunau.py - - -rwxr-xr-x 0 0 0 12477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/symtable.py - - -rwxr-xr-x 0 0 0 31850 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/sysconfig.py - - -rwxr-xr-x 0 0 0 11532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tabnanny.py - - -rwxr-xr-x 0 0 0 112569 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tarfile.py - - -rwxr-xr-x 0 0 0 23334 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/telnetlib.py - - -rwxr-xr-x 0 0 0 32386 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tempfile.py - - -rwxr-xr-x 0 0 0 19718 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/textwrap.py - - -rwxr-xr-x 0 0 0 1003 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/this.py - - -rwxr-xr-x 0 0 0 60200 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/threading.py - - -rwxr-xr-x 0 0 0 13464 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/timeit.py - - -rwxr-xr-x 0 0 0 173168 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/__init__.py - - -rwxr-xr-x 0 0 0 148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/__main__.py - - -rwxr-xr-x 0 0 0 2660 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/colorchooser.py - - -rwxr-xr-x 0 0 0 1289 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/commondialog.py - - -rwxr-xr-x 0 0 0 1493 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/constants.py - - -rwxr-xr-x 0 0 0 1535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/dialog.py - - -rwxr-xr-x 0 0 0 11644 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/dnd.py - - -rwxr-xr-x 0 0 0 14939 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/filedialog.py - - -rwxr-xr-x 0 0 0 7000 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/font.py - - -rwxr-xr-x 0 0 0 3861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/messagebox.py - - -rwxr-xr-x 0 0 0 1816 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/scrolledtext.py - - -rwxr-xr-x 0 0 0 11753 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/simpledialog.py - - -rwxr-xr-x 0 0 0 77032 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/tix.py - - -rwxr-xr-x 0 0 0 56318 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tkinter/ttk.py - - -rwxr-xr-x 0 0 0 2511 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/token.py - - -rwxr-xr-x 0 0 0 21570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tokenize.py - - -rwxr-xr-x 0 0 0 308 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tomllib/__init__.py - - -rwxr-xr-x 0 0 0 22631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tomllib/_parser.py - - -rwxr-xr-x 0 0 0 2943 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tomllib/_re.py - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tomllib/_types.py - - -rwxr-xr-x 0 0 0 29352 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/trace.py - - -rwxr-xr-x 0 0 0 46393 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/traceback.py - - -rwxr-xr-x 0 0 0 18047 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tracemalloc.py - - -rwxr-xr-x 0 0 0 2035 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/tty.py - - -rwxr-xr-x 0 0 0 146363 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtle.py - - -rwxr-xr-x 0 0 0 314 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/__init__.py - - -rwxr-xr-x 0 0 0 15375 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/__main__.py - - -rwxr-xr-x 0 0 0 4248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/bytedesign.py - - -rwxr-xr-x 0 0 0 951 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/chaos.py - - -rwxr-xr-x 0 0 0 3304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/clock.py - - -rwxr-xr-x 0 0 0 1339 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/colormixer.py - - -rwxr-xr-x 0 0 0 2966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/forest.py - - -rwxr-xr-x 0 0 0 3473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/fractalcurves.py - - -rwxr-xr-x 0 0 0 2434 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/lindenmayer.py - - -rwxr-xr-x 0 0 0 2051 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/minimal_hanoi.py - - -rwxr-xr-x 0 0 0 6513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/nim.py - - -rwxr-xr-x 0 0 0 1291 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/paint.py - - -rwxr-xr-x 0 0 0 1066 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/peace.py - - -rwxr-xr-x 0 0 0 3380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/penrose.py - - -rwxr-xr-x 0 0 0 2825 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/planet_and_moon.py - - -rwxr-xr-x 0 0 0 1361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/rosette.py - - -rwxr-xr-x 0 0 0 1804 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/round_dance.py - - -rwxr-xr-x 0 0 0 5053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/sorting_animate.py - - -rwxr-xr-x 0 0 0 1401 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/tree.py - - -rwxr-xr-x 0 0 0 160 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/turtle.cfg - - -rwxr-xr-x 0 0 0 1119 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/two_canvases.py - - -rwxr-xr-x 0 0 0 821 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/turtledemo/yinyang.py - - -rwxr-xr-x 0 0 0 10993 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/types.py - - -rwxr-xr-x 0 0 0 118836 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/typing.py - - -rwxr-xr-x 0 0 0 3487 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/__init__.py - - -rwxr-xr-x 0 0 0 472 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/__main__.py - - -rwxr-xr-x 0 0 0 2746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/_log.py - - -rwxr-xr-x 0 0 0 5483 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/async_case.py - - -rwxr-xr-x 0 0 0 57531 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/case.py - - -rwxr-xr-x 0 0 0 21116 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/loader.py - - -rwxr-xr-x 0 0 0 11991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/main.py - - -rwxr-xr-x 0 0 0 106317 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/mock.py - - -rwxr-xr-x 0 0 0 9130 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/result.py - - -rwxr-xr-x 0 0 0 10368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/runner.py - - -rwxr-xr-x 0 0 0 2403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/signals.py - - -rwxr-xr-x 0 0 0 13512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/suite.py - - -rwxr-xr-x 0 0 0 5215 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/unittest/util.py - - -rwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/__init__.py - - -rwxr-xr-x 0 0 0 2415 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/error.py - - -rwxr-xr-x 0 0 0 45676 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/parse.py - - -rwxr-xr-x 0 0 0 103724 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/request.py - - -rwxr-xr-x 0 0 0 2361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/response.py - - -rwxr-xr-x 0 0 0 9468 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/urllib/robotparser.py - - -rwxr-xr-x 0 0 0 7365 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/uu.py - - -rwxr-xr-x 0 0 0 29656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/uuid.py - - -rwxr-xr-x 0 0 0 26750 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/__init__.py - - -rwxr-xr-x 0 0 0 145 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/__main__.py - - -rwxr-xr-x 0 0 0 9033 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/scripts/common/Activate.ps1 - - -rwxr-xr-x 0 0 0 2170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/scripts/common/activate - - -rwxr-xr-x 0 0 0 934 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/scripts/posix/activate.csh - - -rwxr-xr-x 0 0 0 2209 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/venv/scripts/posix/activate.fish - - -rwxr-xr-x 0 0 0 21909 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/warnings.py - - -rwxr-xr-x 0 0 0 22769 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wave.py - - -rwxr-xr-x 0 0 0 21513 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/weakref.py - - -rwxr-xr-x 0 0 0 23733 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/webbrowser.py - - -rwxr-xr-x 0 0 0 657 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/__init__.py - - -rwxr-xr-x 0 0 0 21664 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/handlers.py - - -rwxr-xr-x 0 0 0 7370 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/headers.py - - -rwxr-xr-x 0 0 0 5171 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/simple_server.py - - -rwxr-xr-x 0 0 0 1717 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/types.py - - -rwxr-xr-x 0 0 0 5472 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/util.py - - -rwxr-xr-x 0 0 0 15036 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/wsgiref/validate.py - - -rwxr-xr-x 0 0 0 5942 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xdrlib.py - - -rwxr-xr-x 0 0 0 557 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/__init__.py - - -rwxr-xr-x 0 0 0 936 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/NodeFilter.py - - -rwxr-xr-x 0 0 0 4019 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/__init__.py - - -rwxr-xr-x 0 0 0 3451 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/domreg.py - - -rwxr-xr-x 0 0 0 35693 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/expatbuilder.py - - -rwxr-xr-x 0 0 0 3367 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/minicompat.py - - -rwxr-xr-x 0 0 0 67982 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/minidom.py - - -rwxr-xr-x 0 0 0 11637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/pulldom.py - - -rwxr-xr-x 0 0 0 12420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/dom/xmlbuilder.py - - -rwxr-xr-x 0 0 0 6952 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementInclude.py - - -rwxr-xr-x 0 0 0 13997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementPath.py - - -rwxr-xr-x 0 0 0 74017 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/etree/ElementTree.py - - -rwxr-xr-x 0 0 0 1605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/etree/__init__.py - - -rwxr-xr-x 0 0 0 82 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/etree/cElementTree.py - - -rwxr-xr-x 0 0 0 167 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/parsers/__init__.py - - -rwxr-xr-x 0 0 0 248 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/parsers/expat.py - - -rwxr-xr-x 0 0 0 3238 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/__init__.py - - -rwxr-xr-x 0 0 0 4699 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/_exceptions.py - - -rwxr-xr-x 0 0 0 16034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/expatreader.py - - -rwxr-xr-x 0 0 0 15617 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/handler.py - - -rwxr-xr-x 0 0 0 12255 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/saxutils.py - - -rwxr-xr-x 0 0 0 12624 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xml/sax/xmlreader.py - - -rwxr-xr-x 0 0 0 38 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xmlrpc/__init__.py - - -rwxr-xr-x 0 0 0 49331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xmlrpc/client.py - - -rwxr-xr-x 0 0 0 36822 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/xmlrpc/server.py - - -rwxr-xr-x 0 0 0 7543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipapp.py - - -rwxr-xr-x 0 0 0 88998 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipfile/__init__.py - - -rwxr-xr-x 0 0 0 58 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipfile/__main__.py - - -rwxr-xr-x 0 0 0 10860 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipfile/_path/__init__.py - - -rwxr-xr-x 0 0 0 1158 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipfile/_path/glob.py - - -rwxr-xr-x 0 0 0 27840 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zipimport.py - - -rwxr-xr-x 0 0 0 703 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zoneinfo/__init__.py - - -rwxr-xr-x 0 0 0 5294 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zoneinfo/_common.py - - -rwxr-xr-x 0 0 0 5388 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zoneinfo/_tzpath.py - - -rwxr-xr-x 0 0 0 24674 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/python3.12/zoneinfo/_zoneinfo.py - - -rwxr-xr-x 0 0 0 22932 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/auto.tcl - - -rwxr-xr-x 0 0 0 60997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/clock.tcl - - -rwxr-xr-x 0 0 0 21330 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/cookiejar.tcl - - -rwxr-xr-x 0 0 0 7453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/idna.tcl - - -rwxr-xr-x 0 0 0 214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 70835 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/cookiejar0.2/public_suffix_list.dat.gz - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/ascii.enc - - -rwxr-xr-x 0 0 0 92873 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/big5.enc - - -rwxr-xr-x 0 0 0 97050 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cns11643.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1250.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1251.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1252.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1253.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1254.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1255.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1256.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1257.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp1258.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp165.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp437.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp737.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp775.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp850.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp852.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp855.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp857.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp860.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp861.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp862.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp863.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp864.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp865.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp866.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp869.enc - - -rwxr-xr-x 0 0 0 1090 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp874.enc - - -rwxr-xr-x 0 0 0 48207 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp932.enc - - -rwxr-xr-x 0 0 0 132509 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp936.enc - - -rwxr-xr-x 0 0 0 130423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp949.enc - - -rwxr-xr-x 0 0 0 91831 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/cp950.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/dingbats.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/ebcdic.enc - - -rwxr-xr-x 0 0 0 85574 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-cn.enc - - -rwxr-xr-x 0 0 0 82537 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-jp.enc - - -rwxr-xr-x 0 0 0 93918 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/euc-kr.enc - - -rwxr-xr-x 0 0 0 86619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/gb12345.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/gb1988.enc - - -rwxr-xr-x 0 0 0 84532 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/gb2312-raw.enc - - -rwxr-xr-x 0 0 0 85574 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/gb2312.enc - - -rwxr-xr-x 0 0 0 192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022-jp.enc - - -rwxr-xr-x 0 0 0 115 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022-kr.enc - - -rwxr-xr-x 0 0 0 226 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso2022.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-1.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-10.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-11.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-13.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-14.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-15.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-16.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-2.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-3.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-4.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-5.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-6.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-7.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-8.enc - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/iso8859-9.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0201.enc - - -rwxr-xr-x 0 0 0 80453 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0208.enc - - -rwxr-xr-x 0 0 0 70974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/jis0212.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-r.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-ru.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-t.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/koi8-u.enc - - -rwxr-xr-x 0 0 0 92877 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/ksc5601.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macCentEuro.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macCroatian.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macCyrillic.enc - - -rwxr-xr-x 0 0 0 1096 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macDingbats.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macGreek.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macIceland.enc - - -rwxr-xr-x 0 0 0 48028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macJapan.enc - - -rwxr-xr-x 0 0 0 1093 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macRoman.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macRomania.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macThai.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macTurkish.enc - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/macUkraine.enc - - -rwxr-xr-x 0 0 0 41862 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/shiftjis.enc - - -rwxr-xr-x 0 0 0 1091 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/symbol.enc - - -rwxr-xr-x 0 0 0 1092 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/encoding/tis-620.enc - - -rwxr-xr-x 0 0 0 608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/foreachline.tcl - - -rwxr-xr-x 0 0 0 7899 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/history.tcl - - -rwxr-xr-x 0 0 0 3861 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/icu.tcl - - -rwxr-xr-x 0 0 0 23575 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/init.tcl - - -rwxr-xr-x 0 0 0 7313 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/install.tcl - - -rwxr-xr-x 0 0 0 989 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/af.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/af_za.msg - - -rwxr-xr-x 0 0 0 1340 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ar.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_in.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_jo.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_lb.msg - - -rwxr-xr-x 0 0 0 1024 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ar_sy.msg - - -rwxr-xr-x 0 0 0 1345 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/be.msg - - -rwxr-xr-x 0 0 0 1267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/bg.msg - - -rwxr-xr-x 0 0 0 1545 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/bn.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/bn_in.msg - - -rwxr-xr-x 0 0 0 1094 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ca.msg - - -rwxr-xr-x 0 0 0 1212 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/cs.msg - - -rwxr-xr-x 0 0 0 1140 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/da.msg - - -rwxr-xr-x 0 0 0 1218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/de.msg - - -rwxr-xr-x 0 0 0 796 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/de_at.msg - - -rwxr-xr-x 0 0 0 1215 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/de_be.msg - - -rwxr-xr-x 0 0 0 1396 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/el.msg - - -rwxr-xr-x 0 0 0 300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_au.msg - - -rwxr-xr-x 0 0 0 305 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_be.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_bw.msg - - -rwxr-xr-x 0 0 0 288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ca.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_gb.msg - - -rwxr-xr-x 0 0 0 321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_hk.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ie.msg - - -rwxr-xr-x 0 0 0 310 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_in.msg - - -rwxr-xr-x 0 0 0 300 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_nz.msg - - -rwxr-xr-x 0 0 0 321 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_ph.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_sg.msg - - -rwxr-xr-x 0 0 0 245 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_za.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/en_zw.msg - - -rwxr-xr-x 0 0 0 1207 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/eo.msg - - -rwxr-xr-x 0 0 0 1164 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es.msg - - -rwxr-xr-x 0 0 0 242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ar.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_bo.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_cl.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_co.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_cr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_do.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ec.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_gt.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_hn.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_mx.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ni.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pa.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pe.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_pr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_py.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_sv.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_uy.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/es_ve.msg - - -rwxr-xr-x 0 0 0 1170 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/et.msg - - -rwxr-xr-x 0 0 0 985 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/eu.msg - - -rwxr-xr-x 0 0 0 287 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/eu_es.msg - - -rwxr-xr-x 0 0 0 1062 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fa.msg - - -rwxr-xr-x 0 0 0 1331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fa_in.msg - - -rwxr-xr-x 0 0 0 381 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fa_ir.msg - - -rwxr-xr-x 0 0 0 1129 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fi.msg - - -rwxr-xr-x 0 0 0 950 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fo.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fo_fo.msg - - -rwxr-xr-x 0 0 0 1181 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fr.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_be.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_ca.msg - - -rwxr-xr-x 0 0 0 281 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/fr_ch.msg - - -rwxr-xr-x 0 0 0 1029 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ga.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ga_ie.msg - - -rwxr-xr-x 0 0 0 926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/gl.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/gl_es.msg - - -rwxr-xr-x 0 0 0 1037 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/gv.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/gv_gb.msg - - -rwxr-xr-x 0 0 0 1288 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/he.msg - - -rwxr-xr-x 0 0 0 1192 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/hi.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/hi_in.msg - - -rwxr-xr-x 0 0 0 1097 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/hr.msg - - -rwxr-xr-x 0 0 0 1247 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/hu.msg - - -rwxr-xr-x 0 0 0 914 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/id.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/id_id.msg - - -rwxr-xr-x 0 0 0 1147 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/is.msg - - -rwxr-xr-x 0 0 0 1220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/it.msg - - -rwxr-xr-x 0 0 0 244 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/it_ch.msg - - -rwxr-xr-x 0 0 0 1426 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ja.msg - - -rwxr-xr-x 0 0 0 978 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kl.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kl_gl.msg - - -rwxr-xr-x 0 0 0 1368 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ko.msg - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ko_kr.msg - - -rwxr-xr-x 0 0 0 1304 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kok.msg - - -rwxr-xr-x 0 0 0 254 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kok_in.msg - - -rwxr-xr-x 0 0 0 966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kw.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/kw_gb.msg - - -rwxr-xr-x 0 0 0 1203 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/lt.msg - - -rwxr-xr-x 0 0 0 1175 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/lv.msg - - -rwxr-xr-x 0 0 0 1361 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/mk.msg - - -rwxr-xr-x 0 0 0 1228 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/mr.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/mr_in.msg - - -rwxr-xr-x 0 0 0 910 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ms.msg - - -rwxr-xr-x 0 0 0 259 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ms_my.msg - - -rwxr-xr-x 0 0 0 674 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/mt.msg - - -rwxr-xr-x 0 0 0 1141 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/nb.msg - - -rwxr-xr-x 0 0 0 1079 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/nl.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/nl_be.msg - - -rwxr-xr-x 0 0 0 1140 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/nn.msg - - -rwxr-xr-x 0 0 0 1167 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/pl.msg - - -rwxr-xr-x 0 0 0 1111 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/pt.msg - - -rwxr-xr-x 0 0 0 279 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/pt_br.msg - - -rwxr-xr-x 0 0 0 1148 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ro.msg - - -rwxr-xr-x 0 0 0 1323 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ru.msg - - -rwxr-xr-x 0 0 0 242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ru_ua.msg - - -rwxr-xr-x 0 0 0 1152 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sh.msg - - -rwxr-xr-x 0 0 0 1151 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sk.msg - - -rwxr-xr-x 0 0 0 1152 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sl.msg - - -rwxr-xr-x 0 0 0 1227 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sq.msg - - -rwxr-xr-x 0 0 0 1323 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sr.msg - - -rwxr-xr-x 0 0 0 1143 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sv.msg - - -rwxr-xr-x 0 0 0 991 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/sw.msg - - -rwxr-xr-x 0 0 0 1241 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ta.msg - - -rwxr-xr-x 0 0 0 251 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/ta_in.msg - - -rwxr-xr-x 0 0 0 1424 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/te.msg - - -rwxr-xr-x 0 0 0 363 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/te_in.msg - - -rwxr-xr-x 0 0 0 1678 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/th.msg - - -rwxr-xr-x 0 0 0 1081 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/tr.msg - - -rwxr-xr-x 0 0 0 1349 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/uk.msg - - -rwxr-xr-x 0 0 0 1221 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/vi.msg - - -rwxr-xr-x 0 0 0 2256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/zh.msg - - -rwxr-xr-x 0 0 0 303 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_cn.msg - - -rwxr-xr-x 0 0 0 677 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_hk.msg - - -rwxr-xr-x 0 0 0 327 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_sg.msg - - -rwxr-xr-x 0 0 0 331 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/msgs/zh_tw.msg - - -rwxr-xr-x 0 0 0 30422 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/opt0.4/optparse.tcl - - -rwxr-xr-x 0 0 0 625 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/opt0.4/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 23749 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/package.tcl - - -rwxr-xr-x 0 0 0 814 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/parray.tcl - - -rwxr-xr-x 0 0 0 599 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/readfile.tcl - - -rwxr-xr-x 0 0 0 46997 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/safe.tcl - - -rwxr-xr-x 0 0 0 4852 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/tclAppInit.c - - -rwxr-xr-x 0 0 0 9866 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/tclIndex - - -rwxr-xr-x 0 0 0 11904 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/tm.tcl - - -rwxr-xr-x 0 0 0 4764 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/word.tcl - - -rwxr-xr-x 0 0 0 911 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9.0/writefile.tcl - - -rwxr-xr-x 0 0 0 180267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9/9.0/http-2.10.1.tm - - -rwxr-xr-x 0 0 0 37407 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9/9.0/msgcat-1.7.1.tm - - -rwxr-xr-x 0 0 0 11053 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9/9.0/platform-1.1.0.tm - - -rwxr-xr-x 0 0 0 5975 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9/9.0/platform/shell-1.1.4.tm - - -rwxr-xr-x 0 0 0 104783 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tcl9/9.0/tcltest-2.5.10.tm - - -rwxr-xr-x 0 0 0 144968 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/thread3.0.4/libtcl9thread3.0.4.so - - -rwxr-xr-x 0 0 0 2151 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/thread3.0.4/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 24364 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/thread3.0.4/ttrace.tcl - - -rwxr-xr-x 0 0 0 8924 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/bgerror.tcl - - -rwxr-xr-x 0 0 0 20834 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/button.tcl - - -rwxr-xr-x 0 0 0 9681 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/choosedir.tcl - - -rwxr-xr-x 0 0 0 21550 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/clrpick.tcl - - -rwxr-xr-x 0 0 0 8355 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/comdlg.tcl - - -rwxr-xr-x 0 0 0 32084 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/console.tcl - - -rwxr-xr-x 0 0 0 2082 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/README - - -rwxr-xr-x 0 0 0 7127 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/anilabel.tcl - - -rwxr-xr-x 0 0 0 3608 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/aniwave.tcl - - -rwxr-xr-x 0 0 0 8715 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/arrow.tcl - - -rwxr-xr-x 0 0 0 3075 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/bind.tcl - - -rwxr-xr-x 0 0 0 1411 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/bitmap.tcl - - -rwxr-xr-x 0 0 0 1756 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/browse - - -rwxr-xr-x 0 0 0 1507 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/button.tcl - - -rwxr-xr-x 0 0 0 2317 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/check.tcl - - -rwxr-xr-x 0 0 0 1431 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/clrpick.tcl - - -rwxr-xr-x 0 0 0 5009 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/colors.tcl - - -rwxr-xr-x 0 0 0 2064 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/combo.tcl - - -rwxr-xr-x 0 0 0 4015 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/cscroll.tcl - - -rwxr-xr-x 0 0 0 6312 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ctext.tcl - - -rwxr-xr-x 0 0 0 974 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/dialog1.tcl - - -rwxr-xr-x 0 0 0 828 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/dialog2.tcl - - -rwxr-xr-x 0 0 0 4402 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/en.msg - - -rwxr-xr-x 0 0 0 1465 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/entry1.tcl - - -rwxr-xr-x 0 0 0 2197 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/entry2.tcl - - -rwxr-xr-x 0 0 0 6146 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/entry3.tcl - - -rwxr-xr-x 0 0 0 2384 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/filebox.tcl - - -rwxr-xr-x 0 0 0 81247 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/floor.tcl - - -rwxr-xr-x 0 0 0 1692 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/fontchoose.tcl - - -rwxr-xr-x 0 0 0 1046 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/form.tcl - - -rwxr-xr-x 0 0 0 61196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/goldberg.tcl - - -rwxr-xr-x 0 0 0 512 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/hello - - -rwxr-xr-x 0 0 0 1656 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/hscale.tcl - - -rwxr-xr-x 0 0 0 2065 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/icon.tcl - - -rwxr-xr-x 0 0 0 1408 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/image1.tcl - - -rwxr-xr-x 0 0 0 3535 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/image2.tcl - - -rwxr-xr-x 0 0 0 6497 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/Tcl.svg - - -rwxr-xr-x 0 0 0 11700 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/Tk_feather.png - - -rwxr-xr-x 0 0 0 51559 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/earth.gif - - -rwxr-xr-x 0 0 0 8157 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/earthmenu.png - - -rwxr-xr-x 0 0 0 6343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/earthris.gif - - -rwxr-xr-x 0 0 0 1886 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/flagdown.xbm - - -rwxr-xr-x 0 0 0 1880 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/flagup.xbm - - -rwxr-xr-x 0 0 0 275 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/gray25.xbm - - -rwxr-xr-x 0 0 0 1883 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/letters.xbm - - -rwxr-xr-x 0 0 0 1889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/noletter.xbm - - -rwxr-xr-x 0 0 0 54257 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/ouster.png - - -rwxr-xr-x 0 0 0 272 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/pattern.xbm - - -rwxr-xr-x 0 0 0 68476 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/plowed_field.png - - -rwxr-xr-x 0 0 0 82214 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/starry_night.png - - -rwxr-xr-x 0 0 0 2341 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/tcllogo.gif - - -rwxr-xr-x 0 0 0 196623 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/images/teapot.ppm - - -rwxr-xr-x 0 0 0 10571 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/items.tcl - - -rwxr-xr-x 0 0 0 8083 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ixset - - -rwxr-xr-x 0 0 0 8806 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/knightstour.tcl - - -rwxr-xr-x 0 0 0 1721 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/label.tcl - - -rwxr-xr-x 0 0 0 1809 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/labelframe.tcl - - -rwxr-xr-x 0 0 0 2267 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/license.terms - - -rwxr-xr-x 0 0 0 10926 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/mac_styles.tcl - - -rwxr-xr-x 0 0 0 2293 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/mac_tabs.tcl - - -rwxr-xr-x 0 0 0 8746 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/mac_wm.tcl - - -rwxr-xr-x 0 0 0 5743 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/mclist.tcl - - -rwxr-xr-x 0 0 0 7607 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/menu.tcl - - -rwxr-xr-x 0 0 0 4429 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/menubu.tcl - - -rwxr-xr-x 0 0 0 2004 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/msgbox.tcl - - -rwxr-xr-x 0 0 0 7398 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/nl.msg - - -rwxr-xr-x 0 0 0 1149 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/paned1.tcl - - -rwxr-xr-x 0 0 0 2263 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/paned2.tcl - - -rwxr-xr-x 0 0 0 8256 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/pendulum.tcl - - -rwxr-xr-x 0 0 0 2918 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/plot.tcl - - -rwxr-xr-x 0 0 0 4687 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/print.tcl - - -rwxr-xr-x 0 0 0 2605 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/puzzle.tcl - - -rwxr-xr-x 0 0 0 2784 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/radio.tcl - - -rwxr-xr-x 0 0 0 5316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/rmt - - -rwxr-xr-x 0 0 0 8316 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/rolodex - - -rwxr-xr-x 0 0 0 5333 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ruler.tcl - - -rwxr-xr-x 0 0 0 2275 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/sayings.tcl - - -rwxr-xr-x 0 0 0 4406 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/search.tcl - - -rwxr-xr-x 0 0 0 1541 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/spin.tcl - - -rwxr-xr-x 0 0 0 2030 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/states.tcl - - -rwxr-xr-x 0 0 0 6938 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/style.tcl - - -rwxr-xr-x 0 0 0 2668 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/systray.tcl - - -rwxr-xr-x 0 0 0 5471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/tclIndex - - -rwxr-xr-x 0 0 0 11253 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/tcolor - - -rwxr-xr-x 0 0 0 4277 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/text.tcl - - -rwxr-xr-x 0 0 0 2188 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/textpeer.tcl - - -rwxr-xr-x 0 0 0 1095 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/timer - - -rwxr-xr-x 0 0 0 3271 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/toolbar.tcl - - -rwxr-xr-x 0 0 0 3178 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/tree.tcl - - -rwxr-xr-x 0 0 0 3421 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkbut.tcl - - -rwxr-xr-x 0 0 0 2420 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkmenu.tcl - - -rwxr-xr-x 0 0 0 2343 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttknote.tcl - - -rwxr-xr-x 0 0 0 4180 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkpane.tcl - - -rwxr-xr-x 0 0 0 1533 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkprogress.tcl - - -rwxr-xr-x 0 0 0 1422 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkscale.tcl - - -rwxr-xr-x 0 0 0 1631 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/ttkspin.tcl - - -rwxr-xr-x 0 0 0 11980 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/twind.tcl - - -rwxr-xr-x 0 0 0 3969 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/unicodeout.tcl - - -rwxr-xr-x 0 0 0 1640 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/vscale.tcl - - -rwxr-xr-x 0 0 0 23966 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/widget - - -rwxr-xr-x 0 0 0 5771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/demos/windowicons.tcl - - -rwxr-xr-x 0 0 0 5800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/dialog.tcl - - -rwxr-xr-x 0 0 0 18658 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/entry.tcl - - -rwxr-xr-x 0 0 0 4856 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/focus.tcl - - -rwxr-xr-x 0 0 0 15648 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/fontchooser.tcl - - -rwxr-xr-x 0 0 0 13074 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/iconbadges.tcl - - -rwxr-xr-x 0 0 0 16403 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/iconlist.tcl - - -rwxr-xr-x 0 0 0 2380 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/icons.tcl - - -rwxr-xr-x 0 0 0 322 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/README - - -rwxr-xr-x 0 0 0 32891 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/logo.eps - - -rwxr-xr-x 0 0 0 2341 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/logo100.gif - - -rwxr-xr-x 0 0 0 1670 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/logo64.gif - - -rwxr-xr-x 0 0 0 11000 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/logoLarge.gif - - -rwxr-xr-x 0 0 0 3889 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/logoMed.gif - - -rwxr-xr-x 0 0 0 27800 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo.eps - - -rwxr-xr-x 0 0 0 1615 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo100.gif - - -rwxr-xr-x 0 0 0 2489 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo150.gif - - -rwxr-xr-x 0 0 0 2981 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo175.gif - - -rwxr-xr-x 0 0 0 3491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo200.gif - - -rwxr-xr-x 0 0 0 1171 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/pwrdLogo75.gif - - -rwxr-xr-x 0 0 0 5473 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/images/tai-ku.gif - - -rwxr-xr-x 0 0 0 13771 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/listbox.tcl - - -rwxr-xr-x 0 0 0 9570 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/megawidget.tcl - - -rwxr-xr-x 0 0 0 38199 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/menu.tcl - - -rwxr-xr-x 0 0 0 29352 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/mkpsenc.tcl - - -rwxr-xr-x 0 0 0 17249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgbox.tcl - - -rwxr-xr-x 0 0 0 4632 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/cs.msg - - -rwxr-xr-x 0 0 0 4604 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/da.msg - - -rwxr-xr-x 0 0 0 5495 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/de.msg - - -rwxr-xr-x 0 0 0 6249 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/el.msg - - -rwxr-xr-x 0 0 0 3882 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/en.msg - - -rwxr-xr-x 0 0 0 63 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/en_gb.msg - - -rwxr-xr-x 0 0 0 4643 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/eo.msg - - -rwxr-xr-x 0 0 0 4611 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/es.msg - - -rwxr-xr-x 0 0 0 5649 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/fi.msg - - -rwxr-xr-x 0 0 0 4491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/fr.msg - - -rwxr-xr-x 0 0 0 4871 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/hu.msg - - -rwxr-xr-x 0 0 0 4423 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/it.msg - - -rwxr-xr-x 0 0 0 5196 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/nl.msg - - -rwxr-xr-x 0 0 0 5419 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/pl.msg - - -rwxr-xr-x 0 0 0 4578 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/pt.msg - - -rwxr-xr-x 0 0 0 6260 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/ru.msg - - -rwxr-xr-x 0 0 0 4471 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/sv.msg - - -rwxr-xr-x 0 0 0 5920 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/msgs/zh_cn.msg - - -rwxr-xr-x 0 0 0 1580 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/optMenu.tcl - - -rwxr-xr-x 0 0 0 9491 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/palette.tcl - - -rwxr-xr-x 0 0 0 5162 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/panedwindow.tcl - - -rwxr-xr-x 0 0 0 220 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/pkgIndex.tcl - - -rwxr-xr-x 0 0 0 42564 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/print.tcl - - -rwxr-xr-x 0 0 0 7372 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/safetk.tcl - - -rwxr-xr-x 0 0 0 7928 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/scale.tcl - - -rwxr-xr-x 0 0 0 6496 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/scaling.tcl - - -rwxr-xr-x 0 0 0 14049 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/scrlbar.tcl - - -rwxr-xr-x 0 0 0 15637 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/spinbox.tcl - - -rwxr-xr-x 0 0 0 14520 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/systray.tcl - - -rwxr-xr-x 0 0 0 20142 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/tclIndex - - -rwxr-xr-x 0 0 0 4439 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/tearoff.tcl - - -rwxr-xr-x 0 0 0 36150 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/text.tcl - - -rwxr-xr-x 0 0 0 26717 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/tk.tcl - - -rwxr-xr-x 0 0 0 5543 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/tkAppInit.c - - -rwxr-xr-x 0 0 0 37326 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/tkfbox.tcl - - -rwxr-xr-x 0 0 0 5338 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/altTheme.tcl - - -rwxr-xr-x 0 0 0 5342 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/aquaTheme.tcl - - -rwxr-xr-x 0 0 0 2916 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/button.tcl - - -rwxr-xr-x 0 0 0 6619 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/clamTheme.tcl - - -rwxr-xr-x 0 0 0 4739 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/classicTheme.tcl - - -rwxr-xr-x 0 0 0 15488 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/combobox.tcl - - -rwxr-xr-x 0 0 0 4439 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/cursors.tcl - - -rwxr-xr-x 0 0 0 7477 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/defaults.tcl - - -rwxr-xr-x 0 0 0 18034 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/entry.tcl - - -rwxr-xr-x 0 0 0 5031 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/fonts.tcl - - -rwxr-xr-x 0 0 0 6202 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/menubutton.tcl - - -rwxr-xr-x 0 0 0 7242 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/notebook.tcl - - -rwxr-xr-x 0 0 0 2028 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/panedwindow.tcl - - -rwxr-xr-x 0 0 0 1218 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/progress.tcl - - -rwxr-xr-x 0 0 0 2580 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/scale.tcl - - -rwxr-xr-x 0 0 0 2956 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/scrollbar.tcl - - -rwxr-xr-x 0 0 0 2353 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/sizegrip.tcl - - -rwxr-xr-x 0 0 0 5309 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/spinbox.tcl - - -rwxr-xr-x 0 0 0 11898 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/treeview.tcl - - -rwxr-xr-x 0 0 0 6444 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/ttk.tcl - - -rwxr-xr-x 0 0 0 7293 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/utils.tcl - - -rwxr-xr-x 0 0 0 9358 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/vistaTheme.tcl - - -rwxr-xr-x 0 0 0 3894 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/winTheme.tcl - - -rwxr-xr-x 0 0 0 3139 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/ttk/xpTheme.tcl - - -rwxr-xr-x 0 0 0 25855 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/lib/tk9.0/xmfbox.tcl - - lrwxr-xr-x 0 0 0 0 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/share/man/man1/python3.1 -> python3.12.1 - - -rwxr-xr-x 0 0 0 20124 Jan 1 2023 ./app.runfiles/aspect_rules_py++python_interpreters+python_3_12_aarch64_unknown_linux_gnu/share/man/man1/python3.12.1 diff --git a/e2e/cases/uv-deps-650/crossbuild/test_crossbuild_pyc.sh b/e2e/cases/uv-deps-650/crossbuild/test_crossbuild_pyc.sh deleted file mode 100755 index 88e8415e4..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/test_crossbuild_pyc.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Verifies that cross-arch whl_install with compile_pyc succeeds. -# -# Regression test for the exec-platform interpreter fix: when building -# arm64 Linux packages on an amd64 host with compile_pyc=True, the -# compileall action must use the exec-platform (amd64) interpreter. -# If the wrong interpreter is selected, the action fails with -# "Exec format error" at build time, which Bazel surfaces as a test failure. -# -# The fact that this test builds at all (its data deps are built before the -# test runs) is the assertion. No runtime logic is needed. -set -euo pipefail - -DIR="${TEST_SRCDIR}/_main/uv-deps-650/crossbuild" - -# Confirm the arm64 layer tarballs were produced. The build of these targets -# exercises whl_install with compile_pyc=True against an arm64 target platform -# on whatever host this test runs on. -if ! ls "$DIR"/app_layers_*.tar.gz >/dev/null 2>&1; then - echo "FAIL: arm64 layer outputs not found in $DIR" - echo " This likely means the cross-arch whl_install build failed." - exit 1 -fi - -echo "PASS: cross-arch whl_install with compile_pyc succeeded (arm64 layers built on $(uname -m) host)" diff --git a/e2e/cases/uv-deps-650/crossbuild/test_exec_toolchain.sh b/e2e/cases/uv-deps-650/crossbuild/test_exec_toolchain.sh deleted file mode 100755 index 1ad332a18..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/test_exec_toolchain.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash -# Verifies that EXEC_TOOLS_TOOLCHAIN always resolves the exec-platform Python -# interpreter, even when the target platform is arm64. -# -# The whl_install and py_unpacked_wheel rules use ctx.toolchains[EXEC_TOOLS_TOOLCHAIN] -# to run unpack.py. That toolchain is registered with exec_compatible_with, so Bazel -# must always select the interpreter that runs on the build host — never an arm64 -# binary that would fail with "Exec format error" on an amd64 host. -# -# This test confirms that: when we transition to an arm64 target platform on -# an amd64 exec host, the resolved Python interpreter path still refers to an -# amd64 (host) binary. -set -euo pipefail - -DIR="${TEST_SRCDIR}/_main/uv-deps-650/crossbuild" - -native_path_file="$DIR/unpack_path.txt" -arm64_path_file="$DIR/unpack_path_for_arm64.txt" - -if [[ ! -f "$native_path_file" ]]; then - echo "FAIL: $native_path_file not found" - exit 1 -fi - -if [[ ! -f "$arm64_path_file" ]]; then - echo "FAIL: $arm64_path_file not found" - exit 1 -fi - -native_path=$(cat "$native_path_file") -arm64_path=$(cat "$arm64_path_file") - -echo "Native exec Python path: $native_path" -echo "Arm64-target exec Python path: $arm64_path" - -# The arm64 platform transition changes the configuration fingerprint (the -# ST-* hash in the output path) even when the resolved interpreter is the same -# exec-platform tool. Path equality is therefore not a valid assertion. -# -# What matters is that neither build resolved an arm64/aarch64 interpreter. If -# toolchain resolution used the target platform instead of the exec platform, -# the path would contain "arm64" or "aarch64" and the interpreter would fail at -# runtime with "Exec format error". -if [[ "$arm64_path" == *"arm64"* ]] || [[ "$arm64_path" == *"aarch64"* ]]; then - echo "FAIL: arm64-target exec Python path contains arm64/aarch64 — exec platform not honoured." - echo " Path: $arm64_path" - exit 1 -fi - -if [[ "$native_path" == *"arm64"* ]] || [[ "$native_path" == *"aarch64"* ]]; then - echo "FAIL: native exec Python path unexpectedly contains arm64/aarch64." - echo " Path: $native_path" - exit 1 -fi - -echo "PASS: EXEC_TOOLS_TOOLCHAIN resolved exec-platform Python for arm64 target ($(uname -m) host)" \ No newline at end of file diff --git a/e2e/cases/uv-deps-650/setup.MODULE.bazel b/e2e/cases/uv-deps-650/setup.MODULE.bazel index 6326b4590..843e5a375 100644 --- a/e2e/cases/uv-deps-650/setup.MODULE.bazel +++ b/e2e/cases/uv-deps-650/setup.MODULE.bazel @@ -16,23 +16,6 @@ uv.project( lock = "//uv-deps-650/airflow:uv.lock", pyproject = "//uv-deps-650/airflow:pyproject.toml", ) -uv.project( - default_build_dependencies = [ - "build", - "cffi", - "setuptools", - ], - hub_name = "pypi_uv_deps_650", - lock = "//uv-deps-650/crossbuild:uv.lock", - pyproject = "//uv-deps-650/crossbuild:pyproject.toml", -) -uv.override_package( - name = "python-geohash", - lock = "//uv-deps-650/crossbuild:uv.lock", - pre_build_patch_strip = 1, - pre_build_patches = ["//uv-deps-650/crossbuild:require_cxx_driver.patch"], - resource_set = "mem_4g", -) uv.project( hub_name = "pypi_uv_deps_650", lock = "//uv-deps-650/extras:uv.lock", diff --git a/e2e/cases/uv-gazelle-778/BUILD.bazel b/e2e/cases/uv-gazelle-778/BUILD.bazel index df6d049b7..5fb4556f5 100644 --- a/e2e/cases/uv-gazelle-778/BUILD.bazel +++ b/e2e/cases/uv-gazelle-778/BUILD.bazel @@ -1,7 +1,7 @@ load("@aspect_rules_py//uv:defs.bzl", "gazelle_python_manifest") # Exercise generating a Gazelle manifest covering a ton of venvs. Reads -# from the //uv-deps-650 hub which already has the 4-project shape +# from the //uv-deps-650 hub which already has the 3-project shape # this case needs to exercise. # # Documented exception to per-case isolation: this test applies Gazelle to @@ -16,7 +16,6 @@ gazelle_python_manifest( # Note that we _merge_ the package mappings from several configurations. venvs = [ "airflow", - "crossbuild", "extras", "say", ], diff --git a/e2e/cases/uv-sdist-jdk-build/BUILD.bazel b/e2e/cases/uv-sdist-jdk-build/BUILD.bazel index 7d36ea4af..6064e0bb3 100644 --- a/e2e/cases/uv-sdist-jdk-build/BUILD.bazel +++ b/e2e/cases/uv-sdist-jdk-build/BUILD.bazel @@ -1,15 +1,16 @@ # Regression test for the JDK toolchain wiring in pep517_native_whl, # layered with the `uv.override_package(toolchains = [...], env = {...})` -# plumbing (see setup.MODULE.bazel). The test target is tagged `manual` — -# jpype1's scikit-build-core / cmake / ninja chain doesn't actually -# compile inside the Bazel sandbox today, so the regression coverage -# lives in: -# -# - //uv/private/pep517_whl:toolchain_env_test (analysis-level) -# - //:snapshots_*_test (BUILD-template output) -# -# This target stays in the repo as the entry point for any future work -# to make the full sdist compile succeed end-to-end. +# plumbing (see setup.MODULE.bazel). The test target is tagged `manual` here +# specifically because this hub's JAVA_HOME points at rules_java's default +# remotejdk (Azul Zulu), which gets jpype1's CMake configure past Java/JNI +# detection but then fails needing `ant` on PATH — this hub has no Ant +# vendored. The full, working end-to-end version (real Eclipse Temurin JDK, +# hermetically vendored Apache Ant, actual cross-compile + QEMU execution) +# lives in `//e2e/crossbuild/jpype1`; that's the real regression coverage +# for this toolchain combination now. This target and its analysis-level +# siblings (//uv/private/pep517_whl:toolchain_env_test, //:snapshots_*_test) +# stay for the narrower "does the env/toolchain plumbing reach the action" +# check, which doesn't need Ant to answer. load("@aspect_rules_py//py:defs.bzl", "py_test") From 884fc56c49e10d42683194632a53db43da4e5eb5 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 7 Aug 2026 12:08:20 -0600 Subject: [PATCH 19/56] typing e2e --- e2e/README.md | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/e2e/README.md b/e2e/README.md index d1aa5fa26..a88516e7d 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -35,15 +35,34 @@ workspace above must not carry: its `.bazelrc` turns on the rules_python provide compatibility layer, so rules_python `py_*` targets can depend on a rules_py `py_library`. Its `test.sh` asserts the same dependency is rejected with the flag off. -`crossbuild` hosts the rules_pycross ports (`pycross-*`): suites that force -packages to build from their sdists — pure-Python backends, setuptools C -extensions, pre/post-install patch phases, the distutils probe — and assert -properties of the resulting wheels, including rebuilding them under non-host -target platforms via `collect_wheels`. They live apart from `cases/` because -this workspace is where the cross-compilation test matrix grows, and their -sdist hubs carry package-specific overrides (`default_build_dependencies`, -patches, `resource_set`) that shouldn't leak onto unrelated cases sharing a -module — see its `MODULE.bazel` docstring. +`crossbuild` covers `pep517_native_whl`'s cross-compilation path across five +PEP 517 backends, each with more than one real, popular package so no +backend's cross support rests on a single lucky case: two plain +setuptools/distutils C extensions (`geohash`, `psutil`), `contourpy` +(meson-python), two scikit-build-core/CMake packages (`awkward_cpp`, +`jpype1` — the latter also needing a real Eclipse Temurin JDK and a +hermetically vendored Apache Ant, both fetched directly rather than relying +on rules_java's default remotejdk, which is actually Azul Zulu, or a system +`ant`), two maturin/PyO3 Rust packages (`rpds_py`, `pydantic_core`), and +`bcrypt` (setuptools-rust — a different real-world Rust-in-Python +integration than maturin, with no build-backend value of its own to detect +it by). Every case is built and packaged for linux/amd64 and linux/arm64 +from the same amd64 exec host and actually executed — QEMU for the Linux +targets — not just inspected. The same workspace hosts the rules_pycross +ports (`pycross-*`), which force packages to build from their sdists and +assert properties of the resulting wheels, including rebuilding them under +non-host target platforms via `collect_wheels`. One more package +(`zstandard`) also ships official prebuilt wheels; its case diffs our +cross-compiled output against theirs byte-for-byte instead of checking +against a hardcoded expected value. These suites are isolated rather than +packages under `e2e/cases` because their pip hubs need package-specific +configuration (`default_build_dependencies`, pre-build patches, a larger +`resource_set`) that would otherwise leak onto unrelated packages sharing +the hub — see the module docstring in its `MODULE.bazel`. On a macOS runner +(the `smoke` job, see below) it additionally builds and runs for +arm64/amd64 macOS via the Xcode SDK, executing the amd64 one under +Rosetta 2 — see its `test.sh` for why that half can't just be more +`platform_transition_filegroup` targets under `//...`. Each isolated workspace points back at repo-root rules_py with `local_path_override(path = "../..")`. From 751c00b6630c32460b371ce57531f79f379c6c7d Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Mon, 10 Aug 2026 00:19:01 -0600 Subject: [PATCH 20/56] =?UTF-8?q?sdists=20darwin=E2=86=92linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/uv.md | 27 +++-- e2e/cases/uv-deps-650/test.sh | 76 ++++++++++++ e2e/crossbuild/.bazelversion | 2 +- e2e/crossbuild/MODULE.bazel | 16 ++- e2e/crossbuild/MODULE.bazel.lock | 17 ++- e2e/crossbuild/awkward_cpp/BUILD.bazel | 11 +- e2e/crossbuild/contourpy/BUILD.bazel | 4 +- e2e/crossbuild/geohash/BUILD.bazel | 6 +- e2e/crossbuild/tools/BUILD.bazel | 16 ++- e2e/crossbuild/tools/rust_layer.bzl | 34 ++++-- uv/private/pep517_whl/build_helper.py | 158 ++++++++++++++++++++++--- uv/private/pep517_whl/rule.bzl | 16 +-- 12 files changed, 313 insertions(+), 70 deletions(-) create mode 100755 e2e/cases/uv-deps-650/test.sh diff --git a/docs/uv.md b/docs/uv.md index 70a8d47d4..cd3713577 100644 --- a/docs/uv.md +++ b/docs/uv.md @@ -295,7 +295,12 @@ Under cross mode the build action: 1. Extracts the C++ toolchain selected for the target platform (compiler, compile/link flags, sysroot) and re-materializes it as compiler wrapper scripts, so flags such as `-target` / `--sysroot` survive the PEP 517 - backend's own command construction. + backend's own command construction. Per backend it also generates the + cross artifact the backend requires: a meson cross file plus exe_wrapper + (meson-python only auto-synthesizes cross files on macOS), a CMake + toolchain file (scikit-build-core's cross detection likewise only covers + macOS), and a `rustc --sysroot` wrapper plus sandboxed `CARGO_HOME` for + cargo-based backends (maturin, setuptools-rust). 2. Overrides the target interpreter's sysconfig for the build (`_PYTHON_SYSCONFIGDATA_NAME` pointing at the target runtime's `_sysconfigdata_*.py`, `_PYTHON_HOST_PLATFORM`, and the target's @@ -308,16 +313,22 @@ Under cross mode the build action: 4. Validates the produced wheel's platform tag against the target OS/CPU and fails the action if the backend leaked the exec platform into the tag. -A working end-to-end example (Darwin → Linux arm64/amd64, `python-geohash` -built from sdist, with architecture and `EXT_SUFFIX` assertions) lives in -`e2e/cases/uv-deps-650/crossbuild/`. +A working end-to-end suite lives in `e2e/crossbuild/`: real packages forced +to build from sdist (`[tool.uv] no-binary-package`) and cross-compiled for +linux/amd64 and linux/arm64, covering setuptools (`python-geohash`, +`msgpack`, `psutil`), setuptools+CFFI (`zstandard`), setuptools-rust +(`tiktoken`, `bcrypt`), maturin/PyO3 (`pydantic_core`, `rpds_py`), +meson-python (`contourpy`, `numpy`), and scikit-build-core/CMake +(`awkward_cpp`, `jpype1`). Each case asserts the ELF architecture of the +produced `.so` (and its `EXT_SUFFIX`, where the filename carries one) and +then actually runs the resulting container image (QEMU for arm64). `//geohash` additionally covers a +macOS arm64 → macOS amd64 cross target when run from a macOS host (see +`e2e/crossbuild/test.sh`). Current limitations: -- Only setuptools-style PEP 517 backends are exercised in cross mode. meson / - meson-python, cmake, and maturin/PyO3 packages may build but are not yet - covered; CPU-feature detection that runs compiled binaries cannot work in - cross mode and needs per-package baselines. +- CPU-feature detection that runs compiled binaries cannot work in cross + mode and needs per-package baselines. - No shared-library "repair" (auditwheel/delocate style bundling) is performed yet; wheels linking against Bazel-provided native libraries need care. - Windows targets and MSVC are not supported. diff --git a/e2e/cases/uv-deps-650/test.sh b/e2e/cases/uv-deps-650/test.sh new file mode 100755 index 000000000..9ba171612 --- /dev/null +++ b/e2e/cases/uv-deps-650/test.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +# +# Runtime smoke for the cross-built geohash images. +# +# The ELF checks in crossbuild/BUILD.bazel prove the cross-compiled extension +# has the right architecture bytes; this proves it imports and executes on the +# target architecture. dlopen resolves the symbols an ELF shared link is +# allowed to leave undefined, so a wheel that "linked fine" without its C++ +# runtime fails here and nowhere else. Needs a real `bazel run` (oci_load) +# plus a container daemon, so it cannot be an sh_test under //.... +set -uo pipefail + +cd "$(dirname "$0")/.." || exit 1 + +BAZEL="${BAZEL:-bazel}" +PKG="//uv-deps-650/crossbuild" + +if ! command -v docker >/dev/null 2>&1 || ! docker info >/dev/null 2>&1; then + echo "SKIP: no usable container daemon; cross-arch runtime smoke not run" + exit 0 +fi + +status=0 + +smoke() { + local leg="$1" expected_machine="$2" + local tag="rules-py/geohash-crossbuild:${leg}" + local platform="linux/${leg}" + + echo "== ${leg}: build and load image ==" + if ! "$BAZEL" run "${PKG}:geohash_${leg}_image_load"; then + echo "FAIL: ${leg}: building/loading the image failed" >&2 + status=1 + return 0 + fi + + # Infra probe, separate from the product check: /bin/true comes from the + # ubuntu base layer, so if even that cannot exec, this host lacks binfmt + # emulation for ${platform} — an environment gap, not a product bug. + # GitHub's ubuntu runners ship no handlers; install them once. + if ! docker run --rm --platform "${platform}" --entrypoint /bin/true "${tag}" >/dev/null 2>&1; then + if [ "$(uname -s)" = "Linux" ]; then + docker run --privileged --rm tonistiigi/binfmt --install "${leg}" >/dev/null 2>&1 || true + fi + if ! docker run --rm --platform "${platform}" --entrypoint /bin/true "${tag}" >/dev/null 2>&1; then + echo "SKIP: ${leg}: no ${platform} emulation available on this host" + return 0 + fi + fi + + echo "== ${leg}: run the extension on ${platform} ==" + local output + if ! output="$(docker run --rm --platform "${platform}" "${tag}" 2>&1)"; then + echo "${output}" >&2 + echo "FAIL: ${leg}: geohash smoke exited nonzero" >&2 + status=1 + return 0 + fi + echo "${output}" + if ! grep -q "GEOHASH_SMOKE_OK" <<<"${output}"; then + echo "FAIL: ${leg}: smoke ran but did not report GEOHASH_SMOKE_OK" >&2 + status=1 + return 0 + fi + if ! grep -q "machine=${expected_machine}" <<<"${output}"; then + echo "FAIL: ${leg}: expected machine=${expected_machine} in output" >&2 + status=1 + return 0 + fi + echo "PASS: ${leg} extension executed on ${platform}" +} + +smoke arm64 aarch64 +smoke amd64 x86_64 + +exit "${status}" diff --git a/e2e/crossbuild/.bazelversion b/e2e/crossbuild/.bazelversion index 6adf95a25..074c37b76 100644 --- a/e2e/crossbuild/.bazelversion +++ b/e2e/crossbuild/.bazelversion @@ -1,4 +1,4 @@ -8.5.1 +8.6.0 # The first line of this file is used by Bazelisk and Bazel to be sure # the right version of Bazel is used to build and test this repo. # This also defines which version is used on CI. diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index bbac0109a..380726581 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -106,6 +106,7 @@ bazel_dep(name = "rules_cc", version = "0.2.16") bazel_dep(name = "tar.bzl", version = "0.10.1") bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "gcc_toolchain", version = "0.11.0") +bazel_dep(name = "llvm", version = "0.8.3") bazel_dep(name = "rules_oci", version = "2.2.7") bazel_dep(name = "rules_shell", version = "0.4.1") bazel_dep(name = "container_structure_test", version = "1.22.1") @@ -160,10 +161,23 @@ register_toolchains( "@gcc_toolchain_aarch64//:cc_toolchain", ) +# Registered AFTER gcc_toolchain on purpose: on the Linux CI runner both can +# satisfy exec=linux → target=linux and registration order makes strict GCC +# win, preserving the sysroot/flag-propagation guarantees documented above. +# llvm only ever resolves for the edge gcc_toolchain cannot fill — a macOS +# host cross-building the linux cases locally (exec=darwin → target=linux). +register_toolchains("@llvm//toolchain:all") + rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( edition = "2021", - extra_target_triples = ["aarch64-unknown-linux-gnu"], + # Both linux triples: on the linux/amd64 CI runner x86_64 is the host + # triple (redundant there), but a darwin host needs it as an explicit + # cross target for the amd64 cases. + extra_target_triples = [ + "aarch64-unknown-linux-gnu", + "x86_64-unknown-linux-gnu", + ], versions = ["1.90.0"], ) use_repo(rust, "rust_toolchains") diff --git a/e2e/crossbuild/MODULE.bazel.lock b/e2e/crossbuild/MODULE.bazel.lock index e93959739..f196b3cd8 100644 --- a/e2e/crossbuild/MODULE.bazel.lock +++ b/e2e/crossbuild/MODULE.bazel.lock @@ -33,11 +33,13 @@ "https://bcr.bazel.build/modules/bazel_features/1.34.0/MODULE.bazel": "e8475ad7c8965542e0c7aac8af68eb48c4af904be3d614b6aa6274c092c2ea1e", "https://bcr.bazel.build/modules/bazel_features/1.38.0/MODULE.bazel": "f9b8a9c890ebd216b4049fd12a31d3c2602e3403c7af636b04fbbd7453edc9c9", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.42.0/MODULE.bazel": "e8ca15cb2639c5f12183db6dcb678735555d0cdd739b32a0418b6532b5e565f8", "https://bcr.bazel.build/modules/bazel_features/1.43.0/MODULE.bazel": "defa2226f06ba20550d6548c3a2ea2a7929634437a52973869c20c225450eb91", "https://bcr.bazel.build/modules/bazel_features/1.43.0/source.json": "1c4207dc858d6de0eecef30026793616bbf420c74aac27b6bad212534a730437", "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d", + "https://bcr.bazel.build/modules/bazel_lib/3.2.2/MODULE.bazel": "e2c890c8a515d6bca9c66d47718aa9e44b458fde64ec7204b8030bf2d349058c", "https://bcr.bazel.build/modules/bazel_lib/3.3.1/MODULE.bazel": "732a0d516cf6400d9b3136e4356258aef1bf91de8d5240f87f0112f098920c1d", "https://bcr.bazel.build/modules/bazel_lib/3.3.1/source.json": "8e5175d7b4125a39b8941d01e38039934d058e03804f46a2b8fd7ae6316b1ce2", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", @@ -78,6 +80,8 @@ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/llvm/0.8.3/MODULE.bazel": "dbc1bc13171f8f9980a75524883abef1c491613e8d8d805cd4ffa3767ba9708e", + "https://bcr.bazel.build/modules/llvm/0.8.3/source.json": "4b11874c26a9de53c03a25a517ebc36dee6b458c920fe9ed65e3ca279ff19775", "https://bcr.bazel.build/modules/package_metadata/0.0.2/MODULE.bazel": "fb8d25550742674d63d7b250063d4580ca530499f045d70748b1b142081ebb92", "https://bcr.bazel.build/modules/package_metadata/0.0.3/MODULE.bazel": "77890552ecea9e284b5424c9de827a58099348763a4359e975c359a83d4faa83", "https://bcr.bazel.build/modules/package_metadata/0.0.3/source.json": "742075a428ad12a3fa18a69014c2f57f01af910c6d9d18646c990200853e641a", @@ -176,6 +180,7 @@ "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", + "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8", "https://bcr.bazel.build/modules/rules_python/1.9.0/MODULE.bazel": "afc3a05f29f09f2d3ee95ad99a145250dab41a2b2d8d6f82cc91936b3213282c", "https://bcr.bazel.build/modules/rules_python/1.9.0/source.json": "3921ea0b65298d51aead5b9e4a82203d7be9b5918619b58b53f1c259f4e63169", "https://bcr.bazel.build/modules/rules_rust/0.68.0/MODULE.bazel": "dcb4fe4396b49d3b2d72bccf634d27499dd2a58dcdfccfe8e17ba15c4bd150ae", @@ -192,9 +197,11 @@ "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", "https://bcr.bazel.build/modules/tar.bzl/0.10.1/MODULE.bazel": "bf5fda5b5ccef8c3c4a5f4886144377386e0baa382972f257acb42dcf40ea908", - "https://bcr.bazel.build/modules/tar.bzl/0.10.1/source.json": "3f1beb35acf53c270a9de493cdc775a985551d7069cfcf24e136b42f683bbb10", + "https://bcr.bazel.build/modules/tar.bzl/0.10.4/MODULE.bazel": "e8f9ff79199e8d9eaad7f1b0a77ad74b30bb82d794b87d8ca942bead5de83ae9", + "https://bcr.bazel.build/modules/tar.bzl/0.10.4/source.json": "20143442376c03426f6135292ba02d825cb75308aa47e6bf42dd4cc5a435c2ff", "https://bcr.bazel.build/modules/tar.bzl/0.5.1/MODULE.bazel": "7c2eb3dcfc53b0f3d6f9acdfd911ca803eaf92aadf54f8ca6e4c1f3aee288351", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/with_cfg.bzl/0.12.0/MODULE.bazel": "b573395fe63aef4299ba095173e2f62ccfee5ad9bbf7acaa95dba73af9fc2b38", "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/MODULE.bazel": "6b6c543e415d2a502954766e50c6a6144a131687f2751b62157a9250e2b04982", "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/source.json": "12363ac76d821f6c7dabfebbd673615391da06e2e33f576402d31a96a7b56532", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", @@ -240,7 +247,7 @@ }, "@@container_structure_test+//:repositories.bzl%extension": { "general": { - "bzlTransitiveDigest": "jyF1qaqe3SV7GOwa1PtIiJk04CPKLgKbWZoD1aX28NU=", + "bzlTransitiveDigest": "Yi2XrRCMXgBjN02PBU8hDqf505D+o2Tr5jihM3CNIE4=", "usagesDigest": "uXk1ym4ketE3OMAHoR5fUuuv8pOmi0aSyCe28koTwfA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -351,7 +358,7 @@ }, "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "rL/34P1aFDq2GqVC2zCFgQ8nTuOC6ziogocpvG50Qz8=", + "bzlTransitiveDigest": "nvW/NrBXlAmiQw99EMGKkLaD2KbNp2mQDlxdfpr+0Ls=", "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -415,7 +422,7 @@ }, "@@rules_oci+//oci:extensions.bzl%oci": { "general": { - "bzlTransitiveDigest": "btafL5urts9jH0gR3UVdsG7OprxGfLk14aFXX/G5FdU=", + "bzlTransitiveDigest": "jW3m6/g1MkuVCrNHyiZ4EJQOvAUToDirFFftOvDpfYs=", "usagesDigest": "9ABtbohz+3s6dpNBjutox5VF5aRBXAiiB40cBGEQvYM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -619,7 +626,7 @@ }, "@@rules_python+//python/uv:uv.bzl%uv": { "general": { - "bzlTransitiveDigest": "xMgnVVV6SeyGCaYQT+4rYddx63q6+JXtyCrlLeA8OLM=", + "bzlTransitiveDigest": "yG9F6L2IZXKRbD/aIUa6sU7uITLUTBKOMWPbIvl1VdM=", "usagesDigest": "6MjoD3H+netDdhklgMWks3NARpHVXxy8kfsMe9XXPa8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/e2e/crossbuild/awkward_cpp/BUILD.bazel b/e2e/crossbuild/awkward_cpp/BUILD.bazel index 727d55038..14ddd346e 100644 --- a/e2e/crossbuild/awkward_cpp/BUILD.bazel +++ b/e2e/crossbuild/awkward_cpp/BUILD.bazel @@ -1,9 +1,12 @@ # awkward-cpp ships official prebuilt wheels for linux/amd64 and # linux/arm64, but [tool.uv] no-binary-package forces it to build from -# sdist here. scikit-build-core (CMake) backend — pep517_native_whl doesn't -# support it yet. Its compiled libraries (libawkward*.so) are loaded via -# ctypes at runtime, not imported as CPython extension modules, so unlike -# //contourpy there's no EXT_SUFFIX/SOABI to check — only ELF arch. +# sdist here. scikit-build-core (CMake) backend: cross mode must supply a +# CMake toolchain file, since scikit-build-core's own cross-compile +# detection only covers macOS (see build_helper.py's +# _generate_cmake_toolchain_file). Its compiled libraries (libawkward*.so) +# are loaded via ctypes at runtime, not imported as CPython extension +# modules, so unlike //contourpy there's no EXT_SUFFIX/SOABI to check — +# only ELF arch. load("//tools:cross_case.bzl", "pep517_cross_case") diff --git a/e2e/crossbuild/contourpy/BUILD.bazel b/e2e/crossbuild/contourpy/BUILD.bazel index 40fd8143f..489789a36 100644 --- a/e2e/crossbuild/contourpy/BUILD.bazel +++ b/e2e/crossbuild/contourpy/BUILD.bazel @@ -1,7 +1,9 @@ # contourpy ships official prebuilt wheels for linux/amd64 and linux/arm64, # but [tool.uv] no-binary-package forces it to build from sdist here. Unlike # //geohash (setuptools) and //zstandard (setuptools+CFFI), this is a -# meson-python backend — pep517_native_whl doesn't support it yet. +# meson-python backend: cross mode must generate a meson cross file and +# exe_wrapper for it, since meson-python only auto-synthesizes cross files +# on macOS (see build_helper.py's _generate_meson_cross_file). load("//tools:cross_case.bzl", "pep517_cross_case") diff --git a/e2e/crossbuild/geohash/BUILD.bazel b/e2e/crossbuild/geohash/BUILD.bazel index 63b21f86c..ac33223cc 100644 --- a/e2e/crossbuild/geohash/BUILD.bazel +++ b/e2e/crossbuild/geohash/BUILD.bazel @@ -4,7 +4,7 @@ # platform-transition-only packaging coverage. load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") -load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_binary", "platform_transition_filegroup") load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@container_structure_test//:defs.bzl", "container_structure_test") load("@rules_oci//oci:defs.bzl", "oci_image") @@ -142,9 +142,9 @@ sh_test( # to os:macos regardless of the real host, so target_compatible_with can't # tell Linux apart from macOS here. test.sh invokes both by label after # checking uname. -platform_transition_filegroup( +platform_transition_binary( name = "geohash_amd64_macos_bin", - srcs = [":geohash_bin"], + binary = ":geohash_bin", tags = ["manual"], target_platform = "//:amd64_macos", ) diff --git a/e2e/crossbuild/tools/BUILD.bazel b/e2e/crossbuild/tools/BUILD.bazel index 6c332822a..43e6c78c8 100644 --- a/e2e/crossbuild/tools/BUILD.bazel +++ b/e2e/crossbuild/tools/BUILD.bazel @@ -3,7 +3,7 @@ load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@rules_shell//shell:sh_test.bzl", "sh_test") load(":ant_layer.bzl", "ant_home") -load(":rust_layer.bzl", "rust_pinned_sysroot") +load(":rust_layer.bzl", "rust_host_sysroot") load(":toolchain_test.bzl", "exec_python_path") exports_files([ @@ -12,15 +12,13 @@ exports_files([ "check_so_suffix.sh", ]) -# The exec-platform (x86_64) rust_toolchain's sysroot, pinned by label so it's -# available even when the rest of the build is transitioned to arm64 — see -# rust_layer.bzl for why current_rust_toolchain alone isn't enough. -rust_pinned_sysroot( +# The host-targeting rust_toolchain's sysroot, re-resolved under the exec +# transition so it stays correct even when the rest of the build is +# transitioned to another platform — see rust_layer.bzl for why plain +# current_rust_toolchain alone isn't enough. +rust_host_sysroot( name = "rust_host_sysroot", - # rust_linux_x86_64__x86_64-unknown-linux-gnu__stable (in @rust_toolchains) - # is the toolchain() *resolution* wrapper; the actual rust_toolchain rule - # instance (the one with ToolchainInfo/TemplateVariableInfo) is this repo. - actual = "@@rules_rust++rust+rust_linux_x86_64__x86_64-unknown-linux-gnu__stable_tools//:rust_toolchain", + actual = "@rules_rust//rust/toolchain:current_rust_toolchain", visibility = ["//visibility:public"], ) diff --git a/e2e/crossbuild/tools/rust_layer.bzl b/e2e/crossbuild/tools/rust_layer.bzl index 0cae5a4d0..82fbc8550 100644 --- a/e2e/crossbuild/tools/rust_layer.bzl +++ b/e2e/crossbuild/tools/rust_layer.bzl @@ -1,17 +1,23 @@ -"""Exposes a specific (non-ambient-resolved) rust_toolchain's sysroot. +"""Exposes the host-targeting rust_toolchain's sysroot. `@rules_rust//rust/toolchain:current_rust_toolchain` resolves against the build's ambient --platforms, so under a cross (arm64) transition it returns the arm64-*targeting* toolchain — whose sysroot only carries LLVM's shared -libs for x86_64, not the x86_64 rust-std a build script/proc-macro (always -compiled for the exec platform) needs. This rule instead pins to a specific -`rust_toolchain` target by label, bypassing toolchain resolution entirely, -so a package can also pull in the plain x86_64-targeting toolchain's sysroot -regardless of which platform the rest of the build is transitioned to. +libs for the exec platform, not the exec platform's rust-std a build +script/proc-macro (always compiled for the exec platform) needs. This rule +re-resolves it under rules_py's exec_transition (--platforms := the host +platform), which hands back the host-*targeting* toolchain on any host — +x86_64-linux on the CI runner, aarch64-darwin on a macOS workstation — +without hardcoding either repository's label. """ -def _rust_pinned_sysroot_impl(ctx): - toolchain = ctx.attr.actual[platform_common.ToolchainInfo] +load("@aspect_rules_py//uv/private/pep517_whl:exec_transition.bzl", "exec_transition") + +def _rust_host_sysroot_impl(ctx): + actual = ctx.attr.actual + if type(actual) == "list": + actual = actual[0] + toolchain = actual[platform_common.ToolchainInfo] return [ DefaultInfo(files = toolchain.all_files), platform_common.TemplateVariableInfo({ @@ -19,13 +25,17 @@ def _rust_pinned_sysroot_impl(ctx): }), ] -rust_pinned_sysroot = rule( - implementation = _rust_pinned_sysroot_impl, +rust_host_sysroot = rule( + implementation = _rust_host_sysroot_impl, attrs = { "actual": attr.label( - doc = "A rust_toolchain target (not a toolchain_type alias) to pin to.", + cfg = exec_transition, + doc = "current_rust_toolchain, re-resolved with --platforms set to the host.", mandatory = True, ), + "_allowlist_function_transition": attr.label( + default = "@bazel_tools//tools/allowlists/function_transition_allowlist", + ), }, - doc = "Exposes `actual`'s sysroot as $(RUST_HOST_SYSROOT), bypassing toolchain resolution.", + doc = "Exposes the host-targeting rust_toolchain's sysroot as $(RUST_HOST_SYSROOT).", ) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index 97df4e73b..fbac63009 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -92,6 +92,7 @@ "-Wl,-start_group", "-Wl,-end_group", "-bundle", + "STRIP_DEBUG_SYMBOLS", }) _DROP_LINKER_PAIRS = frozenset({ @@ -120,6 +121,7 @@ is_cxx = {is_cxx!r} is_darwin = {is_darwin!r} static_libstdcxx_flags = {static_libstdcxx_flags!r} +exe_link_flags = {exe_link_flags!r} is_link = "-c" not in args filtered = [] @@ -153,10 +155,35 @@ # bug — and full static linking already covers libstdc++ too, making that # partial trick redundant for a binary that's never shipped anyway. is_shared = "-shared" in filtered -if is_link and not is_shared and not is_darwin: +if is_link and exe_link_flags: + # LLVM-style toolchain (nonempty exe_link_flags, see the "-nostdlib++" + # detection in build_helper): clang only reaches its crt objects and + # glibc/libc++ archives through the link action's -B/-L/--sysroot flags + # (no self-contained GCC-like prefix layout), and not every caller + # threads $LDSHARED through — rustc invokes this wrapper as "-C linker" + # with its own args, meson links its probe executables bare. Bake the + # flags into every link; duplicates from the $LDSHARED path are + # harmless to clang. No "-static" for probe executables here: the QEMU + # ld.so bug that motivates it is only reachable via gcc_toolchain on + # the Linux CI runner. + # rustc hardcodes "-lgcc_s" for its unwinder on *-linux-gnu targets; + # this toolchain ships no libgcc at all — statically fold in its + # libunwind instead (cargo-zigbuild's trick, same ABI surface). + filtered = ["-lunwind" if a == "-lgcc_s" else a for a in filtered] + filtered.extend(exe_link_flags) + if is_cxx: + # No implicit C++ stdlib under -nostdlib++; statically embed + # libc++ so the produced .so has no host-libstdc++ dependency + # (only static archives exist on the toolchain's search path). + filtered.extend(["-lc++", "-lc++abi"]) +elif is_link and not is_shared and not is_darwin: filtered.append("-static") elif is_cxx and is_link and not is_darwin: filtered.extend(static_libstdcxx_flags) +elif is_darwin and is_link and is_shared: + # Extension modules leave _Py* unresolved until dlopen; ld64 errors on + # them by default (ELF linkers don't), so mirror CPython's own LDSHARED. + filtered.append("-Wl,-undefined,dynamic_lookup") if is_link and lld_path: os.environ.setdefault("PATH", "") @@ -179,6 +206,14 @@ def _darwin_sysroot() -> Optional[str]: return None +def _xcode_developer_dir() -> Optional[str]: + """Return the active Xcode Developer directory, or None if unavailable.""" + try: + return check_output(["xcode-select", "-p"], text=True).strip() + except Exception: + return None + + def _absolutize_path(value: str) -> str: """Resolve a relative path to absolute, leaving absolute/empty values untouched. @@ -304,21 +339,34 @@ def _make_cross_compiler_wrapper( lld_path: Optional[str] = None, is_cxx: bool = False, is_darwin: bool = False, + exe_link_flags: Optional[list[str]] = None, ) -> str: wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) + + # "-bundle" and "-undefined dynamic_lookup" leak from a macOS *host* + # sysconfig and break ELF linkers, but when the *target* is darwin they + # are exactly how extension modules must link (unresolved _Py* symbols + # bind at dlopen time) — keep them there. + drop_exact = set(_DROP_LINKER_FLAGS) + drop_pairs = set(_DROP_LINKER_PAIRS) + if is_darwin: + drop_exact.discard("-bundle") + drop_pairs.discard("-undefined") + return _write_generated_file( wrapper, _CROSS_COMPILER_WRAPPER.format( compiler_path=compiler_path, wrapper_flags=wrapper_flags, - drop_exact=sorted(_DROP_LINKER_FLAGS), - drop_pairs=sorted(_DROP_LINKER_PAIRS), + drop_exact=sorted(drop_exact), + drop_pairs=sorted(drop_pairs), drop_prefixes=list(_DROP_LINKER_PREFIXES), lld_path=lld_path, debug_flag=_DEBUG_FLAG, is_cxx=is_cxx, is_darwin=is_darwin, static_libstdcxx_flags=list(_STATIC_LIBSTDCXX_FLAGS), + exe_link_flags=list(exe_link_flags or []), ), executable=True, ) @@ -433,8 +481,19 @@ def _compiler_env( if cross: wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) lld_path = _find_lld(cc_path) - cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin) - cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin) + + # An LLVM-style toolchain (BCR `llvm` module) reaches its crt objects + # and runtime archives only through the link action's flags; detect it + # by its "-nostdlib++" marker and bake those flags (sans "-shared") + # into the wrappers for probe-executable links. gcc_toolchain's driver + # is self-contained — it gets an empty list and keeps its "-static". + ldshared_flag_list = env.get("LDSHAREDFLAGS", "").split() + exe_link_flags = ( + [f for f in ldshared_flag_list if f != "-shared"] if "-nostdlib++" in ldshared_flag_list else [] + ) + + cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin, exe_link_flags=exe_link_flags) + cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin, exe_link_flags=exe_link_flags) # gcc_toolchain's own layout (/xbin/gcc, /sysroot/...): # a target-arch binary linked by this compiler needs ITS glibc/loader @@ -444,6 +503,29 @@ def _compiler_env( target_gcc_sysroot = path.join(path.dirname(path.dirname(cc_path)), "sysroot") if not is_darwin and path.isdir(target_gcc_sysroot): env["RULES_PY_TARGET_GCC_SYSROOT"] = target_gcc_sysroot + + # The llvm toolchain on a darwin exec host reports llvm-libtool-darwin + # as its static archiver — a Mach-O-only tool that meson then invokes + # with ar-style args ("csr ...") for the target's static libs. For ELF + # targets swap in the sibling llvm-ar, which is what those args and + # the target format actually require. + ar_path = env.get("AR", "") + if not is_darwin and path.basename(ar_path) == "llvm-libtool-darwin": + llvm_ar = path.join(path.dirname(ar_path), "llvm-ar") + if path.exists(llvm_ar): + env["AR"] = llvm_ar + + # apple_support's wrapped_clang substitutes __BAZEL_XCODE_DEVELOPER_DIR__ + # and __BAZEL_XCODE_SDKROOT__ in its arguments from these variables and + # hard-fails without DEVELOPER_DIR. Bazel injects them only into actions + # with Xcode execution requirements, which this PEP 517 action is not. + if is_darwin and _platform.system() == "Darwin": + if "DEVELOPER_DIR" not in env: + developer_dir = _xcode_developer_dir() + if developer_dir: + env["DEVELOPER_DIR"] = developer_dir + if sysroot and "SDKROOT" not in env: + env["SDKROOT"] = sysroot else: cc = _make_compiler_wrapper(tmpdir, "cc", cc_path, sysroot, is_darwin=is_darwin) cxx = _make_compiler_wrapper(tmpdir, "c++", cxx_path, sysroot, is_cxx=True, is_darwin=is_darwin) @@ -533,6 +615,7 @@ def _load_pyproject_data(worktree: str) -> Optional[Dict[str, object]]: # spelling: CMAKE_SYSTEM_NAME and the faked platform.system()/os.uname() # sysname both use it. _TITLECASE_OS = {"linux": "Linux", "darwin": "Darwin", "windows": "Windows"} +_SYS_PLATFORM = {"linux": "linux", "darwin": "darwin", "windows": "win32"} def _generate_cmake_toolchain_file( @@ -613,11 +696,21 @@ def _generate_meson_cross_file( different failure mode than the earlier "not runnable" one, but the same root cause of not telling qemu-user which glibc actually matches. """ - exe_wrapper = _write_generated_file( - path.join(tmpdir, "meson_exe_wrapper.py"), - _MESON_EXE_WRAPPER.format(qemu_ld_prefix=build_env.get("RULES_PY_TARGET_GCC_SYSROOT", "")), - executable=True, - ) + # The passthrough wrapper relies on the exec host transparently running + # target-arch ELFs (binfmt_misc + qemu-user) — a Linux-host capability. + # A darwin host cannot execute ELF at all, and an exe_wrapper that fails + # makes meson's sanity check fail outright; with needs_exe_wrapper=true + # and NO exe_wrapper, meson skips running its own checks instead, and + # projects calling cc.run() get meson's own explicit "can not run test + # applications" error — an honest host limitation, not a masked one. + exe_wrapper_line = "" + if _platform.system() == "Linux": + exe_wrapper = _write_generated_file( + path.join(tmpdir, "meson_exe_wrapper.py"), + _MESON_EXE_WRAPPER.format(qemu_ld_prefix=build_env.get("RULES_PY_TARGET_GCC_SYSROOT", "")), + executable=True, + ) + exe_wrapper_line = "exe_wrapper = ['{}']\n".format(exe_wrapper) return _write_generated_file( path.join(tmpdir, "cross_file.ini"), textwrap.dedent("""\ @@ -626,8 +719,7 @@ def _generate_meson_cross_file( cpp = '{cxx}' ar = '{ar}' strip = '{strip}' - exe_wrapper = ['{exe_wrapper}'] - + {exe_wrapper_line} [host_machine] system = '{system}' cpu_family = '{cpu_family}' @@ -639,7 +731,7 @@ def _generate_meson_cross_file( """).format( cc=build_env["CC"], cxx=build_env["CXX"], - exe_wrapper=exe_wrapper, + exe_wrapper_line=exe_wrapper_line, ar=build_env.get("AR", "ar"), strip=build_env.get("STRIP", "strip"), system=target_os, @@ -744,12 +836,27 @@ def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os _SITECUSTOMIZE_TEMPLATE = """\ import os import platform +import sys import collections +# ctypes parses os.uname().release at import time when the *host* is Darwin. +# Import it while uname and sys.platform are still real so the target's +# faked values never reach that parse. +try: + import ctypes +except ImportError: + pass + _machine = {machine!r} _sysname = {sysname!r} +_release = {release!r} + +# setup.py scripts routinely branch on sys.platform to decide which sources +# to even compile (psutil picks _psutil_osx.c vs _psutil_linux.c this way), +# and distutils keys its host-specific compiler customization on it too. +sys.platform = {sys_platform!r} -os.uname = lambda: os.uname_result((_sysname, "build", "", "", _machine)) +os.uname = lambda: os.uname_result((_sysname, "build", _release, "", _machine)) # CS_GLIBC_LIB_VERSION otherwise leaks the *host's* glibc version, which # feeds manylinux-tag determination in pip/packaging/subprocess. @@ -767,7 +874,7 @@ def _confstr(name): # back to the real host on this field, so build our own namedtuple instead # of the real type (mirrors crossenv's platform-patch.py). _PlatformUname = collections.namedtuple("uname_result", "system node release version machine processor") -_platform_uname = _PlatformUname(_sysname, "build", "", "", _machine, _machine) +_platform_uname = _PlatformUname(_sysname, "build", _release, "", _machine, _machine) platform.uname = lambda: _platform_uname platform.system = lambda: _sysname @@ -809,9 +916,20 @@ def _generate_cross_site(tmpdir: str, target_os: str, target_cpu: str) -> str: need (dual venvs, distutils.sysconfig, importlib.machinery interception). """ site_dir = path.join(tmpdir, ".cross_site") + + # ctypes' own import does int(os.uname().release.split(".")[0]) on Darwin, + # so the faked release must parse as a Darwin kernel version there. 20.0.0 + # is Darwin 20 = macOS 11.0, matching _derive_python_host_platform's + # macosx-11.0 baseline. Linux keeps "": nothing on that path parses it. + release = "20.0.0" if target_os == "darwin" else "" _write_generated_file( path.join(site_dir, "sitecustomize.py"), - _SITECUSTOMIZE_TEMPLATE.format(machine=target_cpu, sysname=_TITLECASE_OS.get(target_os, target_os)), + _SITECUSTOMIZE_TEMPLATE.format( + machine=target_cpu, + sysname=_TITLECASE_OS.get(target_os, target_os), + release=release, + sys_platform=_SYS_PLATFORM.get(target_os, target_os), + ), ) _write_generated_file(path.join(site_dir, "_manylinux.py"), _MANYLINUX_HOOK) return site_dir @@ -923,8 +1041,12 @@ def _validate_wheel_platform(wheel_filename: str) -> None: opts, _ = PARSER.parse_known_args() tmp_root = path.abspath(opts.outdir) + ".tmp" -# Sandboxed/remote actions get a fresh root each run, so we don't expect a stale tmp_root to exist. -makedirs(tmp_root, exist_ok=False) +# Sandboxed/remote actions get a fresh root each run, but a failed run under +# --spawn_strategy=standalone leaves tmp_root behind and would mask the real +# error with FileExistsError on retry — reclaim our own scratch dir instead. +if path.isdir(tmp_root): + shutil.rmtree(tmp_root) +makedirs(tmp_root) t = path.join(tmp_root, "worktree") diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index d27c857fe..d8d82e47d 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -276,19 +276,19 @@ def _pep517_native_whl(ctx): if cc_toolchain_raw == None: if cross: fail( - "Cross-compilation of sdist '{}' requires a CC toolchain " + - "registered for the target platform. No toolchain of type {} " + - "resolved against the current exec/target platform combination.\n" + - "Register a cross CC toolchain (e.g., toolchains_llvm with " + - "matching target_compatible_with) via register_toolchains.".format( + ("Cross-compilation of sdist '{}' requires a CC toolchain " + + "registered for the target platform. No toolchain of type {} " + + "resolved against the current exec/target platform combination.\n" + + "Register a cross CC toolchain (e.g., toolchains_llvm with " + + "matching target_compatible_with) via register_toolchains.").format( ctx.attr.src.label, _CC_TOOLCHAIN_TYPE, ), ) fail( - "sdist '{}' requires a CC toolchain but none resolved. " + - "Register a CC toolchain (e.g., rules_cc, toolchains_llvm) " + - "via register_toolchains.".format(ctx.attr.src.label), + ("sdist '{}' requires a CC toolchain but none resolved. " + + "Register a CC toolchain (e.g., rules_cc, toolchains_llvm) " + + "via register_toolchains.").format(ctx.attr.src.label), ) cc_toolchain = cc_toolchain_raw From 18b57f0bb104a929b710011d1a71c6d71e17542b Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 19:12:31 -0600 Subject: [PATCH 21/56] e2e for cross sdist build --- .../uv-deps-650/crossbuild/geohash_main.py | 5 ++++ .../crossbuild/require_cxx_driver.patch | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 e2e/cases/uv-deps-650/crossbuild/geohash_main.py create mode 100644 e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch diff --git a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py new file mode 100644 index 000000000..4e3f98f27 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 + +import geohash + +print(geohash.encode(37.7749, -122.4194)) diff --git a/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch b/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch new file mode 100644 index 000000000..87e257707 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch @@ -0,0 +1,25 @@ +diff --git a/src/geohash.cpp b/src/geohash.cpp +--- a/src/geohash.cpp ++++ b/src/geohash.cpp +@@ -0,0 +1,21 @@ ++#include ++ ++class RulesPyBase { ++public: ++ virtual ~RulesPyBase() {} ++}; ++ ++class RulesPyValue : public RulesPyBase { ++public: ++ std::string value; ++ ++ RulesPyValue(const char *value) : value(value) {} ++}; ++ ++extern "C" const char *rules_py_cxx_runtime_probe(void) { ++ static RulesPyValue value("rules_py_cxx_runtime_probe"); ++ RulesPyBase *base = &value; ++ RulesPyValue *derived = dynamic_cast(base); ++ return derived ? derived->value.c_str() : "dynamic_cast failed"; ++} ++ From 90272dc3e1875fec52dd09dcd4821aa5f24bba78 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 21:36:27 -0600 Subject: [PATCH 22/56] check so arch in e2e --- .../uv-deps-650/crossbuild/check_so_arch.sh | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh new file mode 100755 index 000000000..6b1569373 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Check that _geohash.so inside a py_image_layer tar is ELF for the expected arch. +# +# Uses only POSIX utilities (tar, od, find) — no Python dependency. +# +# Usage: check_so_arch.sh +# expected_machine_le_hex: ELF e_machine as little-endian hex bytes +# x86_64 (EM_X86_64 = 62 = 0x3e) → "3e00" +# aarch64 (EM_AARCH64 = 183 = 0xb7) → "b700" +set -euo pipefail + +tar_file="${1:?usage: check_so_arch.sh }" +expected="${2:?expected ELF machine as little-endian hex}" + +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT +tar xf "$tar_file" -C "$tmp" 2>/dev/null || true + +so="$(find "$tmp" -name '_geohash*.so' -type f | head -1)" +if [ -z "$so" ]; then + echo "FAIL: no _geohash*.so found in $tar_file" + exit 1 +fi + +magic="$(od -A n -t x1 -N 4 "$so" | tr -d ' ')" +if [ "$magic" != "7f454c46" ]; then + echo "FAIL: $(basename "$so") is not ELF (magic=0x${magic})" + exit 1 +fi + +machine="$(od -A n -t x1 -j 18 -N 2 "$so" | tr -d ' ')" +if [ "$machine" != "$expected" ]; then + echo "FAIL: $(basename "$so") ELF machine=0x${machine} expected=0x${expected}" + exit 1 +fi + +echo "PASS: $(basename "$so") is ELF machine=0x${machine}" From d98b72095a03a44322d1a6677f1bcca668c2caa0 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Wed, 22 Jul 2026 22:18:09 -0600 Subject: [PATCH 23/56] check EXT_SUFFIX and SOABI --- .../uv-deps-650/crossbuild/check_so_suffix.sh | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh new file mode 100755 index 000000000..d3df61ed3 --- /dev/null +++ b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Check that _geohash.so inside a py_image_layer tar has the correct platform +# suffix in its filename — i.e. EXT_SUFFIX and SOABI reflect the target +# platform, not the exec host. +# +# Usage: check_so_suffix.sh +set -euo pipefail + +tar_file="${1:?usage: check_so_suffix.sh }" +expected="${2:?expected suffix substring, e.g. cpython-312-x86_64-linux-gnu}" + +so_name=$(tar tf "$tar_file" | grep '_geohash.*\.so$' | head -1) +if [ -z "$so_name" ]; then + echo "FAIL: no _geohash*.so in tar $tar_file" + exit 1 +fi + +echo ".so: $so_name" + +if ! echo "$so_name" | grep -q "$expected"; then + echo "FAIL: expected suffix '$expected' not found in filename" + exit 1 +fi + +echo "PASS: $so_name contains '$expected'" From 6d521f8c038ce519fa5933cf24e4552d7efd7e5f Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 6 Aug 2026 11:57:46 -0600 Subject: [PATCH 24/56] crossbuild test cases --- .../uv-deps-650/crossbuild/check_so_arch.sh | 37 ------------------- .../uv-deps-650/crossbuild/geohash_main.py | 5 --- .../crossbuild/require_cxx_driver.patch | 25 ------------- e2e/crossbuild/awkward_cpp/BUILD.bazel | 2 +- e2e/crossbuild/contourpy/BUILD.bazel | 2 +- 5 files changed, 2 insertions(+), 69 deletions(-) delete mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh delete mode 100644 e2e/cases/uv-deps-650/crossbuild/geohash_main.py delete mode 100644 e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh deleted file mode 100755 index 6b1569373..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/check_so_arch.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash -# Check that _geohash.so inside a py_image_layer tar is ELF for the expected arch. -# -# Uses only POSIX utilities (tar, od, find) — no Python dependency. -# -# Usage: check_so_arch.sh -# expected_machine_le_hex: ELF e_machine as little-endian hex bytes -# x86_64 (EM_X86_64 = 62 = 0x3e) → "3e00" -# aarch64 (EM_AARCH64 = 183 = 0xb7) → "b700" -set -euo pipefail - -tar_file="${1:?usage: check_so_arch.sh }" -expected="${2:?expected ELF machine as little-endian hex}" - -tmp="$(mktemp -d)" -trap 'rm -rf "$tmp"' EXIT -tar xf "$tar_file" -C "$tmp" 2>/dev/null || true - -so="$(find "$tmp" -name '_geohash*.so' -type f | head -1)" -if [ -z "$so" ]; then - echo "FAIL: no _geohash*.so found in $tar_file" - exit 1 -fi - -magic="$(od -A n -t x1 -N 4 "$so" | tr -d ' ')" -if [ "$magic" != "7f454c46" ]; then - echo "FAIL: $(basename "$so") is not ELF (magic=0x${magic})" - exit 1 -fi - -machine="$(od -A n -t x1 -j 18 -N 2 "$so" | tr -d ' ')" -if [ "$machine" != "$expected" ]; then - echo "FAIL: $(basename "$so") ELF machine=0x${machine} expected=0x${expected}" - exit 1 -fi - -echo "PASS: $(basename "$so") is ELF machine=0x${machine}" diff --git a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py b/e2e/cases/uv-deps-650/crossbuild/geohash_main.py deleted file mode 100644 index 4e3f98f27..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/geohash_main.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 - -import geohash - -print(geohash.encode(37.7749, -122.4194)) diff --git a/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch b/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch deleted file mode 100644 index 87e257707..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/require_cxx_driver.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/src/geohash.cpp b/src/geohash.cpp ---- a/src/geohash.cpp -+++ b/src/geohash.cpp -@@ -0,0 +1,21 @@ -+#include -+ -+class RulesPyBase { -+public: -+ virtual ~RulesPyBase() {} -+}; -+ -+class RulesPyValue : public RulesPyBase { -+public: -+ std::string value; -+ -+ RulesPyValue(const char *value) : value(value) {} -+}; -+ -+extern "C" const char *rules_py_cxx_runtime_probe(void) { -+ static RulesPyValue value("rules_py_cxx_runtime_probe"); -+ RulesPyBase *base = &value; -+ RulesPyValue *derived = dynamic_cast(base); -+ return derived ? derived->value.c_str() : "dynamic_cast failed"; -+} -+ diff --git a/e2e/crossbuild/awkward_cpp/BUILD.bazel b/e2e/crossbuild/awkward_cpp/BUILD.bazel index 14ddd346e..90ee5971d 100644 --- a/e2e/crossbuild/awkward_cpp/BUILD.bazel +++ b/e2e/crossbuild/awkward_cpp/BUILD.bazel @@ -13,6 +13,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "awkward_cpp", check_so_suffix = False, - deps = ["@pypi_crossbuild_awkward_cpp//awkward_cpp"], so_pattern = "whl_install__crossbuild_awkward_cpp.*awkward_cpp/lib/libawkward-cpu-kernels\\.so$$", + deps = ["@pypi_crossbuild_awkward_cpp//awkward_cpp"], ) diff --git a/e2e/crossbuild/contourpy/BUILD.bazel b/e2e/crossbuild/contourpy/BUILD.bazel index 489789a36..771f93d80 100644 --- a/e2e/crossbuild/contourpy/BUILD.bazel +++ b/e2e/crossbuild/contourpy/BUILD.bazel @@ -9,6 +9,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "contourpy", - deps = ["@pypi_crossbuild_contourpy//contourpy"], so_pattern = "whl_install__crossbuild_contourpy.*_contourpy.*\\.so$$", + deps = ["@pypi_crossbuild_contourpy//contourpy"], ) From 60a5c5ec5e1dc0a16a8cc10f9bd2217d8673332c Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 7 Aug 2026 11:37:12 -0600 Subject: [PATCH 25/56] typing e2e --- .../uv-deps-650/crossbuild/check_so_suffix.sh | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100755 e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh diff --git a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh b/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh deleted file mode 100755 index d3df61ed3..000000000 --- a/e2e/cases/uv-deps-650/crossbuild/check_so_suffix.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Check that _geohash.so inside a py_image_layer tar has the correct platform -# suffix in its filename — i.e. EXT_SUFFIX and SOABI reflect the target -# platform, not the exec host. -# -# Usage: check_so_suffix.sh -set -euo pipefail - -tar_file="${1:?usage: check_so_suffix.sh }" -expected="${2:?expected suffix substring, e.g. cpython-312-x86_64-linux-gnu}" - -so_name=$(tar tf "$tar_file" | grep '_geohash.*\.so$' | head -1) -if [ -z "$so_name" ]; then - echo "FAIL: no _geohash*.so in tar $tar_file" - exit 1 -fi - -echo ".so: $so_name" - -if ! echo "$so_name" | grep -q "$expected"; then - echo "FAIL: expected suffix '$expected' not found in filename" - exit 1 -fi - -echo "PASS: $so_name contains '$expected'" From 6ea0cb45d8230bf866d6db963bf7cdcf9cf0d0a2 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Mon, 10 Aug 2026 11:55:10 -0600 Subject: [PATCH 26/56] fixing ci --- e2e/cases/uv-deps-650/test.sh | 76 ------------------------ e2e/crossbuild/bcrypt/BUILD.bazel | 2 +- e2e/crossbuild/jpype1/BUILD.bazel | 2 +- e2e/crossbuild/msgpack/BUILD.bazel | 2 +- e2e/crossbuild/numpy/BUILD.bazel | 2 +- e2e/crossbuild/psutil/BUILD.bazel | 2 +- e2e/crossbuild/pydantic_core/BUILD.bazel | 2 +- e2e/crossbuild/rpds_py/BUILD.bazel | 2 +- e2e/crossbuild/tiktoken/BUILD.bazel | 2 +- 9 files changed, 8 insertions(+), 84 deletions(-) delete mode 100755 e2e/cases/uv-deps-650/test.sh diff --git a/e2e/cases/uv-deps-650/test.sh b/e2e/cases/uv-deps-650/test.sh deleted file mode 100755 index 9ba171612..000000000 --- a/e2e/cases/uv-deps-650/test.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash -# -# Runtime smoke for the cross-built geohash images. -# -# The ELF checks in crossbuild/BUILD.bazel prove the cross-compiled extension -# has the right architecture bytes; this proves it imports and executes on the -# target architecture. dlopen resolves the symbols an ELF shared link is -# allowed to leave undefined, so a wheel that "linked fine" without its C++ -# runtime fails here and nowhere else. Needs a real `bazel run` (oci_load) -# plus a container daemon, so it cannot be an sh_test under //.... -set -uo pipefail - -cd "$(dirname "$0")/.." || exit 1 - -BAZEL="${BAZEL:-bazel}" -PKG="//uv-deps-650/crossbuild" - -if ! command -v docker >/dev/null 2>&1 || ! docker info >/dev/null 2>&1; then - echo "SKIP: no usable container daemon; cross-arch runtime smoke not run" - exit 0 -fi - -status=0 - -smoke() { - local leg="$1" expected_machine="$2" - local tag="rules-py/geohash-crossbuild:${leg}" - local platform="linux/${leg}" - - echo "== ${leg}: build and load image ==" - if ! "$BAZEL" run "${PKG}:geohash_${leg}_image_load"; then - echo "FAIL: ${leg}: building/loading the image failed" >&2 - status=1 - return 0 - fi - - # Infra probe, separate from the product check: /bin/true comes from the - # ubuntu base layer, so if even that cannot exec, this host lacks binfmt - # emulation for ${platform} — an environment gap, not a product bug. - # GitHub's ubuntu runners ship no handlers; install them once. - if ! docker run --rm --platform "${platform}" --entrypoint /bin/true "${tag}" >/dev/null 2>&1; then - if [ "$(uname -s)" = "Linux" ]; then - docker run --privileged --rm tonistiigi/binfmt --install "${leg}" >/dev/null 2>&1 || true - fi - if ! docker run --rm --platform "${platform}" --entrypoint /bin/true "${tag}" >/dev/null 2>&1; then - echo "SKIP: ${leg}: no ${platform} emulation available on this host" - return 0 - fi - fi - - echo "== ${leg}: run the extension on ${platform} ==" - local output - if ! output="$(docker run --rm --platform "${platform}" "${tag}" 2>&1)"; then - echo "${output}" >&2 - echo "FAIL: ${leg}: geohash smoke exited nonzero" >&2 - status=1 - return 0 - fi - echo "${output}" - if ! grep -q "GEOHASH_SMOKE_OK" <<<"${output}"; then - echo "FAIL: ${leg}: smoke ran but did not report GEOHASH_SMOKE_OK" >&2 - status=1 - return 0 - fi - if ! grep -q "machine=${expected_machine}" <<<"${output}"; then - echo "FAIL: ${leg}: expected machine=${expected_machine} in output" >&2 - status=1 - return 0 - fi - echo "PASS: ${leg} extension executed on ${platform}" -} - -smoke arm64 aarch64 -smoke amd64 x86_64 - -exit "${status}" diff --git a/e2e/crossbuild/bcrypt/BUILD.bazel b/e2e/crossbuild/bcrypt/BUILD.bazel index 2df8ac7c3..4001b3ba3 100644 --- a/e2e/crossbuild/bcrypt/BUILD.bazel +++ b/e2e/crossbuild/bcrypt/BUILD.bazel @@ -11,6 +11,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "bcrypt", check_so_suffix = False, - deps = ["@pypi_crossbuild_bcrypt//bcrypt"], so_pattern = "whl_install__crossbuild_bcrypt.*_bcrypt.*\\.so$$", + deps = ["@pypi_crossbuild_bcrypt//bcrypt"], ) diff --git a/e2e/crossbuild/jpype1/BUILD.bazel b/e2e/crossbuild/jpype1/BUILD.bazel index c29d5c161..29199436d 100644 --- a/e2e/crossbuild/jpype1/BUILD.bazel +++ b/e2e/crossbuild/jpype1/BUILD.bazel @@ -12,6 +12,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "jpype1", check_so_suffix = False, - deps = ["@pypi_crossbuild_jpype1//jpype1"], so_pattern = "whl_install__crossbuild_jpype1.*_jpype.*\\.so$$", + deps = ["@pypi_crossbuild_jpype1//jpype1"], ) diff --git a/e2e/crossbuild/msgpack/BUILD.bazel b/e2e/crossbuild/msgpack/BUILD.bazel index 7a4b78219..d9d9b8e81 100644 --- a/e2e/crossbuild/msgpack/BUILD.bazel +++ b/e2e/crossbuild/msgpack/BUILD.bazel @@ -11,6 +11,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "msgpack", check_so_suffix = False, - deps = ["@pypi_crossbuild_msgpack//msgpack"], so_pattern = "whl_install__crossbuild_msgpack.*_cmsgpack.*\\.so$$", + deps = ["@pypi_crossbuild_msgpack//msgpack"], ) diff --git a/e2e/crossbuild/numpy/BUILD.bazel b/e2e/crossbuild/numpy/BUILD.bazel index f19890073..7d6b37b57 100644 --- a/e2e/crossbuild/numpy/BUILD.bazel +++ b/e2e/crossbuild/numpy/BUILD.bazel @@ -11,6 +11,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "numpy", - deps = ["@pypi_crossbuild_numpy//numpy"], so_pattern = "whl_install__crossbuild_numpy.*_multiarray_umath.*\\.so$$", + deps = ["@pypi_crossbuild_numpy//numpy"], ) diff --git a/e2e/crossbuild/psutil/BUILD.bazel b/e2e/crossbuild/psutil/BUILD.bazel index d737c7933..c409dd585 100644 --- a/e2e/crossbuild/psutil/BUILD.bazel +++ b/e2e/crossbuild/psutil/BUILD.bazel @@ -9,6 +9,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "psutil", check_so_suffix = False, - deps = ["@pypi_crossbuild_psutil//psutil"], so_pattern = "whl_install__crossbuild_psutil.*_psutil_linux.*\\.so$$", + deps = ["@pypi_crossbuild_psutil//psutil"], ) diff --git a/e2e/crossbuild/pydantic_core/BUILD.bazel b/e2e/crossbuild/pydantic_core/BUILD.bazel index ae8dfd4f5..85c0b6c1a 100644 --- a/e2e/crossbuild/pydantic_core/BUILD.bazel +++ b/e2e/crossbuild/pydantic_core/BUILD.bazel @@ -9,6 +9,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "pydantic_core", - deps = ["@pypi_crossbuild_pydantic_core//pydantic_core"], so_pattern = "whl_install__crossbuild_pydantic_core.*_pydantic_core.*\\.so$$", + deps = ["@pypi_crossbuild_pydantic_core//pydantic_core"], ) diff --git a/e2e/crossbuild/rpds_py/BUILD.bazel b/e2e/crossbuild/rpds_py/BUILD.bazel index 7ece315d2..716753a84 100644 --- a/e2e/crossbuild/rpds_py/BUILD.bazel +++ b/e2e/crossbuild/rpds_py/BUILD.bazel @@ -11,6 +11,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "rpds_py", - deps = ["@pypi_crossbuild_rpds_py//rpds_py"], so_pattern = "whl_install__crossbuild_rpds_py.*rpds/rpds.*\\.so$$", + deps = ["@pypi_crossbuild_rpds_py//rpds_py"], ) diff --git a/e2e/crossbuild/tiktoken/BUILD.bazel b/e2e/crossbuild/tiktoken/BUILD.bazel index 29c102b22..7d65b5916 100644 --- a/e2e/crossbuild/tiktoken/BUILD.bazel +++ b/e2e/crossbuild/tiktoken/BUILD.bazel @@ -11,6 +11,6 @@ load("//tools:cross_case.bzl", "pep517_cross_case") pep517_cross_case( name = "tiktoken", check_so_suffix = False, - deps = ["@pypi_crossbuild_tiktoken//tiktoken"], so_pattern = "whl_install__crossbuild_tiktoken.*_tiktoken.*\\.so$$", + deps = ["@pypi_crossbuild_tiktoken//tiktoken"], ) From 9de528f9796c30a278bcf8c8b54141be7be7f3b0 Mon Sep 17 00:00:00 2001 From: Cesar Abel Date: Mon, 10 Aug 2026 22:39:28 -0600 Subject: [PATCH 27/56] enable macos --- uv/private/pep517_whl/build_helper.py | 118 ++++++++++++++++++++++++-- uv/private/pep517_whl/rule.bzl | 6 +- 2 files changed, 116 insertions(+), 8 deletions(-) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index fbac63009..60df11481 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -214,6 +214,46 @@ def _xcode_developer_dir() -> Optional[str]: return None +_MACOSX_DEPLOYMENT_TARGET_RE = re.compile( + r"[\"']MACOSX_DEPLOYMENT_TARGET[\"']\s*:\s*[\"']?([0-9][0-9.]*)" +) + + +def _macosx_deployment_target(sysconfigdata_path: str) -> Optional[str]: + """The target interpreter's deployment target, from its sysconfigdata. + + The deployment version in wheel/platform tags is a property of the target + interpreter's build, not a constant — regex the build_time_vars literal + rather than importing it, since the file belongs to a foreign-platform + interpreter this process must not execute code from. + """ + try: + with open(sysconfigdata_path, encoding="utf-8") as f: + match = _MACOSX_DEPLOYMENT_TARGET_RE.search(f.read()) + except OSError: + return None + return match.group(1) if match else None + + +def _darwin_kernel_release(macos_deployment_target: Optional[str]) -> str: + """Fake os.uname() release consistent with the macOS deployment target. + + Darwin kernel majors track macOS marketing versions as 11→20 … 15→24; + from the year-based scheme (26 = Darwin 25) it's major−1. Only consumers + parsing a plausible kernel version matter here (ctypes' import does), + so unknown/missing values fall back to the macOS 11 baseline. + """ + try: + major = int((macos_deployment_target or "").split(".")[0]) + except ValueError: + major = 0 + if 11 <= major <= 15: + return "{}.0.0".format(major + 9) + if major >= 26: + return "{}.0.0".format(major - 1) + return "20.0.0" + + def _absolutize_path(value: str) -> str: """Resolve a relative path to absolute, leaving absolute/empty values untouched. @@ -297,6 +337,36 @@ def _make_compiler_wrapper( ) +_SYSROOT_FLAG_PREFIXES = ("--sysroot", "-isysroot") + + +def _absolutize_sysroot_flags(flags: str) -> str: + """Absolutize sysroot values inside a flag string (CFLAGS, LDSHAREDFLAGS). + + Must run while the process is still in the execroot; the backend splices + these env strings into commands it runs from inside the unpacked sdist, + where an execroot-relative sysroot no longer resolves. A later relative + "--sysroot" would also silently override the wrapper's absolute one — + the clang driver honors the last occurrence. + """ + parts = shlex.split(flags) + result = [] + i = 0 + while i < len(parts): + p = parts[i] + flag, sep, value = p.partition("=") + if sep and flag in _SYSROOT_FLAG_PREFIXES: + p = "{}={}".format(flag, _absolutize_path(value)) + elif p in _SYSROOT_FLAG_PREFIXES and i + 1 < len(parts): + result.append(p) + result.append(_absolutize_path(parts[i + 1])) + i += 2 + continue + result.append(p) + i += 1 + return shlex.join(result) + + def _get_wrapper_flags(cflags: str) -> list[str]: """Extract identity flags (-target, --sysroot, -isysroot, ...) from CFLAGS. @@ -304,6 +374,12 @@ def _get_wrapper_flags(cflags: str) -> list[str]: constructing its own compile commands. The cross wrapper re-injects them on every invocation to guarantee the real compiler targets the correct platform. + + Sysroot values are absolutized while this still runs from the execroot: + toolchains hand out execroot-relative paths (e.g. the llvm module's + external/…/macos_sdk/sysroot), which stop resolving once the backend + chdirs into the unpacked sdist — the compiler then silently falls back + to default header search paths and the linker finds no libraries at all. """ parts = shlex.split(cflags) result = [] @@ -311,9 +387,16 @@ def _get_wrapper_flags(cflags: str) -> list[str]: while i < len(parts): p = parts[i] if any(p == prefix or p.startswith(prefix + "=") for prefix in _IDENTITY_FLAG_PREFIXES): + if "=" in p: + flag, _, value = p.partition("=") + if flag in _SYSROOT_FLAG_PREFIXES: + p = "{}={}".format(flag, _absolutize_path(value)) result.append(p) if "=" not in p and i + 1 < len(parts) and not parts[i + 1].startswith("-"): - result.append(parts[i + 1]) + value = parts[i + 1] + if p in _SYSROOT_FLAG_PREFIXES: + value = _absolutize_path(value) + result.append(value) i += 1 i += 1 return result @@ -479,6 +562,10 @@ def _compiler_env( is_darwin = target_os == "darwin" if cross else _platform.system() == "Darwin" if cross: + for key in ("CFLAGS", "CXXFLAGS", "CPPFLAGS", "LDSHAREDFLAGS"): + if env.get(key): + env[key] = _absolutize_sysroot_flags(env[key]) + wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) lld_path = _find_lld(cc_path) @@ -538,6 +625,7 @@ def _compiler_env( env["LDSHARED"] = cc + (" " + ldshared_flags if ldshared_flags else "") env["LDCXXSHARED"] = cxx + (" " + ldshared_flags if ldshared_flags else "") + deployment_target = None target_sysconfig = env.get("RULES_PY_TARGET_SYSCONFIGDATA") if target_sysconfig and path.exists(target_sysconfig): sysconfig_dir = path.join(tmpdir, ".target_sysconfig") @@ -547,8 +635,19 @@ def _compiler_env( env["_PYTHON_SYSCONFIGDATA_NAME"] = module_name env["PYTHONPATH"] = sysconfig_dir + pathsep + env.get("PYTHONPATH", "") + # The analysis-time _PYTHON_HOST_PLATFORM (rule.bzl) can only + # guess macosx-11.0; the target interpreter's sysconfig knows the + # real deployment version its wheel tags must carry. distutils' + # get_platform() also honors $MACOSX_DEPLOYMENT_TARGET directly. + if target_os == "darwin": + deployment_target = _macosx_deployment_target(target_sysconfig) + if deployment_target: + env.setdefault("MACOSX_DEPLOYMENT_TARGET", deployment_target) + cpu = "arm64" if target_cpu == "aarch64" else target_cpu + env["_PYTHON_HOST_PLATFORM"] = "macosx-{}-{}".format(deployment_target, cpu) + if target_os and target_cpu: - site_dir = _generate_cross_site(tmpdir, target_os, target_cpu) + site_dir = _generate_cross_site(tmpdir, target_os, target_cpu, deployment_target) env["PYTHONPATH"] = site_dir + pathsep + env.get("PYTHONPATH", "") # MPI builds (e.g. mpi4py) consult $MPICC before searching PATH, so a @@ -901,7 +1000,12 @@ def manylinux_compatible(tag_major, tag_minor, tag_arch): """ -def _generate_cross_site(tmpdir: str, target_os: str, target_cpu: str) -> str: +def _generate_cross_site( + tmpdir: str, + target_os: str, + target_cpu: str, + macos_deployment_target: Optional[str] = None, +) -> str: """sitecustomize + _manylinux hook faking the target's runtime identity. sysconfig.get_platform()/_get_sysconfigdata_name() are already faked via @@ -918,10 +1022,10 @@ def _generate_cross_site(tmpdir: str, target_os: str, target_cpu: str) -> str: site_dir = path.join(tmpdir, ".cross_site") # ctypes' own import does int(os.uname().release.split(".")[0]) on Darwin, - # so the faked release must parse as a Darwin kernel version there. 20.0.0 - # is Darwin 20 = macOS 11.0, matching _derive_python_host_platform's - # macosx-11.0 baseline. Linux keeps "": nothing on that path parses it. - release = "20.0.0" if target_os == "darwin" else "" + # so the faked release must parse as a Darwin kernel version there — + # derived from the target's deployment target so both stay consistent. + # Linux keeps "": nothing on that path parses it. + release = _darwin_kernel_release(macos_deployment_target) if target_os == "darwin" else "" _write_generated_file( path.join(site_dir, "sitecustomize.py"), _SITECUSTOMIZE_TEMPLATE.format( diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/rule.bzl index d8d82e47d..896d44a50 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/rule.bzl @@ -187,7 +187,11 @@ def _derive_python_host_platform(target_os, target_cpu): """Derive _PYTHON_HOST_PLATFORM from target platform constraints. Linux: libc does not affect the platform string — always linux-{cpu}. - macOS: uses arm64 (not aarch64) and requires a version component. + macOS: uses arm64 (not aarch64) and requires a version component. The + version here is only an analysis-time fallback: the deployment target is + a property of the target interpreter, which analysis can't read, so + build_helper re-derives it at build time from the target sysconfigdata's + MACOSX_DEPLOYMENT_TARGET whenever that file is available. """ if target_os == "linux": return "linux-" + _PYTHON_CPU_MAP.get(target_cpu, target_cpu) From d96690a1bf0eabc57306d88162c16dd5180fb00d Mon Sep 17 00:00:00 2001 From: xangcastle Date: Mon, 10 Aug 2026 23:32:18 -0600 Subject: [PATCH 28/56] test(e2e): defer the e2e/cases cross matrix to a follow-up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pycross-setuptools' native_wheels matrix duplicates e2e/crossbuild/zstandard (same package, and crossbuild goes further: QEMU execution plus a byte-for-byte diff against the official wheel). Its marginal value — the cross path under e2e/cases' own CC toolchain and shared-hub setup — lands as its own small PR after this one. Recoverable from commit 2273078a. --- e2e/crossbuild/pycross-setuptools/BUILD.bazel | 74 +-------------- .../pycross-setuptools/setup.MODULE.bazel | 6 +- e2e/crossbuild/tools/check_wheel_native.py | 92 ------------------- 3 files changed, 3 insertions(+), 169 deletions(-) delete mode 100644 e2e/crossbuild/tools/check_wheel_native.py diff --git a/e2e/crossbuild/pycross-setuptools/BUILD.bazel b/e2e/crossbuild/pycross-setuptools/BUILD.bazel index db8890bb6..e2c54e19c 100644 --- a/e2e/crossbuild/pycross-setuptools/BUILD.bazel +++ b/e2e/crossbuild/pycross-setuptools/BUILD.bazel @@ -1,11 +1,9 @@ # Ported from rules_pycross tests/e2e/build_setuptools. # -# Three setuptools C-extension sdists built by `pep517_native_whl`, imported at -# runtime for the host, then rebuilt through rules_pycross's `collect_wheels` -# matrix for two non-host Linux platforms — the cross path this branch adds. +# Three setuptools C-extension sdists built by `pep517_native_whl` and +# imported at runtime for the host. load("@aspect_rules_py//py:defs.bzl", "py_test") -load("//tools:collect_wheels.bzl", "collect_wheels") exports_files(["require_extension.patch"]) @@ -13,36 +11,6 @@ _PY = "3.12" _DEP_GROUP = "pycross_setuptools" -# The libc/version flags are what the wheel resolver keys platform-specific -# wheel selection off; a bare constraint_values platform would leave build -# dependencies unresolvable. Same shape as the e2e/crossbuild workspace. The -# dep_group flag rides along because the wheel targets under `collect_wheels` -# are reached through a platform transition, not through a py_venv. -_PLATFORM_FLAGS = [ - "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", - "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", - "--@aspect_rules_py//uv/private/constraints/dep_group:dep_group=" + _DEP_GROUP, - "--@aspect_rules_py//py/private/interpreter:python_version=" + _PY, -] - -platform( - name = "amd64_linux", - constraint_values = [ - "@platforms//os:linux", - "@platforms//cpu:x86_64", - ], - flags = _PLATFORM_FLAGS, -) - -platform( - name = "arm64_linux", - constraint_values = [ - "@platforms//os:linux", - "@platforms//cpu:aarch64", - ], - flags = _PLATFORM_FLAGS, -) - py_test( name = "test_setproctitle", srcs = ["test_setproctitle.py"], @@ -69,41 +37,3 @@ py_test( python_version = _PY, deps = ["@pypi_pycross_setuptools//pyyaml"], ) - -# rules_pycross's cross matrix, restricted to zstandard. -# -# pyyaml is excluded because `PYYAML_FORCE_LIBYAML=0` makes it anyarch — there -# is nothing platform-specific left to assert. -# -# setproctitle is excluded because it cannot cross-build here at all: its -# setup.py picks sources and macros off `sys.platform`, which reports the -# *exec* interpreter's platform. Cross mode overrides `_PYTHON_HOST_PLATFORM` -# and `_PYTHON_SYSCONFIGDATA_NAME`, neither of which moves `sys.platform`, so a -# darwin exec host compiles `src/darwin_set_process_name.c` with -# `-D__darwin__=1` against a linux target and fails on -# `CoreFoundation/CoreFoundation.h`. rules_pycross handles this with a real -# crossenv (`pycross/private/build/tools/crossenv/`) that patches `sys.platform` -# in the build interpreter. `require_extension.patch` keeps that failure loud -# rather than letting setproctitle fall back to an anyarch wheel. -collect_wheels( - name = "native_wheels", - expected_tags = [ - "linux_x86_64", - "linux_aarch64", - ], - platforms = [ - ":amd64_linux", - ":arm64_linux", - ], - wheels = ["@sdist_build__pycross_setuptools__zstandard__0_22_0//:whl"], -) - -py_test( - name = "native_wheels_elf_test", - srcs = ["//tools:check_wheel_native.py"], - args = ["$(rootpath :native_wheels)"], - data = [":native_wheels"], - dep_group = _DEP_GROUP, - main = "//tools:check_wheel_native.py", - python_version = _PY, -) diff --git a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel index 2270925ae..6a4ba7ee6 100644 --- a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel @@ -67,8 +67,4 @@ uv.override_package( lock = "//pycross-setuptools:uv.lock", resource_set = "mem_4g", ) -use_repo( - uv, - "pypi_pycross_setuptools", - "sdist_build__pycross_setuptools__zstandard__0_22_0", -) +use_repo(uv, "pypi_pycross_setuptools") diff --git a/e2e/crossbuild/tools/check_wheel_native.py b/e2e/crossbuild/tools/check_wheel_native.py deleted file mode 100644 index 0bc1211d5..000000000 --- a/e2e/crossbuild/tools/check_wheel_native.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Assert cross-built wheels really contain extensions for the tagged platform. - -Usage: check_wheel_native.py - -For every Linux-tagged wheel in the directory, every extension module inside it -must be an ELF object whose `e_machine` matches the wheel's architecture tag, -and whose filename ABI tag names the same architecture. A cross build that -fell back to the exec platform's compiler or sysconfig produces a correctly -named wheel holding host-architecture objects — which the wheel-tag check -alone cannot see. - -rules_pycross's cross coverage stops at "the wheel builds for both platforms" -(tests/e2e/shared/collect_wheels.bzl feeding a build target); this is the -assertion that makes that matrix meaningful. -""" - -import os -import struct -import sys -import zipfile - -# ELF e_machine values, from elf.h. -_EM_X86_64 = 0x3E -_EM_AARCH64 = 0xB7 - -_ARCH_TAGS = { - "x86_64": _EM_X86_64, - "aarch64": _EM_AARCH64, -} - - -def _wheel_arch(name: str) -> str: - for arch in _ARCH_TAGS: - if arch in name: - return arch - raise AssertionError("cannot determine architecture from wheel name {}".format(name)) - - -def _elf_machine(data: bytes) -> int: - assert data[:4] == b"\x7fELF", "not an ELF object" - little_endian = data[5] == 1 - return struct.unpack_from("H", data, 18)[0] - - -def _check(wheel_path: str) -> int: - name = os.path.basename(wheel_path) - arch = _wheel_arch(name) - expected_machine = _ARCH_TAGS[arch] - checked = 0 - - with zipfile.ZipFile(wheel_path) as zf: - for entry in zf.namelist(): - if not entry.endswith(".so"): - continue - machine = _elf_machine(zf.read(entry)) - if machine != expected_machine: - raise AssertionError( - "{}: {} is ELF machine {:#x}, expected {:#x} for '{}'".format( - name, entry, machine, expected_machine, arch - ) - ) - base = os.path.basename(entry) - if "." in base[:-3] and arch not in base: - raise AssertionError( - "{}: extension filename '{}' does not name architecture '{}'".format( - name, base, arch - ) - ) - print(" {} -> {} (ELF {:#x})".format(name, base, machine)) - checked += 1 - - return checked - - -def main() -> None: - wheel_dir = sys.argv[1] - wheels = sorted( - f - for f in os.listdir(wheel_dir) - if f.endswith(".whl") and "linux" in f and not f.endswith("-none-any.whl") - ) - assert wheels, "no Linux-tagged native wheels collected under {}".format(wheel_dir) - - total = 0 - for wheel in wheels: - total += _check(os.path.join(wheel_dir, wheel)) - - assert total, "collected native wheels contain no extension modules: {}".format(wheels) - - -if __name__ == "__main__": - main() From a4741c89401efa9027a31243a7e731fe21e3892b Mon Sep 17 00:00:00 2001 From: xangcastle Date: Tue, 11 Aug 2026 02:15:37 -0600 Subject: [PATCH 29/56] refactor(e2e): normalize geohash onto the per-case hub layout geohash was the workspace's first case and kept its pyproject/uv.lock at the root under a bare pypi_crossbuild hub while every later case adopted the one-dir-one-hub pattern. Move the pair into geohash/, rename the hub to pypi_crossbuild_geohash, and align the project name and dep_group with the crossbuild_ convention. --- e2e/crossbuild/MODULE.bazel | 12 ++++++------ e2e/crossbuild/geohash/BUILD.bazel | 4 ++-- e2e/crossbuild/{ => geohash}/pyproject.toml | 2 +- e2e/crossbuild/{ => geohash}/uv.lock | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) rename e2e/crossbuild/{ => geohash}/pyproject.toml (85%) rename e2e/crossbuild/{ => geohash}/uv.lock (99%) diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index 380726581..294bdfd8b 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -206,25 +206,25 @@ uv_bin.toolchain(version = "0.11.6") use_repo(uv_bin, "uv") uv = use_extension("@aspect_rules_py//uv:extensions.bzl", "uv") -uv.declare_hub(hub_name = "pypi_crossbuild") +uv.declare_hub(hub_name = "pypi_crossbuild_geohash") uv.project( default_build_dependencies = [ "build", "cffi", "setuptools", ], - hub_name = "pypi_crossbuild", - lock = "//:uv.lock", - pyproject = "//:pyproject.toml", + hub_name = "pypi_crossbuild_geohash", + lock = "//geohash:uv.lock", + pyproject = "//geohash:pyproject.toml", ) uv.override_package( name = "python-geohash", - lock = "//:uv.lock", + lock = "//geohash:uv.lock", pre_build_patch_strip = 1, pre_build_patches = ["//geohash:require_cxx_driver.patch"], resource_set = "mem_4g", ) -use_repo(uv, "pypi_crossbuild") +use_repo(uv, "pypi_crossbuild_geohash") # Plain setuptools/meson-python/scikit-build-core hubs: no rust/jdk toolchain # wiring, so each is fully described by (hub dir, its build deps). diff --git a/e2e/crossbuild/geohash/BUILD.bazel b/e2e/crossbuild/geohash/BUILD.bazel index ac33223cc..a31ea998e 100644 --- a/e2e/crossbuild/geohash/BUILD.bazel +++ b/e2e/crossbuild/geohash/BUILD.bazel @@ -21,11 +21,11 @@ exports_files(["require_cxx_driver.patch"]) py_binary( name = "geohash_bin", srcs = ["geohash_main.py"], - dep_group = "crossbuild", + dep_group = "crossbuild_geohash", main = "geohash_main.py", python_version = "3.12", deps = [ - "@pypi_crossbuild//python_geohash", + "@pypi_crossbuild_geohash//python_geohash", ], ) diff --git a/e2e/crossbuild/pyproject.toml b/e2e/crossbuild/geohash/pyproject.toml similarity index 85% rename from e2e/crossbuild/pyproject.toml rename to e2e/crossbuild/geohash/pyproject.toml index 648b141a7..4bec70f2a 100644 --- a/e2e/crossbuild/pyproject.toml +++ b/e2e/crossbuild/geohash/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "crossbuild" +name = "crossbuild_geohash" version = "0.0.0" requires-python = ">=3.11" authors = [] diff --git a/e2e/crossbuild/uv.lock b/e2e/crossbuild/geohash/uv.lock similarity index 99% rename from e2e/crossbuild/uv.lock rename to e2e/crossbuild/geohash/uv.lock index 0aed06f66..363b35f42 100644 --- a/e2e/crossbuild/uv.lock +++ b/e2e/crossbuild/geohash/uv.lock @@ -124,7 +124,7 @@ wheels = [ ] [[package]] -name = "crossbuild" +name = "crossbuild-geohash" version = "0.0.0" source = { virtual = "." } dependencies = [ From 7bb1c03f754f60350b1b65cb49e27e02af04e7f5 Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Sun, 26 Jul 2026 11:34:40 -0700 Subject: [PATCH 30/56] test(e2e): add pycross tests under e2e/crossbuild Port of rules_pycross's e2e suite (build_setuptools, patches_and_hooks, build_pure_python and the distutils probe), relocated into the crossbuild workspace. (originally commit 4869b33a259c864285491e116fd0938a9508462c, merged to main squashed in #1413 / 05504acc; re-homed here with the content of the original port) --- e2e/crossbuild/MODULE.bazel | 7 ++ .../pycross-distutils-probe/__test__.py | 13 +-- .../pycross-distutils-probe/pyproject.toml | 2 + .../setup.MODULE.bazel | 2 +- .../patches/setproctitle-postinstall.patch | 6 ++ .../pycross-patches/setup.MODULE.bazel | 11 +-- .../test_setproctitle_patched.py | 12 +-- .../pycross-pure-python/BUILD.bazel | 8 +- .../pycross-pure-python/pyproject.toml | 6 ++ .../pycross-pure-python/setup.MODULE.bazel | 27 +++--- .../pycross-pure-python/test_filelock.py | 2 +- .../test_pyproject_metadata.py | 2 +- .../pycross-pure-python/test_tomli.py | 2 +- .../test_top_level_packages.py | 28 +++--- e2e/crossbuild/pycross-setuptools/BUILD.bazel | 74 ++++++++++++++- .../pycross-setuptools/pyproject.toml | 2 + .../pycross-setuptools/setup.MODULE.bazel | 48 ++++------ .../pycross-setuptools/test_pyyaml.py | 17 ++-- .../pycross-setuptools/test_setproctitle.py | 10 +- .../pycross-setuptools/test_zstandard.py | 13 +-- e2e/crossbuild/tools/BUILD.bazel | 10 ++ e2e/crossbuild/tools/check_wheel_native.py | 92 +++++++++++++++++++ e2e/crossbuild/tools/collect_wheels.bzl | 27 +++--- e2e/crossbuild/tools/collect_wheels.py | 35 ++++--- 24 files changed, 312 insertions(+), 144 deletions(-) create mode 100644 e2e/crossbuild/tools/check_wheel_native.py diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index 294bdfd8b..5da8aba15 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -226,6 +226,13 @@ uv.override_package( ) use_repo(uv, "pypi_crossbuild_geohash") +# rules_pycross e2e ports: per-suite hubs, each self-described by its own +# setup.MODULE.bazel (same include() layout as e2e/cases). +include("//pycross-distutils-probe:setup.MODULE.bazel") +include("//pycross-patches:setup.MODULE.bazel") +include("//pycross-pure-python:setup.MODULE.bazel") +include("//pycross-setuptools:setup.MODULE.bazel") + # Plain setuptools/meson-python/scikit-build-core hubs: no rust/jdk toolchain # wiring, so each is fully described by (hub dir, its build deps). _SIMPLE_CROSSBUILD_PACKAGES = [ diff --git a/e2e/crossbuild/pycross-distutils-probe/__test__.py b/e2e/crossbuild/pycross-distutils-probe/__test__.py index 9504d667c..c2c35940e 100644 --- a/e2e/crossbuild/pycross-distutils-probe/__test__.py +++ b/e2e/crossbuild/pycross-distutils-probe/__test__.py @@ -4,16 +4,13 @@ `build_distutils_probe_sdist.py`, `test_distutils_probe.py`). The sdist's `build_py` command shells out to a *fresh* interpreter and imports `distutils.util`; on Python 3.12+ that only resolves when setuptools' -`_distutils_hack` is reachable from the child. A build action that leaks a -stale `PYTHONPATH`/`PYTHONHOME` — exactly what rule.bzl's -`_INHERITED_PYTHON_ENV` filter strips — poisons the child while the parent -backend keeps working, so the failure is invisible to a plain "does it -build" check. +`_distutils_hack` is reachable from the child. A build action that exported a +stale `PYTHONPATH`/`PYTHONHOME` — the case build_helper.py's +`_INHERITED_PYTHON_ENV` filter exists for — breaks the child, not the parent, +so the failure is invisible to a plain "does it build" check. Structured like `uv-sdist-mpicc`: the sdist is assembled in-process and -build_helper.py runs as a subprocess with a minimal env (bare PATH, no -PYTHON* variables), so nothing is fetched from the network and nothing -leaks in from the test's own environment. +build_helper.py is invoked directly, so nothing is fetched from the network. """ import os diff --git a/e2e/crossbuild/pycross-distutils-probe/pyproject.toml b/e2e/crossbuild/pycross-distutils-probe/pyproject.toml index e452dbd88..2c635b7a9 100644 --- a/e2e/crossbuild/pycross-distutils-probe/pyproject.toml +++ b/e2e/crossbuild/pycross-distutils-probe/pyproject.toml @@ -3,6 +3,8 @@ name = "pycross_distutils_probe" version = "0.0.0" requires-python = ">=3.11" dependencies = [ + # The test drives build_helper.py directly, which shells out to + # `python -m build` with setuptools as the backend. "build", "setuptools", "wheel", diff --git a/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel b/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel index d017c53aa..5cffad2d5 100644 --- a/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel @@ -4,7 +4,7 @@ rules_pycross ships a synthetic sdist whose `build_py` command shells out to a fresh interpreter and imports `distutils.util`, guarding against a build environment that leaves the backend's child processes unable to find distutils (`SETUPTOOLS_USE_DISTUTILS`, a stale `PYTHONPATH`, or a stripped `PATH`). -rule.bzl filters `PYTHONHOME`/`PYTHONPATH`/`PYTHONPLATLIBDIR` out of the +build_helper.py filters `PYTHONHOME`/`PYTHONPATH`/`PYTHONPLATLIBDIR` out of the action env for exactly this reason, so the probe is worth keeping. Driven the same way as `uv-sdist-mpicc`: the test invokes build_helper.py diff --git a/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch b/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch index 62714ffa8..e242ee4ae 100644 --- a/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch +++ b/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch @@ -1,3 +1,9 @@ +Ported from rules_pycross tests/e2e/patches_and_hooks. Retargeted at the +installed venv layout: rules_py applies post-install patches with `patch -d` +rooted at the install tree, so paths are `lib/python/site-packages/...` +rather than the wheel-relative paths rules_pycross uses. The `PATCHED = True` +context line comes from the pre-build patch, so this hunk only applies when +the two phases ran in order. --- a/lib/python3.12/site-packages/setproctitle/__init__.py +++ b/lib/python3.12/site-packages/setproctitle/__init__.py @@ -56,3 +56,4 @@ diff --git a/e2e/crossbuild/pycross-patches/setup.MODULE.bazel b/e2e/crossbuild/pycross-patches/setup.MODULE.bazel index 018c5151c..62b442065 100644 --- a/e2e/crossbuild/pycross-patches/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-patches/setup.MODULE.bazel @@ -3,15 +3,8 @@ setproctitle is forced to build from its sdist with both patch phases applied: a pre-build patch that lands in the source tree before the PEP 517 backend runs, and a post-install patch that rewrites the already-unpacked wheel. The -two patches stack — the post-install hunk carries the pre-build patch's -`PATCHED = True` line as context, so it only applies when the phases ran in -order and an ordering regression fails the build itself, not just the -runtime test. - -The post-install patch is written against the installed venv layout -(`lib/python/site-packages/...`): rules_py applies post-install patches -with `patch -d` rooted at the install tree, unlike rules_pycross's -wheel-relative paths. +two patches stack — the post-install one applies against the pre-build +patch's output — so an ordering regression fails the runtime test. Uses its own hub: the patched setproctitle must not be shared with `pycross-setuptools`, which builds the same version unpatched. diff --git a/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py b/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py index c05a2152b..a32362199 100644 --- a/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py +++ b/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py @@ -1,18 +1,12 @@ -"""Assert both patch phases reached the installed setproctitle. - -Ported from rules_pycross tests/e2e/patches_and_hooks/tests/test_setproctitle.py. -`PATCHED` comes from the pre-build patch, `POST_PATCHED` from the post-install -patch. The upstream `SITE_HOOK_RAN` assertion is dropped: rules_py has no -`site_hooks` equivalent. -""" - +# Ported from rules_pycross tests/e2e/patches_and_hooks/tests/test_setproctitle.py. +# `SITE_HOOK_RAN` is dropped: rules_py has no `site_hooks` equivalent. import unittest import setproctitle class TestSetproctitle(unittest.TestCase): - def test_import(self) -> None: + def test_import(self): title = setproctitle.getproctitle() self.assertIsNotNone(title) self.assertTrue(setproctitle.PATCHED) diff --git a/e2e/crossbuild/pycross-pure-python/BUILD.bazel b/e2e/crossbuild/pycross-pure-python/BUILD.bazel index 868bfe668..71ca35f5c 100644 --- a/e2e/crossbuild/pycross-pure-python/BUILD.bazel +++ b/e2e/crossbuild/pycross-pure-python/BUILD.bazel @@ -85,10 +85,10 @@ py_test( ) # An anyarch build uses no CC toolchain, so what differs per platform here is -# the configuration the build *tool* is resolved in: the PEP 517 frontend and -# its wheels must resolve for the exec platform. If the target configuration -# leaked into them, these builds would try to run a non-host interpreter on -# the exec host. +# the configuration the build *tool* is resolved in: `pep517_whl`'s +# `exec_transition` has to pin the frontend and its wheels to the exec +# platform. If it leaked the target configuration, these builds would try to +# run a Linux interpreter on the exec host. collect_wheels( name = "pure_python_wheels", expected_tags = ["-none-any.whl"], diff --git a/e2e/crossbuild/pycross-pure-python/pyproject.toml b/e2e/crossbuild/pycross-pure-python/pyproject.toml index 4681134ee..075a72500 100644 --- a/e2e/crossbuild/pycross-pure-python/pyproject.toml +++ b/e2e/crossbuild/pycross-pure-python/pyproject.toml @@ -5,6 +5,9 @@ requires-python = ">=3.11" dependencies = [ "build", "setuptools", + # Build backends the three sdists below declare in [build-system]. + # The configure tool resolves them out of this lock, so they have to be + # reachable from the project's dependency graph. "flit-core", "hatchling", "hatch-vcs", @@ -13,6 +16,9 @@ dependencies = [ "tomli==2.2.1", ] +# All three ship `-none-any` wheels; forcing the source build exercises +# pep517_whl's `--validate-anyarch` path for three different PEP 517 +# backends (hatchling, flit-core). [tool.uv] no-binary-package = [ "filelock", diff --git a/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel b/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel index eb9350165..cffc227a6 100644 --- a/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel @@ -1,21 +1,14 @@ """Port of rules_pycross's `tests/e2e/build_pure_python` workspace. -filelock, tomli and pyproject-metadata are pinned as `no-binary-package`, so -the anyarch `pep517_whl` path builds each sdist with a PEP 517 backend other -than setuptools — hatchling for filelock, flit-core for tomli and -pyproject-metadata — and every resulting wheel must import from -site-packages at runtime. +Three pure-Python packages are forced to build from their sdists so the +`pep517_whl` (anyarch) path runs against two different PEP 517 backends — +hatchling (filelock) and flit-core (tomli, pyproject-metadata). Each package +still has to import from site-packages afterwards. -The backends are named in `default_build_dependencies` so they resolve -through the project repo's `py_library` targets, which carry their transitive -closure (hatchling alone needs pathspec, pluggy, trove-classifiers, …); the -configure tool's `[build-system] requires` resolution would yield bare -`whl_install` targets instead. - -The `sdist_build` repos are exposed so BUILD.bazel can rebuild the same -wheels under non-host target platforms. An anyarch build uses no CC -toolchain, so that matrix isolates a single property: the build tooling -(frontend and backend) must resolve for the exec platform even when the +The `sdist_build` repos are exposed so BUILD.bazel can rebuild the same wheels +under non-host target platforms: an anyarch build carries no CC toolchain, so +what that matrix exercises is `pep517_whl`'s exec transition — build tooling +(`build`, the backend) must resolve for the exec platform even when the configuration targets another one. """ @@ -25,6 +18,10 @@ uv.project( default_build_dependencies = [ "build", "setuptools", + # The backends have to come through the project repo, not through the + # configure tool's `[build-system] requires` resolution: that path + # yields bare `whl_install` targets, and hatchling needs its own + # transitive closure (pathspec, pluggy, trove-classifiers, …). "flit-core", "hatch-vcs", "hatchling", diff --git a/e2e/crossbuild/pycross-pure-python/test_filelock.py b/e2e/crossbuild/pycross-pure-python/test_filelock.py index 388192caa..cffa86ad3 100644 --- a/e2e/crossbuild/pycross-pure-python/test_filelock.py +++ b/e2e/crossbuild/pycross-pure-python/test_filelock.py @@ -4,7 +4,7 @@ class TestFileLock(unittest.TestCase): - def test_import(self) -> None: + def test_import(self): lock = filelock.FileLock("dummy.lock") self.assertIsNotNone(lock) diff --git a/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py b/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py index c388bc95f..739d34ff7 100644 --- a/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py +++ b/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py @@ -4,7 +4,7 @@ class TestPyprojectMetadata(unittest.TestCase): - def test_import(self) -> None: + def test_import(self): self.assertIsNotNone(pyproject_metadata.__version__) diff --git a/e2e/crossbuild/pycross-pure-python/test_tomli.py b/e2e/crossbuild/pycross-pure-python/test_tomli.py index 7d48c36ed..48bdea076 100644 --- a/e2e/crossbuild/pycross-pure-python/test_tomli.py +++ b/e2e/crossbuild/pycross-pure-python/test_tomli.py @@ -4,7 +4,7 @@ class TestTomli(unittest.TestCase): - def test_parse(self) -> None: + def test_parse(self): d = tomli.loads("a = 1") self.assertEqual(d["a"], 1) diff --git a/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py b/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py index f26573a1c..d77fc3d65 100644 --- a/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py +++ b/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py @@ -1,10 +1,11 @@ -"""Assert that source-built wheels land their top-level packages in site-packages. +"""Verify that installed wheels have their top-level packages in site-packages. -Ported from rules_pycross's shared top-level-packages check. The packages to -verify come from the comma-separated `PYCROSS_TEST_PACKAGES` env var, set by -the consuming py_test. Three invariants per package: it imports, its module -spec resolves inside site-packages rather than a leaked source tree or -`PYTHONPATH` entry, and no dist-info directory ends up on `sys.path`. +This test works in two modes: +1. If PYCROSS_TEST_PACKAGES env var is set, it tests those packages (comma-separated). +2. Otherwise, it tests hardcoded packages (regex, IPython) for + the requirements e2e workspace. + +Packages are tested for importability and correct site-packages placement. """ import importlib @@ -15,16 +16,20 @@ class TopLevelPackagesTest(unittest.TestCase): - def _get_packages(self) -> list[str]: - return [p.strip() for p in os.environ["PYCROSS_TEST_PACKAGES"].split(",") if p.strip()] + """Check that top_level_paths from wheel inspection actually show up.""" + + def _get_packages(self): + return [p.strip() for p in os.environ.get("PYCROSS_TEST_PACKAGES", "regex,IPython").split(",") if p.strip()] - def test_packages_importable(self) -> None: + def test_packages_importable(self): + """All expected packages should be importable.""" for pkg in self._get_packages(): with self.subTest(package=pkg): mod = importlib.import_module(pkg) self.assertIsNotNone(mod, f"{pkg} imported as None") - def test_packages_resolve_to_site_packages(self) -> None: + def test_packages_resolve_to_site_packages(self): + """All expected packages should resolve to files within site-packages.""" for pkg in self._get_packages(): with self.subTest(package=pkg): spec = importlib.util.find_spec(pkg) @@ -36,7 +41,8 @@ def test_packages_resolve_to_site_packages(self) -> None: f"{pkg} origin not in site-packages: {spec.origin}", ) - def test_no_dist_info_on_sys_path(self) -> None: + def test_no_dist_info_on_sys_path(self): + """dist-info directories should not be added as sys.path entries.""" for path in sys.path: basename = os.path.basename(path) self.assertFalse( diff --git a/e2e/crossbuild/pycross-setuptools/BUILD.bazel b/e2e/crossbuild/pycross-setuptools/BUILD.bazel index e2c54e19c..df7c2a63b 100644 --- a/e2e/crossbuild/pycross-setuptools/BUILD.bazel +++ b/e2e/crossbuild/pycross-setuptools/BUILD.bazel @@ -1,9 +1,11 @@ # Ported from rules_pycross tests/e2e/build_setuptools. # -# Three setuptools C-extension sdists built by `pep517_native_whl` and -# imported at runtime for the host. +# Three setuptools C-extension sdists built by `pep517_native_whl`, imported at +# runtime for the host, then rebuilt through rules_pycross's `collect_wheels` +# matrix for two non-host Linux platforms — the cross path this branch adds. load("@aspect_rules_py//py:defs.bzl", "py_test") +load("//tools:collect_wheels.bzl", "collect_wheels") exports_files(["require_extension.patch"]) @@ -11,6 +13,36 @@ _PY = "3.12" _DEP_GROUP = "pycross_setuptools" +# The libc/version flags are what the wheel resolver keys platform-specific +# wheel selection off; a bare constraint_values platform would leave build +# dependencies unresolvable. Same shape as //uv-deps-650/crossbuild. The +# dep_group flag rides along because the wheel targets under `collect_wheels` +# are reached through a platform transition, not through a py_venv. +_PLATFORM_FLAGS = [ + "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", + "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", + "--@aspect_rules_py//uv/private/constraints/dep_group:dep_group=" + _DEP_GROUP, + "--@aspect_rules_py//py/private/interpreter:python_version=" + _PY, +] + +platform( + name = "amd64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:x86_64", + ], + flags = _PLATFORM_FLAGS, +) + +platform( + name = "arm64_linux", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:aarch64", + ], + flags = _PLATFORM_FLAGS, +) + py_test( name = "test_setproctitle", srcs = ["test_setproctitle.py"], @@ -37,3 +69,41 @@ py_test( python_version = _PY, deps = ["@pypi_pycross_setuptools//pyyaml"], ) + +# rules_pycross's cross matrix, restricted to zstandard. +# +# pyyaml is excluded because `PYYAML_FORCE_LIBYAML=0` makes it anyarch — there +# is nothing platform-specific left to assert. +# +# setproctitle is excluded because it cannot cross-build here at all: its +# setup.py picks sources and macros off `sys.platform`, which reports the +# *exec* interpreter's platform. Cross mode overrides `_PYTHON_HOST_PLATFORM` +# and `_PYTHON_SYSCONFIGDATA_NAME`, neither of which moves `sys.platform`, so a +# darwin exec host compiles `src/darwin_set_process_name.c` with +# `-D__darwin__=1` against a linux target and fails on +# `CoreFoundation/CoreFoundation.h`. rules_pycross handles this with a real +# crossenv (`pycross/private/build/tools/crossenv/`) that patches `sys.platform` +# in the build interpreter. `require_extension.patch` keeps that failure loud +# rather than letting setproctitle fall back to an anyarch wheel. +collect_wheels( + name = "native_wheels", + expected_tags = [ + "linux_x86_64", + "linux_aarch64", + ], + platforms = [ + ":amd64_linux", + ":arm64_linux", + ], + wheels = ["@sdist_build__pycross_setuptools__zstandard__0_22_0//:whl"], +) + +py_test( + name = "native_wheels_elf_test", + srcs = ["//tools:check_wheel_native.py"], + args = ["$(rootpath :native_wheels)"], + data = [":native_wheels"], + dep_group = _DEP_GROUP, + main = "//tools:check_wheel_native.py", + python_version = _PY, +) diff --git a/e2e/crossbuild/pycross-setuptools/pyproject.toml b/e2e/crossbuild/pycross-setuptools/pyproject.toml index 292a3927f..c4e3838f3 100644 --- a/e2e/crossbuild/pycross-setuptools/pyproject.toml +++ b/e2e/crossbuild/pycross-setuptools/pyproject.toml @@ -6,7 +6,9 @@ dependencies = [ "build", "setuptools", "wheel", + # zstandard's setup.py builds a cffi backend when cffi is importable. "cffi", + # PyYAML 6.0.x cannot be cythonized by Cython 3. "cython<3.0", "pyyaml==6.0.1", "setproctitle==1.3.2", diff --git a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel index 6a4ba7ee6..012261ca9 100644 --- a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel @@ -1,36 +1,14 @@ """Port of rules_pycross's `tests/e2e/build_setuptools` workspace. Three setuptools-backed C-extension packages are forced to build from their -sdists (`[tool.uv] no-binary-package` in pyproject.toml), covering the -`pep517_native_whl` path for three distinct build shapes: +sdists: PyYAML (Cython-generated extension), setproctitle (plain C) and +zstandard (vendored libzstd). Together they cover the `pep517_native_whl` +path for a Cython pipeline, a trivial extension and a large vendored-C build. -- PyYAML 6.0.1: Cython-generated extension (sdist → cythonize → C → .so). - The lock pins `cython<3.0` because PyYAML 6.0.x cannot be cythonized by - Cython 3. -- setproctitle 1.3.2: a plain C extension, the minimal native case. -- zstandard 0.22.0: a large vendored-libzstd build, plus an optional cffi - backend its setup.py compiles whenever cffi is importable at build time. - -Each override exercises a different `uv.override_package` feature: - -- `env` on PyYAML ports rules_pycross's per-package `build_env` override - (`setuptools.override(name = "pyyaml", build_env = ...)`) and is observable - at runtime: with `PYYAML_FORCE_LIBYAML=0` the built wheel must not carry - the libyaml-backed `CLoader` (asserted by test_pyyaml.py). -- `pre_build_patches` on setproctitle removes its silent fallback to a pure - `py3-none-any` wheel when the extension fails to compile; see - require_extension.patch for why the fallback would mask a broken build. -- `resource_set` on zstandard declares the vendored-C compile's real memory - footprint so Bazel does not over-parallelize it. - -`default_build_dependencies` names cffi explicitly: zstandard's cffi backend -imports pycparser through cffi, and only the project repo's py_library carries -that transitive closure — the configure tool's `[build-system] requires` -resolution would yield a bare `whl_install` target without it. - -No cross-platform `collect_wheels` matrix here (unlike pycross-pure-python): -rebuilding these wheels for non-host targets would require a cross CC -toolchain this workspace does not set up. +`env` on PyYAML ports rules_pycross's per-package `build_env` override +(`setuptools.override(name = "pyyaml", build_env = ...)`), and is observable +at runtime: with `PYYAML_FORCE_LIBYAML=0` the built wheel must not carry the +libyaml-backed `CLoader`. Not ported: rules_pycross builds psycopg2 with a `pg_config` tool dep and zstandard against a Bazel-built system libzstd. Both need `rules_foreign_cc` @@ -45,6 +23,10 @@ uv.project( "build", "setuptools", "wheel", + # zstandard's cffi backend imports pycparser through cffi. Naming cffi + # here routes it through the project repo's py_library, which carries + # that transitive closure; the configure tool's `[build-system] + # requires` resolution yields a bare `whl_install` target instead. "cffi", ], hub_name = "pypi_pycross_setuptools", @@ -67,4 +49,10 @@ uv.override_package( lock = "//pycross-setuptools:uv.lock", resource_set = "mem_4g", ) -use_repo(uv, "pypi_pycross_setuptools") +use_repo( + uv, + "pypi_pycross_setuptools", + "sdist_build__pycross_setuptools__pyyaml__6_0_1", + "sdist_build__pycross_setuptools__setproctitle__1_3_2", + "sdist_build__pycross_setuptools__zstandard__0_22_0", +) diff --git a/e2e/crossbuild/pycross-setuptools/test_pyyaml.py b/e2e/crossbuild/pycross-setuptools/test_pyyaml.py index b6460a4e1..1853f0771 100644 --- a/e2e/crossbuild/pycross-setuptools/test_pyyaml.py +++ b/e2e/crossbuild/pycross-setuptools/test_pyyaml.py @@ -1,17 +1,12 @@ -"""Assert PyYAML built from sdist without the libyaml `CLoader` backend. - -Ported from rules_pycross tests/e2e/build_setuptools/tests/test_pyyaml.py, -with the `CLoader` assertion added: rules_pycross's version tolerates either -backend, which leaves its `build_env` override untested. The build sets -`PYYAML_FORCE_LIBYAML=0` via `uv.override_package(env = ...)`, so the source -build must have produced the pure-Python backend — if the override never -reached the build action, `CLoader` is importable and this test fails. -""" - +# Ported from rules_pycross tests/e2e/build_setuptools/tests/test_pyyaml.py. +# The `CLoader` assertion is added: rules_pycross's version tolerates either +# backend, which leaves its `build_env` override untested. The build sets +# PYYAML_FORCE_LIBYAML=0, so the source build must have produced the pure-Python +# backend — if the override never reached the build action, CLoader is present. import yaml -def test_pyyaml_import() -> None: +def test_pyyaml_import(): try: from yaml import CLoader as Loader except ImportError: diff --git a/e2e/crossbuild/pycross-setuptools/test_setproctitle.py b/e2e/crossbuild/pycross-setuptools/test_setproctitle.py index cb2cef063..44541f3a7 100644 --- a/e2e/crossbuild/pycross-setuptools/test_setproctitle.py +++ b/e2e/crossbuild/pycross-setuptools/test_setproctitle.py @@ -1,18 +1,10 @@ -"""Smoke test for setproctitle built from its sdist. - -Ported from rules_pycross tests/e2e/build_setuptools/tests/test_setproctitle.py. -require_extension.patch makes the C extension mandatory, so a passing import -here means the native build ran — the upstream pure-Python fallback cannot -have papered over a compile failure. -""" - import unittest import setproctitle class TestSetproctitle(unittest.TestCase): - def test_import(self) -> None: + def test_import(self): title = setproctitle.getproctitle() self.assertIsNotNone(title) diff --git a/e2e/crossbuild/pycross-setuptools/test_zstandard.py b/e2e/crossbuild/pycross-setuptools/test_zstandard.py index 691192062..c944a74d9 100644 --- a/e2e/crossbuild/pycross-setuptools/test_zstandard.py +++ b/e2e/crossbuild/pycross-setuptools/test_zstandard.py @@ -1,10 +1,3 @@ -"""Round-trip compress/decompress through zstandard built from its sdist. - -Ported from rules_pycross tests/e2e/build_setuptools/tests/test_zstandard.py. -A successful round trip proves the extension compiled against the vendored -libzstd actually works, not merely that the module imports. -""" - import unittest import zstandard @@ -35,13 +28,17 @@ class TestZstandard(unittest.TestCase): - def test_roundtrip(self) -> None: + def test_roundtrip(self): cctx = zstandard.ZstdCompressor() compressed = cctx.compress(ZEN) + + # Make sure we actually compressed assert len(compressed) < len(ZEN) dctx = zstandard.ZstdDecompressor() decompressed = dctx.decompress(compressed) + + # Check the round trip assert decompressed == ZEN diff --git a/e2e/crossbuild/tools/BUILD.bazel b/e2e/crossbuild/tools/BUILD.bazel index 43e6c78c8..33490867f 100644 --- a/e2e/crossbuild/tools/BUILD.bazel +++ b/e2e/crossbuild/tools/BUILD.bazel @@ -1,5 +1,6 @@ # Shared helpers consumed via load("//tools:..."). +load("@aspect_rules_py//py:defs.bzl", "py_binary") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@rules_shell//shell:sh_test.bzl", "sh_test") load(":ant_layer.bzl", "ant_home") @@ -10,8 +11,17 @@ exports_files([ "assert_absent.py", "check_so_arch.sh", "check_so_suffix.sh", + "check_wheel_native.py", + "check_wheel_tags.py", ]) +py_binary( + name = "collect_wheels_tool", + srcs = ["collect_wheels.py"], + main = "collect_wheels.py", + visibility = ["//visibility:public"], +) + # The host-targeting rust_toolchain's sysroot, re-resolved under the exec # transition so it stays correct even when the rest of the build is # transitioned to another platform — see rust_layer.bzl for why plain diff --git a/e2e/crossbuild/tools/check_wheel_native.py b/e2e/crossbuild/tools/check_wheel_native.py new file mode 100644 index 000000000..0bc1211d5 --- /dev/null +++ b/e2e/crossbuild/tools/check_wheel_native.py @@ -0,0 +1,92 @@ +"""Assert cross-built wheels really contain extensions for the tagged platform. + +Usage: check_wheel_native.py + +For every Linux-tagged wheel in the directory, every extension module inside it +must be an ELF object whose `e_machine` matches the wheel's architecture tag, +and whose filename ABI tag names the same architecture. A cross build that +fell back to the exec platform's compiler or sysconfig produces a correctly +named wheel holding host-architecture objects — which the wheel-tag check +alone cannot see. + +rules_pycross's cross coverage stops at "the wheel builds for both platforms" +(tests/e2e/shared/collect_wheels.bzl feeding a build target); this is the +assertion that makes that matrix meaningful. +""" + +import os +import struct +import sys +import zipfile + +# ELF e_machine values, from elf.h. +_EM_X86_64 = 0x3E +_EM_AARCH64 = 0xB7 + +_ARCH_TAGS = { + "x86_64": _EM_X86_64, + "aarch64": _EM_AARCH64, +} + + +def _wheel_arch(name: str) -> str: + for arch in _ARCH_TAGS: + if arch in name: + return arch + raise AssertionError("cannot determine architecture from wheel name {}".format(name)) + + +def _elf_machine(data: bytes) -> int: + assert data[:4] == b"\x7fELF", "not an ELF object" + little_endian = data[5] == 1 + return struct.unpack_from("H", data, 18)[0] + + +def _check(wheel_path: str) -> int: + name = os.path.basename(wheel_path) + arch = _wheel_arch(name) + expected_machine = _ARCH_TAGS[arch] + checked = 0 + + with zipfile.ZipFile(wheel_path) as zf: + for entry in zf.namelist(): + if not entry.endswith(".so"): + continue + machine = _elf_machine(zf.read(entry)) + if machine != expected_machine: + raise AssertionError( + "{}: {} is ELF machine {:#x}, expected {:#x} for '{}'".format( + name, entry, machine, expected_machine, arch + ) + ) + base = os.path.basename(entry) + if "." in base[:-3] and arch not in base: + raise AssertionError( + "{}: extension filename '{}' does not name architecture '{}'".format( + name, base, arch + ) + ) + print(" {} -> {} (ELF {:#x})".format(name, base, machine)) + checked += 1 + + return checked + + +def main() -> None: + wheel_dir = sys.argv[1] + wheels = sorted( + f + for f in os.listdir(wheel_dir) + if f.endswith(".whl") and "linux" in f and not f.endswith("-none-any.whl") + ) + assert wheels, "no Linux-tagged native wheels collected under {}".format(wheel_dir) + + total = 0 + for wheel in wheels: + total += _check(os.path.join(wheel_dir, wheel)) + + assert total, "collected native wheels contain no extension modules: {}".format(wheels) + + +if __name__ == "__main__": + main() diff --git a/e2e/crossbuild/tools/collect_wheels.bzl b/e2e/crossbuild/tools/collect_wheels.bzl index 53d19df76..defa15f69 100644 --- a/e2e/crossbuild/tools/collect_wheels.bzl +++ b/e2e/crossbuild/tools/collect_wheels.bzl @@ -11,7 +11,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") load("@bazel_lib//lib:run_binary.bzl", "run_binary") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -def collect_wheels(name, wheels, platforms, expected_tags): +def collect_wheels(name, wheels, platforms, expected_tags = None, **kwargs): """Builds `wheels` once per entry in `platforms` and collects them. Args: @@ -19,13 +19,12 @@ def collect_wheels(name, wheels, platforms, expected_tags): wheels: Wheel labels, e.g. `["@sdist_build__x__y__1_0//:whl"]`. platforms: Platform labels to build each wheel for. expected_tags: Substrings that must each appear in at least one - collected wheel filename, asserted by `_tags_test`. - - The inner `_wheels` filegroup is tagged manual: it is only reachable - through the platform transitions declared here, which are what supply the - dep_group and libc flags the wheel targets select on. + collected wheel filename. When set, declares `_tags_test`. + **kwargs: Forwarded to the collecting `run_binary`. """ + # Manual: only reachable through the platform transitions below, which are + # what supply the dep_group and libc flags the wheel targets select on. native.filegroup( name = name + "_wheels", srcs = wheels, @@ -57,12 +56,14 @@ def collect_wheels(name, wheels, platforms, expected_tags): ], out_dirs = [name], tool = "//tools:collect_wheels_tool", + **kwargs ) - py_test( - name = name + "_tags_test", - srcs = ["//tools:check_wheel_tags.py"], - main = "//tools:check_wheel_tags.py", - args = ["$(rootpath :{})".format(name)] + expected_tags, - data = [name], - ) + if expected_tags: + py_test( + name = name + "_tags_test", + srcs = ["//tools:check_wheel_tags.py"], + main = "//tools:check_wheel_tags.py", + args = ["$(rootpath :{})".format(name)] + expected_tags, + data = [name], + ) diff --git a/e2e/crossbuild/tools/collect_wheels.py b/e2e/crossbuild/tools/collect_wheels.py index a834aa256..9dc094881 100644 --- a/e2e/crossbuild/tools/collect_wheels.py +++ b/e2e/crossbuild/tools/collect_wheels.py @@ -1,9 +1,8 @@ """Copy every .whl reachable from the given paths into one output directory. -Ported from rules_pycross (tests/e2e/shared/collect_wheels.py). Inputs are -tree artifacts holding wheels — pep517_whl/pep517_native_whl declare a -directory output. The same anyarch wheel can arrive through more than one -platform transition, so first copy wins. +Ported from rules_pycross (tests/e2e/shared/collect_wheels.py). Inputs are a +mix of plain wheel files and tree artifacts holding wheels, because +pep517_whl/pep517_native_whl declare a directory output. """ import argparse @@ -11,10 +10,10 @@ from pathlib import Path -def main() -> None: +def main(): parser = argparse.ArgumentParser() parser.add_argument("--out-dir", required=True) - parser.add_argument("wheel", nargs="*") + parser.add_argument("wheel", nargs="*", default=[]) args = parser.parse_args() out_dir = Path(args.out_dir) @@ -22,11 +21,25 @@ def main() -> None: for wheel_str in args.wheel: for p in wheel_str.split(" "): - for whl in Path(p).glob("*.whl"): - real_path = whl.resolve() - target_path = out_dir / real_path.name - if not target_path.exists(): - shutil.copy2(real_path, target_path) + wheel_path = Path(p) + + if wheel_path.is_dir(): + for whl in wheel_path.glob("*.whl"): + real_path = whl.resolve() + target_path = out_dir / real_path.name + if not target_path.exists(): + shutil.copy2(real_path, target_path) + continue + + if not wheel_path.name.endswith(".whl"): + continue + + real_path = wheel_path.resolve() + target_path = out_dir / real_path.name + if target_path.exists(): + continue + + shutil.copy2(real_path, target_path) if __name__ == "__main__": From 20f1125537268bc3a3e666c4fef2c968d1d23cbe Mon Sep 17 00:00:00 2001 From: xangcastle Date: Tue, 11 Aug 2026 17:39:10 -0600 Subject: [PATCH 31/56] test(e2e): consolidate the pycross suites in e2e/crossbuild MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The four rules_pycross ports moved from e2e/cases into the crossbuild workspace, where the cross toolchains they exercise actually live: - restore the pycross-setuptools native_wheels matrix deferred out of #1413 (zstandard rebuilt for amd64/arm64 with ELF and wheel-tag assertions) — under this workspace's registered cross CC toolchain it runs where it couldn't on main - carry the reviewed refinements from #1413 over the original port - pin setproctitle to -std=gnu17: gcc_toolchain's GCC defaults to C23, where `bool` is a keyword and 1.3.2's `typedef char bool` breaks — coverage the e2e/cases host toolchain never gave us - drop the cases, their MODULE includes and the collect_wheels tooling from e2e/cases --- .../pycross-distutils-probe/__test__.py | 13 ++++-- .../pycross-distutils-probe/pyproject.toml | 2 - .../setup.MODULE.bazel | 2 +- .../patches/setproctitle-postinstall.patch | 6 --- .../pycross-patches/setup.MODULE.bazel | 15 +++++- .../test_setproctitle_patched.py | 12 +++-- .../pycross-pure-python/BUILD.bazel | 8 ++-- .../pycross-pure-python/pyproject.toml | 6 --- .../pycross-pure-python/setup.MODULE.bazel | 27 ++++++----- .../pycross-pure-python/test_filelock.py | 2 +- .../test_pyproject_metadata.py | 2 +- .../pycross-pure-python/test_tomli.py | 2 +- .../test_top_level_packages.py | 28 +++++------ e2e/crossbuild/pycross-setuptools/BUILD.bazel | 2 +- .../pycross-setuptools/pyproject.toml | 2 - .../pycross-setuptools/setup.MODULE.bazel | 46 +++++++++++++------ .../pycross-setuptools/test_pyyaml.py | 17 ++++--- .../pycross-setuptools/test_setproctitle.py | 10 +++- .../pycross-setuptools/test_zstandard.py | 13 ++++-- e2e/crossbuild/tools/collect_wheels.bzl | 27 ++++++----- e2e/crossbuild/tools/collect_wheels.py | 35 +++++--------- 21 files changed, 150 insertions(+), 127 deletions(-) diff --git a/e2e/crossbuild/pycross-distutils-probe/__test__.py b/e2e/crossbuild/pycross-distutils-probe/__test__.py index c2c35940e..9504d667c 100644 --- a/e2e/crossbuild/pycross-distutils-probe/__test__.py +++ b/e2e/crossbuild/pycross-distutils-probe/__test__.py @@ -4,13 +4,16 @@ `build_distutils_probe_sdist.py`, `test_distutils_probe.py`). The sdist's `build_py` command shells out to a *fresh* interpreter and imports `distutils.util`; on Python 3.12+ that only resolves when setuptools' -`_distutils_hack` is reachable from the child. A build action that exported a -stale `PYTHONPATH`/`PYTHONHOME` — the case build_helper.py's -`_INHERITED_PYTHON_ENV` filter exists for — breaks the child, not the parent, -so the failure is invisible to a plain "does it build" check. +`_distutils_hack` is reachable from the child. A build action that leaks a +stale `PYTHONPATH`/`PYTHONHOME` — exactly what rule.bzl's +`_INHERITED_PYTHON_ENV` filter strips — poisons the child while the parent +backend keeps working, so the failure is invisible to a plain "does it +build" check. Structured like `uv-sdist-mpicc`: the sdist is assembled in-process and -build_helper.py is invoked directly, so nothing is fetched from the network. +build_helper.py runs as a subprocess with a minimal env (bare PATH, no +PYTHON* variables), so nothing is fetched from the network and nothing +leaks in from the test's own environment. """ import os diff --git a/e2e/crossbuild/pycross-distutils-probe/pyproject.toml b/e2e/crossbuild/pycross-distutils-probe/pyproject.toml index 2c635b7a9..e452dbd88 100644 --- a/e2e/crossbuild/pycross-distutils-probe/pyproject.toml +++ b/e2e/crossbuild/pycross-distutils-probe/pyproject.toml @@ -3,8 +3,6 @@ name = "pycross_distutils_probe" version = "0.0.0" requires-python = ">=3.11" dependencies = [ - # The test drives build_helper.py directly, which shells out to - # `python -m build` with setuptools as the backend. "build", "setuptools", "wheel", diff --git a/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel b/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel index 5cffad2d5..d017c53aa 100644 --- a/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-distutils-probe/setup.MODULE.bazel @@ -4,7 +4,7 @@ rules_pycross ships a synthetic sdist whose `build_py` command shells out to a fresh interpreter and imports `distutils.util`, guarding against a build environment that leaves the backend's child processes unable to find distutils (`SETUPTOOLS_USE_DISTUTILS`, a stale `PYTHONPATH`, or a stripped `PATH`). -build_helper.py filters `PYTHONHOME`/`PYTHONPATH`/`PYTHONPLATLIBDIR` out of the +rule.bzl filters `PYTHONHOME`/`PYTHONPATH`/`PYTHONPLATLIBDIR` out of the action env for exactly this reason, so the probe is worth keeping. Driven the same way as `uv-sdist-mpicc`: the test invokes build_helper.py diff --git a/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch b/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch index e242ee4ae..62714ffa8 100644 --- a/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch +++ b/e2e/crossbuild/pycross-patches/patches/setproctitle-postinstall.patch @@ -1,9 +1,3 @@ -Ported from rules_pycross tests/e2e/patches_and_hooks. Retargeted at the -installed venv layout: rules_py applies post-install patches with `patch -d` -rooted at the install tree, so paths are `lib/python/site-packages/...` -rather than the wheel-relative paths rules_pycross uses. The `PATCHED = True` -context line comes from the pre-build patch, so this hunk only applies when -the two phases ran in order. --- a/lib/python3.12/site-packages/setproctitle/__init__.py +++ b/lib/python3.12/site-packages/setproctitle/__init__.py @@ -56,3 +56,4 @@ diff --git a/e2e/crossbuild/pycross-patches/setup.MODULE.bazel b/e2e/crossbuild/pycross-patches/setup.MODULE.bazel index 62b442065..099b1395c 100644 --- a/e2e/crossbuild/pycross-patches/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-patches/setup.MODULE.bazel @@ -3,8 +3,15 @@ setproctitle is forced to build from its sdist with both patch phases applied: a pre-build patch that lands in the source tree before the PEP 517 backend runs, and a post-install patch that rewrites the already-unpacked wheel. The -two patches stack — the post-install one applies against the pre-build -patch's output — so an ordering regression fails the runtime test. +two patches stack — the post-install hunk carries the pre-build patch's +`PATCHED = True` line as context, so it only applies when the phases ran in +order and an ordering regression fails the build itself, not just the +runtime test. + +The post-install patch is written against the installed venv layout +(`lib/python/site-packages/...`): rules_py applies post-install patches +with `patch -d` rooted at the install tree, unlike rules_pycross's +wheel-relative paths. Uses its own hub: the patched setproctitle must not be shared with `pycross-setuptools`, which builds the same version unpatched. @@ -30,6 +37,10 @@ uv.project( ) uv.override_package( name = "setproctitle", + # gcc_toolchain's GCC defaults to C23, where `bool` is a keyword; + # setproctitle 1.3.2's src/c.h still does `typedef char bool`. distutils + # appends $CFLAGS after its own flags, so the -std override wins. + env = {"CFLAGS": "-std=gnu17"}, lock = "//pycross-patches:uv.lock", post_install_patch_strip = 1, post_install_patches = ["//pycross-patches:patches/setproctitle-postinstall.patch"], diff --git a/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py b/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py index a32362199..c05a2152b 100644 --- a/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py +++ b/e2e/crossbuild/pycross-patches/test_setproctitle_patched.py @@ -1,12 +1,18 @@ -# Ported from rules_pycross tests/e2e/patches_and_hooks/tests/test_setproctitle.py. -# `SITE_HOOK_RAN` is dropped: rules_py has no `site_hooks` equivalent. +"""Assert both patch phases reached the installed setproctitle. + +Ported from rules_pycross tests/e2e/patches_and_hooks/tests/test_setproctitle.py. +`PATCHED` comes from the pre-build patch, `POST_PATCHED` from the post-install +patch. The upstream `SITE_HOOK_RAN` assertion is dropped: rules_py has no +`site_hooks` equivalent. +""" + import unittest import setproctitle class TestSetproctitle(unittest.TestCase): - def test_import(self): + def test_import(self) -> None: title = setproctitle.getproctitle() self.assertIsNotNone(title) self.assertTrue(setproctitle.PATCHED) diff --git a/e2e/crossbuild/pycross-pure-python/BUILD.bazel b/e2e/crossbuild/pycross-pure-python/BUILD.bazel index 71ca35f5c..868bfe668 100644 --- a/e2e/crossbuild/pycross-pure-python/BUILD.bazel +++ b/e2e/crossbuild/pycross-pure-python/BUILD.bazel @@ -85,10 +85,10 @@ py_test( ) # An anyarch build uses no CC toolchain, so what differs per platform here is -# the configuration the build *tool* is resolved in: `pep517_whl`'s -# `exec_transition` has to pin the frontend and its wheels to the exec -# platform. If it leaked the target configuration, these builds would try to -# run a Linux interpreter on the exec host. +# the configuration the build *tool* is resolved in: the PEP 517 frontend and +# its wheels must resolve for the exec platform. If the target configuration +# leaked into them, these builds would try to run a non-host interpreter on +# the exec host. collect_wheels( name = "pure_python_wheels", expected_tags = ["-none-any.whl"], diff --git a/e2e/crossbuild/pycross-pure-python/pyproject.toml b/e2e/crossbuild/pycross-pure-python/pyproject.toml index 075a72500..4681134ee 100644 --- a/e2e/crossbuild/pycross-pure-python/pyproject.toml +++ b/e2e/crossbuild/pycross-pure-python/pyproject.toml @@ -5,9 +5,6 @@ requires-python = ">=3.11" dependencies = [ "build", "setuptools", - # Build backends the three sdists below declare in [build-system]. - # The configure tool resolves them out of this lock, so they have to be - # reachable from the project's dependency graph. "flit-core", "hatchling", "hatch-vcs", @@ -16,9 +13,6 @@ dependencies = [ "tomli==2.2.1", ] -# All three ship `-none-any` wheels; forcing the source build exercises -# pep517_whl's `--validate-anyarch` path for three different PEP 517 -# backends (hatchling, flit-core). [tool.uv] no-binary-package = [ "filelock", diff --git a/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel b/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel index cffc227a6..eb9350165 100644 --- a/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-pure-python/setup.MODULE.bazel @@ -1,14 +1,21 @@ """Port of rules_pycross's `tests/e2e/build_pure_python` workspace. -Three pure-Python packages are forced to build from their sdists so the -`pep517_whl` (anyarch) path runs against two different PEP 517 backends — -hatchling (filelock) and flit-core (tomli, pyproject-metadata). Each package -still has to import from site-packages afterwards. +filelock, tomli and pyproject-metadata are pinned as `no-binary-package`, so +the anyarch `pep517_whl` path builds each sdist with a PEP 517 backend other +than setuptools — hatchling for filelock, flit-core for tomli and +pyproject-metadata — and every resulting wheel must import from +site-packages at runtime. -The `sdist_build` repos are exposed so BUILD.bazel can rebuild the same wheels -under non-host target platforms: an anyarch build carries no CC toolchain, so -what that matrix exercises is `pep517_whl`'s exec transition — build tooling -(`build`, the backend) must resolve for the exec platform even when the +The backends are named in `default_build_dependencies` so they resolve +through the project repo's `py_library` targets, which carry their transitive +closure (hatchling alone needs pathspec, pluggy, trove-classifiers, …); the +configure tool's `[build-system] requires` resolution would yield bare +`whl_install` targets instead. + +The `sdist_build` repos are exposed so BUILD.bazel can rebuild the same +wheels under non-host target platforms. An anyarch build uses no CC +toolchain, so that matrix isolates a single property: the build tooling +(frontend and backend) must resolve for the exec platform even when the configuration targets another one. """ @@ -18,10 +25,6 @@ uv.project( default_build_dependencies = [ "build", "setuptools", - # The backends have to come through the project repo, not through the - # configure tool's `[build-system] requires` resolution: that path - # yields bare `whl_install` targets, and hatchling needs its own - # transitive closure (pathspec, pluggy, trove-classifiers, …). "flit-core", "hatch-vcs", "hatchling", diff --git a/e2e/crossbuild/pycross-pure-python/test_filelock.py b/e2e/crossbuild/pycross-pure-python/test_filelock.py index cffa86ad3..388192caa 100644 --- a/e2e/crossbuild/pycross-pure-python/test_filelock.py +++ b/e2e/crossbuild/pycross-pure-python/test_filelock.py @@ -4,7 +4,7 @@ class TestFileLock(unittest.TestCase): - def test_import(self): + def test_import(self) -> None: lock = filelock.FileLock("dummy.lock") self.assertIsNotNone(lock) diff --git a/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py b/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py index 739d34ff7..c388bc95f 100644 --- a/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py +++ b/e2e/crossbuild/pycross-pure-python/test_pyproject_metadata.py @@ -4,7 +4,7 @@ class TestPyprojectMetadata(unittest.TestCase): - def test_import(self): + def test_import(self) -> None: self.assertIsNotNone(pyproject_metadata.__version__) diff --git a/e2e/crossbuild/pycross-pure-python/test_tomli.py b/e2e/crossbuild/pycross-pure-python/test_tomli.py index 48bdea076..7d48c36ed 100644 --- a/e2e/crossbuild/pycross-pure-python/test_tomli.py +++ b/e2e/crossbuild/pycross-pure-python/test_tomli.py @@ -4,7 +4,7 @@ class TestTomli(unittest.TestCase): - def test_parse(self): + def test_parse(self) -> None: d = tomli.loads("a = 1") self.assertEqual(d["a"], 1) diff --git a/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py b/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py index d77fc3d65..f26573a1c 100644 --- a/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py +++ b/e2e/crossbuild/pycross-pure-python/test_top_level_packages.py @@ -1,11 +1,10 @@ -"""Verify that installed wheels have their top-level packages in site-packages. +"""Assert that source-built wheels land their top-level packages in site-packages. -This test works in two modes: -1. If PYCROSS_TEST_PACKAGES env var is set, it tests those packages (comma-separated). -2. Otherwise, it tests hardcoded packages (regex, IPython) for - the requirements e2e workspace. - -Packages are tested for importability and correct site-packages placement. +Ported from rules_pycross's shared top-level-packages check. The packages to +verify come from the comma-separated `PYCROSS_TEST_PACKAGES` env var, set by +the consuming py_test. Three invariants per package: it imports, its module +spec resolves inside site-packages rather than a leaked source tree or +`PYTHONPATH` entry, and no dist-info directory ends up on `sys.path`. """ import importlib @@ -16,20 +15,16 @@ class TopLevelPackagesTest(unittest.TestCase): - """Check that top_level_paths from wheel inspection actually show up.""" - - def _get_packages(self): - return [p.strip() for p in os.environ.get("PYCROSS_TEST_PACKAGES", "regex,IPython").split(",") if p.strip()] + def _get_packages(self) -> list[str]: + return [p.strip() for p in os.environ["PYCROSS_TEST_PACKAGES"].split(",") if p.strip()] - def test_packages_importable(self): - """All expected packages should be importable.""" + def test_packages_importable(self) -> None: for pkg in self._get_packages(): with self.subTest(package=pkg): mod = importlib.import_module(pkg) self.assertIsNotNone(mod, f"{pkg} imported as None") - def test_packages_resolve_to_site_packages(self): - """All expected packages should resolve to files within site-packages.""" + def test_packages_resolve_to_site_packages(self) -> None: for pkg in self._get_packages(): with self.subTest(package=pkg): spec = importlib.util.find_spec(pkg) @@ -41,8 +36,7 @@ def test_packages_resolve_to_site_packages(self): f"{pkg} origin not in site-packages: {spec.origin}", ) - def test_no_dist_info_on_sys_path(self): - """dist-info directories should not be added as sys.path entries.""" + def test_no_dist_info_on_sys_path(self) -> None: for path in sys.path: basename = os.path.basename(path) self.assertFalse( diff --git a/e2e/crossbuild/pycross-setuptools/BUILD.bazel b/e2e/crossbuild/pycross-setuptools/BUILD.bazel index df7c2a63b..db8890bb6 100644 --- a/e2e/crossbuild/pycross-setuptools/BUILD.bazel +++ b/e2e/crossbuild/pycross-setuptools/BUILD.bazel @@ -15,7 +15,7 @@ _DEP_GROUP = "pycross_setuptools" # The libc/version flags are what the wheel resolver keys platform-specific # wheel selection off; a bare constraint_values platform would leave build -# dependencies unresolvable. Same shape as //uv-deps-650/crossbuild. The +# dependencies unresolvable. Same shape as the e2e/crossbuild workspace. The # dep_group flag rides along because the wheel targets under `collect_wheels` # are reached through a platform transition, not through a py_venv. _PLATFORM_FLAGS = [ diff --git a/e2e/crossbuild/pycross-setuptools/pyproject.toml b/e2e/crossbuild/pycross-setuptools/pyproject.toml index c4e3838f3..292a3927f 100644 --- a/e2e/crossbuild/pycross-setuptools/pyproject.toml +++ b/e2e/crossbuild/pycross-setuptools/pyproject.toml @@ -6,9 +6,7 @@ dependencies = [ "build", "setuptools", "wheel", - # zstandard's setup.py builds a cffi backend when cffi is importable. "cffi", - # PyYAML 6.0.x cannot be cythonized by Cython 3. "cython<3.0", "pyyaml==6.0.1", "setproctitle==1.3.2", diff --git a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel index 012261ca9..74f51fb32 100644 --- a/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel +++ b/e2e/crossbuild/pycross-setuptools/setup.MODULE.bazel @@ -1,14 +1,36 @@ """Port of rules_pycross's `tests/e2e/build_setuptools` workspace. Three setuptools-backed C-extension packages are forced to build from their -sdists: PyYAML (Cython-generated extension), setproctitle (plain C) and -zstandard (vendored libzstd). Together they cover the `pep517_native_whl` -path for a Cython pipeline, a trivial extension and a large vendored-C build. +sdists (`[tool.uv] no-binary-package` in pyproject.toml), covering the +`pep517_native_whl` path for three distinct build shapes: -`env` on PyYAML ports rules_pycross's per-package `build_env` override -(`setuptools.override(name = "pyyaml", build_env = ...)`), and is observable -at runtime: with `PYYAML_FORCE_LIBYAML=0` the built wheel must not carry the -libyaml-backed `CLoader`. +- PyYAML 6.0.1: Cython-generated extension (sdist → cythonize → C → .so). + The lock pins `cython<3.0` because PyYAML 6.0.x cannot be cythonized by + Cython 3. +- setproctitle 1.3.2: a plain C extension, the minimal native case. +- zstandard 0.22.0: a large vendored-libzstd build, plus an optional cffi + backend its setup.py compiles whenever cffi is importable at build time. + +Each override exercises a different `uv.override_package` feature: + +- `env` on PyYAML ports rules_pycross's per-package `build_env` override + (`setuptools.override(name = "pyyaml", build_env = ...)`) and is observable + at runtime: with `PYYAML_FORCE_LIBYAML=0` the built wheel must not carry + the libyaml-backed `CLoader` (asserted by test_pyyaml.py). +- `pre_build_patches` on setproctitle removes its silent fallback to a pure + `py3-none-any` wheel when the extension fails to compile; see + require_extension.patch for why the fallback would mask a broken build. +- `resource_set` on zstandard declares the vendored-C compile's real memory + footprint so Bazel does not over-parallelize it. + +`default_build_dependencies` names cffi explicitly: zstandard's cffi backend +imports pycparser through cffi, and only the project repo's py_library carries +that transitive closure — the configure tool's `[build-system] requires` +resolution would yield a bare `whl_install` target without it. + +No cross-platform `collect_wheels` matrix here (unlike pycross-pure-python): +rebuilding these wheels for non-host targets would require a cross CC +toolchain this workspace does not set up. Not ported: rules_pycross builds psycopg2 with a `pg_config` tool dep and zstandard against a Bazel-built system libzstd. Both need `rules_foreign_cc` @@ -23,10 +45,6 @@ uv.project( "build", "setuptools", "wheel", - # zstandard's cffi backend imports pycparser through cffi. Naming cffi - # here routes it through the project repo's py_library, which carries - # that transitive closure; the configure tool's `[build-system] - # requires` resolution yields a bare `whl_install` target instead. "cffi", ], hub_name = "pypi_pycross_setuptools", @@ -40,6 +58,10 @@ uv.override_package( ) uv.override_package( name = "setproctitle", + # gcc_toolchain's GCC defaults to C23, where `bool` is a keyword; + # setproctitle 1.3.2's src/c.h still does `typedef char bool`. distutils + # appends $CFLAGS after its own flags, so the -std override wins. + env = {"CFLAGS": "-std=gnu17"}, lock = "//pycross-setuptools:uv.lock", pre_build_patch_strip = 1, pre_build_patches = ["//pycross-setuptools:require_extension.patch"], @@ -52,7 +74,5 @@ uv.override_package( use_repo( uv, "pypi_pycross_setuptools", - "sdist_build__pycross_setuptools__pyyaml__6_0_1", - "sdist_build__pycross_setuptools__setproctitle__1_3_2", "sdist_build__pycross_setuptools__zstandard__0_22_0", ) diff --git a/e2e/crossbuild/pycross-setuptools/test_pyyaml.py b/e2e/crossbuild/pycross-setuptools/test_pyyaml.py index 1853f0771..b6460a4e1 100644 --- a/e2e/crossbuild/pycross-setuptools/test_pyyaml.py +++ b/e2e/crossbuild/pycross-setuptools/test_pyyaml.py @@ -1,12 +1,17 @@ -# Ported from rules_pycross tests/e2e/build_setuptools/tests/test_pyyaml.py. -# The `CLoader` assertion is added: rules_pycross's version tolerates either -# backend, which leaves its `build_env` override untested. The build sets -# PYYAML_FORCE_LIBYAML=0, so the source build must have produced the pure-Python -# backend — if the override never reached the build action, CLoader is present. +"""Assert PyYAML built from sdist without the libyaml `CLoader` backend. + +Ported from rules_pycross tests/e2e/build_setuptools/tests/test_pyyaml.py, +with the `CLoader` assertion added: rules_pycross's version tolerates either +backend, which leaves its `build_env` override untested. The build sets +`PYYAML_FORCE_LIBYAML=0` via `uv.override_package(env = ...)`, so the source +build must have produced the pure-Python backend — if the override never +reached the build action, `CLoader` is importable and this test fails. +""" + import yaml -def test_pyyaml_import(): +def test_pyyaml_import() -> None: try: from yaml import CLoader as Loader except ImportError: diff --git a/e2e/crossbuild/pycross-setuptools/test_setproctitle.py b/e2e/crossbuild/pycross-setuptools/test_setproctitle.py index 44541f3a7..cb2cef063 100644 --- a/e2e/crossbuild/pycross-setuptools/test_setproctitle.py +++ b/e2e/crossbuild/pycross-setuptools/test_setproctitle.py @@ -1,10 +1,18 @@ +"""Smoke test for setproctitle built from its sdist. + +Ported from rules_pycross tests/e2e/build_setuptools/tests/test_setproctitle.py. +require_extension.patch makes the C extension mandatory, so a passing import +here means the native build ran — the upstream pure-Python fallback cannot +have papered over a compile failure. +""" + import unittest import setproctitle class TestSetproctitle(unittest.TestCase): - def test_import(self): + def test_import(self) -> None: title = setproctitle.getproctitle() self.assertIsNotNone(title) diff --git a/e2e/crossbuild/pycross-setuptools/test_zstandard.py b/e2e/crossbuild/pycross-setuptools/test_zstandard.py index c944a74d9..691192062 100644 --- a/e2e/crossbuild/pycross-setuptools/test_zstandard.py +++ b/e2e/crossbuild/pycross-setuptools/test_zstandard.py @@ -1,3 +1,10 @@ +"""Round-trip compress/decompress through zstandard built from its sdist. + +Ported from rules_pycross tests/e2e/build_setuptools/tests/test_zstandard.py. +A successful round trip proves the extension compiled against the vendored +libzstd actually works, not merely that the module imports. +""" + import unittest import zstandard @@ -28,17 +35,13 @@ class TestZstandard(unittest.TestCase): - def test_roundtrip(self): + def test_roundtrip(self) -> None: cctx = zstandard.ZstdCompressor() compressed = cctx.compress(ZEN) - - # Make sure we actually compressed assert len(compressed) < len(ZEN) dctx = zstandard.ZstdDecompressor() decompressed = dctx.decompress(compressed) - - # Check the round trip assert decompressed == ZEN diff --git a/e2e/crossbuild/tools/collect_wheels.bzl b/e2e/crossbuild/tools/collect_wheels.bzl index defa15f69..53d19df76 100644 --- a/e2e/crossbuild/tools/collect_wheels.bzl +++ b/e2e/crossbuild/tools/collect_wheels.bzl @@ -11,7 +11,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") load("@bazel_lib//lib:run_binary.bzl", "run_binary") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -def collect_wheels(name, wheels, platforms, expected_tags = None, **kwargs): +def collect_wheels(name, wheels, platforms, expected_tags): """Builds `wheels` once per entry in `platforms` and collects them. Args: @@ -19,12 +19,13 @@ def collect_wheels(name, wheels, platforms, expected_tags = None, **kwargs): wheels: Wheel labels, e.g. `["@sdist_build__x__y__1_0//:whl"]`. platforms: Platform labels to build each wheel for. expected_tags: Substrings that must each appear in at least one - collected wheel filename. When set, declares `_tags_test`. - **kwargs: Forwarded to the collecting `run_binary`. + collected wheel filename, asserted by `_tags_test`. + + The inner `_wheels` filegroup is tagged manual: it is only reachable + through the platform transitions declared here, which are what supply the + dep_group and libc flags the wheel targets select on. """ - # Manual: only reachable through the platform transitions below, which are - # what supply the dep_group and libc flags the wheel targets select on. native.filegroup( name = name + "_wheels", srcs = wheels, @@ -56,14 +57,12 @@ def collect_wheels(name, wheels, platforms, expected_tags = None, **kwargs): ], out_dirs = [name], tool = "//tools:collect_wheels_tool", - **kwargs ) - if expected_tags: - py_test( - name = name + "_tags_test", - srcs = ["//tools:check_wheel_tags.py"], - main = "//tools:check_wheel_tags.py", - args = ["$(rootpath :{})".format(name)] + expected_tags, - data = [name], - ) + py_test( + name = name + "_tags_test", + srcs = ["//tools:check_wheel_tags.py"], + main = "//tools:check_wheel_tags.py", + args = ["$(rootpath :{})".format(name)] + expected_tags, + data = [name], + ) diff --git a/e2e/crossbuild/tools/collect_wheels.py b/e2e/crossbuild/tools/collect_wheels.py index 9dc094881..a834aa256 100644 --- a/e2e/crossbuild/tools/collect_wheels.py +++ b/e2e/crossbuild/tools/collect_wheels.py @@ -1,8 +1,9 @@ """Copy every .whl reachable from the given paths into one output directory. -Ported from rules_pycross (tests/e2e/shared/collect_wheels.py). Inputs are a -mix of plain wheel files and tree artifacts holding wheels, because -pep517_whl/pep517_native_whl declare a directory output. +Ported from rules_pycross (tests/e2e/shared/collect_wheels.py). Inputs are +tree artifacts holding wheels — pep517_whl/pep517_native_whl declare a +directory output. The same anyarch wheel can arrive through more than one +platform transition, so first copy wins. """ import argparse @@ -10,10 +11,10 @@ from pathlib import Path -def main(): +def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--out-dir", required=True) - parser.add_argument("wheel", nargs="*", default=[]) + parser.add_argument("wheel", nargs="*") args = parser.parse_args() out_dir = Path(args.out_dir) @@ -21,25 +22,11 @@ def main(): for wheel_str in args.wheel: for p in wheel_str.split(" "): - wheel_path = Path(p) - - if wheel_path.is_dir(): - for whl in wheel_path.glob("*.whl"): - real_path = whl.resolve() - target_path = out_dir / real_path.name - if not target_path.exists(): - shutil.copy2(real_path, target_path) - continue - - if not wheel_path.name.endswith(".whl"): - continue - - real_path = wheel_path.resolve() - target_path = out_dir / real_path.name - if target_path.exists(): - continue - - shutil.copy2(real_path, target_path) + for whl in Path(p).glob("*.whl"): + real_path = whl.resolve() + target_path = out_dir / real_path.name + if not target_path.exists(): + shutil.copy2(real_path, target_path) if __name__ == "__main__": From 8d67ac23075991a064ef6f1d40c8fd90c71ac43d Mon Sep 17 00:00:00 2001 From: xangcastle Date: Tue, 11 Aug 2026 22:48:28 -0600 Subject: [PATCH 32/56] test(e2e): restore the cross-arch pyc precompilation regression guard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit uv-deps-650/crossbuild's test_crossbuild_pyc.sh guarded whl_install's compileall picking the exec-platform interpreter under a cross transition; its removal left that regression uncovered. The restored guard is stronger than the original "it builds" check: - the platform pins //uv/private/pyc:precompile=True, so the coverage survives a future default flip instead of silently draining - the sh_test asserts .pyc files actually exist in the cross-built install tree, catching exec_matches_target silently skipping compileall — verified to fail when precompile is off Asserted over the binary's runfiles rather than an image layer: py_image_layer deliberately drops __pycache__ from layer mtrees. --- e2e/crossbuild/compile_pyc/BUILD.bazel | 61 +++++++++++++++++++ .../compile_pyc/compile_pyc_main.py | 3 + .../compile_pyc/test_compile_pyc.sh | 24 ++++++++ 3 files changed, 88 insertions(+) create mode 100644 e2e/crossbuild/compile_pyc/BUILD.bazel create mode 100644 e2e/crossbuild/compile_pyc/compile_pyc_main.py create mode 100755 e2e/crossbuild/compile_pyc/test_compile_pyc.sh diff --git a/e2e/crossbuild/compile_pyc/BUILD.bazel b/e2e/crossbuild/compile_pyc/BUILD.bazel new file mode 100644 index 000000000..7f60afe8c --- /dev/null +++ b/e2e/crossbuild/compile_pyc/BUILD.bazel @@ -0,0 +1,61 @@ +# Regression guard for cross-arch whl_install pyc precompilation. +# +# Ported from uv-deps-650/crossbuild's test_crossbuild_pyc.sh, strengthened: +# building the arm64 binary on an amd64 host runs whl_install's compileall +# for a non-host wheel, which must use the exec-platform interpreter (the +# original regression was "Exec format error" from selecting the arm64 one). +# Two silent-decay modes the original "it builds" check missed are covered: +# +# - the //uv/private/pyc:precompile default flipping to False would drain +# this coverage from every other case in the workspace without a failure, +# so the platform pins the flag True regardless of the default; +# - whl_install skips compileall without failing when exec_matches_target +# misdetects (see uv/private/whl_install/rule.bzl), so the assertion is +# ".pyc files exist in the install tree", not "the build succeeded". +# +# The assertion walks the binary's runfiles rather than an image layer: +# py_image_layer deliberately drops __pycache__ from layer mtrees (see +# _should_skip_pkg_path in py/private/py_image_layer.bzl), so layers can +# never witness this. +# +# filelock rides along from the pycross-pure-python hub: anyarch, built from +# sdist, no CC toolchain — the cheapest wheel in the workspace. + +load("@aspect_rules_py//py:defs.bzl", "py_binary") +load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@rules_shell//shell:sh_test.bzl", "sh_test") + +platform( + name = "arm64_linux_precompile", + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:aarch64", + ], + flags = [ + "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", + "--@aspect_rules_py//uv/private/constraints/platform:platform_version=2.39", + "--@aspect_rules_py//uv/private/pyc:precompile=True", + ], +) + +py_binary( + name = "pyc_probe_bin", + srcs = ["compile_pyc_main.py"], + dep_group = "pycross_pure_python", + main = "compile_pyc_main.py", + python_version = "3.12", + deps = ["@pypi_pycross_pure_python//filelock"], +) + +platform_transition_filegroup( + name = "arm64_pyc_probe", + srcs = [":pyc_probe_bin"], + target_platform = ":arm64_linux_precompile", +) + +sh_test( + name = "compile_pyc_arm64_test", + srcs = ["test_compile_pyc.sh"], + data = [":arm64_pyc_probe"], + target_compatible_with = ["@platforms//os:linux"], +) diff --git a/e2e/crossbuild/compile_pyc/compile_pyc_main.py b/e2e/crossbuild/compile_pyc/compile_pyc_main.py new file mode 100644 index 000000000..6608fcdf9 --- /dev/null +++ b/e2e/crossbuild/compile_pyc/compile_pyc_main.py @@ -0,0 +1,3 @@ +import filelock + +print(filelock.__version__) diff --git a/e2e/crossbuild/compile_pyc/test_compile_pyc.sh b/e2e/crossbuild/compile_pyc/test_compile_pyc.sh new file mode 100755 index 000000000..18d31662a --- /dev/null +++ b/e2e/crossbuild/compile_pyc/test_compile_pyc.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# Assert the cross-built (arm64) filelock install tree carries precompiled +# .pyc files. The data dep building at all already proves compileall did not +# pick the target-arch interpreter (the original "Exec format error" +# regression); the count check below additionally catches compileall being +# silently skipped. +set -euo pipefail + +install_root="$(find "$TEST_SRCDIR" -type d -path '*whl_install__pycross_pure_python__filelock*' -name '*.install' | head -1)" +if [ -z "$install_root" ]; then + echo "FAIL: filelock whl_install tree not found under TEST_SRCDIR" + exit 1 +fi + +count="$(find "$install_root" -path '*/filelock/__pycache__/*.pyc' | wc -l)" +if [ "$count" -lt 1 ]; then + echo "FAIL: no precompiled .pyc under $install_root" + echo "whl_install's compileall either failed to run for this configuration" + echo "or was silently skipped (see exec_matches_target in" + echo "uv/private/whl_install/rule.bzl)." + exit 1 +fi + +echo "PASS: $count precompiled .pyc files in the cross-built filelock install" From c6fc189a3fd794ea48961b027574e9b22652ce23 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 17:07:11 -0600 Subject: [PATCH 33/56] fix(e2e): regenerate the crossbuild lockfile with the pinned bazel 8.6.0 The committed lock carried lockFileVersion 28 (a bazel 9 artifact), which --lockfile_mode=error rejects under the workspace's .bazelversion. --- e2e/crossbuild/MODULE.bazel.lock | 403 ++++++++++++++++++++++++++++++- 1 file changed, 398 insertions(+), 5 deletions(-) diff --git a/e2e/crossbuild/MODULE.bazel.lock b/e2e/crossbuild/MODULE.bazel.lock index f196b3cd8..d58d47c51 100644 --- a/e2e/crossbuild/MODULE.bazel.lock +++ b/e2e/crossbuild/MODULE.bazel.lock @@ -165,8 +165,7 @@ "https://bcr.bazel.build/modules/rules_oci/2.2.7/source.json": "b099f02af330f47f19dc67fc9300ef6e1937a8c86882690db0e7a2fcea8c7f6b", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", - "https://bcr.bazel.build/modules/rules_pkg/1.1.0/MODULE.bazel": "9db8031e71b6ef32d1846106e10dd0ee2deac042bd9a2de22b4761b0c3036453", - "https://bcr.bazel.build/modules/rules_pkg/1.1.0/source.json": "fef768df13a92ce6067e1cd0cdc47560dace01354f1d921cfb1d632511f7d608", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", @@ -179,7 +178,6 @@ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", - "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8", "https://bcr.bazel.build/modules/rules_python/1.9.0/MODULE.bazel": "afc3a05f29f09f2d3ee95ad99a145250dab41a2b2d8d6f82cc91936b3213282c", "https://bcr.bazel.build/modules/rules_python/1.9.0/source.json": "3921ea0b65298d51aead5b9e4a82203d7be9b5918619b58b53f1c259f4e63169", @@ -202,8 +200,7 @@ "https://bcr.bazel.build/modules/tar.bzl/0.5.1/MODULE.bazel": "7c2eb3dcfc53b0f3d6f9acdfd911ca803eaf92aadf54f8ca6e4c1f3aee288351", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/with_cfg.bzl/0.12.0/MODULE.bazel": "b573395fe63aef4299ba095173e2f62ccfee5ad9bbf7acaa95dba73af9fc2b38", - "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/MODULE.bazel": "6b6c543e415d2a502954766e50c6a6144a131687f2751b62157a9250e2b04982", - "https://bcr.bazel.build/modules/with_cfg.bzl/0.14.6/source.json": "12363ac76d821f6c7dabfebbd673615391da06e2e33f576402d31a96a7b56532", + "https://bcr.bazel.build/modules/with_cfg.bzl/0.12.0/source.json": "3f3fbaeafecaf629877ad152a2c9def21f8d330d91aa94c5dc75bbb98c10b8b8", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/source.json": "2d2bad780a9f2b9195a4a370314d2c17ae95eaa745cefc2e12fbc49759b15aa3", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", @@ -356,6 +353,250 @@ ] } }, + "@@gcc_toolchain+//:internal.bzl%non_bazel_dependencies": { + "general": { + "bzlTransitiveDigest": "hmUGYjMm3KwHvLCbnHLlUJifQF92hJY/BW858Vkjzr8=", + "usagesDigest": "QxuddaEOFhA9BcbwTpSCM3BEIa2u7hr8DlVSo/gl5a4=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "openssl": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"srcs\",\n srcs = glob(\n include = [\"**\"],\n exclude = [\"**/* *\"],\n ),\n visibility = [\"//visibility:public\"],\n)\n", + "sha256": "40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a", + "strip_prefix": "openssl-1.1.1n", + "url": "https://www.openssl.org/source/openssl-1.1.1n.tar.gz" + } + }, + "lapack": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file_content": "filegroup(\n name = \"srcs\",\n srcs = glob(\n include = [\"**\"],\n exclude = [\"**/* *\"],\n ),\n visibility = [\"//visibility:public\"],\n)\n", + "patch_cmds": [ + "cat > make.inc < Date: Thu, 13 Aug 2026 20:58:26 -0600 Subject: [PATCH 34/56] refactor(uv): deduplicate and tighten build_helper.py Behavior-neutral cleanup, verified by a full from-scratch rebuild of the e2e/crossbuild suite (every action key changed with the tool): - _get_wrapper_flags no longer reimplements the sysroot absolutization that _absolutize_sysroot_flags already does; it absolutizes first and only filters. The execroot rationale now lives in one place. - A NoReturn _die() replaces nine print-to-stderr-then-exit blocks. The build-command-detection branch keeps an explicit raise because ty does not narrow NoReturn in module-level flow. - _expected_cpu_in_tag drops the identity entries from its maps. - Comments and docstrings compress to their load-bearing rationale; the module docstring now describes what the script actually is. Prose that restated the code, duplicated an in-template comment, or carried reference URLs is gone. --- uv/private/pep517_whl/build_helper.py | 421 +++++++++----------------- 1 file changed, 147 insertions(+), 274 deletions(-) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/build_helper.py index 60df11481..cec8c754c 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/build_helper.py @@ -1,9 +1,12 @@ #!/usr/bin/env python3 -""" -A minimal python3 -m build wrapper +"""Drive a PEP 517 sdist-to-wheel build inside a Bazel action. -Mostly exists to allow debugging. +Unpacks the sdist, assembles a build environment that survives the backend's +chdir (compiler wrappers, absolutized toolchain paths) and — in cross mode — +fakes the target platform's identity for the backend, then runs the +pypa/build frontend. Deliberately a single self-contained script: it is the +`main` of the py_binary each sdist_build repo generates. """ from __future__ import annotations @@ -20,7 +23,7 @@ from os import chmod, defpath, listdir, makedirs, path, pathsep from subprocess import CalledProcessError, check_call, check_output, STDOUT, run from tempfile import TemporaryFile -from typing import Dict, Optional +from typing import Dict, NoReturn, Optional try: tomllib = importlib.import_module("tomllib") @@ -34,24 +37,22 @@ ) -# Compiler commands must remain valid across working-directory changes. -# argv[0] must name the resolved driver because compilers may use its directory -# to locate sibling tools and resources. Clang does so under -no-canonical-prefixes: -# https://github.com/llvm/llvm-project/blob/llvmorg-22.1.4/clang/tools/driver/driver.cpp#L63-L78 +def _die(message: str) -> NoReturn: + print(message, file=sys.stderr) + sys.exit(1) + + +# Clang-only DWARF flag some Bazel toolchains inject; stripped by the +# wrappers because non-clang drivers reject it. _DEBUG_FLAG = "-fdebug-default-version=4" -# gcc_toolchain's tool_path for the cpp_compile/cpp_link_dynamic_library -# actions is plain "gcc", not "g++": Bazel toolchains dispatch C vs C++ by -# file extension/-x, not by driver name, and gcc_toolchain's link flags carry -# no -lstdc++. `-static-libstdc++` alone is a no-op there — that flag only -# modifies an *implicit* libstdc++ link that only the "g++" argv[0] spec adds -# in the first place. `-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic` forces the static -# archive regardless of driver name, making a C++ extension self-contained -# instead of depending on the target's libstdc++.so.6 matching ours — and -# without it, cross-arch (and even native) C++ extensions can build and even -# import (borrowing symbols another already-loaded .so happened to pull in) -# yet fail once nothing else in the process provides them. GNU-ld-only -# syntax: skipped on Darwin, where clang++ already links libc++ implicitly. +# Forces the static libstdc++ archive regardless of driver name. Plain +# `-static-libstdc++` is a no-op under gcc_toolchain, whose tool_path is +# "gcc" (not "g++"): that flag only modifies the implicit libstdc++ link the +# "g++" argv[0] spec adds. Without this, C++ extensions can build and even +# import (borrowing symbols another loaded .so pulled in) yet fail at +# runtime. GNU-ld-only syntax: skipped on Darwin, where clang++ links libc++ +# implicitly. _STATIC_LIBSTDCXX_FLAGS = ("-Wl,-Bstatic", "-lstdc++", "-Wl,-Bdynamic") _COMPILER_WRAPPER = """#!/usr/bin/env python3 @@ -137,38 +138,26 @@ filtered.append(a) i += 1 -# Standalone (non-"-shared") executables built by this cross toolchain are -# never the actual wheel deliverable — always some build tool's own -# throwaway sanity-check/feature-probe binary (e.g. meson's own compiler -# check, or a project's cc.run() call) that an exe_wrapper immediately -# executes under QEMU. Dynamically-linked target-arch PIE binaries hit a -# real qemu-user/glibc bug there ("Inconsistency detected by ld.so: -# ... DT_VERSYM ... Assertion failed") on process startup's own relocation -# path, verified independent of any toolchain mismatch (a single-toolchain -# hello-world binary reproduces it); statically linking sidesteps it -# entirely, since it never touches ld.so's dynamic-executable-startup path. -# The actual .so deliverables this wrapper also builds are unaffected — -# they always pass "-shared" and load via dlopen()'s own, unrelated path. -# Mutually exclusive with the static-libstdc++-only trick below: a trailing -# "-Wl,-Bdynamic" there would undo a preceding bare "-static" for whatever -# the driver appends after our args (libc included), reintroducing the same -# bug — and full static linking already covers libstdc++ too, making that -# partial trick redundant for a binary that's never shipped anyway. +# Standalone (non-"-shared") executables built here are never the wheel +# deliverable — only throwaway feature probes (meson sanity checks, +# cc.run()) executed under QEMU, where dynamically-linked target-arch PIE +# binaries hit a real qemu-user/glibc startup bug ("Inconsistency detected +# by ld.so: ... DT_VERSYM"), reproducible with a single-toolchain +# hello-world. "-static" sidesteps ld.so entirely; the .so deliverables +# always pass "-shared" and load via dlopen's unrelated path. Mutually +# exclusive with the static-libstdc++ trick: its trailing "-Wl,-Bdynamic" +# would undo a bare "-static" for driver-appended libs (libc included). is_shared = "-shared" in filtered if is_link and exe_link_flags: - # LLVM-style toolchain (nonempty exe_link_flags, see the "-nostdlib++" - # detection in build_helper): clang only reaches its crt objects and - # glibc/libc++ archives through the link action's -B/-L/--sysroot flags - # (no self-contained GCC-like prefix layout), and not every caller - # threads $LDSHARED through — rustc invokes this wrapper as "-C linker" - # with its own args, meson links its probe executables bare. Bake the - # flags into every link; duplicates from the $LDSHARED path are - # harmless to clang. No "-static" for probe executables here: the QEMU - # ld.so bug that motivates it is only reachable via gcc_toolchain on - # the Linux CI runner. - # rustc hardcodes "-lgcc_s" for its unwinder on *-linux-gnu targets; - # this toolchain ships no libgcc at all — statically fold in its - # libunwind instead (cargo-zigbuild's trick, same ABI surface). + # LLVM-style toolchain (see the "-nostdlib++" detection in + # build_helper): clang only reaches its crt objects and glibc/libc++ + # archives through the link action's -B/-L/--sysroot flags, and not + # every caller threads $LDSHARED through (rustc invokes this wrapper as + # "-C linker", meson links probes bare) — bake the flags into every + # link; duplicates are harmless to clang. + # rustc hardcodes "-lgcc_s" on *-linux-gnu but this toolchain ships no + # libgcc — fold in its static libunwind instead (cargo-zigbuild's + # trick, same ABI surface). filtered = ["-lunwind" if a == "-lgcc_s" else a for a in filtered] filtered.extend(exe_link_flags) if is_cxx: @@ -255,13 +244,8 @@ def _darwin_kernel_release(macos_deployment_target: Optional[str]) -> str: def _absolutize_path(value: str) -> str: - """Resolve a relative path to absolute, leaving absolute/empty values untouched. - - Shared by _resolve_compiler_path (CC/CXX) and _absolutize_tool_paths. - Toolchain execroot-relative paths break once the PEP 517 backend chdirs into the - unpacked sdist. Centralizing the policy keeps the two paths in lockstep - and gives future toolchains (FC, RUSTC, ...) a single primitive to call. - """ + """Make a relative path absolute: execroot-relative toolchain paths stop + resolving once the PEP 517 backend chdirs into the unpacked sdist.""" return path.abspath(value) if value and not path.isabs(value) else value @@ -371,32 +355,20 @@ def _get_wrapper_flags(cflags: str) -> list[str]: """Extract identity flags (-target, --sysroot, -isysroot, ...) from CFLAGS. The PEP 517 backend (setuptools, meson-python) may strip these when - constructing its own compile commands. The cross wrapper re-injects - them on every invocation to guarantee the real compiler targets the - correct platform. - - Sysroot values are absolutized while this still runs from the execroot: - toolchains hand out execroot-relative paths (e.g. the llvm module's - external/…/macos_sdk/sysroot), which stop resolving once the backend - chdirs into the unpacked sdist — the compiler then silently falls back - to default header search paths and the linker finds no libraries at all. + constructing its own compile commands; the cross wrapper re-injects them + on every invocation so the real compiler always targets the right + platform. Sysroot values are absolutized first (see + _absolutize_sysroot_flags for why that must happen in the execroot). """ - parts = shlex.split(cflags) + parts = shlex.split(_absolutize_sysroot_flags(cflags)) result = [] i = 0 while i < len(parts): p = parts[i] if any(p == prefix or p.startswith(prefix + "=") for prefix in _IDENTITY_FLAG_PREFIXES): - if "=" in p: - flag, _, value = p.partition("=") - if flag in _SYSROOT_FLAG_PREFIXES: - p = "{}={}".format(flag, _absolutize_path(value)) result.append(p) if "=" not in p and i + 1 < len(parts) and not parts[i + 1].startswith("-"): - value = parts[i + 1] - if p in _SYSROOT_FLAG_PREFIXES: - value = _absolutize_path(value) - result.append(value) + result.append(parts[i + 1]) i += 1 i += 1 return result @@ -493,13 +465,9 @@ def _compiler_env( if execroot_marker: execroot = os.getcwd() env = {key: value.replace(execroot_marker, execroot) for key, value in env.items()} - # The helper's launcher exports RUNFILES_DIR, RUNFILES_MANIFEST_FILE, and - # JAVA_RUNFILES: - # https://github.com/hermeticbuild/hermetic-launcher/blob/381814d0818af0573263323dc0dd0e4e208fc3fa/README.md#runfiles-discovery - # Bazel adds RUNFILES_MANIFEST_ONLY when runfiles trees are disabled: - # https://github.com/bazelbuild/bazel/blob/9.1.1/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java#L192-L201 - # Nested Bazel executables check that inherited state before adjacent - # runfiles, so remove the parent's identity before package code runs. + # The helper's own launcher exported this runfiles identity; nested Bazel + # executables launched by package code would trust it over their adjacent + # runfiles, so strip it before any package code runs. for key in ( "JAVA_RUNFILES", "RUNFILES_DIR", @@ -507,15 +475,11 @@ def _compiler_env( "RUNFILES_MANIFEST_ONLY", ): env.pop(key, None) - # A build dependency's console-script wrappers resolve their own bundled - # binary via Python import machinery (ninja, meson), so they never need - # PATH. Some (maturin) instead ship a plain wheel-data script under - # /bin — rules_py's venv assembly only merges each - # dep's lib/site-packages into the shared venv, not its bin/, so that - # script never lands on sys.path or PATH by itself. Its files are still - # real runfiles under the runfiles root, just not indexed anywhere else, - # so find it the same way Bazel's own runfiles resolution would: walk - # the runfiles tree for a whl_install output's bin/ directory. + # Some build deps (maturin) ship plain wheel-data scripts under + # /bin, which venv assembly never merges (it only + # merges lib/site-packages) — so they land on neither sys.path nor PATH. + # They are still real runfiles; walk the runfiles roots for whl_install + # bin/ dirs and put those on PATH. bin_dirs = [] for runfiles_root in sys.path: if not path.isdir(runfiles_root) or "runfiles" not in runfiles_root: @@ -534,16 +498,11 @@ def _compiler_env( env["TEMP"] = tmpdir env["TEMPDIR"] = tmpdir - # python-build-standalone interpreters (our python_interpreters toolchain) - # bake their *original build-time* prefix into sysconfig's LIBDIR - # (observed: "/install/lib", nonexistent once relocated into a Bazel - # toolchain) — harmless for pure-Python builds, but anything that needs - # to actually link against libpythonX.Y (meson's own Cython compiler - # sanity check does, to link its transpiled-and-compiled test program) - # fails with "cannot find -lpythonX.Y". The toolchain's own pkg-config - # file resolves paths relative to itself instead (${pcfiledir}/../..), - # so pointing PKG_CONFIG_PATH at it sidesteps the broken sysconfig value - # entirely for any tool that tries pkg-config before falling back to it. + # PBS interpreters bake their original build-time prefix into sysconfig's + # LIBDIR ("/install/lib", nonexistent after relocation), so anything that + # links libpythonX.Y (meson's Cython sanity check) fails. The + # interpreter's own pkg-config file resolves relative to itself + # (${pcfiledir}/../..) — point PKG_CONFIG_PATH at it instead. interpreter_root = path.dirname(path.dirname(path.realpath(sys.executable))) pkgconfig_dir = path.join(interpreter_root, "lib", "pkgconfig") if path.isdir(pkgconfig_dir): @@ -582,30 +541,25 @@ def _compiler_env( cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin, exe_link_flags=exe_link_flags) cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin, exe_link_flags=exe_link_flags) - # gcc_toolchain's own layout (/xbin/gcc, /sysroot/...): - # a target-arch binary linked by this compiler needs ITS glibc/loader - # to run, not whatever the exec host or an unrelated toolchain (e.g. - # our python_interpreters build) happens to provide. Only meson's - # exe_wrapper (see _generate_meson_cross_file) uses this today. + # gcc_toolchain layout (/xbin/gcc, /sysroot/...): a + # target-arch binary needs THIS toolchain's glibc/loader to run. + # Consumed only by meson's exe_wrapper (_generate_meson_cross_file). target_gcc_sysroot = path.join(path.dirname(path.dirname(cc_path)), "sysroot") if not is_darwin and path.isdir(target_gcc_sysroot): env["RULES_PY_TARGET_GCC_SYSROOT"] = target_gcc_sysroot # The llvm toolchain on a darwin exec host reports llvm-libtool-darwin - # as its static archiver — a Mach-O-only tool that meson then invokes - # with ar-style args ("csr ...") for the target's static libs. For ELF - # targets swap in the sibling llvm-ar, which is what those args and - # the target format actually require. + # (Mach-O-only) as archiver; for ELF targets swap in the sibling + # llvm-ar, which the ar-style args and target format require. ar_path = env.get("AR", "") if not is_darwin and path.basename(ar_path) == "llvm-libtool-darwin": llvm_ar = path.join(path.dirname(ar_path), "llvm-ar") if path.exists(llvm_ar): env["AR"] = llvm_ar - # apple_support's wrapped_clang substitutes __BAZEL_XCODE_DEVELOPER_DIR__ - # and __BAZEL_XCODE_SDKROOT__ in its arguments from these variables and - # hard-fails without DEVELOPER_DIR. Bazel injects them only into actions - # with Xcode execution requirements, which this PEP 517 action is not. + # apple_support's wrapped_clang hard-fails without DEVELOPER_DIR / + # SDKROOT; Bazel injects them only into actions with Xcode execution + # requirements, which this PEP 517 action is not. if is_darwin and _platform.system() == "Darwin": if "DEVELOPER_DIR" not in env: developer_dir = _xcode_developer_dir() @@ -650,9 +604,8 @@ def _compiler_env( site_dir = _generate_cross_site(tmpdir, target_os, target_cpu, deployment_target) env["PYTHONPATH"] = site_dir + pathsep + env.get("PYTHONPATH", "") - # MPI builds (e.g. mpi4py) consult $MPICC before searching PATH, so a - # plain C compiler here would shadow the real mpicc. Only set it when - # a system mpicc exists, wrapped to keep the debug-flag stripping. + # MPI builds (mpi4py) consult $MPICC before PATH; only set it when a real + # mpicc exists, wrapped to keep the debug-flag stripping. mpicc_path = shutil.which("mpicc", path=env["PATH"]) if mpicc_path: env.setdefault("MPICC", _make_compiler_wrapper(tmpdir, "mpicc", mpicc_path, sysroot)) @@ -667,17 +620,13 @@ def _compiler_env( ]: _override_tool(env, key, wrapper) - # maturin's PEP 517 wrapper (and setuptools-rust) locate cargo via - # shutil.which("cargo"), not just $CARGO — otherwise they fall back to - # auto-installing a Rust toolchain via the puccinialin package, which - # isn't one of our declared build deps. + # maturin and setuptools-rust locate cargo via shutil.which, not $CARGO — + # without it on PATH they auto-install a Rust toolchain (puccinialin). cargo_path = env.get("CARGO") if cargo_path: env["PATH"] = pathsep.join([path.dirname(cargo_path), env.get("PATH", defpath)]) - # Cargo defaults its registry cache to $CARGO_HOME (~/.cargo), which - # in the sandbox is a read-only path outside the action's writable - # tree — give it a real, writable home instead. + # Cargo's default $CARGO_HOME (~/.cargo) is unwritable in the sandbox. cargo_home = path.join(tmpdir, ".cargo_home") makedirs(cargo_home, exist_ok=True) env.setdefault("CARGO_HOME", cargo_home) @@ -725,14 +674,11 @@ def _generate_cmake_toolchain_file( ) -> str: """Cross toolchain file for scikit-build-core/CMake. - scikit-build-core's cross-compile detection only covers macOS - ARCHFLAGS/CMAKE_OSX_ARCHITECTURES (see its builder.py); a generic - Linux-arch cross build gets none of that, so CMake configures as a - native build. It still compiles/links fine off $CC/$CXX, but - CMAKE_STRIP falls back to `find_program`'s host `strip` rather than - ours, which then rejects the foreign-arch .so ("Unable to recognise - the format of the input file"). Setting CMAKE_SYSTEM_NAME also puts - CMake into real CMAKE_CROSSCOMPILING mode. + scikit-build-core only auto-detects macOS ARCHFLAGS cross builds; a + Linux-arch cross build configures as native — it compiles fine off + $CC/$CXX but find_program picks the host `strip`, which rejects the + foreign-arch .so. CMAKE_SYSTEM_NAME also enables real + CMAKE_CROSSCOMPILING mode. """ return _write_generated_file( path.join(tmpdir, "cross_toolchain.cmake"), @@ -773,35 +719,20 @@ def _generate_meson_cross_file( ) -> str: """Cross file for meson-python. - meson-python only auto-synthesizes a cross file for macOS ARCHFLAGS, - cibuildwheel/Android, and iOS (see its __init__.py); a generic - Linux-arch cross build gets none of that and configures as a native - build, so meson tries to run its compiler sanity-check binary and - fails with "not runnable". `needs_exe_wrapper` alone only covers - meson's OWN compiler sanity checks (which just skip running anything - when it's set) — some projects' meson.build also call `cc.run()` - directly (numpy does, for a runtime feature check), which instead - hard-errors ("Can not run test applications in this cross - environment") unless an actual `exe_wrapper` program is configured. - binfmt_misc on this host already runs target-arch ELFs transparently - (verified: qemu-aarch64 is registered), so the wrapper mostly just - needs to exec straight through — it's meson's contract that needs a - program here, not anything the emulation itself is missing. The one - thing it does add is QEMU_LD_PREFIX, pointed at the gcc cross - toolchain's own sysroot: meson's *compiler* sanity check links a tiny - test binary against that sysroot's glibc, and without QEMU_LD_PREFIX - qemu-user falls back to searching the exec host's own filesystem for - ld-linux-aarch64.so.1 (an amd64 Linux box has none) — an entirely - different failure mode than the earlier "not runnable" one, but the - same root cause of not telling qemu-user which glibc actually matches. + meson-python only auto-synthesizes a cross file for macOS + ARCHFLAGS/cibuildwheel/iOS; a Linux-arch cross build configures as + native and meson fails running its compiler sanity-check binary. + `needs_exe_wrapper` alone only covers meson's own checks — projects + calling `cc.run()` directly (numpy) hard-error unless a real + `exe_wrapper` program exists. binfmt_misc+qemu-user already runs + target-arch ELFs transparently, so the wrapper just execs through; what + it adds is QEMU_LD_PREFIX pointed at the cross toolchain's sysroot, + without which qemu-user searches the exec host for the target's + ld-linux/glibc and finds none. """ - # The passthrough wrapper relies on the exec host transparently running - # target-arch ELFs (binfmt_misc + qemu-user) — a Linux-host capability. - # A darwin host cannot execute ELF at all, and an exe_wrapper that fails - # makes meson's sanity check fail outright; with needs_exe_wrapper=true - # and NO exe_wrapper, meson skips running its own checks instead, and - # projects calling cc.run() get meson's own explicit "can not run test - # applications" error — an honest host limitation, not a masked one. + # A darwin host cannot execute ELF at all; with needs_exe_wrapper=true + # and NO exe_wrapper, meson skips its own checks and cc.run() callers get + # meson's explicit cross-environment error — an honest host limitation. exe_wrapper_line = "" if _platform.system() == "Linux": exe_wrapper = _write_generated_file( @@ -853,13 +784,11 @@ def _generate_meson_cross_file( def _merge_rust_sysroot(tmpdir: str, target_rustc: str, host_sysroot: str) -> str: """Symlink-merge the target toolchain's sysroot with the host's rust-std. - A rules_rust cross rust_toolchain's sysroot only bundles the exec - platform's LLVM shared libs (needed to *run* rustc), not its rust-std — - cargo still needs a real exec-platform rust-std to compile build - scripts/proc-macros, which are always host artifacts regardless of - --target. rustup-based cross setups don't hit this because one rustc - install holds every added target's std side by side; recreate that here - by merging the two Bazel-fetched, single-target sysroots into one. + A cross rust_toolchain's sysroot has no exec-platform rust-std, but + cargo needs one to compile build scripts/proc-macros (always host + artifacts regardless of --target). rustup holds every target's std side + by side in one install; recreate that by merging the two Bazel-fetched + single-target sysroots. """ target_sysroot = path.dirname(path.dirname(target_rustc)) merged = path.join(tmpdir, ".rust_sysroot") @@ -891,11 +820,9 @@ def _merge_rust_sysroot(tmpdir: str, target_rustc: str, host_sysroot: str) -> st def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os: str, target_cpu: str) -> None: """Cross env vars for maturin/setuptools-rust (Cargo-driven PyO3 builds). - Cargo has no cross auto-detection to piggyback on the way meson-python's - macOS ARCHFLAGS case does — a cross build always needs an explicit - --target, and cargo has no idea which linker can actually produce a - binary for that target unless told via CARGO_TARGET__LINKER, so - it falls back to $CC (the *host* driver) and fails at the link step. + Cargo has no cross auto-detection: it needs an explicit target triple, + and without CARGO_TARGET__LINKER it links with the host driver + and fails. """ os_suffix = _RUST_TARGET_OS.get(target_os, target_os) triple = "{}-{}".format(target_cpu, os_suffix) @@ -903,11 +830,9 @@ def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os linker_var = "CARGO_TARGET_{}_LINKER".format(triple.upper().replace("-", "_")) build_env[linker_var] = build_env["CC"] - # PyO3's build script (pyo3-ffi) refuses to cross-compile without either - # an abi3-py3* feature or an explicit target Python version — maturin - # works around this itself (PYO3_CONFIG_FILE), but setuptools-rust just - # shells out to plain `cargo rustc` with no PyO3-specific help at all. - # Harmless to set even for non-PyO3 crates (simply unused). + # pyo3-ffi refuses to cross-compile without an explicit target Python + # version; maturin works around it itself, setuptools-rust does not. + # Unused (harmless) for non-PyO3 crates. build_env["PYO3_CROSS_PYTHON_VERSION"] = "{}.{}".format(sys.version_info.major, sys.version_info.minor) host_sysroot = build_env.get("RULES_PY_RUST_HOST_SYSROOT") @@ -919,13 +844,10 @@ def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os executable=True, ) - # maturin's PEP 517 wrapper passes -i by default so it - # can inspect the target interpreter's ABI. In cross mode it refuses to - # actually execute that path (it may not be host-runnable) and instead - # name-parses it for a "pythonX.Y"-shaped basename — but our venv's - # sys.executable is the generic "python" symlink, which fails that - # parse. Point it at the versioned sibling instead, which the venv's - # bin dir (already on $PATH) also provides. + # In cross mode maturin name-parses its -i interpreter argument for a + # "pythonX.Y"-shaped basename instead of executing it; our venv's + # sys.executable is the generic "python" symlink, which fails that parse + # — point it at the versioned sibling the venv also provides. build_env["MATURIN_PEP517_ARGS"] = "--interpreter python{}.{}".format( sys.version_info.major, sys.version_info.minor, @@ -950,9 +872,8 @@ def _configure_cargo_cross_env(build_env: Dict[str, str], tmpdir: str, target_os _sysname = {sysname!r} _release = {release!r} -# setup.py scripts routinely branch on sys.platform to decide which sources -# to even compile (psutil picks _psutil_osx.c vs _psutil_linux.c this way), -# and distutils keys its host-specific compiler customization on it too. +# setup.py scripts branch on sys.platform to decide which sources to compile +# (psutil picks _psutil_osx.c vs _psutil_linux.c this way). sys.platform = {sys_platform!r} os.uname = lambda: os.uname_result((_sysname, "build", _release, "", _machine)) @@ -980,10 +901,9 @@ def _confstr(name): platform.machine = lambda: _machine platform.libc_ver = lambda *a, **k: ("", "") -# packaging.tags._linux_platforms derives its arch from sysconfig.get_platform() -# (already correctly faked via $_PYTHON_HOST_PLATFORM), not from platform.machine() -# — no patch needed there. Only the manylinux-compatibility gate below is ours to -# set, via the top-level _manylinux hook packaging._manylinux itself looks for. +# packaging.tags derives its arch from sysconfig.get_platform() (already +# faked via $_PYTHON_HOST_PLATFORM); only the manylinux gate needs the +# top-level _manylinux hook packaging itself looks for. """ _MANYLINUX_HOOK = """\ @@ -1008,16 +928,12 @@ def _generate_cross_site( ) -> str: """sitecustomize + _manylinux hook faking the target's runtime identity. - sysconfig.get_platform()/_get_sysconfigdata_name() are already faked via - env vars that CPython itself reads (_PYTHON_HOST_PLATFORM, - _PYTHON_SYSCONFIGDATA_NAME) — no patching needed there. But some build - backends and package setup.py scripts branch on os.uname()/ - platform.machine() directly (e.g. to pick vectorized/arch-specific code - paths), which env vars can't reach. sitecustomize.py runs automatically - on interpreter startup — before any backend code executes — and patches - the already-imported os/platform modules in place. Modeled on crossenv's - os-patch.py/platform-patch.py/_manylinux.py, minus what rules_py doesn't - need (dual venvs, distutils.sysconfig, importlib.machinery interception). + sysconfig is already faked via env vars CPython itself reads + (_PYTHON_HOST_PLATFORM, _PYTHON_SYSCONFIGDATA_NAME), but setup.py + scripts also branch on os.uname()/platform.machine() directly, which + env vars can't reach. sitecustomize.py runs on interpreter startup — + before any backend code — and patches os/platform in place. Modeled on + crossenv, minus what rules_py doesn't need. """ site_dir = path.join(tmpdir, ".cross_site") @@ -1083,9 +999,9 @@ def _legacy_metadata_conflicts_with_pyproject(worktree: str, pyproject_data: Opt def _expected_cpu_in_tag(target_os: str, target_cpu: str) -> str: - if target_os == "darwin": - return {"aarch64": "arm64", "x86_64": "x86_64"}.get(target_cpu, target_cpu) - return {"x86_64": "x86_64", "aarch64": "aarch64", "x86": "i686", "arm": "armv7l"}.get(target_cpu, target_cpu) + if target_os == "darwin" and target_cpu == "aarch64": + return "arm64" + return {"x86": "i686", "arm": "armv7l"}.get(target_cpu, target_cpu) def _validate_wheel_platform(wheel_filename: str) -> None: @@ -1103,32 +1019,16 @@ def _validate_wheel_platform(wheel_filename: str) -> None: host_wheel_os = _WHEEL_OS_MAP.get(host_os, host_os) if target_os != host_os and host_wheel_os in platform_tag: - print( + _die( "Error: wheel platform tag '{}' contains exec host OS '{}' instead of " "target OS '{}'. The target sysconfig override may have failed.".format( platform_tag, host_wheel_os, expected_os, - ), - file=sys.stderr, + ) ) - exit(1) - if expected_os not in platform_tag: - print( - "Error: wheel platform tag '{}' does not contain target OS '{}'.".format( - platform_tag, expected_os, - ), - file=sys.stderr, - ) - exit(1) - + _die("Error: wheel platform tag '{}' does not contain target OS '{}'.".format(platform_tag, expected_os)) if expected_cpu not in platform_tag: - print( - "Error: wheel platform tag '{}' does not contain target CPU '{}'.".format( - platform_tag, expected_cpu, - ), - file=sys.stderr, - ) - exit(1) + _die("Error: wheel platform tag '{}' does not contain target CPU '{}'.".format(platform_tag, expected_cpu)) PARSER = ArgumentParser() @@ -1156,8 +1056,7 @@ def _validate_wheel_platform(wheel_filename: str) -> None: shutil.unpack_archive(opts.srcarchive, t) -# Annoyingly, unpack_archive creates a subdir in the target. Update t -# accordingly. Not worth the eng effort to prevent creating this dir. +# unpack_archive nests the sdist's own top-level directory; follow it. t = path.join(t, listdir(t)[0]) if opts.patches: @@ -1175,21 +1074,11 @@ def _validate_wheel_platform(wheel_filename: str) -> None: try: check_call(patch_cmd, cwd=t) except CalledProcessError as exc: - # Fail with a concise reason on stderr instead of a Python traceback. - print( - "Error: failed to apply patch {} (patch exited {}).".format(abs_patch, exc.returncode), - file=sys.stderr, - ) - exit(1) + _die("Error: failed to apply patch {} (patch exited {}).".format(abs_patch, exc.returncode)) -# Get a path to the outdir which will be valid after we cd outdir = path.abspath(opts.outdir) -# Preserve PATH so native sdist builds can find compilers (clang, gcc), -# and re-point CC/CXX/etc. through wrapper scripts in tmp_root so the -# Bazel-supplied workspace-relative compiler paths survive the cwd -# change into the worktree. build_env = _compiler_env( tmp_root, opts.execroot_marker, @@ -1214,21 +1103,13 @@ def _validate_wheel_platform(wheel_filename: str) -> None: outdir, ] elif path.exists(path.join(t, "pyproject.toml")) or path.exists(path.join(t, "setup.py")): - # Always use `python -m build` (PEP 517 frontend). For setup.py-only - # packages without a pyproject.toml, build creates a minimal PEP 517 - # shim automatically. --no-isolation ensures it uses the deps we've - # already provided in the build venv rather than trying to pip-install. - # Routing legacy setup_requires=… packages (e.g. googlemaps 4.10.0) - # through setup.py directly triggers setuptools' deprecated - # fetch_build_eggs path, which crashes on modern packaging. - # - # --skip-dependency-check disables `build`'s validation of - # `[build-system].requires` against the active venv. The - # validation is redundant under --no-isolation (we already - # commit to managing the venv) and rejects packages that pile - # unrelated dev tooling into `requires` — cdifflib 1.2.9 lists - # pytest/ruff/twine there, none of which are actually needed - # to compile its C extension. + # Always `python -m build`, even for setup.py-only packages (it creates + # the PEP 517 shim; invoking setup.py directly triggers setuptools' + # deprecated fetch_build_eggs path, which crashes on modern packaging). + # --no-isolation: use the deps already in the build venv, never pip. + # --skip-dependency-check: redundant under --no-isolation, and it + # rejects packages that pile dev tooling into [build-system].requires + # (cdifflib lists pytest/ruff/twine there). cmd = [ sys.executable, "-m", "build", @@ -1240,14 +1121,10 @@ def _validate_wheel_platform(wheel_filename: str) -> None: build_system = (pyproject_data or {}).get("build-system", {}) build_backend = build_system.get("build-backend") if isinstance(build_system, dict) else None - # meson-python has no auto-detection for a missing system BLAS/LAPACK - # the way it does for a missing cross-file (see below) — a package that - # needs one (numpy) has to pass its own -Dblas=none/-Dlapack=none (or - # similar) setup-args, and needs them for a native build here too, since - # our build venv never has a system BLAS/LAPACK either. meson-python's - # "setup-args" config-setting is list-typed, and `build`'s -C flag - # accumulates repeated keys into a list, so this can't collide with the - # --cross-file argument the cross branch below adds separately. + # Packages needing -D setup-args (numpy's -Dblas=none — the hermetic + # venv has no system BLAS in native mode either) pass them via this env + # var. `build`'s -C accumulates repeated keys, so it can't collide with + # the --cross-file the cross branch adds separately. if build_backend == "mesonpy": for arg in shlex.split(build_env.get("RULES_PY_MESON_SETUP_ARGS", "")): cmd += ["-C", "setup-args=" + arg] @@ -1256,10 +1133,9 @@ def _validate_wheel_platform(wheel_filename: str) -> None: build_requires = build_system.get("requires", []) if isinstance(build_system, dict) else [] if not isinstance(build_requires, list): build_requires = [] - # setuptools-rust has no build-backend value of its own — it's just - # setuptools.build_meta with an extra requirement — and no --target - # flag of its own either: it shells out to plain `cargo rustc` and - # relies on $CARGO_BUILD_TARGET, same as maturin does once we set it. + # setuptools-rust has no build-backend value of its own (it's + # setuptools.build_meta plus a requirement) and relies on + # $CARGO_BUILD_TARGET, same as maturin. uses_setuptools_rust = build_backend in _SETUPTOOLS_BACKENDS and any( isinstance(req, str) and _requirement_name(req) == "setuptools-rust" for req in build_requires ) @@ -1272,14 +1148,14 @@ def _validate_wheel_platform(wheel_filename: str) -> None: elif (build_backend == "maturin" or uses_setuptools_rust) and build_env.get("CARGO"): _configure_cargo_cross_env(build_env, tmp_root, opts.target_os, opts.target_cpu) else: - print("Error: Unable to detect build command! Neither pyproject.toml nor setup.py found!", file=sys.stderr) - raise SystemExit(1) + # raise, not _die(): ty doesn't narrow NoReturn in module-level flow and + # would flag `cmd` below as possibly unbound. + raise SystemExit("Error: Unable to detect build command! Neither pyproject.toml nor setup.py found!") with TemporaryFile(mode="w+") as build_log: try: if opts.monitor_memory: - # Generated build tools include this dependency only when the - # corresponding wheel opts into monitoring. + # Lazy: the dependency exists only when the wheel opts in. from uv.private.pep517_whl.memory_monitor import run_with_memory_monitor run_with_memory_monitor( @@ -1298,18 +1174,15 @@ def _validate_wheel_platform(wheel_filename: str) -> None: sys.stderr.write(output) if not output.endswith("\n"): sys.stderr.write("\n") - print("Error: Build failed!\nSee {} for the sandbox".format(t), file=sys.stderr) - exit(1) + _die("Error: Build failed!\nSee {} for the sandbox".format(t)) inventory = listdir(outdir) if len(inventory) > 1: - print("Error: Built more than one wheel!\nSee {} for the sandbox".format(t), file=sys.stderr) - exit(1) + _die("Error: Built more than one wheel!\nSee {} for the sandbox".format(t)) if opts.validate_anyarch and not inventory[0].endswith("-none-any.whl"): - print("Error: Target was anyarch but built a none-any wheel!\nSee {} for the sandbox".format(t), file=sys.stderr) - exit(1) + _die("Error: Target was anyarch but built a none-any wheel!\nSee {} for the sandbox".format(t)) if opts.cross and not inventory[0].endswith("-none-any.whl"): _validate_wheel_platform(inventory[0]) From fdbd3f7389583bc1376f76942259c484c7f0b782 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 21:28:18 -0600 Subject: [PATCH 35/56] refactor(uv): reorganize the pep517_whl package by concern Split rule.bzl following the one-rule-per-file convention py/private already uses: pep517_whl.bzl (anyarch), pep517_native_whl.bzl (native + cross), common.bzl (shared helpers and base attrs), with defs.bzl as the package's single public surface. cc_layer.bzl and exec_transition.bzl were already factored by concern and stay put. The runtime tools move to tools/: build_helper.py (the main of every generated build_tool py_binary) and memory_monitor.py, each still following the package's constraints (single-file helper, conditional py_library). Mechanical fallout: the sdist_build BUILD template loads defs.bzl and points at the tools/ labels (generated-repo snapshots regenerated in the root and e2e/cases workspaces), test data labels and the dirname/TEST_SRCDIR-walking path assumptions follow the move, and the CI typecheck file lists pick up the new paths. --- .github/workflows/ci-workflows.yaml | 4 +- .../pep517-frontend-exec-group/BUILD.bazel | 2 +- ...build.uv_sdist_fallback.cowsay.BUILD.bazel | 8 +- ...uild.uv_sdist_jdk_build.jpype1.BUILD.bazel | 6 +- ...st_native_build.python_geohash.BUILD.bazel | 6 +- .../uv-pyproject-cases/cdifflib/BUILD.bazel | 4 +- .../uv-pyproject-cases/setup.MODULE.bazel | 2 +- e2e/cases/uv-sdist-mpicc/BUILD.bazel | 2 +- e2e/cases/uv-sdist-mpicc/__test__.py | 2 +- .../pycross-distutils-probe/BUILD.bazel | 2 +- .../pycross-distutils-probe/__test__.py | 2 +- uv/private/pep517_whl/BUILD.bazel | 43 +++-- uv/private/pep517_whl/common.bzl | 94 +++++++++ uv/private/pep517_whl/defs.bzl | 7 + .../{rule.bzl => pep517_native_whl.bzl} | 180 +++--------------- uv/private/pep517_whl/pep517_whl.bzl | 66 +++++++ uv/private/pep517_whl/tests/BUILD.bazel | 12 +- .../tests/build_helper_cross_test.py | 2 +- .../tests/console_scripts/pure/BUILD.bazel | 2 +- .../pep517_whl/tests/explicit_env/BUILD.bazel | 2 +- .../tests/local_cxx_companion_test.py | 2 +- .../pep517_whl/tests/memory_monitor_test.py | 2 +- .../pep517_whl/tests/native_dep/BUILD.bazel | 2 +- .../tests/native_dep/tool_names/BUILD.bazel | 2 +- .../native_dep/tool_names/bare/BUILD.bazel | 2 +- .../tests/wrapper_argv0/BUILD.bazel | 2 +- .../tests/wrapper_argv0/wrapper_argv0_test.py | 2 +- uv/private/pep517_whl/tools/BUILD.bazel | 15 ++ .../pep517_whl/{ => tools}/build_helper.py | 2 +- .../pep517_whl/{ => tools}/memory_monitor.py | 0 uv/private/sdist_build/repository.bzl | 8 +- .../sdist_build.bravado_core.BUILD.bazel | 6 +- 32 files changed, 280 insertions(+), 213 deletions(-) create mode 100644 uv/private/pep517_whl/common.bzl create mode 100644 uv/private/pep517_whl/defs.bzl rename uv/private/pep517_whl/{rule.bzl => pep517_native_whl.bzl} (71%) create mode 100644 uv/private/pep517_whl/pep517_whl.bzl create mode 100644 uv/private/pep517_whl/tools/BUILD.bazel rename uv/private/pep517_whl/{ => tools}/build_helper.py (99%) rename uv/private/pep517_whl/{ => tools}/memory_monitor.py (100%) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index e6c7732d6..7f3b41fbb 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -56,8 +56,8 @@ jobs: py/tools/site_merge/site_merge.py py/tools/unpack/unpack.py uv/private/gazelle_manifest/generate.py - uv/private/pep517_whl/build_helper.py - uv/private/pep517_whl/memory_monitor.py + uv/private/pep517_whl/tools/build_helper.py + uv/private/pep517_whl/tools/memory_monitor.py uv/private/py_entrypoint_binary/search.py ) runtime311=( diff --git a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel index cf7fa314c..f23e2a025 100644 --- a/e2e/cases/pep517-frontend-exec-group/BUILD.bazel +++ b/e2e/cases/pep517-frontend-exec-group/BUILD.bazel @@ -1,4 +1,4 @@ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@bazel_skylib//rules:write_file.bzl", "write_file") diff --git a/e2e/cases/snapshots/sdist_build.uv_sdist_fallback.cowsay.BUILD.bazel b/e2e/cases/snapshots/sdist_build.uv_sdist_fallback.cowsay.BUILD.bazel index af94b4d13..11f5cee89 100644 --- a/e2e/cases/snapshots/sdist_build.uv_sdist_fallback.cowsay.BUILD.bazel +++ b/e2e/cases/snapshots/sdist_build.uv_sdist_fallback.cowsay.BUILD.bazel @@ -1,12 +1,12 @@ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load("@aspect_rules_py//py:defs.bzl", "py_binary") py_binary( name = "build_tool", - main = "@aspect_rules_py//uv/private/pep517_whl:build_helper.py", - srcs = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], - deps = ["@aspect_rules_py//uv/private/pep517_whl:memory_monitor", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:packaging", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:build", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:setuptools", "@whl_install__uv_sdist_fallback__setuptools__80_10_2//:install"], + main = "@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py", + srcs = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], + deps = ["@aspect_rules_py//uv/private/pep517_whl/tools:memory_monitor", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:packaging", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:build", "@@aspect_rules_py++uv+project__uv_sdist_fallback//:setuptools", "@whl_install__uv_sdist_fallback__setuptools__80_10_2//:install"], ) pep517_native_whl( diff --git a/e2e/cases/snapshots/sdist_build.uv_sdist_jdk_build.jpype1.BUILD.bazel b/e2e/cases/snapshots/sdist_build.uv_sdist_jdk_build.jpype1.BUILD.bazel index e5360683d..2a9810d30 100644 --- a/e2e/cases/snapshots/sdist_build.uv_sdist_jdk_build.jpype1.BUILD.bazel +++ b/e2e/cases/snapshots/sdist_build.uv_sdist_jdk_build.jpype1.BUILD.bazel @@ -1,11 +1,11 @@ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load("@aspect_rules_py//py:defs.bzl", "py_binary") py_binary( name = "build_tool", - main = "@aspect_rules_py//uv/private/pep517_whl:build_helper.py", - srcs = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + main = "@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py", + srcs = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], deps = ["@@aspect_rules_py++uv+project__uv_sdist_jdk_build//:scikit_build_core", "@@aspect_rules_py++uv+project__uv_sdist_jdk_build//:setuptools", "@@aspect_rules_py++uv+project__uv_sdist_jdk_build//:wheel", "@@aspect_rules_py++uv+project__uv_sdist_jdk_build//:build", "@whl_install__uv_sdist_jdk_build__scikit_build_core__0_12_2//:install"], ) diff --git a/e2e/cases/snapshots/sdist_build.uv_sdist_native_build.python_geohash.BUILD.bazel b/e2e/cases/snapshots/sdist_build.uv_sdist_native_build.python_geohash.BUILD.bazel index 728ecb396..586d750ba 100644 --- a/e2e/cases/snapshots/sdist_build.uv_sdist_native_build.python_geohash.BUILD.bazel +++ b/e2e/cases/snapshots/sdist_build.uv_sdist_native_build.python_geohash.BUILD.bazel @@ -1,11 +1,11 @@ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load("@aspect_rules_py//py:defs.bzl", "py_binary") py_binary( name = "build_tool", - main = "@aspect_rules_py//uv/private/pep517_whl:build_helper.py", - srcs = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + main = "@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py", + srcs = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], deps = ["@@aspect_rules_py++uv+project__uv_sdist_native_build//:build", "@@aspect_rules_py++uv+project__uv_sdist_native_build//:setuptools", "@whl_install__uv_sdist_native_build__setuptools__75_8_2//:install"], ) diff --git a/e2e/cases/uv-pyproject-cases/cdifflib/BUILD.bazel b/e2e/cases/uv-pyproject-cases/cdifflib/BUILD.bazel index d7489fcb6..bd3112ce6 100644 --- a/e2e/cases/uv-pyproject-cases/cdifflib/BUILD.bazel +++ b/e2e/cases/uv-pyproject-cases/cdifflib/BUILD.bazel @@ -1,6 +1,6 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") -# Regression: cdifflib 1.2.9 exercises pep517_whl/build_helper.py +# Regression: cdifflib 1.2.9 exercises pep517_whl/tools/build_helper.py # via the parent's `[tool.uv].no-binary-package` setting. # # Sdist shape (load-bearing — pinned at 1.2.9): pyproject.toml with @@ -22,7 +22,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") # ruff # # Fix in tree: `--skip-dependency-check` on the `python -m build` -# invocation in pep517_whl/build_helper.py. The validation step is +# invocation in pep517_whl/tools/build_helper.py. The validation step is # redundant once we've committed to managing the build venv # ourselves, and skipping it sidesteps packages that pile unrelated # dev tooling into `[build-system].requires`. diff --git a/e2e/cases/uv-pyproject-cases/setup.MODULE.bazel b/e2e/cases/uv-pyproject-cases/setup.MODULE.bazel index 929041886..bbac65ede 100644 --- a/e2e/cases/uv-pyproject-cases/setup.MODULE.bazel +++ b/e2e/cases/uv-pyproject-cases/setup.MODULE.bazel @@ -1,7 +1,7 @@ """Regression cases for PEP 517 build-helper dispatch shapes. The packages here each cover a different sdist shape that -pep517_whl/build_helper.py has to handle correctly; see the +pep517_whl/tools/build_helper.py has to handle correctly; see the per-package BUILD.bazel files under `cdifflib/` and `pyahocorasick/` for the specifics. diff --git a/e2e/cases/uv-sdist-mpicc/BUILD.bazel b/e2e/cases/uv-sdist-mpicc/BUILD.bazel index 46a439565..abf5e23aa 100644 --- a/e2e/cases/uv-sdist-mpicc/BUILD.bazel +++ b/e2e/cases/uv-sdist-mpicc/BUILD.bazel @@ -9,7 +9,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") py_test( name = "test", srcs = ["__test__.py"], - data = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + data = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], dep_group = "uv_sdist_mpicc", main = "__test__.py", python_version = "3.11", diff --git a/e2e/cases/uv-sdist-mpicc/__test__.py b/e2e/cases/uv-sdist-mpicc/__test__.py index 8bdb3bb58..0344d8506 100644 --- a/e2e/cases/uv-sdist-mpicc/__test__.py +++ b/e2e/cases/uv-sdist-mpicc/__test__.py @@ -59,7 +59,7 @@ def find_build_helper() -> str: srcdir = os.environ["TEST_SRCDIR"] for root, _, files in os.walk(srcdir, followlinks=True): - if "build_helper.py" in files and root.endswith(os.path.join("uv", "private", "pep517_whl")): + if "build_helper.py" in files and root.endswith(os.path.join("uv", "private", "pep517_whl", "tools")): return os.path.join(root, "build_helper.py") raise AssertionError("build_helper.py not found under TEST_SRCDIR") diff --git a/e2e/crossbuild/pycross-distutils-probe/BUILD.bazel b/e2e/crossbuild/pycross-distutils-probe/BUILD.bazel index 99534b307..cb2e18927 100644 --- a/e2e/crossbuild/pycross-distutils-probe/BUILD.bazel +++ b/e2e/crossbuild/pycross-distutils-probe/BUILD.bazel @@ -6,7 +6,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_test") py_test( name = "test", srcs = ["__test__.py"], - data = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + data = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], dep_group = "pycross_distutils_probe", main = "__test__.py", python_version = "3.12", diff --git a/e2e/crossbuild/pycross-distutils-probe/__test__.py b/e2e/crossbuild/pycross-distutils-probe/__test__.py index 9504d667c..b052d4ccc 100644 --- a/e2e/crossbuild/pycross-distutils-probe/__test__.py +++ b/e2e/crossbuild/pycross-distutils-probe/__test__.py @@ -59,7 +59,7 @@ def run(self): def find_build_helper() -> str: srcdir = os.environ["TEST_SRCDIR"] for root, _, files in os.walk(srcdir, followlinks=True): - if "build_helper.py" in files and root.endswith(os.path.join("uv", "private", "pep517_whl")): + if "build_helper.py" in files and root.endswith(os.path.join("uv", "private", "pep517_whl", "tools")): return os.path.join(root, "build_helper.py") raise AssertionError("build_helper.py not found under TEST_SRCDIR") diff --git a/uv/private/pep517_whl/BUILD.bazel b/uv/private/pep517_whl/BUILD.bazel index 46ca89705..709d18f79 100644 --- a/uv/private/pep517_whl/BUILD.bazel +++ b/uv/private/pep517_whl/BUILD.bazel @@ -1,30 +1,53 @@ load("@bazel_lib//:bzl_library.bzl", "bzl_library") -load("//py:defs.bzl", "py_library") package(default_visibility = [ "//uv/private:__subpackages__", ]) -exports_files( - ["build_helper.py"], - visibility = ["//visibility:public"], +bzl_library( + name = "defs", + srcs = ["defs.bzl"], + deps = [ + ":pep517_native_whl", + ":pep517_whl", + ], ) bzl_library( - name = "rule", - srcs = ["rule.bzl"], + name = "pep517_whl", + srcs = ["pep517_whl.bzl"], + deps = [ + ":common", + "//py/private/toolchain:types", + "@bazel_lib//lib:resource_sets", + ], +) + +bzl_library( + name = "pep517_native_whl", + srcs = ["pep517_native_whl.bzl"], deps = [ ":cc_layer", + ":common", ":exec_transition", "//py/private/interpreter:versions", "//py/private/toolchain:types", - "//uv/private:source_built_wheel", "@bazel_lib//lib:resource_sets", "@rules_cc//cc:action_names_bzl", "@rules_cc//cc/common", ], ) +bzl_library( + name = "common", + srcs = ["common.bzl"], + deps = [ + ":exec_transition", + "//uv/private:source_built_wheel", + "@bazel_lib//lib:resource_sets", + ], +) + bzl_library( name = "cc_layer", srcs = ["cc_layer.bzl"], @@ -35,12 +58,6 @@ bzl_library( ], ) -py_library( - name = "memory_monitor", - srcs = ["memory_monitor.py"], - visibility = ["//visibility:public"], -) - bzl_library( name = "exec_transition", srcs = ["exec_transition.bzl"], diff --git a/uv/private/pep517_whl/common.bzl b/uv/private/pep517_whl/common.bzl new file mode 100644 index 000000000..e3dbb5257 --- /dev/null +++ b/uv/private/pep517_whl/common.bzl @@ -0,0 +1,94 @@ +"""Shared helpers and attrs for the PEP 517 sdist-to-wheel rules.""" + +load("@bazel_lib//lib:resource_sets.bzl", "resource_set_attr") +load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") +load(":exec_transition.bzl", "exec_transition") + +TARGET_EXEC_GROUP = "target" + +_INHERITED_PYTHON_ENV = ( + "PYTHONHOME", + "PYTHONPATH", + "PYTHONPLATLIBDIR", +) + +def wheel_providers(wheel_dir, console_scripts): + return [ + DefaultInfo(files = depset([wheel_dir])), + SourceBuiltWheelInfo(console_scripts = tuple(console_scripts)), + ] + +def tool_files_to_run(ctx): + tool = ctx.attr.tool + if type(tool) == "list": + tool = tool[0] + return tool[DefaultInfo].files_to_run + +def common_env(ctx): + # pyproject_hooks copies the build process environment and launches its + # Python executable without -I: + # https://github.com/pypa/pyproject-hooks/blob/4b7c6d113fb89b755d762a88712c8a6873cddd47/src/pyproject_hooks/_impl.py#L70-L83 + # https://github.com/pypa/pyproject-hooks/blob/4b7c6d113fb89b755d762a88712c8a6873cddd47/src/pyproject_hooks/_impl.py#L378-L396 + # Host settings therefore must not replace that child's venv or stdlib. + # https://docs.python.org/3/using/cmdline.html#environment-variables + default_shell_env = { + key: value + for key, value in ctx.configuration.default_shell_env.items() + if key.upper() not in _INHERITED_PYTHON_ENV + } + return { + "SETUPTOOLS_SCM_PRETEND_VERSION": ctx.attr.version, + # Determinism: fix hash seed so dict/set iteration order is stable + "PYTHONHASHSEED": "0", + # Determinism: reproducible timestamps in archives + "SOURCE_DATE_EPOCH": "0", + } | default_shell_env + +def patch_args_and_inputs(ctx): + patch_args = [] + patch_inputs = [] + if ctx.attr.pre_build_patches: + patch_args.extend(["--patch-strip", str(ctx.attr.pre_build_patch_strip)]) + for target in ctx.attr.pre_build_patches: + for f in target[DefaultInfo].files.to_list(): + patch_args.extend(["--patch", f.path]) + patch_inputs.append(f) + return patch_args, patch_inputs + +def memory_args(ctx): + return ["--monitor-memory"] if ctx.attr.monitor_memory else [] + +_PATCH_ATTRS = { + "pre_build_patches": attr.label_list( + default = [], + allow_files = [".patch", ".diff"], + doc = "Patch files to apply to the extracted source before building.", + ), + "pre_build_patch_strip": attr.int( + default = 0, + doc = "Strip count for pre-build patches (-p flag to patch).", + ), +} + +PEP517_WHL_ATTRS = { + "src": attr.label(allow_single_file = True), + # The wheel action runs in the "target" exec group; its frontend must run + # on the exec (host) platform but resolve its Python build dependencies + # for the *target* Python version. exec_transition pins --platforms to the + # host and resets the platform_libc/platform_version flags to host values + # (Starlark flags otherwise leak from the target configuration and break + # wheel selection for build deps). See exec_transition.bzl. + "tool": attr.label(executable = True, cfg = exec_transition), + "_allowlist_function_transition": attr.label( + default = "@bazel_tools//tools/allowlists/function_transition_allowlist", + ), + "version": attr.string(), + "console_scripts": attr.string_list( + doc = "Console scripts discovered from the source distribution's entry-point metadata.", + ), + "args": attr.string_list(default = ["--validate-anyarch"]), + "monitor_memory": attr.bool( + default = False, + doc = "Report approximate Linux process-tree RSS while building the wheel.", + ), +} | _PATCH_ATTRS | resource_set_attr diff --git a/uv/private/pep517_whl/defs.bzl b/uv/private/pep517_whl/defs.bzl new file mode 100644 index 000000000..8254a02b1 --- /dev/null +++ b/uv/private/pep517_whl/defs.bzl @@ -0,0 +1,7 @@ +"""Public surface of the PEP 517 sdist-to-wheel rules.""" + +load(":pep517_native_whl.bzl", _pep517_native_whl = "pep517_native_whl") +load(":pep517_whl.bzl", _pep517_whl = "pep517_whl") + +pep517_whl = _pep517_whl +pep517_native_whl = _pep517_native_whl diff --git a/uv/private/pep517_whl/rule.bzl b/uv/private/pep517_whl/pep517_native_whl.bzl similarity index 71% rename from uv/private/pep517_whl/rule.bzl rename to uv/private/pep517_whl/pep517_native_whl.bzl index 896d44a50..0acc53131 100644 --- a/uv/private/pep517_whl/rule.bzl +++ b/uv/private/pep517_whl/pep517_native_whl.bzl @@ -1,76 +1,27 @@ -""" -PEP 517 sdist-to-wheel build rules. +"""PEP 517 sdist to platform-specific whl build rule.""" -Uses `python -m build` (the pypa/build frontend) which delegates to whatever -build backend the sdist declares in its `[build-system]` table. -""" - -load("@bazel_lib//lib:resource_sets.bzl", "resource_set", "resource_set_attr") +load("@bazel_lib//lib:resource_sets.bzl", "resource_set") load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES") load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//py/private/interpreter:versions.bzl", "PLATFORMS") load("//py/private/toolchain:types.bzl", "EXEC_TOOLS_TOOLCHAIN", "NATIVE_BUILD_TOOLCHAIN", "PY_TOOLCHAIN") -load("//uv/private:source_built_wheel.bzl", "SourceBuiltWheelInfo") load(":cc_layer.bzl", "CC_LAYER_ATTRS", "extract_cc_layer") +load( + ":common.bzl", + "PEP517_WHL_ATTRS", + "TARGET_EXEC_GROUP", + "common_env", + "memory_args", + "patch_args_and_inputs", + "tool_files_to_run", + "wheel_providers", +) load(":exec_transition.bzl", "exec_transition") _CC_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/cpp:toolchain_type") -_TARGET_EXEC_GROUP = "target" _EXECROOT_MARKER = "__ASPECT_RULES_PY_EXECROOT__" _INFER_CXX_COMPANION = "ASPECT_RULES_PY_INFER_CXX_COMPANION" -_INHERITED_PYTHON_ENV = ( - "PYTHONHOME", - "PYTHONPATH", - "PYTHONPLATLIBDIR", -) - -def _wheel_providers(wheel_dir, console_scripts): - return [ - DefaultInfo(files = depset([wheel_dir])), - SourceBuiltWheelInfo(console_scripts = tuple(console_scripts)), - ] - -def _tool_files_to_run(ctx): - tool = ctx.attr.tool - if type(tool) == "list": - tool = tool[0] - return tool[DefaultInfo].files_to_run - -def _common_env(ctx): - # pyproject_hooks copies the build process environment and launches its - # Python executable without -I: - # https://github.com/pypa/pyproject-hooks/blob/4b7c6d113fb89b755d762a88712c8a6873cddd47/src/pyproject_hooks/_impl.py#L70-L83 - # https://github.com/pypa/pyproject-hooks/blob/4b7c6d113fb89b755d762a88712c8a6873cddd47/src/pyproject_hooks/_impl.py#L378-L396 - # Host settings therefore must not replace that child's venv or stdlib. - # https://docs.python.org/3/using/cmdline.html#environment-variables - default_shell_env = { - key: value - for key, value in ctx.configuration.default_shell_env.items() - if key.upper() not in _INHERITED_PYTHON_ENV - } - return { - "SETUPTOOLS_SCM_PRETEND_VERSION": ctx.attr.version, - # Determinism: fix hash seed so dict/set iteration order is stable - "PYTHONHASHSEED": "0", - # Determinism: reproducible timestamps in archives - "SOURCE_DATE_EPOCH": "0", - } | default_shell_env - -def _patch_args_and_inputs(ctx): - patch_args = [] - patch_inputs = [] - if ctx.attr.pre_build_patches: - patch_args.extend(["--patch-strip", str(ctx.attr.pre_build_patch_strip)]) - for target in ctx.attr.pre_build_patches: - for f in target[DefaultInfo].files.to_list(): - patch_args.extend(["--patch", f.path]) - patch_inputs.append(f) - return patch_args, patch_inputs - -def _memory_args(ctx): - return ["--monitor-memory"] if ctx.attr.monitor_memory else [] - def _collect_toolchain_inputs_and_vars(ctx): """Gather files + Make-variable substitutions from `ctx.attr.toolchains`. @@ -105,7 +56,7 @@ def _collect_toolchain_inputs_and_vars(ctx): def _cc_toolchain_inputs_and_tools(ctx): """Return the target execution group's C++ files and selected build tools.""" - cc_toolchain = ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains[_CC_TOOLCHAIN_TYPE] + cc_toolchain = ctx.exec_groups[TARGET_EXEC_GROUP].toolchains[_CC_TOOLCHAIN_TYPE] if hasattr(cc_toolchain, "cc_provider_in_toolchain") and hasattr(cc_toolchain, "cc"): cc_toolchain = cc_toolchain.cc if not cc_toolchain or not hasattr(cc_toolchain, "all_files"): @@ -200,36 +151,6 @@ def _derive_python_host_platform(target_os, target_cpu): return "macosx-11.0-" + cpu return None -def _pep517_whl(ctx): - archive = ctx.file.src - wheel_dir = ctx.actions.declare_directory("whl") - patch_args, patch_inputs = _patch_args_and_inputs(ctx) - - # The build tool is a py_binary wrapping build_helper.py. Using it as - # a tool (not just an input) causes Bazel to materialize its runfiles in - # the action sandbox, which means the venv shim can find the interpreter - # via the standard runfiles mechanism regardless of whether the interpreter - # comes from an external repo or the main workspace. - tool_files_to_run = _tool_files_to_run(ctx) - ctx.actions.run( - mnemonic = "PySdistBuild", - progress_message = "Source compiling {} to a whl".format(archive.basename), - executable = tool_files_to_run, - toolchain = None, - arguments = ctx.attr.args + patch_args + _memory_args(ctx) + [ - archive.path, - wheel_dir.path, - ], - inputs = [archive] + patch_inputs, - tools = [tool_files_to_run], - outputs = [wheel_dir], - env = _common_env(ctx), - exec_group = _TARGET_EXEC_GROUP, - resource_set = resource_set(ctx.attr), - ) - - return _wheel_providers(wheel_dir, ctx.attr.console_scripts) - def _interpreter_platform_triple(runtime): """Best-effort platform triple of the repo a PyRuntimeInfo comes from. @@ -271,9 +192,9 @@ def _cross_compile(ctx, eg_toolchains): def _pep517_native_whl(ctx): archive = ctx.file.src wheel_dir = ctx.actions.declare_directory("whl") - patch_args, patch_inputs = _patch_args_and_inputs(ctx) + patch_args, patch_inputs = patch_args_and_inputs(ctx) - eg_toolchains = ctx.exec_groups[_TARGET_EXEC_GROUP].toolchains + eg_toolchains = ctx.exec_groups[TARGET_EXEC_GROUP].toolchains cross = _cross_compile(ctx, eg_toolchains) cc_toolchain_raw = eg_toolchains[_CC_TOOLCHAIN_TYPE] @@ -299,7 +220,7 @@ def _pep517_native_whl(ctx): if hasattr(cc_toolchain, "cc_provider_in_toolchain") and hasattr(cc_toolchain, "cc"): cc_toolchain = cc_toolchain.cc - env = _common_env(ctx) + env = common_env(ctx) extra_inputs, known_variables = _collect_toolchain_inputs_and_vars(ctx) if "EXECROOT" in known_variables: @@ -361,7 +282,7 @@ def _pep517_native_whl(ctx): else: cross_args = [] - _tool = _tool_files_to_run(ctx) + tool = tool_files_to_run(ctx) ctx.actions.run( mnemonic = "PySdistCrossBuild" if cross else "PySdistNativeBuild", @@ -369,9 +290,9 @@ def _pep517_native_whl(ctx): "Cross" if cross else "Native", archive.basename, ), - executable = _tool, + executable = tool, toolchain = None, - arguments = ctx.attr.args + patch_args + _memory_args(ctx) + cross_args + [ + arguments = ctx.attr.args + patch_args + memory_args(ctx) + cross_args + [ "--execroot-marker", _EXECROOT_MARKER, archive.path, @@ -381,67 +302,14 @@ def _pep517_native_whl(ctx): [archive] + patch_inputs, transitive = extra_inputs, ), - tools = [_tool], + tools = [tool], outputs = [wheel_dir], env = env, - exec_group = _TARGET_EXEC_GROUP, + exec_group = TARGET_EXEC_GROUP, resource_set = resource_set(ctx.attr), ) - return _wheel_providers(wheel_dir, ctx.attr.console_scripts) - -_PATCH_ATTRS = { - "pre_build_patches": attr.label_list( - default = [], - allow_files = [".patch", ".diff"], - doc = "Patch files to apply to the extracted source before building.", - ), - "pre_build_patch_strip": attr.int( - default = 0, - doc = "Strip count for pre-build patches (-p flag to patch).", - ), -} - -_pep517_whl_attrs = { - "src": attr.label(allow_single_file = True), - # The wheel action runs in the "target" exec group; its frontend must run - # on the exec (host) platform but resolve its Python build dependencies - # for the *target* Python version. exec_transition pins --platforms to the - # host and resets the platform_libc/platform_version flags to host values - # (Starlark flags otherwise leak from the target configuration and break - # wheel selection for build deps). See exec_transition.bzl. - "tool": attr.label(executable = True, cfg = exec_transition), - "_allowlist_function_transition": attr.label( - default = "@bazel_tools//tools/allowlists/function_transition_allowlist", - ), - "version": attr.string(), - "console_scripts": attr.string_list( - doc = "Console scripts discovered from the source distribution's entry-point metadata.", - ), - "args": attr.string_list(default = ["--validate-anyarch"]), - "monitor_memory": attr.bool( - default = False, - doc = "Report approximate Linux process-tree RSS while building the wheel.", - ), -} | _PATCH_ATTRS | resource_set_attr - -pep517_whl = rule( - implementation = _pep517_whl, - doc = """PEP 517 sdist to anyarch whl build rule. - -Consumes a sdist artifact and performs a build of that artifact with the -specified Python dependencies under the configured Python toolchain. - -""", - attrs = _pep517_whl_attrs, - exec_groups = { - _TARGET_EXEC_GROUP: exec_group( - toolchains = [ - PY_TOOLCHAIN, - ], - ), - }, -) + return wheel_providers(wheel_dir, ctx.attr.console_scripts) pep517_native_whl = rule( implementation = _pep517_native_whl, @@ -469,7 +337,7 @@ origins are unrecognizable, the optional NATIVE_BUILD_TOOLCHAIN sentinel's absence is used as the cross signal. """, - attrs = _pep517_whl_attrs | { + attrs = PEP517_WHL_ATTRS | { "args": attr.string_list(), "env": attr.string_dict( doc = "Environment variables to set on the build action. Values may " + @@ -488,7 +356,7 @@ absence is used as the cross signal. config_common.toolchain_type(PY_TOOLCHAIN, mandatory = False), ], exec_groups = { - _TARGET_EXEC_GROUP: exec_group( + TARGET_EXEC_GROUP: exec_group( toolchains = [ PY_TOOLCHAIN, config_common.toolchain_type(EXEC_TOOLS_TOOLCHAIN, mandatory = False), diff --git a/uv/private/pep517_whl/pep517_whl.bzl b/uv/private/pep517_whl/pep517_whl.bzl new file mode 100644 index 000000000..c92644aca --- /dev/null +++ b/uv/private/pep517_whl/pep517_whl.bzl @@ -0,0 +1,66 @@ +"""PEP 517 sdist to anyarch whl build rule. + +Uses `python -m build` (the pypa/build frontend) which delegates to whatever +build backend the sdist declares in its `[build-system]` table. +""" + +load("@bazel_lib//lib:resource_sets.bzl", "resource_set") +load("//py/private/toolchain:types.bzl", "PY_TOOLCHAIN") +load( + ":common.bzl", + "PEP517_WHL_ATTRS", + "TARGET_EXEC_GROUP", + "common_env", + "memory_args", + "patch_args_and_inputs", + "tool_files_to_run", + "wheel_providers", +) + +def _pep517_whl(ctx): + archive = ctx.file.src + wheel_dir = ctx.actions.declare_directory("whl") + patch_args, patch_inputs = patch_args_and_inputs(ctx) + + # The build tool is a py_binary wrapping build_helper.py. Using it as + # a tool (not just an input) causes Bazel to materialize its runfiles in + # the action sandbox, which means the venv shim can find the interpreter + # via the standard runfiles mechanism regardless of whether the interpreter + # comes from an external repo or the main workspace. + tool = tool_files_to_run(ctx) + ctx.actions.run( + mnemonic = "PySdistBuild", + progress_message = "Source compiling {} to a whl".format(archive.basename), + executable = tool, + toolchain = None, + arguments = ctx.attr.args + patch_args + memory_args(ctx) + [ + archive.path, + wheel_dir.path, + ], + inputs = [archive] + patch_inputs, + tools = [tool], + outputs = [wheel_dir], + env = common_env(ctx), + exec_group = TARGET_EXEC_GROUP, + resource_set = resource_set(ctx.attr), + ) + + return wheel_providers(wheel_dir, ctx.attr.console_scripts) + +pep517_whl = rule( + implementation = _pep517_whl, + doc = """PEP 517 sdist to anyarch whl build rule. + +Consumes a sdist artifact and performs a build of that artifact with the +specified Python dependencies under the configured Python toolchain. + +""", + attrs = PEP517_WHL_ATTRS, + exec_groups = { + TARGET_EXEC_GROUP: exec_group( + toolchains = [ + PY_TOOLCHAIN, + ], + ), + }, +) diff --git a/uv/private/pep517_whl/tests/BUILD.bazel b/uv/private/pep517_whl/tests/BUILD.bazel index 7c886f3a5..db3ba704f 100644 --- a/uv/private/pep517_whl/tests/BUILD.bazel +++ b/uv/private/pep517_whl/tests/BUILD.bazel @@ -4,7 +4,7 @@ load("@rules_shell//shell:sh_binary.bzl", "sh_binary") load("@tar.bzl//tar:mtree.bzl", "mtree_mutate", "mtree_spec") load("@tar.bzl//tar:tar.bzl", "tar_rule") load("//py:defs.bzl", "py_binary", "py_test") -load("//uv/private/pep517_whl:rule.bzl", "pep517_native_whl", "pep517_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_native_whl", "pep517_whl") load( ":pep517_whl_test.bzl", "execroot_collision_toolchain", @@ -23,13 +23,13 @@ py_test( name = "memory_monitor_test", srcs = ["memory_monitor_test.py"], main = "memory_monitor_test.py", - deps = ["//uv/private/pep517_whl:memory_monitor"], + deps = ["//uv/private/pep517_whl/tools:memory_monitor"], ) py_test( name = "build_helper_cross_test", srcs = ["build_helper_cross_test.py"], - data = ["//uv/private/pep517_whl:build_helper.py"], + data = ["//uv/private/pep517_whl/tools:build_helper.py"], main = "build_helper_cross_test.py", target_compatible_with = ["@platforms//os:linux"], deps = [ @@ -41,7 +41,7 @@ py_test( py_test( name = "local_cxx_companion_test", srcs = ["local_cxx_companion_test.py"], - data = ["//uv/private/pep517_whl:build_helper.py"], + data = ["//uv/private/pep517_whl/tools:build_helper.py"], main = "local_cxx_companion_test.py", target_compatible_with = ["@platforms//os:linux"], deps = [ @@ -52,8 +52,8 @@ py_test( py_binary( name = "__build_helper", - srcs = ["//uv/private/pep517_whl:build_helper.py"], - main = "//uv/private/pep517_whl:build_helper.py", + srcs = ["//uv/private/pep517_whl/tools:build_helper.py"], + main = "//uv/private/pep517_whl/tools:build_helper.py", deps = ["@pypi//build"], ) diff --git a/uv/private/pep517_whl/tests/build_helper_cross_test.py b/uv/private/pep517_whl/tests/build_helper_cross_test.py index b120d3c3e..192309fcf 100644 --- a/uv/private/pep517_whl/tests/build_helper_cross_test.py +++ b/uv/private/pep517_whl/tests/build_helper_cross_test.py @@ -66,7 +66,7 @@ def _run(helper: str, sdist: str, workdir: str, label: str, env: dict, args: lis def main() -> None: workdir = tempfile.mkdtemp(dir=os.environ["TEST_TMPDIR"]) sdist = _make_sdist(workdir) - helper = os.path.join(os.path.dirname(os.path.dirname(__file__)), "build_helper.py") + helper = os.path.join(os.path.dirname(os.path.dirname(__file__)), "tools", "build_helper.py") real_machine = os.uname().machine fake_machine = "aarch64" if real_machine != "aarch64" else "x86_64" diff --git a/uv/private/pep517_whl/tests/console_scripts/pure/BUILD.bazel b/uv/private/pep517_whl/tests/console_scripts/pure/BUILD.bazel index 4c7f0aa03..e299ed253 100644 --- a/uv/private/pep517_whl/tests/console_scripts/pure/BUILD.bazel +++ b/uv/private/pep517_whl/tests/console_scripts/pure/BUILD.bazel @@ -1,6 +1,6 @@ load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@rules_shell//shell:sh_binary.bzl", "sh_binary") -load("//uv/private/pep517_whl:rule.bzl", "pep517_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_whl") load("//uv/private/pep517_whl/tests:pep517_whl_test.bzl", "pep517_whl_console_scripts_test") package(default_testonly = True) diff --git a/uv/private/pep517_whl/tests/explicit_env/BUILD.bazel b/uv/private/pep517_whl/tests/explicit_env/BUILD.bazel index 24f9b56c1..da5ed8f74 100644 --- a/uv/private/pep517_whl/tests/explicit_env/BUILD.bazel +++ b/uv/private/pep517_whl/tests/explicit_env/BUILD.bazel @@ -1,4 +1,4 @@ -load("//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load("//uv/private/pep517_whl/tests:pep517_whl_test.bzl", "hostile_python_env_target") package(default_testonly = True) diff --git a/uv/private/pep517_whl/tests/local_cxx_companion_test.py b/uv/private/pep517_whl/tests/local_cxx_companion_test.py index 3786846f3..5315c3235 100644 --- a/uv/private/pep517_whl/tests/local_cxx_companion_test.py +++ b/uv/private/pep517_whl/tests/local_cxx_companion_test.py @@ -90,7 +90,7 @@ def _run(helper: str, sdist: str, workdir: str, cxx: str, expect: str, infer_com def main() -> None: workdir = tempfile.mkdtemp(dir=os.environ["TEST_TMPDIR"]) sdist = _make_sdist(workdir) - helper = os.path.join(os.path.dirname(os.path.dirname(__file__)), "build_helper.py") + helper = os.path.join(os.path.dirname(os.path.dirname(__file__)), "tools", "build_helper.py") _run(helper, sdist, workdir, "/usr/bin/gcc -DRULES_PY_CXX_ARG_PRESERVED=1", "runtime", True) missing = os.path.join(workdir, "missing") diff --git a/uv/private/pep517_whl/tests/memory_monitor_test.py b/uv/private/pep517_whl/tests/memory_monitor_test.py index 7adace291..c523d6bfa 100644 --- a/uv/private/pep517_whl/tests/memory_monitor_test.py +++ b/uv/private/pep517_whl/tests/memory_monitor_test.py @@ -11,7 +11,7 @@ from typing import Dict, List, Optional from unittest import mock -from uv.private.pep517_whl import memory_monitor +from uv.private.pep517_whl.tools import memory_monitor class MemoryMonitorTest(unittest.TestCase): diff --git a/uv/private/pep517_whl/tests/native_dep/BUILD.bazel b/uv/private/pep517_whl/tests/native_dep/BUILD.bazel index 004b5e98f..3464c72fa 100644 --- a/uv/private/pep517_whl/tests/native_dep/BUILD.bazel +++ b/uv/private/pep517_whl/tests/native_dep/BUILD.bazel @@ -4,7 +4,7 @@ load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@rules_cc//cc:defs.bzl", "cc_library") load("@tar.bzl//tar:mtree.bzl", "mtree_mutate", "mtree_spec") load("@tar.bzl//tar:tar.bzl", "tar_rule") -load("//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") load(":defs.bzl", "dep_makevars") package(default_testonly = True) diff --git a/uv/private/pep517_whl/tests/native_dep/tool_names/BUILD.bazel b/uv/private/pep517_whl/tests/native_dep/tool_names/BUILD.bazel index 5f99ae1e1..c380bc3de 100644 --- a/uv/private/pep517_whl/tests/native_dep/tool_names/BUILD.bazel +++ b/uv/private/pep517_whl/tests/native_dep/tool_names/BUILD.bazel @@ -1,5 +1,5 @@ load("@bazel_skylib//rules:build_test.bzl", "build_test") -load("//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") package(default_testonly = True) diff --git a/uv/private/pep517_whl/tests/native_dep/tool_names/bare/BUILD.bazel b/uv/private/pep517_whl/tests/native_dep/tool_names/bare/BUILD.bazel index 124108dd7..d3e601fd6 100644 --- a/uv/private/pep517_whl/tests/native_dep/tool_names/bare/BUILD.bazel +++ b/uv/private/pep517_whl/tests/native_dep/tool_names/bare/BUILD.bazel @@ -1,5 +1,5 @@ load("@bazel_skylib//rules:build_test.bzl", "build_test") -load("//uv/private/pep517_whl:rule.bzl", "pep517_native_whl") +load("//uv/private/pep517_whl:defs.bzl", "pep517_native_whl") package(default_testonly = True) diff --git a/uv/private/pep517_whl/tests/wrapper_argv0/BUILD.bazel b/uv/private/pep517_whl/tests/wrapper_argv0/BUILD.bazel index ff8a0f08e..0b9880f21 100644 --- a/uv/private/pep517_whl/tests/wrapper_argv0/BUILD.bazel +++ b/uv/private/pep517_whl/tests/wrapper_argv0/BUILD.bazel @@ -13,7 +13,7 @@ py_test( srcs = ["wrapper_argv0_test.py"], data = [ ":wrapper_argv0_fake_driver", - "//uv/private/pep517_whl:build_helper.py", + "//uv/private/pep517_whl/tools:build_helper.py", ], main = "wrapper_argv0_test.py", target_compatible_with = ["@platforms//os:linux"], diff --git a/uv/private/pep517_whl/tests/wrapper_argv0/wrapper_argv0_test.py b/uv/private/pep517_whl/tests/wrapper_argv0/wrapper_argv0_test.py index 33afa7bde..46fb83c4c 100644 --- a/uv/private/pep517_whl/tests/wrapper_argv0/wrapper_argv0_test.py +++ b/uv/private/pep517_whl/tests/wrapper_argv0/wrapper_argv0_test.py @@ -43,7 +43,7 @@ def main() -> None: workdir = tempfile.mkdtemp(dir=os.environ["TEST_TMPDIR"]) sdist = _make_sdist(workdir) here = os.path.dirname(__file__) - helper = os.path.join(here, "..", "..", "build_helper.py") + helper = os.path.join(here, "..", "..", "tools", "build_helper.py") # The driver directory must remain absent from PATH to expose basename argv[0]. drivers = os.path.join(workdir, "drivers") diff --git a/uv/private/pep517_whl/tools/BUILD.bazel b/uv/private/pep517_whl/tools/BUILD.bazel new file mode 100644 index 000000000..479545a8d --- /dev/null +++ b/uv/private/pep517_whl/tools/BUILD.bazel @@ -0,0 +1,15 @@ +load("//py:defs.bzl", "py_library") + +# Runtime tools for the PEP 517 build action. build_helper.py is the `main` +# of the py_binary each sdist_build repo generates; it stays a single +# self-contained script (no unconditional sibling imports). +exports_files( + ["build_helper.py"], + visibility = ["//visibility:public"], +) + +py_library( + name = "memory_monitor", + srcs = ["memory_monitor.py"], + visibility = ["//visibility:public"], +) diff --git a/uv/private/pep517_whl/build_helper.py b/uv/private/pep517_whl/tools/build_helper.py similarity index 99% rename from uv/private/pep517_whl/build_helper.py rename to uv/private/pep517_whl/tools/build_helper.py index cec8c754c..7a254feb4 100644 --- a/uv/private/pep517_whl/build_helper.py +++ b/uv/private/pep517_whl/tools/build_helper.py @@ -1156,7 +1156,7 @@ def _validate_wheel_platform(wheel_filename: str) -> None: try: if opts.monitor_memory: # Lazy: the dependency exists only when the wheel opts in. - from uv.private.pep517_whl.memory_monitor import run_with_memory_monitor + from uv.private.pep517_whl.tools.memory_monitor import run_with_memory_monitor run_with_memory_monitor( cmd, diff --git a/uv/private/pep517_whl/memory_monitor.py b/uv/private/pep517_whl/tools/memory_monitor.py similarity index 100% rename from uv/private/pep517_whl/memory_monitor.py rename to uv/private/pep517_whl/tools/memory_monitor.py diff --git a/uv/private/sdist_build/repository.bzl b/uv/private/sdist_build/repository.bzl index 8257f6689..90ff6a3ba 100644 --- a/uv/private/sdist_build/repository.bzl +++ b/uv/private/sdist_build/repository.bzl @@ -209,7 +209,7 @@ def _sdist_build_impl(repository_ctx): monitor_memory_attr = "" if repository_ctx.attr.monitor_memory: all_deps = [ - "@aspect_rules_py//uv/private/pep517_whl:memory_monitor", + "@aspect_rules_py//uv/private/pep517_whl/tools:memory_monitor", ] + all_deps monitor_memory_attr = "\n monitor_memory = True," @@ -258,13 +258,13 @@ def _sdist_build_impl(repository_ctx): # Leave args unset: the pure rule validates anyarch wheels by default, # while the native rule defaults to no validation. repository_ctx.file("BUILD.bazel", content = """ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "{rule}") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "{rule}") load("@aspect_rules_py//py:defs.bzl", "py_binary") py_binary( name = "build_tool", - main = "@aspect_rules_py//uv/private/pep517_whl:build_helper.py", - srcs = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + main = "@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py", + srcs = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], deps = {deps}, ) diff --git a/uv/private/uv_hub/snapshots/sdist_build.bravado_core.BUILD.bazel b/uv/private/uv_hub/snapshots/sdist_build.bravado_core.BUILD.bazel index 905ca5261..e9ef5c5a5 100644 --- a/uv/private/uv_hub/snapshots/sdist_build.bravado_core.BUILD.bazel +++ b/uv/private/uv_hub/snapshots/sdist_build.bravado_core.BUILD.bazel @@ -1,11 +1,11 @@ -load("@aspect_rules_py//uv/private/pep517_whl:rule.bzl", "pep517_whl") +load("@aspect_rules_py//uv/private/pep517_whl:defs.bzl", "pep517_whl") load("@aspect_rules_py//py:defs.bzl", "py_binary") py_binary( name = "build_tool", - main = "@aspect_rules_py//uv/private/pep517_whl:build_helper.py", - srcs = ["@aspect_rules_py//uv/private/pep517_whl:build_helper.py"], + main = "@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py", + srcs = ["@aspect_rules_py//uv/private/pep517_whl/tools:build_helper.py"], deps = ["@@+uv+project__aspect_rules_py//:build", "@@+uv+project__aspect_rules_py//:setuptools", "@@+uv+project__aspect_rules_py//:maturin", "@whl_install__aspect_rules_py__setuptools__80_9_0//:install"], ) From 4e91cf768f6d9ea48b5530e5667d70b5132c5339 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 22:15:39 -0600 Subject: [PATCH 36/56] ci(e2e): execute crossbuild images on native runners via artifacts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two builder jobs produce docker-loadable OCI tarballs (new oci_load + tarball targets in pep517_cross_case, tagged manual) and native runner jobs docker-load and run them — no QEMU in the execution loop, so emulation can neither mask nor introduce failures: - crossbuild-images (linux/amd64 builder) uploads the arm64 tarballs; crossbuild-run-arm64 executes them on ubuntu-24.04-arm. Native amd64 execution already happens in the e2e-crossbuild test job. - crossbuild-images-darwin (gated like smoke, 10x-billed) cross-builds psutil/contourpy/rpds_py for both arches; crossbuild-run-darwin-built executes them on native amd64 + arm64. The macOS smoke job filters -requires-docker, so this is the first execution coverage the darwin-to-linux path gets. The reverse direction (arm64 builder -> amd64 execution) is documented as blocked in the workflow comment: gcc_toolchain registers exec=x86_64 only and //tools:rust_host_sysroot pins the x86_64 rust toolchain. --- .github/workflows/ci-workflows.yaml | 119 ++++++++++++++++++++++++++++ e2e/crossbuild/tools/cross_case.bzl | 23 +++++- 2 files changed, 141 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 7f3b41fbb..ffd8ce52e 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -159,6 +159,125 @@ jobs: if [ -f test.sh ]; then bash test.sh fi + # Artifact-based cross verification: build the e2e/crossbuild images on + # one host, then execute them on NATIVE hardware for each target arch — + # no QEMU in the execution loop, so emulation can neither mask nor + # introduce failures (qemu-user has real ld.so quirks; see the cross + # wrapper in uv/private/pep517_whl/tools/build_helper.py). + # + # Two builders: + # - crossbuild-images (linux/amd64): arm64 tarballs only. Native amd64 + # execution is already covered by the e2e-crossbuild test job's + # container_structure_tests on that same runner arch. + # - crossbuild-images-darwin (macOS, gated like `smoke`, 10x-billed): + # both arches for one case per backend family. The macOS smoke job + # cross-builds darwin→linux but filters -requires-docker (no daemon + # there), so these artifacts are the ONLY execution coverage the + # darwin→linux path has. + # + # Missing direction (deliberate): an arm64 builder. Blocked on + # amd64-exec-host assumptions in e2e/crossbuild/MODULE.bazel — + # gcc_toolchain registers exec=x86_64 only, and //tools:rust_host_sysroot + # pins the x86_64 rust toolchain by label. + crossbuild-images: + name: crossbuild-images (linux builder) + runs-on: ubuntu-22.04-32core + steps: + - uses: actions/checkout@v6 + - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 + with: + aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + - name: Build arm64 image tarballs + working-directory: e2e/crossbuild + run: | + targets=$(bazel query 'filter(".*:arm64_tarball$", //...)') + bazel build ${targets} + mkdir -p "${RUNNER_TEMP}/images" + for target in ${targets}; do + case="${target#//}" + case="${case%:arm64_tarball}" + cp "bazel-bin/${case}/arm64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-arm64.tar" + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-arm64 + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-arm64: + name: crossbuild-run (native arm64) + needs: crossbuild-images + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-arm64 + path: images + - name: Run every image on native arm64 + run: | + status=0 + for tar in images/*-arm64.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" + crossbuild-images-darwin: + name: crossbuild-images (darwin builder) + if: >- + ${{ github.ref_name == 'main' + || contains(github.head_ref || github.ref_name, 'macos') }} + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 + with: + bazelisk-cache: true + disk-cache: macos-crossbuild-images + repository-cache: true + # One case per backend family: psutil (setuptools/distutils), + # contourpy (meson-python), rpds_py (maturin/PyO3). + - name: Cross-build linux image tarballs from macOS + working-directory: e2e/crossbuild + shell: bash + run: | + mkdir -p "${RUNNER_TEMP}/images" + for case in psutil contourpy rpds_py; do + for arch in amd64 arm64; do + bazel build --config=ci "//${case}:${arch}_tarball" + cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" + done + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-darwin + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-darwin-built: + name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) + needs: crossbuild-images-darwin + strategy: + fail-fast: false + matrix: + include: + - { runner: "ubuntu-latest", arch: "amd64" } + - { runner: "ubuntu-24.04-arm", arch: "arm64" } + runs-on: ${{ matrix.runner }} + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-darwin + path: images + - name: Run darwin-built images on native ${{ matrix.arch }} + run: | + status=0 + for tar in images/*-${{ matrix.arch }}.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" test-all: name: test-all runs-on: ubuntu-latest diff --git a/e2e/crossbuild/tools/cross_case.bzl b/e2e/crossbuild/tools/cross_case.bzl index 1449c7b5f..49d4aca32 100644 --- a/e2e/crossbuild/tools/cross_case.bzl +++ b/e2e/crossbuild/tools/cross_case.bzl @@ -15,7 +15,7 @@ that reason. load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@container_structure_test//:defs.bzl", "container_structure_test") -load("@rules_oci//oci:defs.bzl", "oci_image") +load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load") load(":checks.bzl", "assert_so_arch", "assert_so_suffix") def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = None, dep_group = None, image_command_test_config = None): @@ -123,6 +123,27 @@ def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = Non target_platform = "//:arm64_linux", ) + # Docker-loadable tarballs for the artifact-based CI jobs: a builder job + # `bazel build`s these, uploads them, and native amd64/arm64 runner jobs + # `docker load` + `docker run` them on real hardware (no QEMU). Tagged + # manual: under plain `//...` they would only repackage what the + # container_structure_tests already cover on this host. The repo_tag is + # what the runner job executes, so it must stay `crossbuild/:`. + for arch in ("amd64", "arm64"): + oci_load( + name = arch + "_load", + image = ":" + arch + "_image", + repo_tags = ["crossbuild/" + name + ":" + arch], + tags = ["manual"], + ) + + native.filegroup( + name = arch + "_tarball", + srcs = [":" + arch + "_load"], + output_group = "tarball", + tags = ["manual"], + ) + container_structure_test( name = "amd64_command_test", configs = [image_command_test_config], From 631c52c2a2d0de0520d297687dabebfa20673a76 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 22:22:04 -0600 Subject: [PATCH 37/56] ci(e2e): register QEMU binfmt on the crossbuild image builder The native-runner jobs remove QEMU from the execution loop, but the builder still needs it during the build itself: meson's compiler sanity check and cc.run() probes execute target-arch binaries through the exe_wrapper, which relies on binfmt_misc (contourpy failed with "Executables created by cpp compiler ... are not runnable"). --- .github/workflows/ci-workflows.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index ffd8ce52e..fdec3c8a6 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -187,6 +187,13 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + # QEMU leaves the *execution* loop (that's the point of the native + # runner jobs) but not the *build* loop: meson's compiler sanity + # check and cc.run() probes execute target-arch binaries through + # the exe_wrapper during the build itself. + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: arm64 - name: Build arm64 image tarballs working-directory: e2e/crossbuild run: | From cb218efaaeef3e1d72e1b97afc74ee2e634dbbfb Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 22:33:37 -0600 Subject: [PATCH 38/56] fix(e2e): define the ci config in e2e/crossbuild's bazelrc The smoke job and the darwin image builder invoke bazel with --config=ci in every workspace; this one lost the definition when the branch's .bazelrc superseded main's in the merge, failing with "Config value 'ci' is not defined in any .rc file". --- e2e/crossbuild/.bazelrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/e2e/crossbuild/.bazelrc b/e2e/crossbuild/.bazelrc index f8b70ea56..52f3b0277 100644 --- a/e2e/crossbuild/.bazelrc +++ b/e2e/crossbuild/.bazelrc @@ -1,3 +1,7 @@ # Without this, sdist build actions run with no PATH and clang can't find # `ld` (not bundled with the hermetic LLVM toolchain). common --incompatible_strict_action_env + +# Build without the bytes +common:ci --remote_download_outputs=minimal +common:ci --nobuild_runfile_links From ef0b521ef713b67c4d4484073ba3baafff51e31e Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 23:19:57 -0600 Subject: [PATCH 39/56] fix(uv): link the -nostdlib++ toolchain's static runtime archives explicitly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The BCR llvm toolchain supplies its C++/unwind runtime (libc++.a, libc++abi.a, libunwind.a) as toolchain inputs via static_runtime_lib — never as link-action flags — and ships empty stub libraries on the search path, so the wrapper's name-based "-lc++ -lc++abi" (and rustc's "-lgcc_s" fold to "-lunwind") resolved against stubs. The resulting .so's linked cleanly (undefined symbols are legal in shared links) and only exploded at dlopen on the target: contourpy with 45 undefined std::__1 symbols, rpds_py with undefined _Unwind_*. First caught by the darwin-built native-execution CI jobs; gcc_toolchain never hits this because its self-contained driver resolves its own runtime. cc_layer now extracts static_runtime_lib behind the -nostdlib++ marker (so the gcc path is untouched), the rule forwards the archives as action inputs plus RULES_PY_CXX_STATIC_RUNTIME, and the cross wrapper links them as absolute paths in dependency order on every ELF link, dropping -lgcc_s. Archive semantics keep this inert for pure-C links. --- uv/private/pep517_whl/cc_layer.bzl | 23 +++++++++++++ uv/private/pep517_whl/pep517_native_whl.bzl | 4 +++ uv/private/pep517_whl/tools/build_helper.py | 36 ++++++++++++++++++--- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/uv/private/pep517_whl/cc_layer.bzl b/uv/private/pep517_whl/cc_layer.bzl index 9a0b2841d..0ccbc15b4 100644 --- a/uv/private/pep517_whl/cc_layer.bzl +++ b/uv/private/pep517_whl/cc_layer.bzl @@ -179,6 +179,27 @@ def extract_cc_layer(ctx, cc_toolchain): target_os, target_cpu = get_target_platform(ctx) + # A "-nostdlib++" toolchain (the BCR llvm module) supplies its C++/unwind + # runtime as toolchain *inputs* (static_runtime_lib), not as link-action + # flags — get_memory_inefficient_command_line never sees them, so a PEP + # 517 backend linking through our wrappers produces .so's with undefined + # std::__1/_Unwind_* symbols that only explode at dlopen time on the + # target. Extract the archives so the wrapper can link them explicitly. + # Only probed behind the -nostdlib++ marker: self-contained drivers + # (gcc_toolchain) resolve their own runtime and may not define + # static_runtime_lib at all, which would fail the API call. + static_runtime_files = None + static_runtime_paths = [] + if "-nostdlib++" in flags.get("ldshared", ""): + static_runtime_files = cc_toolchain.static_runtime_lib( + feature_configuration = feature_configuration, + ) + static_runtime_paths = [ + _EXECROOT_MARKER + "/" + f.path + for f in static_runtime_files.to_list() + if f.path.endswith(".a") + ] + return struct( cc = tools.get("cc"), cxx = tools.get("cxx"), @@ -190,4 +211,6 @@ def extract_cc_layer(ctx, cc_toolchain): ccshared = "-fPIC" if needs_pic else "", target_os = target_os, target_cpu = target_cpu, + static_runtime_files = static_runtime_files, + static_runtime_paths = static_runtime_paths, ) diff --git a/uv/private/pep517_whl/pep517_native_whl.bzl b/uv/private/pep517_whl/pep517_native_whl.bzl index 0acc53131..b7dda121e 100644 --- a/uv/private/pep517_whl/pep517_native_whl.bzl +++ b/uv/private/pep517_whl/pep517_native_whl.bzl @@ -248,6 +248,10 @@ def _pep517_native_whl(ctx): env["RULES_PY_CROSS_COMPILE"] = "1" env["RULES_PY_TARGET_OS"] = cc_layer.target_os or "" env["RULES_PY_TARGET_CPU"] = cc_layer.target_cpu or "" + if cc_layer.static_runtime_files: + extra_inputs.append(cc_layer.static_runtime_files) + if cc_layer.static_runtime_paths: + env["RULES_PY_CXX_STATIC_RUNTIME"] = ":".join(cc_layer.static_runtime_paths) if cc_layer.cflags: env["CFLAGS"] = cc_layer.cflags if cc_layer.cxxflags: diff --git a/uv/private/pep517_whl/tools/build_helper.py b/uv/private/pep517_whl/tools/build_helper.py index 7a254feb4..cf45679b1 100644 --- a/uv/private/pep517_whl/tools/build_helper.py +++ b/uv/private/pep517_whl/tools/build_helper.py @@ -123,6 +123,7 @@ def _die(message: str) -> NoReturn: is_darwin = {is_darwin!r} static_libstdcxx_flags = {static_libstdcxx_flags!r} exe_link_flags = {exe_link_flags!r} +static_runtime_archives = {static_runtime_archives!r} is_link = "-c" not in args filtered = [] @@ -156,11 +157,22 @@ def _die(message: str) -> NoReturn: # "-C linker", meson links probes bare) — bake the flags into every # link; duplicates are harmless to clang. # rustc hardcodes "-lgcc_s" on *-linux-gnu but this toolchain ships no - # libgcc — fold in its static libunwind instead (cargo-zigbuild's + # libgcc; its unwinder comes from the static runtime archives below + # (or, without them, from folding in "-lunwind" — cargo-zigbuild's # trick, same ABI surface). - filtered = ["-lunwind" if a == "-lgcc_s" else a for a in filtered] + if static_runtime_archives and not is_darwin: + filtered = [a for a in filtered if a != "-lgcc_s"] + else: + filtered = ["-lunwind" if a == "-lgcc_s" else a for a in filtered] filtered.extend(exe_link_flags) - if is_cxx: + if static_runtime_archives and not is_darwin: + # The toolchain's C++/unwind runtime (libc++.a, libc++abi.a, + # libunwind.a) travels as toolchain inputs, never as link flags — + # link the archives explicitly, in dependency order, after every + # object. Archive semantics make this safe on pure-C links: unused + # members are simply not pulled. + filtered.extend(static_runtime_archives) + elif is_cxx: # No implicit C++ stdlib under -nostdlib++; statically embed # libc++ so the produced .so has no host-libstdc++ dependency # (only static archives exist on the toolchain's search path). @@ -395,6 +407,7 @@ def _make_cross_compiler_wrapper( is_cxx: bool = False, is_darwin: bool = False, exe_link_flags: Optional[list[str]] = None, + static_runtime_archives: Optional[list[str]] = None, ) -> str: wrapper = path.join(tmpdir, ".aspect_rules_py_compilers", name) @@ -422,6 +435,7 @@ def _make_cross_compiler_wrapper( is_darwin=is_darwin, static_libstdcxx_flags=list(_STATIC_LIBSTDCXX_FLAGS), exe_link_flags=list(exe_link_flags or []), + static_runtime_archives=list(static_runtime_archives or []), ), executable=True, ) @@ -528,6 +542,18 @@ def _compiler_env( wrapper_flags = _get_wrapper_flags(env.get("CFLAGS", "")) lld_path = _find_lld(cc_path) + # The -nostdlib++ toolchain's C++/unwind runtime archives, extracted + # by cc_layer.bzl from static_runtime_lib (they never appear in the + # link-action flags). Ordered for single-pass archive resolution: + # libc++ pulls from libc++abi, which pulls from libunwind. + static_runtime = [ + _absolutize_path(p) + for p in env.pop("RULES_PY_CXX_STATIC_RUNTIME", "").split(":") + if p + ] + runtime_rank = {"libc++.a": 0, "libc++abi.a": 1, "libunwind.a": 2} + static_runtime.sort(key=lambda p: runtime_rank.get(path.basename(p), 3)) + # An LLVM-style toolchain (BCR `llvm` module) reaches its crt objects # and runtime archives only through the link action's flags; detect it # by its "-nostdlib++" marker and bake those flags (sans "-shared") @@ -538,8 +564,8 @@ def _compiler_env( [f for f in ldshared_flag_list if f != "-shared"] if "-nostdlib++" in ldshared_flag_list else [] ) - cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin, exe_link_flags=exe_link_flags) - cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin, exe_link_flags=exe_link_flags) + cc = _make_cross_compiler_wrapper(tmpdir, "cc", cc_path, wrapper_flags, lld_path, is_darwin=is_darwin, exe_link_flags=exe_link_flags, static_runtime_archives=static_runtime) + cxx = _make_cross_compiler_wrapper(tmpdir, "c++", cxx_path, wrapper_flags, lld_path, is_cxx=True, is_darwin=is_darwin, exe_link_flags=exe_link_flags, static_runtime_archives=static_runtime) # gcc_toolchain layout (/xbin/gcc, /sysroot/...): a # target-arch binary needs THIS toolchain's glibc/loader to run. From 1c684e52e46f8a2d49ae71958f0d6e1fffc5f251 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Thu, 13 Aug 2026 23:40:22 -0600 Subject: [PATCH 40/56] ci(e2e): surface meson tracebacks in the darwin image builder Temporary instrumentation: the darwin builder's contourpy build fails in meson's sysconfig python lookup with a bare UnicodeDecodeError one-liner; MESON_FORCE_BACKTRACE names the file and line doing the read. --- .github/workflows/ci-workflows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index fdec3c8a6..1fc3d66c1 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -251,7 +251,7 @@ jobs: mkdir -p "${RUNNER_TEMP}/images" for case in psutil contourpy rpds_py; do for arch in amd64 arm64; do - bazel build --config=ci "//${case}:${arch}_tarball" + bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" done done From 7bb19927de0488e5365265909d2f5d556c44efa9 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 00:04:29 -0600 Subject: [PATCH 41/56] fix(uv): stop treating compiler-introspection probes as link invocations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both wrappers classified anything without "-c" as a link. meson probes the compiler through the wrapper with "-E -v -", "-print-search-dirs", and "--version"; the link-only additions were mostly inert there until the static runtime archives became positional inputs — "-E" preprocesses positional inputs, so libc++.a turned into megabytes of binary on stdout that meson strictly utf-8 decodes (its sysconfig python lookup died with UnicodeDecodeError on darwin hosts, where the absence of pkg-config is what routes meson into that code path). is_link now excludes -c/-E/-S/-fsyntax-only and the introspection queries in both the native and cross wrappers. --- uv/private/pep517_whl/tools/build_helper.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/uv/private/pep517_whl/tools/build_helper.py b/uv/private/pep517_whl/tools/build_helper.py index cf45679b1..de32c3b0d 100644 --- a/uv/private/pep517_whl/tools/build_helper.py +++ b/uv/private/pep517_whl/tools/build_helper.py @@ -62,7 +62,13 @@ def _die(message: str) -> NoReturn: filtered_args = [arg for arg in sys.argv[1:] if arg != "{debug_flag}"] is_cxx = {is_cxx!r} is_darwin = {is_darwin!r} -is_link = "-c" not in filtered_args +# Same non-link detection as the cross wrapper: compiles, preprocessing, +# and compiler-introspection probes must not receive link-only flags. +is_link = True +for _arg in filtered_args: + if _arg in ("-c", "-E", "-S", "-fsyntax-only", "--version", "-dumpmachine", "-dumpversion", "-###") or _arg.startswith("-print-"): + is_link = False + break if is_cxx and is_link and not is_darwin: filtered_args = filtered_args + {static_libstdcxx_flags!r} sysroot = {sysroot!r} @@ -125,7 +131,17 @@ def _die(message: str) -> NoReturn: exe_link_flags = {exe_link_flags!r} static_runtime_archives = {static_runtime_archives!r} -is_link = "-c" not in args +# Not a link if compiling/preprocessing (-c/-E/-S/-fsyntax-only) or if this +# is a compiler-introspection probe (meson runs "-E -v -", "-print-*", +# "--version" through us): appending link inputs there is at best noise and +# at worst catastrophic — "-E" *preprocesses* positional inputs, so an +# appended static archive becomes megabytes of binary on stdout that +# meson then strictly utf-8 decodes. +is_link = True +for a in args: + if a in ("-c", "-E", "-S", "-fsyntax-only", "--version", "-dumpmachine", "-dumpversion", "-###") or a.startswith("-print-"): + is_link = False + break filtered = [] i = 0 while i < len(args): From 37825dd3353d6594922d18f175b2be7e1430278a Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 00:34:40 -0600 Subject: [PATCH 42/56] ci(e2e): close the linux-to-linux cycle with an arm64 image builder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An ubuntu-24.04-arm builder cross-compiles the per-backend subset to amd64 and a native amd64 runner executes the artifacts — the reverse of the existing direction. gcc_toolchain has no arm64-exec variant, so this is also the first Linux-hosted exercise of the llvm toolchain fallback (the same path darwin hosts take). rust and the CC layer needed no changes: rust_host_sysroot re-resolves via exec_transition on any host, and rules_rust already registers both linux target triples. --- .github/workflows/ci-workflows.yaml | 56 ++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 1fc3d66c1..f6519acc8 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -175,10 +175,10 @@ jobs: # there), so these artifacts are the ONLY execution coverage the # darwin→linux path has. # - # Missing direction (deliberate): an arm64 builder. Blocked on - # amd64-exec-host assumptions in e2e/crossbuild/MODULE.bazel — - # gcc_toolchain registers exec=x86_64 only, and //tools:rust_host_sysroot - # pins the x86_64 rust toolchain by label. + # - crossbuild-images-arm (linux/arm64): the reverse direction, closing + # the linux↔linux cycle. gcc_toolchain has no arm64-exec variant, so + # these builds exercise the llvm toolchain fallback — the same path a + # darwin host takes — on a Linux arm64 host. crossbuild-images: name: crossbuild-images (linux builder) runs-on: ubuntu-22.04-32core @@ -229,6 +229,54 @@ jobs: echo "::endgroup::" done exit "${status}" + crossbuild-images-arm: + name: crossbuild-images (arm64 builder) + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/checkout@v6 + - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 + with: + aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + # amd64 binfmt for meson's build-time probes (mirror image of the + # arm64 registration on the amd64 builder). + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: amd64 + # Same one-case-per-backend subset as the darwin builder: the + # free arm64 runners are 4-core, and the llvm-fallback coverage + # per backend is what this direction is for. + - name: Cross-build amd64 image tarballs from arm64 + working-directory: e2e/crossbuild + run: | + mkdir -p "${RUNNER_TEMP}/images" + for case in psutil contourpy rpds_py; do + bazel build --config=ci "//${case}:amd64_tarball" + cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-arm-built + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-arm-built: + name: crossbuild-run (arm-built, native amd64) + needs: crossbuild-images-arm + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-arm-built + path: images + - name: Run arm-built images on native amd64 + run: | + status=0 + for tar in images/*-amd64.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" crossbuild-images-darwin: name: crossbuild-images (darwin builder) if: >- From 32d567916c89a8a718f199101120774a97c4835d Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 00:49:41 -0600 Subject: [PATCH 43/56] fix(uv): only offer meson an exe_wrapper when qemu can load the binary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The passthrough exe_wrapper assumed Linux hosts can always run target-arch ELFs via binfmt, but a dynamically-linked probe also needs QEMU_LD_PREFIX to resolve the target's ld.so — and only gcc_toolchain's layout provides that sysroot. Under the llvm fallback (empty sysroot, as exercised by the arm64 builder) meson's sanity check died with "not runnable". Gate the wrapper on RULES_PY_TARGET_GCC_SYSROOT: elsewhere meson gets needs_exe_wrapper=true with no wrapper, the same honest skip-or-explicit-error semantics darwin hosts already had. --- uv/private/pep517_whl/tools/build_helper.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/uv/private/pep517_whl/tools/build_helper.py b/uv/private/pep517_whl/tools/build_helper.py index de32c3b0d..e1046e747 100644 --- a/uv/private/pep517_whl/tools/build_helper.py +++ b/uv/private/pep517_whl/tools/build_helper.py @@ -772,11 +772,16 @@ def _generate_meson_cross_file( without which qemu-user searches the exec host for the target's ld-linux/glibc and finds none. """ - # A darwin host cannot execute ELF at all; with needs_exe_wrapper=true - # and NO exe_wrapper, meson skips its own checks and cc.run() callers get - # meson's explicit cross-environment error — an honest host limitation. + # The wrapper is only offered when the emulated binary can actually + # resolve its dynamic interpreter: binfmt+qemu need QEMU_LD_PREFIX to + # locate the target's ld.so/glibc, and only the gcc_toolchain layout + # hands us that sysroot. Everywhere else (darwin hosts can't execute + # ELF at all; the llvm toolchain's empty-sysroot layout gives qemu no + # loader prefix) meson gets needs_exe_wrapper=true with NO exe_wrapper: + # it skips its own sanity runs and cc.run() callers get meson's + # explicit cross-environment error — an honest limitation. exe_wrapper_line = "" - if _platform.system() == "Linux": + if _platform.system() == "Linux" and build_env.get("RULES_PY_TARGET_GCC_SYSROOT"): exe_wrapper = _write_generated_file( path.join(tmpdir, "meson_exe_wrapper.py"), _MESON_EXE_WRAPPER.format(qemu_ld_prefix=build_env.get("RULES_PY_TARGET_GCC_SYSROOT", "")), From 5eabe8e700bf8e1ff90e2de0527e78554680d683 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 00:56:39 -0600 Subject: [PATCH 44/56] ci(e2e): materialize tarballs on the arm64 builder despite minimal downloads --config=ci turns on --remote_download_outputs=minimal, so on cache hits the tarball this job uploads never lands in bazel-bin and the cp fails; toplevel keeps the byte savings for everything else. --- .github/workflows/ci-workflows.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index f6519acc8..4245839b8 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -250,7 +250,9 @@ jobs: run: | mkdir -p "${RUNNER_TEMP}/images" for case in psutil contourpy rpds_py; do - bazel build --config=ci "//${case}:amd64_tarball" + # toplevel: build-without-the-bytes must still materialize + # the tarball this job exists to upload. + bazel build --config=ci --remote_download_outputs=toplevel "//${case}:amd64_tarball" cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" done - uses: actions/upload-artifact@v4 From 544aa924a1afb45210961f643cebc6a3a6bc9a45 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 01:09:53 -0600 Subject: [PATCH 45/56] ci(e2e): rename crossbuild-images to crossbuild-images-amd64 The builder fleet is now three-way (amd64, arm64, darwin); the unqualified name predates the other two. --- .github/workflows/ci-workflows.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 4245839b8..f098c4e8e 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -166,7 +166,7 @@ jobs: # wrapper in uv/private/pep517_whl/tools/build_helper.py). # # Two builders: - # - crossbuild-images (linux/amd64): arm64 tarballs only. Native amd64 + # - crossbuild-images-amd64: arm64 tarballs only. Native amd64 # execution is already covered by the e2e-crossbuild test job's # container_structure_tests on that same runner arch. # - crossbuild-images-darwin (macOS, gated like `smoke`, 10x-billed): @@ -179,8 +179,8 @@ jobs: # the linux↔linux cycle. gcc_toolchain has no arm64-exec variant, so # these builds exercise the llvm toolchain fallback — the same path a # darwin host takes — on a Linux arm64 host. - crossbuild-images: - name: crossbuild-images (linux builder) + crossbuild-images-amd64: + name: crossbuild-images (amd64 builder) runs-on: ubuntu-22.04-32core steps: - uses: actions/checkout@v6 @@ -212,7 +212,7 @@ jobs: retention-days: 1 crossbuild-run-arm64: name: crossbuild-run (native arm64) - needs: crossbuild-images + needs: crossbuild-images-amd64 runs-on: ubuntu-24.04-arm steps: - uses: actions/download-artifact@v4 From 36ff7c72ce3e1c4990ae69583ed7807c02dce3fb Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 01:24:43 -0600 Subject: [PATCH 46/56] refining github workflow --- .github/workflows/ci-workflows.yaml | 217 +++++++++++++--------------- e2e/crossbuild/MODULE.bazel | 105 -------------- 2 files changed, 103 insertions(+), 219 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index f098c4e8e..a547d9aa0 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -120,65 +120,67 @@ jobs: if [ -f test.sh ]; then bash test.sh fi + # macOS minutes are billed at 10X, so it only covers the root and e2e consumer # workspaces, on main plus branches whose name contains 'macos'. # https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes - smoke: - name: smoke (${{ matrix.workspace.path }}, macos) + + crossbuild-images-darwin: + name: crossbuild-images (darwin builder) if: >- ${{ github.ref_name == 'main' || contains(github.head_ref || github.ref_name, 'macos') }} runs-on: macos-latest - strategy: - fail-fast: false - matrix: - workspace: - - { path: ".", slug: "root" } - - { path: "e2e/cases", slug: "e2e" } - - { path: "e2e/crossbuild", slug: "e2e-crossbuild" } - defaults: - run: - working-directory: ${{ matrix.workspace.path }} steps: - uses: actions/checkout@v6 - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 with: bazelisk-cache: true - disk-cache: macos-${{ matrix.workspace.slug }} + disk-cache: macos-crossbuild-images repository-cache: true - # Images still build; only the tests that need a Linux container daemon are - # dropped, since the GitHub-hosted macOS runners have none. - # Run `test //...`, then the workspace's test.sh if it has one - - name: Test + - name: Cross-build linux image tarballs from macOS + working-directory: e2e/crossbuild shell: bash run: | - bazel test --config=ci --keep_going \ - --test_tag_filters=-skip-on-bazel8,-requires-docker \ - --build_tag_filters=-skip-on-bazel8 \ - //... - if [ -f test.sh ]; then - bash test.sh - fi - # Artifact-based cross verification: build the e2e/crossbuild images on - # one host, then execute them on NATIVE hardware for each target arch — - # no QEMU in the execution loop, so emulation can neither mask nor - # introduce failures (qemu-user has real ld.so quirks; see the cross - # wrapper in uv/private/pep517_whl/tools/build_helper.py). - # - # Two builders: - # - crossbuild-images-amd64: arm64 tarballs only. Native amd64 - # execution is already covered by the e2e-crossbuild test job's - # container_structure_tests on that same runner arch. - # - crossbuild-images-darwin (macOS, gated like `smoke`, 10x-billed): - # both arches for one case per backend family. The macOS smoke job - # cross-builds darwin→linux but filters -requires-docker (no daemon - # there), so these artifacts are the ONLY execution coverage the - # darwin→linux path has. - # - # - crossbuild-images-arm (linux/arm64): the reverse direction, closing - # the linux↔linux cycle. gcc_toolchain has no arm64-exec variant, so - # these builds exercise the llvm toolchain fallback — the same path a - # darwin host takes — on a Linux arm64 host. + mkdir -p "${RUNNER_TEMP}/images" + for case in psutil contourpy rpds_py; do + for arch in amd64 arm64; do + bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" + cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" + done + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-darwin + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-darwin-built: + name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) + needs: crossbuild-images-darwin + strategy: + fail-fast: false + matrix: + include: + - { runner: "ubuntu-latest", arch: "amd64" } + - { runner: "ubuntu-24.04-arm", arch: "arm64" } + runs-on: ${{ matrix.runner }} + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-darwin + path: images + - name: Run darwin-built images on native ${{ matrix.arch }} + run: | + status=0 + for tar in images/*-${{ matrix.arch }}.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" + + crossbuild-images-amd64: name: crossbuild-images (amd64 builder) runs-on: ubuntu-22.04-32core @@ -187,10 +189,6 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - # QEMU leaves the *execution* loop (that's the point of the native - # runner jobs) but not the *build* loop: meson's compiler sanity - # check and cc.run() probes execute target-arch binaries through - # the exe_wrapper during the build itself. - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 with: platforms: arm64 @@ -210,7 +208,7 @@ jobs: name: crossbuild-images-arm64 path: ${{ runner.temp }}/images/*.tar retention-days: 1 - crossbuild-run-arm64: + crossbuild-run-amd64-built: name: crossbuild-run (native arm64) needs: crossbuild-images-amd64 runs-on: ubuntu-24.04-arm @@ -229,7 +227,10 @@ jobs: echo "::endgroup::" done exit "${status}" - crossbuild-images-arm: + + + + crossbuild-images-arm64: name: crossbuild-images (arm64 builder) runs-on: ubuntu-24.04-arm steps: @@ -237,14 +238,9 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - # amd64 binfmt for meson's build-time probes (mirror image of the - # arm64 registration on the amd64 builder). - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 with: platforms: amd64 - # Same one-case-per-backend subset as the darwin builder: the - # free arm64 runners are 4-core, and the llvm-fallback coverage - # per backend is what this direction is for. - name: Cross-build amd64 image tarballs from arm64 working-directory: e2e/crossbuild run: | @@ -260,9 +256,9 @@ jobs: name: crossbuild-images-arm-built path: ${{ runner.temp }}/images/*.tar retention-days: 1 - crossbuild-run-arm-built: + crossbuild-run-arm64-built: name: crossbuild-run (arm-built, native amd64) - needs: crossbuild-images-arm + needs: crossbuild-images-arm64 runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v4 @@ -279,66 +275,20 @@ jobs: echo "::endgroup::" done exit "${status}" - crossbuild-images-darwin: - name: crossbuild-images (darwin builder) - if: >- - ${{ github.ref_name == 'main' - || contains(github.head_ref || github.ref_name, 'macos') }} - runs-on: macos-latest - steps: - - uses: actions/checkout@v6 - - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 - with: - bazelisk-cache: true - disk-cache: macos-crossbuild-images - repository-cache: true - # One case per backend family: psutil (setuptools/distutils), - # contourpy (meson-python), rpds_py (maturin/PyO3). - - name: Cross-build linux image tarballs from macOS - working-directory: e2e/crossbuild - shell: bash - run: | - mkdir -p "${RUNNER_TEMP}/images" - for case in psutil contourpy rpds_py; do - for arch in amd64 arm64; do - bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" - cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" - done - done - - uses: actions/upload-artifact@v4 - with: - name: crossbuild-images-darwin - path: ${{ runner.temp }}/images/*.tar - retention-days: 1 - crossbuild-run-darwin-built: - name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) - needs: crossbuild-images-darwin - strategy: - fail-fast: false - matrix: - include: - - { runner: "ubuntu-latest", arch: "amd64" } - - { runner: "ubuntu-24.04-arm", arch: "arm64" } - runs-on: ${{ matrix.runner }} - steps: - - uses: actions/download-artifact@v4 - with: - name: crossbuild-images-darwin - path: images - - name: Run darwin-built images on native ${{ matrix.arch }} - run: | - status=0 - for tar in images/*-${{ matrix.arch }}.tar; do - tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') - echo "::group::${tag}" - docker run --rm "${tag}" || status=1 - echo "::endgroup::" - done - exit "${status}" + + + + + + + + + + test-all: name: test-all runs-on: ubuntu-latest - needs: [test, typecheck] + needs: [buildifier, gazelle, test, typecheck, crossbuild-run-arm64-built, crossbuild-run-arm64-built] if: always() steps: - name: All required jobs succeeded @@ -351,3 +301,42 @@ jobs: echo "Typecheck did not succeed: ${{ needs.typecheck.result }}" exit 1 fi + + + + smoke: + name: smoke (${{ matrix.workspace.path }}, macos) + if: >- + ${{ github.ref_name == 'main' + || contains(github.head_ref || github.ref_name, 'macos') }} + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + workspace: + - { path: ".", slug: "root" } + - { path: "e2e/cases", slug: "e2e" } + - { path: "e2e/crossbuild", slug: "e2e-crossbuild" } + defaults: + run: + working-directory: ${{ matrix.workspace.path }} + steps: + - uses: actions/checkout@v6 + - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 + with: + bazelisk-cache: true + disk-cache: macos-${{ matrix.workspace.slug }} + repository-cache: true + # Images still build; only the tests that need a Linux container daemon are + # dropped, since the GitHub-hosted macOS runners have none. + # Run `test //...`, then the workspace's test.sh if it has one + - name: Test + shell: bash + run: | + bazel test --config=ci --keep_going \ + --test_tag_filters=-skip-on-bazel8,-requires-docker \ + --build_tag_filters=-skip-on-bazel8 \ + //... + if [ -f test.sh ]; then + bash test.sh + fi diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index 5da8aba15..80ff7ff4b 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -1,103 +1,3 @@ -"""Cross-compiled sdist e2e coverage — isolated from `e2e/cases`. - -`python-geohash` (a real C++ extension) is built for linux/amd64 and -linux/arm64 from the same amd64 exec host, exercising `pep517_native_whl`'s -cross path end to end. Isolated from `e2e/cases` because -`default_build_dependencies`, the pre-build patch, and -`resource_set = "mem_4g"` are specific to `python-geohash` and would -otherwise leak onto unrelated packages sharing the hub. - -The Linux cross toolchain is `gcc_toolchain` (real GCC, hermetic sysroots), -not LLVM: clang is a native cross-compiler and papers over missing -sysroot/flag propagation in ways a stricter GCC cross toolchain won't — for -instance gcc_toolchain does not auto-link libstdc++, so a C++ build here -only succeeds if `cc_layer.bzl` actually forwards the link flags it should. - -On a macOS host, BUILD.bazel's geohash_macos_* targets also build for -arm64/amd64 macOS via the Xcode SDK; see test.sh for why those are `manual` -rather than plain `platform_transition_filegroup` targets. gcc_toolchain is -Linux-only, so geohash_macos_amd64_cross_test has no registered toolchain -for its target/exec combination and will fail analysis with a clear -diagnostic if ever run — this path was already unverified (no CI runs it), -so failing loudly here is a wash, not a regression. - -`//zstandard` cross-compiles a package that also ships official prebuilt -wheels, and diffs our build's compressed output against theirs — a stronger -check than `//geohash`'s fixed expected value, since it validates against an -independent reference build rather than a hardcoded string. - -`//contourpy` (meson-python) and `//awkward_cpp` (scikit-build-core/CMake) -exercise cross support for those two backends, on top of `//geohash` and -`//zstandard`'s setuptools/distutils coverage — `build_helper.py` generates a -meson cross file / CMake toolchain file per build, since neither backend's -own cross auto-detection covers a plain Linux-arch cross build (both only -special-case macOS ARCHFLAGS, plus Android/iOS for meson-python). - -`//rpds_py` (maturin/PyO3, real Rust) needs its own Cargo toolchain: `rust` -registers x86_64 (exec) and arm64 (target) rust_toolchains, and -build_helper.py sets CARGO_BUILD_TARGET / CARGO_TARGET__LINKER since -Cargo has no cross auto-detection at all — every build needs an explicit ---target and a linker for it, or it silently falls back to $CC (the host -driver) and fails at the link step. The arm64-*targeting* rust_toolchain's -sysroot only bundles LLVM's own runtime libs for the exec platform, not its -rust-std (needed to compile build scripts/proc-macros, always host -artifacts) — `//tools:rust_host_sysroot` pins the plain x86_64 toolchain by -label (bypassing toolchain resolution, which under this cross transition -would otherwise hand back the arm64-targeting one again) so -build_helper.py can merge the two sysroots into one Cargo can actually use. - -`//pydantic_core` (maturin/PyO3, ~100 transitive crates vs. //rpds_py's ~20) -and `//bcrypt` (setuptools-rust — a build-backend of plain -"setuptools.build_meta" with "setuptools-rust" only visible in -build-system.requires, and no --target flag of its own either — it shells -out to a bare `cargo rustc` and relies on the same $CARGO_BUILD_TARGET) each -add a second, widely-used real-world package per Rust code path, so neither -is validated by one lucky package alone. setuptools-rust also needed -PYO3_CROSS_PYTHON_VERSION: maturin auto-generates a PYO3_CONFIG_FILE for -pyo3-ffi's build script, but setuptools-rust gives it no cross help at all. -`//psutil` is a second, far more widely-used plain setuptools/distutils -C-extension package alongside `//geohash` and `//zstandard`, for the same -"one lucky package" reason. - -`//jpype1` (scikit-build-core/CMake, same backend as `//awkward_cpp`) needs -a JDK and Apache Ant on top of that — but both are always exec-platform -tools regardless of what CPU `_jpype.so` targets: it only links against -libdl (see its CMakeLists.txt), never libjvm/libjawt, and the JAR Ant -produces is portable JVM bytecode, so unlike Rust's rust-std there's no -host/target split to solve here. `@bazel_tools//tools/jdk:current_java_runtime` -(used by e.g. `e2e/cases/uv-sdist-jdk-build`) resolves to rules_java's -default remotejdk, which is actually Azul Zulu, not genuine Eclipse -Temurin — `@temurin11_linux_x86_64` fetches a real Temurin 11 build instead -(see its `http_archive` for the exact Adoptium release metadata). Ant ships -no Bazel toolchain at all upstream, hermetic or otherwise, so -`@apache_ant` + `//tools:ant_home` vendor and expose it the same way. - -`//msgpack` is a third setuptools/distutils C-extension package, distinct -from `//geohash` (hand-written C++) and `//psutil`/`//zstandard` (hand-written -C/CFFI): its extension is Cython-generated, committed as pre-Cythonized .c -in the sdist, exercising that code-generation path's symbol/link pattern -rather than a fourth hand-written one. - -`//tiktoken` is a second setuptools-rust package alongside `//bcrypt` (same -build-backend shape, same $CARGO_BUILD_TARGET-driven cross path) — not a -maturin package despite superficially resembling `//rpds_py`/ -`//pydantic_core`; verified against its real sdist pyproject.toml before -wiring it in. Its own encodings download BPE vocab files over the network on -first use, which a sandboxed cross build/QEMU container can't do, so -tiktoken_main.py builds a minimal `tiktoken.Encoding` directly instead — -still a real round-trip through the compiled Rust core, just without the -network dependency. - -`//numpy` is the only other widely-used meson-python package besides -`//contourpy` — its build has no cross auto-detection for a missing system -BLAS/LAPACK either (meson-python only special-cases the macOS ARCHFLAGS/ -Android/iOS cases build_helper.py already works around), so it needs its -own `-Dblas=none -Dlapack=none` (numpy's own documented no-BLAS recipe, see -its emscripten cibuildwheel config) passed via a new, backend-generic -RULES_PY_MESON_SETUP_ARGS env var — needed for the *native* build here too, -since this sandbox has no system BLAS/LAPACK either, not just the cross one. -""" - bazel_dep(name = "aspect_rules_py") bazel_dep(name = "bazel_features", version = "1.38.0") bazel_dep(name = "bazel_skylib", version = "1.4.2") @@ -118,7 +18,6 @@ local_path_override( path = "../..", ) -# Ensure any transitive "aspect_bazel_lib" is latest to be forward compatible with bazel_lib 3+ single_version_override( module_name = "aspect_bazel_lib", version = "2.22.5", @@ -171,9 +70,6 @@ register_toolchains("@llvm//toolchain:all") rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( edition = "2021", - # Both linux triples: on the linux/amd64 CI runner x86_64 is the host - # triple (redundant there), but a darwin host needs it as an explicit - # cross target for the amd64 cases. extra_target_triples = [ "aarch64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", @@ -197,7 +93,6 @@ oci.pull( ) use_repo(oci, "ubuntu", "ubuntu_linux_amd64", "ubuntu_linux_arm64_v8") -# Used by assert_tar_listing (tools/asserts.bzl). bazel_lib_toolchains = use_extension("@tar.bzl//tar:extensions.bzl", "toolchains", dev_dependency = True) use_repo(bazel_lib_toolchains, "bsd_tar_toolchains") From 98f8bffd16245ce0372cd580cfe9f39948ffe3d0 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 01:37:18 -0600 Subject: [PATCH 47/56] ci(e2e): fold the crossbuild pipelines into one reusable workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six flat jobs rendered as dependency spaghetti in the Actions graph. Each builder direction is now one workflow_call node (crossbuild-{amd64,arm64,darwin}) that expands to its own images->run chain, parameterized over the four real differences: builder runner, setup flavor, case list, and native-executor matrix. The build command is now uniform too — every builder gets --config=ci with toplevel output materialization and the meson traceback instrumentation. --- .github/workflows/ci-workflows.yaml | 197 +++++------------------ .github/workflows/crossbuild-verify.yaml | 104 ++++++++++++ 2 files changed, 144 insertions(+), 157 deletions(-) create mode 100644 .github/workflows/crossbuild-verify.yaml diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index a547d9aa0..5c39371de 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -125,166 +125,49 @@ jobs: # workspaces, on main plus branches whose name contains 'macos'. # https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes - crossbuild-images-darwin: - name: crossbuild-images (darwin builder) + # Artifact-based cross verification: each crossbuild-* node below is one + # build->run pipeline from .github/workflows/crossbuild-verify.yaml — + # build OCI tarballs on one host, execute them on NATIVE runners per + # target arch. Directions: + # - amd64 builder (gcc_toolchain) -> native arm64 execution. Native amd64 + # execution is already covered by the e2e-crossbuild test job. + # - arm64 builder (llvm fallback; gcc_toolchain has no arm64-exec + # variant) -> native amd64 execution. Closes the linux<->linux cycle. + # - darwin builder (llvm; 10x-billed, gated like smoke) -> native amd64 + + # arm64. The macOS smoke job filters -requires-docker, so these are the + # only execution coverage the darwin->linux path has. + crossbuild-amd64: + uses: ./.github/workflows/crossbuild-verify.yaml + secrets: inherit + with: + builder-runner: ubuntu-22.04-32core + qemu-platforms: arm64 + archs: arm64 + artifact: crossbuild-images-amd64-built + run-matrix: '[{"runner": "ubuntu-24.04-arm", "arch": "arm64"}]' + crossbuild-arm64: + uses: ./.github/workflows/crossbuild-verify.yaml + secrets: inherit + with: + builder-runner: ubuntu-24.04-arm + qemu-platforms: amd64 + cases: psutil contourpy rpds_py + archs: amd64 + artifact: crossbuild-images-arm64-built + run-matrix: '[{"runner": "ubuntu-latest", "arch": "amd64"}]' + crossbuild-darwin: if: >- ${{ github.ref_name == 'main' || contains(github.head_ref || github.ref_name, 'macos') }} - runs-on: macos-latest - steps: - - uses: actions/checkout@v6 - - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 - with: - bazelisk-cache: true - disk-cache: macos-crossbuild-images - repository-cache: true - - name: Cross-build linux image tarballs from macOS - working-directory: e2e/crossbuild - shell: bash - run: | - mkdir -p "${RUNNER_TEMP}/images" - for case in psutil contourpy rpds_py; do - for arch in amd64 arm64; do - bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" - cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" - done - done - - uses: actions/upload-artifact@v4 - with: - name: crossbuild-images-darwin - path: ${{ runner.temp }}/images/*.tar - retention-days: 1 - crossbuild-run-darwin-built: - name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) - needs: crossbuild-images-darwin - strategy: - fail-fast: false - matrix: - include: - - { runner: "ubuntu-latest", arch: "amd64" } - - { runner: "ubuntu-24.04-arm", arch: "arm64" } - runs-on: ${{ matrix.runner }} - steps: - - uses: actions/download-artifact@v4 - with: - name: crossbuild-images-darwin - path: images - - name: Run darwin-built images on native ${{ matrix.arch }} - run: | - status=0 - for tar in images/*-${{ matrix.arch }}.tar; do - tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') - echo "::group::${tag}" - docker run --rm "${tag}" || status=1 - echo "::endgroup::" - done - exit "${status}" - - - crossbuild-images-amd64: - name: crossbuild-images (amd64 builder) - runs-on: ubuntu-22.04-32core - steps: - - uses: actions/checkout@v6 - - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 - with: - aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - with: - platforms: arm64 - - name: Build arm64 image tarballs - working-directory: e2e/crossbuild - run: | - targets=$(bazel query 'filter(".*:arm64_tarball$", //...)') - bazel build ${targets} - mkdir -p "${RUNNER_TEMP}/images" - for target in ${targets}; do - case="${target#//}" - case="${case%:arm64_tarball}" - cp "bazel-bin/${case}/arm64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-arm64.tar" - done - - uses: actions/upload-artifact@v4 - with: - name: crossbuild-images-arm64 - path: ${{ runner.temp }}/images/*.tar - retention-days: 1 - crossbuild-run-amd64-built: - name: crossbuild-run (native arm64) - needs: crossbuild-images-amd64 - runs-on: ubuntu-24.04-arm - steps: - - uses: actions/download-artifact@v4 - with: - name: crossbuild-images-arm64 - path: images - - name: Run every image on native arm64 - run: | - status=0 - for tar in images/*-arm64.tar; do - tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') - echo "::group::${tag}" - docker run --rm "${tag}" || status=1 - echo "::endgroup::" - done - exit "${status}" - - - - crossbuild-images-arm64: - name: crossbuild-images (arm64 builder) - runs-on: ubuntu-24.04-arm - steps: - - uses: actions/checkout@v6 - - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 - with: - aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - with: - platforms: amd64 - - name: Cross-build amd64 image tarballs from arm64 - working-directory: e2e/crossbuild - run: | - mkdir -p "${RUNNER_TEMP}/images" - for case in psutil contourpy rpds_py; do - # toplevel: build-without-the-bytes must still materialize - # the tarball this job exists to upload. - bazel build --config=ci --remote_download_outputs=toplevel "//${case}:amd64_tarball" - cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" - done - - uses: actions/upload-artifact@v4 - with: - name: crossbuild-images-arm-built - path: ${{ runner.temp }}/images/*.tar - retention-days: 1 - crossbuild-run-arm64-built: - name: crossbuild-run (arm-built, native amd64) - needs: crossbuild-images-arm64 - runs-on: ubuntu-latest - steps: - - uses: actions/download-artifact@v4 - with: - name: crossbuild-images-arm-built - path: images - - name: Run arm-built images on native amd64 - run: | - status=0 - for tar in images/*-amd64.tar; do - tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') - echo "::group::${tag}" - docker run --rm "${tag}" || status=1 - echo "::endgroup::" - done - exit "${status}" - - - - - - - - - - + uses: ./.github/workflows/crossbuild-verify.yaml + secrets: inherit + with: + builder-runner: macos-latest + setup: bazel + cases: psutil contourpy rpds_py + archs: amd64 arm64 + artifact: crossbuild-images-darwin-built + run-matrix: '[{"runner": "ubuntu-latest", "arch": "amd64"}, {"runner": "ubuntu-24.04-arm", "arch": "arm64"}]' test-all: name: test-all runs-on: ubuntu-latest diff --git a/.github/workflows/crossbuild-verify.yaml b/.github/workflows/crossbuild-verify.yaml new file mode 100644 index 000000000..3499d554d --- /dev/null +++ b/.github/workflows/crossbuild-verify.yaml @@ -0,0 +1,104 @@ +name: crossbuild-verify + +# One build→run verification pipeline for e2e/crossbuild, reused per builder +# platform by ci-workflows.yaml. Builds OCI tarballs for the requested target +# arches on the given builder, uploads them, and executes each on NATIVE +# hardware — no QEMU in the execution loop (build-time meson probes may still +# need binfmt, hence qemu-platforms). +on: + workflow_call: + inputs: + builder-runner: + required: true + type: string + setup: + description: "'aspect' (Aspect CLI + remote cache) or 'bazel' (setup-bazel, for macOS)" + type: string + default: aspect + qemu-platforms: + description: binfmt platforms the builder needs for build-time probes + type: string + default: "" + cases: + description: space-separated case dirs; empty = every case exposing tarball targets + type: string + default: "" + archs: + description: space-separated target arches to build tarballs for + required: true + type: string + artifact: + required: true + type: string + run-matrix: + description: 'JSON include list of {runner, arch} native executors' + required: true + type: string + +jobs: + images: + runs-on: ${{ inputs.builder-runner }} + steps: + - uses: actions/checkout@v6 + - if: inputs.setup == 'aspect' + uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 + with: + aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + - if: inputs.setup == 'bazel' + uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 + with: + bazelisk-cache: true + disk-cache: ${{ inputs.artifact }} + repository-cache: true + - if: inputs.qemu-platforms != '' + uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: ${{ inputs.qemu-platforms }} + - name: Build image tarballs + working-directory: e2e/crossbuild + shell: bash + run: | + mkdir -p "${RUNNER_TEMP}/images" + for arch in ${{ inputs.archs }}; do + cases="${{ inputs.cases }}" + if [ -z "${cases}" ]; then + cases=$(bazel query "filter(\".*:${arch}_tarball\$\", //...)" | sed -e 's|^//||' -e "s|:${arch}_tarball||") + fi + for case in ${cases}; do + # toplevel: build-without-the-bytes must still + # materialize the tarball this job exists to upload. + bazel build --config=ci \ + --remote_download_outputs=toplevel \ + --action_env=MESON_FORCE_BACKTRACE=1 \ + "//${case}:${arch}_tarball" + cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" + done + done + - uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.artifact }} + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + run: + name: run (native ${{ matrix.arch }}) + needs: images + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.run-matrix) }} + runs-on: ${{ matrix.runner }} + steps: + - uses: actions/download-artifact@v4 + with: + name: ${{ inputs.artifact }} + path: images + - name: Run images on native ${{ matrix.arch }} + run: | + status=0 + for tar in images/*-${{ matrix.arch }}.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" From 22da005f9a7bc67219758282e13830b4ab88ce24 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 01:40:32 -0600 Subject: [PATCH 48/56] ci: gate test-all on the crossbuild pipelines, tolerating the darwin skip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous needs list referenced the pre-refactor job names (twice), which is a workflow startup error — the whole CI run failed to launch. test-all now needs the three reusable-workflow nodes and requires success from everything unconditional; crossbuild-darwin may be skipped (it only runs on main and '*macos*' branches) but must pass when it ran. --- .github/workflows/ci-workflows.yaml | 33 +++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 5c39371de..759e8d36c 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -171,21 +171,32 @@ jobs: test-all: name: test-all runs-on: ubuntu-latest - needs: [buildifier, gazelle, test, typecheck, crossbuild-run-arm64-built, crossbuild-run-arm64-built] + needs: [buildifier, gazelle, test, typecheck, crossbuild-amd64, crossbuild-arm64, crossbuild-darwin] if: always() steps: - name: All required jobs succeeded run: | - if [ "${{ needs.test.result }}" != "success" ]; then - echo "One or more test matrix jobs did not succeed: ${{ needs.test.result }}" - exit 1 - fi - if [ "${{ needs.typecheck.result }}" != "success" ]; then - echo "Typecheck did not succeed: ${{ needs.typecheck.result }}" - exit 1 - fi - - + for result in \ + "test=${{ needs.test.result }}" \ + "typecheck=${{ needs.typecheck.result }}" \ + "buildifier=${{ needs.buildifier.result }}" \ + "gazelle=${{ needs.gazelle.result }}" \ + "crossbuild-amd64=${{ needs['crossbuild-amd64'].result }}" \ + "crossbuild-arm64=${{ needs['crossbuild-arm64'].result }}"; do + if [ "${result#*=}" != "success" ]; then + echo "Required job did not succeed: ${result}" + exit 1 + fi + done + # crossbuild-darwin is gated to main and '*macos*' branches: + # skipped is expected elsewhere; anything that ran must pass. + case "${{ needs['crossbuild-darwin'].result }}" in + success|skipped) ;; + *) + echo "crossbuild-darwin did not succeed: ${{ needs['crossbuild-darwin'].result }}" + exit 1 + ;; + esac smoke: name: smoke (${{ matrix.workspace.path }}, macos) From 929e38d578b276a146c0e089f7491ef48993e085 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:00:38 -0600 Subject: [PATCH 49/56] =?UTF-8?q?refactor(e2e):=20move=20crossbuild=20exec?= =?UTF-8?q?ution=20off-host=20=E2=80=94=20native=20runners=20only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop every container_structure_test from e2e/crossbuild: they compiled and executed on the same host through a docker+QEMU sandwich, and the crossbuild-verify pipelines have superseded them — each case's OCI tarball is uploaded and `docker run` on native amd64 and arm64 runners, which is where execution verification now lives exclusively. geohash and zstandard gain the same {amd64,arm64}_load/_tarball targets the macro declares, so the builder's tarball query picks them up automatically; the amd64 pipeline now ships both arch sets (in-suite amd64 command tests were the only native amd64 execution before). `bazel test //...` in the workspace is structural-only (ELF arch, ABI tags, byte-diffs) and no longer needs docker at all. The container_structure_test dep is gone; uv_bin pin restored to 0.11.21, the only version pinned in versions.bzl. --- .github/workflows/ci-workflows.yaml | 188 ++++++++++++++---- .github/workflows/crossbuild-verify.yaml | 104 ---------- e2e/README.md | 8 +- e2e/crossbuild/MODULE.bazel | 3 +- e2e/crossbuild/MODULE.bazel.lock | 113 ----------- .../awkward_cpp_image_command_test.yaml | 9 - .../bcrypt/bcrypt_image_command_test.yaml | 9 - .../contourpy_image_command_test.yaml | 9 - e2e/crossbuild/geohash/BUILD.bazel | 45 +++-- .../geohash/geohash_image_command_test.yaml | 9 - .../jpype1/jpype1_image_command_test.yaml | 9 - .../msgpack/msgpack_image_command_test.yaml | 9 - .../numpy/numpy_image_command_test.yaml | 9 - .../psutil/psutil_image_command_test.yaml | 9 - .../pydantic_core_image_command_test.yaml | 9 - .../rpds_py/rpds_py_image_command_test.yaml | 9 - .../tiktoken/tiktoken_image_command_test.yaml | 10 - e2e/crossbuild/tools/cross_case.bzl | 61 ++---- e2e/crossbuild/zstandard/BUILD.bazel | 41 ++-- .../zstandard/zstandard_diff_test.yaml | 7 - 20 files changed, 224 insertions(+), 446 deletions(-) delete mode 100644 .github/workflows/crossbuild-verify.yaml delete mode 100644 e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml delete mode 100644 e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml delete mode 100644 e2e/crossbuild/contourpy/contourpy_image_command_test.yaml delete mode 100644 e2e/crossbuild/geohash/geohash_image_command_test.yaml delete mode 100644 e2e/crossbuild/jpype1/jpype1_image_command_test.yaml delete mode 100644 e2e/crossbuild/msgpack/msgpack_image_command_test.yaml delete mode 100644 e2e/crossbuild/numpy/numpy_image_command_test.yaml delete mode 100644 e2e/crossbuild/psutil/psutil_image_command_test.yaml delete mode 100644 e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml delete mode 100644 e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml delete mode 100644 e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml delete mode 100644 e2e/crossbuild/zstandard/zstandard_diff_test.yaml diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 759e8d36c..0a4d7dd7d 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -125,49 +125,157 @@ jobs: # workspaces, on main plus branches whose name contains 'macos'. # https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes - # Artifact-based cross verification: each crossbuild-* node below is one - # build->run pipeline from .github/workflows/crossbuild-verify.yaml — - # build OCI tarballs on one host, execute them on NATIVE runners per - # target arch. Directions: - # - amd64 builder (gcc_toolchain) -> native arm64 execution. Native amd64 - # execution is already covered by the e2e-crossbuild test job. - # - arm64 builder (llvm fallback; gcc_toolchain has no arm64-exec - # variant) -> native amd64 execution. Closes the linux<->linux cycle. - # - darwin builder (llvm; 10x-billed, gated like smoke) -> native amd64 + - # arm64. The macOS smoke job filters -requires-docker, so these are the - # only execution coverage the darwin->linux path has. - crossbuild-amd64: - uses: ./.github/workflows/crossbuild-verify.yaml - secrets: inherit - with: - builder-runner: ubuntu-22.04-32core - qemu-platforms: arm64 - archs: arm64 - artifact: crossbuild-images-amd64-built - run-matrix: '[{"runner": "ubuntu-24.04-arm", "arch": "arm64"}]' - crossbuild-arm64: - uses: ./.github/workflows/crossbuild-verify.yaml - secrets: inherit - with: - builder-runner: ubuntu-24.04-arm - qemu-platforms: amd64 - cases: psutil contourpy rpds_py - archs: amd64 - artifact: crossbuild-images-arm64-built - run-matrix: '[{"runner": "ubuntu-latest", "arch": "amd64"}]' - crossbuild-darwin: + crossbuild-images-darwin: + name: crossbuild-images (darwin builder) if: >- ${{ github.ref_name == 'main' || contains(github.head_ref || github.ref_name, 'macos') }} - uses: ./.github/workflows/crossbuild-verify.yaml - secrets: inherit - with: - builder-runner: macos-latest - setup: bazel - cases: psutil contourpy rpds_py - archs: amd64 arm64 - artifact: crossbuild-images-darwin-built - run-matrix: '[{"runner": "ubuntu-latest", "arch": "amd64"}, {"runner": "ubuntu-24.04-arm", "arch": "arm64"}]' + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 + with: + bazelisk-cache: true + disk-cache: macos-crossbuild-images + repository-cache: true + - name: Cross-build linux image tarballs from macOS + working-directory: e2e/crossbuild + shell: bash + run: | + mkdir -p "${RUNNER_TEMP}/images" + for case in psutil contourpy rpds_py; do + for arch in amd64 arm64; do + bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" + cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" + done + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-darwin + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-darwin-built: + name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) + needs: crossbuild-images-darwin + strategy: + fail-fast: false + matrix: + include: + - { runner: "ubuntu-latest", arch: "amd64" } + - { runner: "ubuntu-24.04-arm", arch: "arm64" } + runs-on: ${{ matrix.runner }} + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-darwin + path: images + - name: Run darwin-built images on native ${{ matrix.arch }} + run: | + status=0 + for tar in images/*-${{ matrix.arch }}.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" + + + crossbuild-images-amd64: + name: crossbuild-images (amd64 builder) + runs-on: ubuntu-22.04-32core + steps: + - uses: actions/checkout@v6 + - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 + with: + aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: arm64 + - name: Build arm64 image tarballs + working-directory: e2e/crossbuild + run: | + targets=$(bazel query 'filter(".*:arm64_tarball$", //...)') + bazel build ${targets} + mkdir -p "${RUNNER_TEMP}/images" + for target in ${targets}; do + case="${target#//}" + case="${case%:arm64_tarball}" + cp "bazel-bin/${case}/arm64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-arm64.tar" + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-arm64 + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-amd64-built: + name: crossbuild-run (native arm64) + needs: crossbuild-images-amd64 + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-arm64 + path: images + - name: Run every image on native arm64 + run: | + status=0 + for tar in images/*-arm64.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" + + + crossbuild-images-arm64: + name: crossbuild-images (arm64 builder) + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/checkout@v6 + - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 + with: + aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: amd64 + - name: Cross-build amd64 image tarballs from arm64 + working-directory: e2e/crossbuild + run: | + mkdir -p "${RUNNER_TEMP}/images" + for case in psutil contourpy rpds_py; do + # toplevel: build-without-the-bytes must still materialize + # the tarball this job exists to upload. + bazel build --config=ci --remote_download_outputs=toplevel "//${case}:amd64_tarball" + cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" + done + - uses: actions/upload-artifact@v4 + with: + name: crossbuild-images-arm-built + path: ${{ runner.temp }}/images/*.tar + retention-days: 1 + crossbuild-run-arm64-built: + name: crossbuild-run (arm-built, native amd64) + needs: crossbuild-images-arm64 + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + with: + name: crossbuild-images-arm-built + path: images + - name: Run arm-built images on native amd64 + run: | + status=0 + for tar in images/*-amd64.tar; do + tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') + echo "::group::${tag}" + docker run --rm "${tag}" || status=1 + echo "::endgroup::" + done + exit "${status}" + + test-all: name: test-all runs-on: ubuntu-latest diff --git a/.github/workflows/crossbuild-verify.yaml b/.github/workflows/crossbuild-verify.yaml deleted file mode 100644 index 3499d554d..000000000 --- a/.github/workflows/crossbuild-verify.yaml +++ /dev/null @@ -1,104 +0,0 @@ -name: crossbuild-verify - -# One build→run verification pipeline for e2e/crossbuild, reused per builder -# platform by ci-workflows.yaml. Builds OCI tarballs for the requested target -# arches on the given builder, uploads them, and executes each on NATIVE -# hardware — no QEMU in the execution loop (build-time meson probes may still -# need binfmt, hence qemu-platforms). -on: - workflow_call: - inputs: - builder-runner: - required: true - type: string - setup: - description: "'aspect' (Aspect CLI + remote cache) or 'bazel' (setup-bazel, for macOS)" - type: string - default: aspect - qemu-platforms: - description: binfmt platforms the builder needs for build-time probes - type: string - default: "" - cases: - description: space-separated case dirs; empty = every case exposing tarball targets - type: string - default: "" - archs: - description: space-separated target arches to build tarballs for - required: true - type: string - artifact: - required: true - type: string - run-matrix: - description: 'JSON include list of {runner, arch} native executors' - required: true - type: string - -jobs: - images: - runs-on: ${{ inputs.builder-runner }} - steps: - - uses: actions/checkout@v6 - - if: inputs.setup == 'aspect' - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 - with: - aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - - if: inputs.setup == 'bazel' - uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 - with: - bazelisk-cache: true - disk-cache: ${{ inputs.artifact }} - repository-cache: true - - if: inputs.qemu-platforms != '' - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - with: - platforms: ${{ inputs.qemu-platforms }} - - name: Build image tarballs - working-directory: e2e/crossbuild - shell: bash - run: | - mkdir -p "${RUNNER_TEMP}/images" - for arch in ${{ inputs.archs }}; do - cases="${{ inputs.cases }}" - if [ -z "${cases}" ]; then - cases=$(bazel query "filter(\".*:${arch}_tarball\$\", //...)" | sed -e 's|^//||' -e "s|:${arch}_tarball||") - fi - for case in ${cases}; do - # toplevel: build-without-the-bytes must still - # materialize the tarball this job exists to upload. - bazel build --config=ci \ - --remote_download_outputs=toplevel \ - --action_env=MESON_FORCE_BACKTRACE=1 \ - "//${case}:${arch}_tarball" - cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" - done - done - - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifact }} - path: ${{ runner.temp }}/images/*.tar - retention-days: 1 - run: - name: run (native ${{ matrix.arch }}) - needs: images - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(inputs.run-matrix) }} - runs-on: ${{ matrix.runner }} - steps: - - uses: actions/download-artifact@v4 - with: - name: ${{ inputs.artifact }} - path: images - - name: Run images on native ${{ matrix.arch }} - run: | - status=0 - for tar in images/*-${{ matrix.arch }}.tar; do - tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') - echo "::group::${tag}" - docker run --rm "${tag}" || status=1 - echo "::endgroup::" - done - exit "${status}" diff --git a/e2e/README.md b/e2e/README.md index a88516e7d..9f5508aaa 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -46,9 +46,11 @@ on rules_java's default remotejdk, which is actually Azul Zulu, or a system `ant`), two maturin/PyO3 Rust packages (`rpds_py`, `pydantic_core`), and `bcrypt` (setuptools-rust — a different real-world Rust-in-Python integration than maturin, with no build-backend value of its own to detect -it by). Every case is built and packaged for linux/amd64 and linux/arm64 -from the same amd64 exec host and actually executed — QEMU for the Linux -targets — not just inspected. The same workspace hosts the rules_pycross +it by). Every case is built and packaged for linux/amd64 and linux/arm64. +In-suite verification is structural (ELF arch, ABI tags, byte-diffs); +execution happens in CI's crossbuild-verify pipelines, which upload each +case's OCI tarball and `docker run` it on NATIVE amd64 and arm64 runners — +no emulation in the verdict. The same workspace hosts the rules_pycross ports (`pycross-*`), which force packages to build from their sdists and assert properties of the resulting wheels, including rebuilding them under non-host target platforms via `collect_wheels`. One more package diff --git a/e2e/crossbuild/MODULE.bazel b/e2e/crossbuild/MODULE.bazel index 80ff7ff4b..c18f84c04 100644 --- a/e2e/crossbuild/MODULE.bazel +++ b/e2e/crossbuild/MODULE.bazel @@ -9,7 +9,6 @@ bazel_dep(name = "gcc_toolchain", version = "0.11.0") bazel_dep(name = "llvm", version = "0.8.3") bazel_dep(name = "rules_oci", version = "2.2.7") bazel_dep(name = "rules_shell", version = "0.4.1") -bazel_dep(name = "container_structure_test", version = "1.22.1") bazel_dep(name = "rules_rust", version = "0.68.0") bazel_dep(name = "rules_java", version = "8.14.0") @@ -97,7 +96,7 @@ bazel_lib_toolchains = use_extension("@tar.bzl//tar:extensions.bzl", "toolchains use_repo(bazel_lib_toolchains, "bsd_tar_toolchains") uv_bin = use_extension("@aspect_rules_py//uv:extensions.bzl", "uv_bin") -uv_bin.toolchain(version = "0.11.6") +uv_bin.toolchain(version = "0.11.21") use_repo(uv_bin, "uv") uv = use_extension("@aspect_rules_py//uv:extensions.bzl", "uv") diff --git a/e2e/crossbuild/MODULE.bazel.lock b/e2e/crossbuild/MODULE.bazel.lock index d58d47c51..4992f0b38 100644 --- a/e2e/crossbuild/MODULE.bazel.lock +++ b/e2e/crossbuild/MODULE.bazel.lock @@ -60,8 +60,6 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/source.json": "7ad77c1e8c1b84222d9b3f3cae016a76639435744c19330b0b37c0a3c9da7dc0", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", - "https://bcr.bazel.build/modules/container_structure_test/1.22.1/MODULE.bazel": "da58a98f9f6d47e702532fdfec0431bd60e417d3f004471f409a4543cae0e61e", - "https://bcr.bazel.build/modules/container_structure_test/1.22.1/source.json": "75873f230014ff7a6f30e9f81b9e31ee4593c71353ffa8d5f8fe4ad4aba21160", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.1/MODULE.bazel": "cdf8cbe5ee750db04b78878c9633cc76e80dcf4416cbe982ac3a9222f80713c8", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.3/MODULE.bazel": "f1b7bb2dd53e8f2ef984b39485ec8a44e9076dda5c4b8efd2fb4c6a6e856a31d", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.7/MODULE.bazel": "1e5e03c383fa64ebbe0942a225c32168fd6ef6b270351bbec481d47d19d1b96d", @@ -242,117 +240,6 @@ ] } }, - "@@container_structure_test+//:repositories.bzl%extension": { - "general": { - "bzlTransitiveDigest": "Yi2XrRCMXgBjN02PBU8hDqf505D+o2Tr5jihM3CNIE4=", - "usagesDigest": "uXk1ym4ketE3OMAHoR5fUuuv8pOmi0aSyCe28koTwfA=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "jq_darwin_amd64": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "1.7" - } - }, - "jq_darwin_arm64": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "1.7" - } - }, - "jq_linux_amd64": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "1.7" - } - }, - "jq_linux_arm64": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "1.7" - } - }, - "jq_windows_amd64": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "1.7" - } - }, - "jq": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_host_alias_repo", - "attributes": {} - }, - "jq_toolchains": { - "repoRuleId": "@@aspect_bazel_lib+//lib/private:jq_toolchain.bzl%jq_toolchains_repo", - "attributes": { - "user_repository_name": "jq" - } - }, - "structure_test_st_darwin_amd64": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "darwin_amd64" - } - }, - "structure_test_st_darwin_arm64": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "darwin_arm64" - } - }, - "structure_test_st_linux_arm64": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "linux_arm64" - } - }, - "structure_test_st_linux_s390x": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "linux_s390x" - } - }, - "structure_test_st_linux_amd64": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "linux_amd64" - } - }, - "structure_test_st_windows_amd64": { - "repoRuleId": "@@container_structure_test+//:repositories.bzl%structure_test_repositories", - "attributes": { - "platform": "windows_amd64" - } - }, - "structure_test_toolchains": { - "repoRuleId": "@@container_structure_test+//bazel:toolchains_repo.bzl%toolchains_repo", - "attributes": { - "toolchain_type": "@container_structure_test//bazel:structure_test_toolchain_type", - "toolchain": "@structure_test_st_{platform}//:structure_test_toolchain" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "aspect_bazel_lib+", - "bazel_tools", - "bazel_tools" - ], - [ - "container_structure_test+", - "aspect_bazel_lib", - "aspect_bazel_lib+" - ] - ] - } - }, "@@gcc_toolchain+//:internal.bzl%non_bazel_dependencies": { "general": { "bzlTransitiveDigest": "hmUGYjMm3KwHvLCbnHLlUJifQF92hJY/BW858Vkjzr8=", diff --git a/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml b/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml deleted file mode 100644 index 02721d4ed..000000000 --- a/e2e/crossbuild/awkward_cpp/awkward_cpp_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# awkward_cpp_main.py asserts the exact null count itself and only prints -# "OK" on success. -commandTests: - - name: awkward_IndexedArray_numnull counts correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml b/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml deleted file mode 100644 index eb9fa7ad5..000000000 --- a/e2e/crossbuild/bcrypt/bcrypt_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# bcrypt_main.py asserts the hashpw/checkpw round-trip itself and only -# prints "OK" on success. -commandTests: - - name: bcrypt hashpw/checkpw round-trips correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml b/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml deleted file mode 100644 index 7d8f5c80c..000000000 --- a/e2e/crossbuild/contourpy/contourpy_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# contourpy_main.py asserts the exact 1.5-contour of z=x+y itself and only -# prints "OK" on success. -commandTests: - - name: contourpy computes the 1.5 contour of z=x+y correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/geohash/BUILD.bazel b/e2e/crossbuild/geohash/BUILD.bazel index a31ea998e..5866b7e23 100644 --- a/e2e/crossbuild/geohash/BUILD.bazel +++ b/e2e/crossbuild/geohash/BUILD.bazel @@ -6,8 +6,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") load("@bazel_lib//lib:transitions.bzl", "platform_transition_binary", "platform_transition_filegroup") load("@bazel_skylib//rules:build_test.bzl", "build_test") -load("@container_structure_test//:defs.bzl", "container_structure_test") -load("@rules_oci//oci:defs.bzl", "oci_image") +load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load") load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//tools:checks.bzl", "assert_so_arch", "assert_so_suffix") @@ -105,27 +104,35 @@ platform_transition_filegroup( target_platform = "//:arm64_linux", ) -container_structure_test( - name = "geohash_amd64_image_command_test", - configs = ["geohash_image_command_test.yaml"], +# Execution happens in CI's crossbuild-verify pipelines on NATIVE runners +# (amd64 and arm64) — geohash_main.py asserts the exact encoded value and +# exits nonzero on mismatch, so `docker run` exit status is the verdict. +oci_load( + name = "amd64_load", image = ":geohash_amd64_image", - platform = "linux/amd64", - tags = ["requires-docker"], + repo_tags = ["crossbuild/geohash:amd64"], + tags = ["manual"], ) -# Runs the arm64 build under QEMU (binfmt_misc) instead of just checking its -# ELF/suffix — proves the extension computes the right answer, not just that -# it looks cross-compiled. Local repro: sudo apt-get install qemu-user-static -# binfmt-support. -container_structure_test( - name = "geohash_arm64_image_command_test", - configs = ["geohash_image_command_test.yaml"], +filegroup( + name = "amd64_tarball", + srcs = [":amd64_load"], + output_group = "tarball", + tags = ["manual"], +) + +oci_load( + name = "arm64_load", image = ":geohash_arm64_image", - platform = "linux/aarch64", - tags = [ - "requires-docker", - "requires-qemu", - ], + repo_tags = ["crossbuild/geohash:arm64"], + tags = ["manual"], +) + +filegroup( + name = "arm64_tarball", + srcs = [":arm64_load"], + output_group = "tarball", + tags = ["manual"], ) # geohash_bin with no platform override already targets the ambient host, diff --git a/e2e/crossbuild/geohash/geohash_image_command_test.yaml b/e2e/crossbuild/geohash/geohash_image_command_test.yaml deleted file mode 100644 index 075bf6ec9..000000000 --- a/e2e/crossbuild/geohash/geohash_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# geohash.encode(37.7749, -122.4194) is deterministic across architectures; -# geohash_main.py asserts the exact value and only prints "OK" on success. -commandTests: - - name: geohash encodes correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml b/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml deleted file mode 100644 index fdc4cdcd7..000000000 --- a/e2e/crossbuild/jpype1/jpype1_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# jpype1_main.py asserts jpype.__version__ itself and only prints "OK" on -# success. -commandTests: - - name: jpype1 imports successfully after an Ant + JNI cross build - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml b/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml deleted file mode 100644 index b4d9efcdb..000000000 --- a/e2e/crossbuild/msgpack/msgpack_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# msgpack_main.py asserts a real pack/unpack round-trip through the compiled -# _cmsgpack extension itself and only prints "OK" on success. -commandTests: - - name: msgpack round-trips a nested structure correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/numpy/numpy_image_command_test.yaml b/e2e/crossbuild/numpy/numpy_image_command_test.yaml deleted file mode 100644 index f0445d0f4..000000000 --- a/e2e/crossbuild/numpy/numpy_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# numpy_main.py asserts real elementwise arithmetic and a no-BLAS matmul -# fallback through the compiled core itself and only prints "OK" on success. -commandTests: - - name: numpy computes elementwise arithmetic and a no-BLAS matmul correctly - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/psutil/psutil_image_command_test.yaml b/e2e/crossbuild/psutil/psutil_image_command_test.yaml deleted file mode 100644 index 252f3a096..000000000 --- a/e2e/crossbuild/psutil/psutil_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# psutil_main.py asserts real cpu/memory info from its compiled Linux -# backend itself and only prints "OK" on success. -commandTests: - - name: psutil reads real cpu/memory info through its compiled backend - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml b/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml deleted file mode 100644 index 5428f90b2..000000000 --- a/e2e/crossbuild/pydantic_core/pydantic_core_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# pydantic_core_main.py asserts the coerced int value itself and only -# prints "OK" on success. -commandTests: - - name: pydantic-core validates and coerces a string to int - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml b/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml deleted file mode 100644 index 1cd919c2d..000000000 --- a/e2e/crossbuild/rpds_py/rpds_py_image_command_test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -schemaVersion: 2.0.0 - -# rpds_py_main.py asserts rpds.List([1,2,3]).push_front(0)'s exact iteration -# order itself and only prints "OK" on success. -commandTests: - - name: rpds-py List.push_front computes the correct order - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml b/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml deleted file mode 100644 index 59b81cd1a..000000000 --- a/e2e/crossbuild/tiktoken/tiktoken_image_command_test.yaml +++ /dev/null @@ -1,10 +0,0 @@ -schemaVersion: 2.0.0 - -# tiktoken_main.py asserts a real encode/decode round-trip through the -# compiled Rust core (_tiktoken.CoreBPE) itself and only prints "OK" on -# success. -commandTests: - - name: tiktoken encodes and decodes through its compiled Rust core - exitCode: 0 - command: /app - expectedOutput: ["OK"] diff --git a/e2e/crossbuild/tools/cross_case.bzl b/e2e/crossbuild/tools/cross_case.bzl index 49d4aca32..746561046 100644 --- a/e2e/crossbuild/tools/cross_case.bzl +++ b/e2e/crossbuild/tools/cross_case.bzl @@ -1,30 +1,27 @@ -"""Shared scaffolding for a "build one real package for amd64+arm64, then -actually run it" e2e/crossbuild case. - -Every case here cross-compiles a package from the same amd64 exec host for -linux/amd64 and linux/arm64, then runs both — QEMU for arm64 — via -container_structure_test, plus a per-arch structural check (ELF machine, -and, where the .so's own filename carries one, its cpython ABI tag). This -macro is the ~90 lines every case shared verbatim; anything genuinely -case-specific (extra data deps, a diff-against-a-reference-wheel test -instead of a command test, macOS coverage) stays hand-written — see -//geohash and //zstandard, which aren't built from this macro for exactly -that reason. +"""Shared scaffolding for a "build one real package for amd64+arm64" case. + +Every case cross-compiles a package for linux/amd64 and linux/arm64 and +asserts structure in-suite (ELF machine, and, where the .so's filename +carries one, its cpython ABI tag). Execution is deliberately NOT part of +`bazel test //...`: the docker-loadable tarballs declared here are built by +CI's crossbuild-verify pipelines, uploaded, and run on NATIVE hardware per +target arch — no same-host docker+QEMU sandwich. This macro is the lines +every case shared verbatim; anything genuinely case-specific stays +hand-written — see //geohash and //zstandard. """ load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -load("@container_structure_test//:defs.bzl", "container_structure_test") load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load") load(":checks.bzl", "assert_so_arch", "assert_so_suffix") -def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = None, dep_group = None, image_command_test_config = None): +def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = None, dep_group = None): """Declares the amd64/arm64 build+run scaffolding for one e2e/crossbuild package. Produces (all unprefixed, matching the package's own BUILD.bazel): "_bin", "layers", "{amd64,arm64}_layers", "_so_arch_{amd64,arm64}_test", "_so_suffix_{amd64,arm64}_test" (if check_so_suffix), "image", - "{amd64,arm64}_image", "{amd64,arm64}_command_test". + "{amd64,arm64}_image", "{amd64,arm64}_load", "{amd64,arm64}_tarball". Args: name: the package's own directory/case name, e.g. "bcrypt". Only @@ -42,12 +39,9 @@ def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = Non (jpype1's _jpype.so). main: py_binary's main/srcs file; defaults to "_main.py". dep_group: py_binary's dep_group; defaults to "crossbuild_". - image_command_test_config: the container_structure_test YAML; - defaults to "_image_command_test.yaml". """ main = main or (name + "_main.py") dep_group = dep_group or ("crossbuild_" + name) - image_command_test_config = image_command_test_config or (name + "_image_command_test.yaml") py_binary( name = name + "_bin", @@ -123,12 +117,12 @@ def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = Non target_platform = "//:arm64_linux", ) - # Docker-loadable tarballs for the artifact-based CI jobs: a builder job - # `bazel build`s these, uploads them, and native amd64/arm64 runner jobs - # `docker load` + `docker run` them on real hardware (no QEMU). Tagged - # manual: under plain `//...` they would only repackage what the - # container_structure_tests already cover on this host. The repo_tag is - # what the runner job executes, so it must stay `crossbuild/:`. + # Docker-loadable tarballs consumed by CI's crossbuild-verify pipelines: + # a builder job `bazel build`s these, uploads them, and native + # amd64/arm64 runner jobs `docker load` + `docker run` them on real + # hardware. This is the ONLY execution verification for these cases. + # Tagged manual: repackaging is dead weight under plain `//...`. The + # repo_tag is what the runner executes: `crossbuild/:`. for arch in ("amd64", "arm64"): oci_load( name = arch + "_load", @@ -143,22 +137,3 @@ def pep517_cross_case(name, deps, so_pattern, check_so_suffix = True, main = Non output_group = "tarball", tags = ["manual"], ) - - container_structure_test( - name = "amd64_command_test", - configs = [image_command_test_config], - image = ":amd64_image", - platform = "linux/amd64", - tags = ["requires-docker"], - ) - - container_structure_test( - name = "arm64_command_test", - configs = [image_command_test_config], - image = ":arm64_image", - platform = "linux/aarch64", - tags = [ - "requires-docker", - "requires-qemu", - ], - ) diff --git a/e2e/crossbuild/zstandard/BUILD.bazel b/e2e/crossbuild/zstandard/BUILD.bazel index 9ebfd0bab..74c9c3d0f 100644 --- a/e2e/crossbuild/zstandard/BUILD.bazel +++ b/e2e/crossbuild/zstandard/BUILD.bazel @@ -5,8 +5,7 @@ load("@aspect_rules_py//py:defs.bzl", "py_binary", "py_image_layer") load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") -load("@container_structure_test//:defs.bzl", "container_structure_test") -load("@rules_oci//oci:defs.bzl", "oci_image") +load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load") load("//tools:checks.bzl", "assert_so_arch", "assert_so_suffix") # Matches only our own build's backend_c.so (installed under a @@ -97,21 +96,33 @@ platform_transition_filegroup( target_platform = "//:arm64_linux", ) -container_structure_test( - name = "amd64_diff_test", - configs = ["zstandard_diff_test.yaml"], +# Execution happens in CI's crossbuild-verify pipelines on native runners: +# the entrypoint diffs our cross-compiled backend against the official +# wheels byte-for-byte and exits nonzero on any mismatch. +oci_load( + name = "amd64_load", image = ":amd64_image", - platform = "linux/amd64", - tags = ["requires-docker"], + repo_tags = ["crossbuild/zstandard:amd64"], + tags = ["manual"], ) -container_structure_test( - name = "arm64_diff_test", - configs = ["zstandard_diff_test.yaml"], +filegroup( + name = "amd64_tarball", + srcs = [":amd64_load"], + output_group = "tarball", + tags = ["manual"], +) + +oci_load( + name = "arm64_load", image = ":arm64_image", - platform = "linux/aarch64", - tags = [ - "requires-docker", - "requires-qemu", - ], + repo_tags = ["crossbuild/zstandard:arm64"], + tags = ["manual"], +) + +filegroup( + name = "arm64_tarball", + srcs = [":arm64_load"], + output_group = "tarball", + tags = ["manual"], ) diff --git a/e2e/crossbuild/zstandard/zstandard_diff_test.yaml b/e2e/crossbuild/zstandard/zstandard_diff_test.yaml deleted file mode 100644 index 7eb22a14e..000000000 --- a/e2e/crossbuild/zstandard/zstandard_diff_test.yaml +++ /dev/null @@ -1,7 +0,0 @@ -schemaVersion: 2.0.0 - -commandTests: - - name: cross-compiled zstandard matches the official wheel - exitCode: 0 - command: /app - expectedOutput: ["PASS: identical compressed output, cross-decompression OK"] From d25f1daadc3e84dc1bf76821863d689a262f7e47 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:02:00 -0600 Subject: [PATCH 50/56] refining github workflow --- .github/workflows/ci-workflows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 0a4d7dd7d..bc6a37a94 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -279,7 +279,7 @@ jobs: test-all: name: test-all runs-on: ubuntu-latest - needs: [buildifier, gazelle, test, typecheck, crossbuild-amd64, crossbuild-arm64, crossbuild-darwin] + needs: [buildifier, gazelle, test, typecheck, crossbuild-run-amd64-built, crossbuild-run-arm64-built, crossbuild-run-darwin-built] if: always() steps: - name: All required jobs succeeded From dc6e2ba7ede402cbdcdc2b9dcc7af086be7af86d Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:02:38 -0600 Subject: [PATCH 51/56] ci: repair test-all gating and restore native amd64 execution coverage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test-all's needs pointed at the reusable-workflow job names that the flat-jobs rework removed — a workflow startup error. It now gates on the three crossbuild-run jobs, tolerating the skip of the gated darwin one. With the in-suite container tests gone, the amd64 builder was uploading arm64 tarballs only, leaving the macro cases without native amd64 execution — it now ships both arch sets (with toplevel output materialization) and its run job fans out to native amd64 and arm64 runners, mirroring the darwin pipeline's shape. --- .github/workflows/ci-workflows.yaml | 47 +++++++++++++++++------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index bc6a37a94..fb923cf43 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -189,45 +189,54 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} + # arm64 binfmt for meson's build-time probes only; execution is + # native on the runner jobs below. - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 with: platforms: arm64 - - name: Build arm64 image tarballs + - name: Build amd64+arm64 image tarballs working-directory: e2e/crossbuild run: | - targets=$(bazel query 'filter(".*:arm64_tarball$", //...)') - bazel build ${targets} mkdir -p "${RUNNER_TEMP}/images" - for target in ${targets}; do - case="${target#//}" - case="${case%:arm64_tarball}" - cp "bazel-bin/${case}/arm64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-arm64.tar" + for arch in amd64 arm64; do + targets=$(bazel query "filter(\".*:${arch}_tarball\$\", //...)") + bazel build --remote_download_outputs=toplevel ${targets} + for target in ${targets}; do + case="${target#//}" + case="${case%:${arch}_tarball}" + cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" + done done - uses: actions/upload-artifact@v4 with: - name: crossbuild-images-arm64 + name: crossbuild-images-amd64-built path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-amd64-built: - name: crossbuild-run (native arm64) + name: crossbuild-run (amd64-built, native ${{ matrix.arch }}) needs: crossbuild-images-amd64 - runs-on: ubuntu-24.04-arm + strategy: + fail-fast: false + matrix: + include: + - { runner: "ubuntu-latest", arch: "amd64" } + - { runner: "ubuntu-24.04-arm", arch: "arm64" } + runs-on: ${{ matrix.runner }} steps: - uses: actions/download-artifact@v4 with: - name: crossbuild-images-arm64 + name: crossbuild-images-amd64-built path: images - - name: Run every image on native arm64 + - name: Run amd64-built images on native ${{ matrix.arch }} run: | status=0 - for tar in images/*-arm64.tar; do + for tar in images/*-${{ matrix.arch }}.tar; do tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') echo "::group::${tag}" docker run --rm "${tag}" || status=1 echo "::endgroup::" done exit "${status}" - crossbuild-images-arm64: name: crossbuild-images (arm64 builder) @@ -289,19 +298,19 @@ jobs: "typecheck=${{ needs.typecheck.result }}" \ "buildifier=${{ needs.buildifier.result }}" \ "gazelle=${{ needs.gazelle.result }}" \ - "crossbuild-amd64=${{ needs['crossbuild-amd64'].result }}" \ - "crossbuild-arm64=${{ needs['crossbuild-arm64'].result }}"; do + "crossbuild-run-amd64-built=${{ needs['crossbuild-run-amd64-built'].result }}" \ + "crossbuild-run-arm64-built=${{ needs['crossbuild-run-arm64-built'].result }}"; do if [ "${result#*=}" != "success" ]; then echo "Required job did not succeed: ${result}" exit 1 fi done - # crossbuild-darwin is gated to main and '*macos*' branches: + # The darwin pipeline is gated to main and '*macos*' branches: # skipped is expected elsewhere; anything that ran must pass. - case "${{ needs['crossbuild-darwin'].result }}" in + case "${{ needs['crossbuild-run-darwin-built'].result }}" in success|skipped) ;; *) - echo "crossbuild-darwin did not succeed: ${{ needs['crossbuild-darwin'].result }}" + echo "crossbuild-run-darwin-built did not succeed: ${{ needs['crossbuild-run-darwin-built'].result }}" exit 1 ;; esac From fd8f3ef157fde884f55a5da75c3fb34c0ebea12a Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:11:23 -0600 Subject: [PATCH 52/56] refining github workflow --- .github/workflows/ci-workflows.yaml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index fb923cf43..d6806066f 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -126,7 +126,7 @@ jobs: # https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes crossbuild-images-darwin: - name: crossbuild-images (darwin builder) + name: build on darwin if: >- ${{ github.ref_name == 'main' || contains(github.head_ref || github.ref_name, 'macos') }} @@ -155,7 +155,7 @@ jobs: path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-darwin-built: - name: crossbuild-run (darwin-built, native ${{ matrix.arch }}) + name: run on linux ${{ matrix.arch }}) needs: crossbuild-images-darwin strategy: fail-fast: false @@ -182,15 +182,13 @@ jobs: crossbuild-images-amd64: - name: crossbuild-images (amd64 builder) + name: build on linux amd64 runs-on: ubuntu-22.04-32core steps: - uses: actions/checkout@v6 - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - # arm64 binfmt for meson's build-time probes only; execution is - # native on the runner jobs below. - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 with: platforms: arm64 @@ -213,7 +211,7 @@ jobs: path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-amd64-built: - name: crossbuild-run (amd64-built, native ${{ matrix.arch }}) + name: run on linux ${{ matrix.arch }}) needs: crossbuild-images-amd64 strategy: fail-fast: false @@ -239,7 +237,7 @@ jobs: exit "${status}" crossbuild-images-arm64: - name: crossbuild-images (arm64 builder) + name: build on linux arm64 runs-on: ubuntu-24.04-arm steps: - uses: actions/checkout@v6 @@ -265,7 +263,7 @@ jobs: path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-arm64-built: - name: crossbuild-run (arm-built, native amd64) + name: run on linux amd64 needs: crossbuild-images-arm64 runs-on: ubuntu-latest steps: From add21637c54cd398f58103ab6aaf99e645c02587 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:14:21 -0600 Subject: [PATCH 53/56] =?UTF-8?q?ci:=20make=20the=20amd64=20pipeline=20ful?= =?UTF-8?q?ly=20native=20=E2=80=94=20one=20builder,=20one=20runner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crossbuild-images-amd64 builds only the amd64 tarballs (native builds: no cross machinery, no binfmt, no QEMU step) and a single crossbuild-run-amd64-built job executes the artifact on a separate native amd64 machine. arm64-target coverage from this host moves entirely to the other pipeline directions. --- .github/workflows/ci-workflows.yaml | 35 +++++++++++------------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index d6806066f..db1da16f1 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -189,21 +189,18 @@ jobs: - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - with: - platforms: arm64 - - name: Build amd64+arm64 image tarballs + # amd64 targets on an amd64 host: fully native builds — no cross + # machinery, no QEMU anywhere in this pipeline. + - name: Build amd64 image tarballs working-directory: e2e/crossbuild run: | mkdir -p "${RUNNER_TEMP}/images" - for arch in amd64 arm64; do - targets=$(bazel query "filter(\".*:${arch}_tarball\$\", //...)") - bazel build --remote_download_outputs=toplevel ${targets} - for target in ${targets}; do - case="${target#//}" - case="${case%:${arch}_tarball}" - cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" - done + targets=$(bazel query 'filter(".*:amd64_tarball$", //...)') + bazel build --remote_download_outputs=toplevel ${targets} + for target in ${targets}; do + case="${target#//}" + case="${case%:amd64_tarball}" + cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" done - uses: actions/upload-artifact@v4 with: @@ -211,24 +208,18 @@ jobs: path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-amd64-built: - name: run on linux ${{ matrix.arch }}) + name: run amd64-built images on native amd64 needs: crossbuild-images-amd64 - strategy: - fail-fast: false - matrix: - include: - - { runner: "ubuntu-latest", arch: "amd64" } - - { runner: "ubuntu-24.04-arm", arch: "arm64" } - runs-on: ${{ matrix.runner }} + runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v4 with: name: crossbuild-images-amd64-built path: images - - name: Run amd64-built images on native ${{ matrix.arch }} + - name: Run amd64-built images on native amd64 run: | status=0 - for tar in images/*-${{ matrix.arch }}.tar; do + for tar in images/*-amd64.tar; do tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') echo "::group::${tag}" docker run --rm "${tag}" || status=1 From c22820dd7325853ff36a3d5ab5f172a620719152 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:27:00 -0600 Subject: [PATCH 54/56] ci: the amd64 pipeline cross-builds for arm64 and runs on native arm64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The point of this direction is empirical cross-compilation validation: build every case's arm64 image on the amd64 host (binfmt present only for meson's build-time probes) and execute the artifact on a native arm64 runner — one builder job, one runner job. --- .github/workflows/ci-workflows.yaml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index db1da16f1..6606242c4 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -182,25 +182,29 @@ jobs: crossbuild-images-amd64: - name: build on linux amd64 + name: cross-build arm64 images on linux amd64 runs-on: ubuntu-22.04-32core steps: - uses: actions/checkout@v6 - uses: aspect-build/setup-aspect@c22a8f64fb38f82f59ce809cd7eb9f8ae096da44 # v2026.23.2 with: aspect-api-token: ${{ secrets.ASPECT_API_TOKEN }} - # amd64 targets on an amd64 host: fully native builds — no cross - # machinery, no QEMU anywhere in this pipeline. - - name: Build amd64 image tarballs + # binfmt for meson's build-time probes only (sanity checks and + # cc.run() execute target-arch binaries mid-build); the actual + # execution verdict comes from the native arm64 runner below. + - uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 + with: + platforms: arm64 + - name: Cross-build arm64 image tarballs working-directory: e2e/crossbuild run: | mkdir -p "${RUNNER_TEMP}/images" - targets=$(bazel query 'filter(".*:amd64_tarball$", //...)') + targets=$(bazel query 'filter(".*:arm64_tarball$", //...)') bazel build --remote_download_outputs=toplevel ${targets} for target in ${targets}; do case="${target#//}" - case="${case%:amd64_tarball}" - cp "bazel-bin/${case}/amd64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-amd64.tar" + case="${case%:arm64_tarball}" + cp "bazel-bin/${case}/arm64_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-arm64.tar" done - uses: actions/upload-artifact@v4 with: @@ -208,18 +212,18 @@ jobs: path: ${{ runner.temp }}/images/*.tar retention-days: 1 crossbuild-run-amd64-built: - name: run amd64-built images on native amd64 + name: run amd64-built images on native arm64 needs: crossbuild-images-amd64 - runs-on: ubuntu-latest + runs-on: ubuntu-24.04-arm steps: - uses: actions/download-artifact@v4 with: name: crossbuild-images-amd64-built path: images - - name: Run amd64-built images on native amd64 + - name: Run amd64-built images on native arm64 run: | status=0 - for tar in images/*-amd64.tar; do + for tar in images/*-arm64.tar; do tag=$(docker load -i "${tar}" | sed -n 's/^Loaded image: //p') echo "::group::${tag}" docker run --rm "${tag}" || status=1 From 617dc74a95dc6a992a0d9563631705a291997e22 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:37:21 -0600 Subject: [PATCH 55/56] ci: materialize tarballs on the darwin builder too Same build-without-the-bytes failure the arm64 builder hit: with --config=ci, disk-cache hits leave the tarball unmaterialized and the cp fails. toplevel downloads fix it, as on the other builders. --- .github/workflows/ci-workflows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 6606242c4..1d467f819 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -145,7 +145,7 @@ jobs: mkdir -p "${RUNNER_TEMP}/images" for case in psutil contourpy rpds_py; do for arch in amd64 arm64; do - bazel build --config=ci --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" + bazel build --config=ci --remote_download_outputs=toplevel --action_env=MESON_FORCE_BACKTRACE=1 "//${case}:${arch}_tarball" cp "bazel-bin/${case}/${arch}_load/tarball.tar" "${RUNNER_TEMP}/images/${case}-${arch}.tar" done done From 66ae3ac84b160a12fcc9f5562c7aefcfc890b183 Mon Sep 17 00:00:00 2001 From: xangcastle Date: Fri, 14 Aug 2026 02:42:16 -0600 Subject: [PATCH 56/56] refining github workflow --- .github/workflows/ci-workflows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflows.yaml b/.github/workflows/ci-workflows.yaml index 1d467f819..ee25b63b6 100644 --- a/.github/workflows/ci-workflows.yaml +++ b/.github/workflows/ci-workflows.yaml @@ -281,7 +281,7 @@ jobs: test-all: name: test-all runs-on: ubuntu-latest - needs: [buildifier, gazelle, test, typecheck, crossbuild-run-amd64-built, crossbuild-run-arm64-built, crossbuild-run-darwin-built] + needs: [buildifier, gazelle, typecheck, crossbuild-run-amd64-built, crossbuild-run-arm64-built, crossbuild-run-darwin-built] if: always() steps: - name: All required jobs succeeded