diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a6bdf0a96..ab1b823211 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -107,6 +107,8 @@ END_UNRELEASED_TEMPLATE Set the `RULES_PYTHON_ENABLE_PIPSTAR=1` environment variable to enable it. * (utils) Add a way to run a REPL for any `rules_python` target that returns a `PyInfo` provider. +* (pypi) Added early developer preview `pip.default` tag class in order to customize what + platforms are enabled. Only `rules_python` and root modules can use this feature. {#v0-0-0-removed} ### Removed diff --git a/MODULE.bazel b/MODULE.bazel index d3a95350e5..ea9750fe4b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -56,10 +56,87 @@ use_repo( # This call registers the Python toolchains. register_toolchains("@pythons_hub//:all") +# Let's define default platforms for our users first +pip = use_extension("//python/extensions:pip.bzl", "pip") + +[ + pip.default( + arch_name = cpu, + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:{}".format(cpu), + ], + env_platform_version = "0", + os_name = "linux", + platform = "linux_{}".format(cpu), + whl_platforms = [ + # this is by the order of preference. + # TODO @aignas 2025-05-23: how do we specify the default libc version? + "manylinux_*_{}".format(cpu), + "linux_*_{}".format(cpu), + "musllinux_*_{}".format(cpu), + ], + ) + for cpu in [ + "x86_64", + "aarch64", + # TODO @aignas 2025-05-19: only leave tier 0-1 cpus when stabilizing the + # `pip.default` extension. i.e. drop the below values - users will have to + # define themselves if they need them. + "arm", + "ppc", + "ppc64le", + "s390x", + ] +] + +[ + pip.default( + arch_name = cpu, + constraint_values = [ + "@platforms//os:osx", + "@platforms//cpu:{}".format(cpu), + ], + # We choose the oldest non-EOL version at the time when we release `rules_python`. + # See https://endoflife.date/macos + env_platform_version = "14.0", + os_name = "osx", + platform = "osx_{}".format(cpu), + whl_platforms = [ + # TODO @aignas 2025-05-23: how do we specify the default osx version? + "macosx_*_{}".format(wheel_cpu) + for wheel_cpu in wheel_cpu_values + ], + ) + for cpu, wheel_cpu_values in { + # this is by the order of preference. + "aarch64": [ + "arm64", + "universal2", + ], + "x86_64": [ + "x86_64", + "universal2", + "intel", + ], + }.items() +] + +pip.default( + arch_name = "x86_64", + constraint_values = [ + "@platforms//os:windows", + "@platforms//cpu:x86_64", + ], + env_platform_version = "0", + os_name = "windows", + platform = "windows_x86_64", + whl_platforms = ["win_amd64"], +) + ##################### -# Install twine for our own runfiles wheel publishing and allow bzlmod users to use it. +# Then install twine for our own runfiles wheel publishing and allow bzlmod users to use it. -pip = use_extension("//python/extensions:pip.bzl", "pip") pip.parse( # NOTE @aignas 2024-10-26: We have an integration test that depends on us # being able to build sdists for this hub, so explicitly set this to False. diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock new file mode 100644 index 0000000000..d0b1b70455 --- /dev/null +++ b/MODULE.bazel.lock @@ -0,0 +1,4041 @@ +{ + "lockFileVersion": 18, + "registryFileHashes": { + "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", + "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", + "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", + "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/bazel_ci_rules/1.0.0/MODULE.bazel": "0f92c944b9c466066ed484cfc899cf43fca765df78caca18984c62479f7925eb", + "https://bcr.bazel.build/modules/bazel_ci_rules/1.0.0/source.json": "3405a2a7f9f827a44934b01470faeac1b56fb1304955c98ee9fcd03ad2ca5dcc", + "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", + "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "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", + "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", + "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.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", + "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", + "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", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", + "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", + "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.0.0.1/MODULE.bazel": "5d23708e6a5527ab4f151da7accabc22808cb5fb579c8cc4cd4a292da57a5c97", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/MODULE.bazel": "2ef4962c8b0b6d8d21928a89190755619254459bc67f870dc0ccb9ba9952d444", + "https://bcr.bazel.build/modules/buildifier_prebuilt/6.1.2/source.json": "19fb45ed3f0d55cbff94e402c39512940833ae3a68f9cbfd9518a1926b609c7c", + "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/cgrindel_bazel_starlib/0.18.0/MODULE.bazel": "1d548f0c383ec8fce15c14b42b7f5f4fc29e910fb747d54b40d8c949a5dea09c", + "https://bcr.bazel.build/modules/cgrindel_bazel_starlib/0.18.0/source.json": "bb5421fffcf03965cb192a7dfa857c4cfc2d5ed7788d8b97da30f6b9d5706c9e", + "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", + "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", + "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", + "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", + "https://bcr.bazel.build/modules/gazelle/0.40.0/MODULE.bazel": "42ba5378ebe845fca43989a53186ab436d956db498acde790685fe0e8f9c6146", + "https://bcr.bazel.build/modules/gazelle/0.40.0/source.json": "1e5ef6e4d8b9b6836d93273c781e78ff829ea2e077afef7a57298040fa4f010a", + "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", + "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", + "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", + "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/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", + "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", + "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", + "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/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", + "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", + "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e", + "https://bcr.bazel.build/modules/protobuf/29.0/source.json": "b857f93c796750eef95f0d61ee378f3420d00ee1dd38627b27193aa482f4f981", + "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/3.19.2/MODULE.bazel": "532ffe5f2186b69fdde039efe6df13ba726ff338c6bc82275ad433013fa10573", + "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", + "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", + "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4", + "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", + "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_bazel_integration_test/0.27.0/MODULE.bazel": "66b85a47d4aa51686c3e43befc7442b5be84415b12296954929ba199d46823be", + "https://bcr.bazel.build/modules/rules_bazel_integration_test/0.27.0/source.json": "28bd34e4cbbe78a826aa513cf555d9cb52f0fe589b64d20ca812b8e3fbca572f", + "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", + "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", + "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/source.json": "4db99b3f55c90ab28d14552aa0632533e3e8e5e9aea0f5c24ac0014282c2a7c5", + "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", + "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", + "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "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", + "https://bcr.bazel.build/modules/rules_go/0.41.0/MODULE.bazel": "55861d8e8bb0e62cbd2896f60ff303f62ffcb0eddb74ecb0e5c0cbe36fc292c8", + "https://bcr.bazel.build/modules/rules_go/0.42.0/MODULE.bazel": "8cfa875b9aa8c6fce2b2e5925e73c1388173ea3c32a0db4d2b4804b453c14270", + "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd", + "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0", + "https://bcr.bazel.build/modules/rules_go/0.50.1/source.json": "205765fd30216c70321f84c9a967267684bdc74350af3f3c46c857d9f80a4fa2", + "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", + "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", + "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", + "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", + "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", + "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", + "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", + "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", + "https://bcr.bazel.build/modules/rules_java/8.11.0/MODULE.bazel": "c3d280bc5ff1038dcb3bacb95d3f6b83da8dd27bba57820ec89ea4085da767ad", + "https://bcr.bazel.build/modules/rules_java/8.11.0/source.json": "302b52a39259a85aa06ca3addb9787864ca3e03b432a5f964ea68244397e7544", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", + "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", + "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", + "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.4/MODULE.bazel": "6a88dd22800cf1f9f79ba32cacad0d3a423ed28efa2c2ed5582eaa78dd3ac1e5", + "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_multirun/0.9.0/MODULE.bazel": "32d628ef586b5b23f67e55886b7bc38913ea4160420d66ae90521dda2ff37df0", + "https://bcr.bazel.build/modules/rules_multirun/0.9.0/source.json": "e882ba77962fa6c5fe68619e5c7d0374ec9a219fb8d03c42eadaf6d0243771bd", + "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_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.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", + "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", + "https://bcr.bazel.build/modules/rules_testing/0.6.0/MODULE.bazel": "8518d53bc742c462536d3f1a0de0c265bd7b51f32797fea4132007223ed2926f", + "https://bcr.bazel.build/modules/rules_testing/0.6.0/source.json": "915ae13ae2247c986cc57289f21e7f1d9711cd2ecfdf5867b51dc0484f3b043b", + "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", + "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", + "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", + "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/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", + "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" + }, + "selectedYankedVersions": {}, + "moduleExtensions": { + "//python/extensions:pip.bzl%pip": { + "general": { + "bzlTransitiveDigest": "LC3GACrG8SFjqIfMi0X12rmjkWaNDFxDDSodqCgXNr4=", + "usagesDigest": "mU0sm7FMKDU3t2PlFnKkLcjv+It6/smRWnj4tbZPOOg=", + "recordedFileInputs": { + "@@//docs/requirements.txt": "05539283c8ade7d9211dfddca4d6c3ae47ebf56f8c1ca17e52b715e17a494c44", + "@@//examples/wheel/requirements_server.txt": "981e09e454aa31d72f73f369436fce488e5a478717a8fac808412f4695e44823", + "@@//tools/publish/requirements_darwin.txt": "d073c39b04ef65ddbeffce3ca7dd65556df19142507effffa4eea7dc25291b10", + "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", + "@@rules_fuzzing+//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b" + }, + "recordedDirentsInputs": {}, + "envVariables": { + "RULES_PYTHON_REPO_DEBUG": null, + "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null + }, + "generatedRepoSpecs": { + "dev_pip_311_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "absl-py==2.2.2" + } + }, + "dev_pip_311_absl_py_py3_none_any_e5797bc6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "absl_py-2.2.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "absl-py==2.2.2", + "sha256": "e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092", + "urls": [ + "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl" + ] + } + }, + "dev_pip_311_alabaster": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "alabaster==1.0.0" + } + }, + "dev_pip_311_alabaster_py3_none_any_fc678640": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "alabaster-1.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "alabaster==1.0.0", + "sha256": "fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", + "urls": [ + "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_astroid": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "astroid==3.3.9" + } + }, + "dev_pip_311_astroid_py3_none_any_d05bfd0a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "astroid-3.3.9-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "astroid==3.3.9", + "sha256": "d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248", + "urls": [ + "https://files.pythonhosted.org/packages/de/80/c749efbd8eef5ea77c7d6f1956e8fbfb51963b7f93ef79647afd4d9886e3/astroid-3.3.9-py3-none-any.whl" + ] + } + }, + "dev_pip_311_babel": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "babel==2.17.0" + } + }, + "dev_pip_311_babel_py3_none_any_4d0b5309": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "babel-2.17.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "babel==2.17.0", + "sha256": "4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", + "urls": [ + "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_certifi": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "certifi==2025.1.31" + } + }, + "dev_pip_311_certifi_py3_none_any_ca78db45": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "certifi-2025.1.31-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "certifi==2025.1.31", + "sha256": "ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", + "urls": [ + "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl" + ] + } + }, + "dev_pip_311_charset_normalizer": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1" + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_8bfa33f4": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "urls": [ + "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_28bf5762": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "urls": [ + "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_234ac59e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "urls": [ + "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_09b5e673": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "urls": [ + "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_237bdbe6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "urls": [ + "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_cp311_cp311_win_amd64_d7f50a1f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "urls": [ + "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl" + ] + } + }, + "dev_pip_311_charset_normalizer_py3_none_any_d98b1668": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "urls": [ + "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl" + ] + } + }, + "dev_pip_311_colorama": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "colorama==0.4.6" + } + }, + "dev_pip_311_colorama_py2_none_any_4f1d9991": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "colorama-0.4.6-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "colorama==0.4.6", + "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", + "urls": [ + "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_docutils": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "docutils==0.21.2" + } + }, + "dev_pip_311_docutils_py3_none_any_dafca5b9": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "dev_pip_311_idna": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "idna==3.10" + } + }, + "dev_pip_311_idna_py3_none_any_946d195a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "dev_pip_311_imagesize": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "imagesize==1.4.1" + } + }, + "dev_pip_311_imagesize_py2_none_any_0d8d18d0": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "imagesize-1.4.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "imagesize==1.4.1", + "sha256": "0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "urls": [ + "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_jinja2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jinja2==3.1.6" + } + }, + "dev_pip_311_jinja2_py3_none_any_85ece445": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "jinja2-3.1.6-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jinja2==3.1.6", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "urls": [ + "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl" + ] + } + }, + "dev_pip_311_markdown_it_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markdown-it-py==3.0.0" + } + }, + "dev_pip_311_markdown_it_py_py3_none_any_35521684": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_markupsafe": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markupsafe==3.0.2" + } + }, + "dev_pip_311_markupsafe_cp311_cp311_macosx_10_9_universal2_9025b401": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "urls": [ + "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "dev_pip_311_markupsafe_cp311_cp311_manylinux_2_17_aarch64_2cb8438c": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "urls": [ + "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "dev_pip_311_markupsafe_cp311_cp311_musllinux_1_2_x86_64_0bff5e0a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "urls": [ + "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "dev_pip_311_markupsafe_cp311_cp311_win_amd64_70a87b41": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "urls": [ + "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl" + ] + } + }, + "dev_pip_311_mdit_py_plugins": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdit-py-plugins==0.4.2" + } + }, + "dev_pip_311_mdit_py_plugins_py3_none_any_0c673c3f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "mdit_py_plugins-0.4.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdit-py-plugins==0.4.2", + "sha256": "0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", + "urls": [ + "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl" + ] + } + }, + "dev_pip_311_mdurl": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdurl==0.1.2" + } + }, + "dev_pip_311_mdurl_py3_none_any_84008a41": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "dev_pip_311_myst_parser": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "myst-parser==4.0.0" + } + }, + "dev_pip_311_myst_parser_py3_none_any_b9317997": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "myst_parser-4.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "myst-parser==4.0.0", + "sha256": "b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d", + "urls": [ + "https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_packaging": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "packaging==25.0" + } + }, + "dev_pip_311_packaging_py3_none_any_29572ef2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "packaging-25.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "packaging==25.0", + "sha256": "29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "urls": [ + "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_pygments": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pygments==2.19.1" + } + }, + "dev_pip_311_pygments_py3_none_any_9ea1544a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "pygments-2.19.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pygments==2.19.1", + "sha256": "9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", + "urls": [ + "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl" + ] + } + }, + "dev_pip_311_pyyaml": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2" + } + }, + "dev_pip_311_pyyaml_cp311_cp311_macosx_10_9_x86_64_cc1c1159": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "urls": [ + "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl" + ] + } + }, + "dev_pip_311_pyyaml_cp311_cp311_macosx_11_0_arm64_1e2120ef": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "urls": [ + "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl" + ] + } + }, + "dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_aarch64_5d225db5": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "urls": [ + "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_s390x_5ac9328e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "urls": [ + "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_x86_64_3ad2a3de": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "urls": [ + "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "dev_pip_311_pyyaml_cp311_cp311_win_amd64_e10ce637": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "urls": [ + "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl" + ] + } + }, + "dev_pip_311_readthedocs_sphinx_ext": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "readthedocs-sphinx-ext==2.2.5" + } + }, + "dev_pip_311_readthedocs_sphinx_ext_py2_none_any_f8c56184": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "readthedocs-sphinx-ext==2.2.5", + "sha256": "f8c56184ea011c972dd45a90122568587cc85b0127bc9cf064d17c68bc809daa", + "urls": [ + "https://files.pythonhosted.org/packages/64/71/c89e7709a0d4f93af1848e9855112299a820b470d84f917b4dd5998bdd07/readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_requests": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests==2.32.3" + } + }, + "dev_pip_311_requests_py3_none_any_70761cfe": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "dev_pip_311_snowballstemmer": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "snowballstemmer==2.2.0" + } + }, + "dev_pip_311_snowballstemmer_py2_none_any_c8e1716e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "snowballstemmer-2.2.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "snowballstemmer==2.2.0", + "sha256": "c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", + "urls": [ + "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinx": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx==8.1.3" + } + }, + "dev_pip_311_sphinx_autodoc2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-autodoc2==0.5.0" + } + }, + "dev_pip_311_sphinx_autodoc2_py3_none_any_e867013b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_autodoc2-0.5.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-autodoc2==0.5.0", + "sha256": "e867013b1512f9d6d7e6f6799f8b537d6884462acd118ef361f3f619a60b5c9e", + "urls": [ + "https://files.pythonhosted.org/packages/19/e6/48d47961bbdae755ba9c17dfc65d89356312c67668dcb36c87cfadfa1964/sphinx_autodoc2-0.5.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinx_py3_none_any_09719015": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx-8.1.3-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx==8.1.3", + "sha256": "09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", + "urls": [ + "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinx_reredirects": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-reredirects==0.1.6" + } + }, + "dev_pip_311_sphinx_reredirects_py3_none_any_efd50c76": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_reredirects-0.1.6-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-reredirects==0.1.6", + "sha256": "efd50c766fbc5bf40cd5148e10c00f2c00d143027de5c5e48beece93cc40eeea", + "urls": [ + "https://files.pythonhosted.org/packages/ac/6f/0b3625be30a1a50f9e4c2cb2ec147b08f15ed0e9f8444efcf274b751300b/sphinx_reredirects-0.1.6-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinx_rtd_theme": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-rtd-theme==3.0.2" + } + }, + "dev_pip_311_sphinx_rtd_theme_py2_none_any_422ccc75": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinx-rtd-theme==3.0.2", + "sha256": "422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13", + "urls": [ + "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_applehelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-applehelp==2.0.0" + } + }, + "dev_pip_311_sphinxcontrib_applehelp_py3_none_any_4cd3f0ec": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-applehelp==2.0.0", + "sha256": "4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", + "urls": [ + "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_devhelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-devhelp==2.0.0" + } + }, + "dev_pip_311_sphinxcontrib_devhelp_py3_none_any_aefb8b83": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-devhelp==2.0.0", + "sha256": "aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", + "urls": [ + "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_htmlhelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-htmlhelp==2.1.0" + } + }, + "dev_pip_311_sphinxcontrib_htmlhelp_py3_none_any_16675982": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-htmlhelp==2.1.0", + "sha256": "166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", + "urls": [ + "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_jquery": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-jquery==4.1" + } + }, + "dev_pip_311_sphinxcontrib_jquery_py2_none_any_f936030d": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-jquery==4.1", + "sha256": "f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", + "urls": [ + "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_jsmath": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-jsmath==1.0.1" + } + }, + "dev_pip_311_sphinxcontrib_jsmath_py2_none_any_2ec2eaeb": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-jsmath==1.0.1", + "sha256": "2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "urls": [ + "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_qthelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-qthelp==2.0.0" + } + }, + "dev_pip_311_sphinxcontrib_qthelp_py3_none_any_b18a828c": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-qthelp==2.0.0", + "sha256": "b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", + "urls": [ + "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_sphinxcontrib_serializinghtml": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-serializinghtml==2.0.0" + } + }, + "dev_pip_311_sphinxcontrib_serializinghtml_py3_none_any_6e2cb0ee": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "sphinxcontrib-serializinghtml==2.0.0", + "sha256": "6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", + "urls": [ + "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_311_typing_extensions": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "typing-extensions==4.13.2" + } + }, + "dev_pip_311_typing_extensions_py3_none_any_a439e7c0": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "typing_extensions-4.13.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "typing-extensions==4.13.2", + "sha256": "a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "urls": [ + "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl" + ] + } + }, + "dev_pip_311_urllib3": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "urllib3==2.4.0" + } + }, + "dev_pip_311_urllib3_py3_none_any_4e166650": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "urllib3-2.4.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "urllib3==2.4.0", + "sha256": "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", + "urls": [ + "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "absl-py==2.2.2" + } + }, + "dev_pip_313_absl_py_py3_none_any_e5797bc6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "absl_py-2.2.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "absl-py==2.2.2", + "sha256": "e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092", + "urls": [ + "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl" + ] + } + }, + "dev_pip_313_alabaster": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "alabaster==1.0.0" + } + }, + "dev_pip_313_alabaster_py3_none_any_fc678640": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "alabaster-1.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "alabaster==1.0.0", + "sha256": "fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", + "urls": [ + "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_astroid": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "astroid==3.3.9" + } + }, + "dev_pip_313_astroid_py3_none_any_d05bfd0a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "astroid-3.3.9-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "astroid==3.3.9", + "sha256": "d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248", + "urls": [ + "https://files.pythonhosted.org/packages/de/80/c749efbd8eef5ea77c7d6f1956e8fbfb51963b7f93ef79647afd4d9886e3/astroid-3.3.9-py3-none-any.whl" + ] + } + }, + "dev_pip_313_babel": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "babel==2.17.0" + } + }, + "dev_pip_313_babel_py3_none_any_4d0b5309": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "babel-2.17.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "babel==2.17.0", + "sha256": "4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", + "urls": [ + "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_certifi": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "certifi==2025.1.31" + } + }, + "dev_pip_313_certifi_py3_none_any_ca78db45": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "certifi-2025.1.31-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "certifi==2025.1.31", + "sha256": "ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", + "urls": [ + "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl" + ] + } + }, + "dev_pip_313_charset_normalizer": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1" + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_macosx_10_13_universal2_aabfa34b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "urls": [ + "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_manylinux_2_17_ppc64le_8436c508": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "urls": [ + "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_manylinux_2_17_x86_64_955f8851": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "urls": [ + "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_musllinux_1_2_aarch64_0924e81d": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "urls": [ + "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_musllinux_1_2_s390x_09b26ae6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "urls": [ + "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_cp313_cp313_win_amd64_b1ac5992": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "urls": [ + "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl" + ] + } + }, + "dev_pip_313_charset_normalizer_py3_none_any_d98b1668": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "charset_normalizer-3.4.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "urls": [ + "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl" + ] + } + }, + "dev_pip_313_colorama": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "colorama==0.4.6" + } + }, + "dev_pip_313_colorama_py2_none_any_4f1d9991": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "colorama-0.4.6-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "colorama==0.4.6", + "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", + "urls": [ + "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_docutils": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "docutils==0.21.2" + } + }, + "dev_pip_313_docutils_py3_none_any_dafca5b9": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "dev_pip_313_idna": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "idna==3.10" + } + }, + "dev_pip_313_idna_py3_none_any_946d195a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "dev_pip_313_imagesize": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "imagesize==1.4.1" + } + }, + "dev_pip_313_imagesize_py2_none_any_0d8d18d0": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "imagesize-1.4.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "imagesize==1.4.1", + "sha256": "0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "urls": [ + "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_jinja2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "jinja2==3.1.6" + } + }, + "dev_pip_313_jinja2_py3_none_any_85ece445": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "jinja2-3.1.6-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "jinja2==3.1.6", + "sha256": "85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", + "urls": [ + "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl" + ] + } + }, + "dev_pip_313_markdown_it_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markdown-it-py==3.0.0" + } + }, + "dev_pip_313_markdown_it_py_py3_none_any_35521684": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_markupsafe": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2" + } + }, + "dev_pip_313_markupsafe_cp313_cp313t_macosx_10_13_universal2_b5a6b3ad": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "urls": [ + "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl" + ] + } + }, + "dev_pip_313_markupsafe_cp313_cp313t_macosx_11_0_arm64_a904af0a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "urls": [ + "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl" + ] + } + }, + "dev_pip_313_markupsafe_cp313_cp313t_manylinux_2_17_aarch64_4aa4e5fa": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "urls": [ + "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "dev_pip_313_markupsafe_cp313_cp313t_musllinux_1_2_x86_64_131a3c76": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "urls": [ + "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl" + ] + } + }, + "dev_pip_313_markupsafe_cp313_cp313t_win_amd64_e444a31f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "markupsafe==3.0.2", + "sha256": "e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "urls": [ + "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl" + ] + } + }, + "dev_pip_313_mdit_py_plugins": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "mdit-py-plugins==0.4.2" + } + }, + "dev_pip_313_mdit_py_plugins_py3_none_any_0c673c3f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "mdit_py_plugins-0.4.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "mdit-py-plugins==0.4.2", + "sha256": "0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", + "urls": [ + "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl" + ] + } + }, + "dev_pip_313_mdurl": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "mdurl==0.1.2" + } + }, + "dev_pip_313_mdurl_py3_none_any_84008a41": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "dev_pip_313_myst_parser": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "myst-parser==4.0.0" + } + }, + "dev_pip_313_myst_parser_py3_none_any_b9317997": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "myst_parser-4.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "myst-parser==4.0.0", + "sha256": "b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d", + "urls": [ + "https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_packaging": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "packaging==25.0" + } + }, + "dev_pip_313_packaging_py3_none_any_29572ef2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "packaging-25.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "packaging==25.0", + "sha256": "29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "urls": [ + "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_pygments": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pygments==2.19.1" + } + }, + "dev_pip_313_pygments_py3_none_any_9ea1544a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "pygments-2.19.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pygments==2.19.1", + "sha256": "9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", + "urls": [ + "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl" + ] + } + }, + "dev_pip_313_pyyaml": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2" + } + }, + "dev_pip_313_pyyaml_cp313_cp313_macosx_10_13_x86_64_efdca563": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "urls": [ + "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl" + ] + } + }, + "dev_pip_313_pyyaml_cp313_cp313_macosx_11_0_arm64_50187695": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "urls": [ + "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl" + ] + } + }, + "dev_pip_313_pyyaml_cp313_cp313_manylinux_2_17_aarch64_0ffe8360": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "urls": [ + "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "dev_pip_313_pyyaml_cp313_cp313_manylinux_2_17_s390x_17e311b6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "urls": [ + "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "dev_pip_313_pyyaml_cp313_cp313_musllinux_1_1_x86_64_68ccc602": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "urls": [ + "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl" + ] + } + }, + "dev_pip_313_pyyaml_cp313_cp313_win_amd64_8388ee19": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "pyyaml==6.0.2", + "sha256": "8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "urls": [ + "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl" + ] + } + }, + "dev_pip_313_readthedocs_sphinx_ext": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "readthedocs-sphinx-ext==2.2.5" + } + }, + "dev_pip_313_readthedocs_sphinx_ext_py2_none_any_f8c56184": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "readthedocs-sphinx-ext==2.2.5", + "sha256": "f8c56184ea011c972dd45a90122568587cc85b0127bc9cf064d17c68bc809daa", + "urls": [ + "https://files.pythonhosted.org/packages/64/71/c89e7709a0d4f93af1848e9855112299a820b470d84f917b4dd5998bdd07/readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_requests": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "requests==2.32.3" + } + }, + "dev_pip_313_requests_py3_none_any_70761cfe": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "dev_pip_313_snowballstemmer": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "snowballstemmer==2.2.0" + } + }, + "dev_pip_313_snowballstemmer_py2_none_any_c8e1716e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "snowballstemmer-2.2.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "snowballstemmer==2.2.0", + "sha256": "c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", + "urls": [ + "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinx": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx==8.1.3" + } + }, + "dev_pip_313_sphinx_autodoc2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-autodoc2==0.5.0" + } + }, + "dev_pip_313_sphinx_autodoc2_py3_none_any_e867013b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_autodoc2-0.5.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-autodoc2==0.5.0", + "sha256": "e867013b1512f9d6d7e6f6799f8b537d6884462acd118ef361f3f619a60b5c9e", + "urls": [ + "https://files.pythonhosted.org/packages/19/e6/48d47961bbdae755ba9c17dfc65d89356312c67668dcb36c87cfadfa1964/sphinx_autodoc2-0.5.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinx_py3_none_any_09719015": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx-8.1.3-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx==8.1.3", + "sha256": "09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", + "urls": [ + "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinx_reredirects": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-reredirects==0.1.6" + } + }, + "dev_pip_313_sphinx_reredirects_py3_none_any_efd50c76": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_reredirects-0.1.6-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-reredirects==0.1.6", + "sha256": "efd50c766fbc5bf40cd5148e10c00f2c00d143027de5c5e48beece93cc40eeea", + "urls": [ + "https://files.pythonhosted.org/packages/ac/6f/0b3625be30a1a50f9e4c2cb2ec147b08f15ed0e9f8444efcf274b751300b/sphinx_reredirects-0.1.6-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinx_rtd_theme": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-rtd-theme==3.0.2" + } + }, + "dev_pip_313_sphinx_rtd_theme_py2_none_any_422ccc75": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinx-rtd-theme==3.0.2", + "sha256": "422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13", + "urls": [ + "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_applehelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-applehelp==2.0.0" + } + }, + "dev_pip_313_sphinxcontrib_applehelp_py3_none_any_4cd3f0ec": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-applehelp==2.0.0", + "sha256": "4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", + "urls": [ + "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_devhelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-devhelp==2.0.0" + } + }, + "dev_pip_313_sphinxcontrib_devhelp_py3_none_any_aefb8b83": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-devhelp==2.0.0", + "sha256": "aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", + "urls": [ + "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_htmlhelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-htmlhelp==2.1.0" + } + }, + "dev_pip_313_sphinxcontrib_htmlhelp_py3_none_any_16675982": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-htmlhelp==2.1.0", + "sha256": "166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", + "urls": [ + "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_jquery": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-jquery==4.1" + } + }, + "dev_pip_313_sphinxcontrib_jquery_py2_none_any_f936030d": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-jquery==4.1", + "sha256": "f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", + "urls": [ + "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_jsmath": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-jsmath==1.0.1" + } + }, + "dev_pip_313_sphinxcontrib_jsmath_py2_none_any_2ec2eaeb": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-jsmath==1.0.1", + "sha256": "2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "urls": [ + "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_qthelp": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-qthelp==2.0.0" + } + }, + "dev_pip_313_sphinxcontrib_qthelp_py3_none_any_b18a828c": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-qthelp==2.0.0", + "sha256": "b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", + "urls": [ + "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_sphinxcontrib_serializinghtml": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-serializinghtml==2.0.0" + } + }, + "dev_pip_313_sphinxcontrib_serializinghtml_py3_none_any_6e2cb0ee": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "sphinxcontrib-serializinghtml==2.0.0", + "sha256": "6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", + "urls": [ + "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl" + ] + } + }, + "dev_pip_313_typing_extensions": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "typing-extensions==4.13.2" + } + }, + "dev_pip_313_typing_extensions_py3_none_any_a439e7c0": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "typing_extensions-4.13.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "typing-extensions==4.13.2", + "sha256": "a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "urls": [ + "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl" + ] + } + }, + "dev_pip_313_urllib3": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "urllib3==2.4.0" + } + }, + "dev_pip_313_urllib3_py3_none_any_4e166650": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@dev_pip//{name}:{target}", + "filename": "urllib3-2.4.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_13_host//:python", + "requirement": "urllib3==2.4.0", + "sha256": "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", + "urls": [ + "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl" + ] + } + }, + "pip_deps_310_numpy": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_10_host//:python", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_310_setuptools": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_10_host//:python", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_311_numpy": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_311_setuptools": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_312_numpy": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_12_host//:python", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_312_setuptools": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_12_host//:python", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_38_numpy": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_8_host//:python", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_38_setuptools": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_8_host//:python", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_39_numpy": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_9_host//:python", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_39_setuptools": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@+python+python_3_9_host//:python", + "requirement": "setuptools<=70.3.0" + } + }, + "pypiserver_311_pip": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypiserver//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pip==24.0" + } + }, + "pypiserver_311_pip_py3_none_any_ba0d021a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypiserver//{name}:{target}", + "filename": "pip-24.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pip==24.0", + "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc", + "urls": [ + "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl" + ] + } + }, + "pypiserver_311_pypiserver": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypiserver//{name}:{target}", + "download_only": true, + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pypiserver==2.0.1" + } + }, + "pypiserver_311_pypiserver_py2_none_any_1dd98fb9": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@pypiserver//{name}:{target}", + "filename": "pypiserver-2.0.1-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pypiserver==2.0.1", + "sha256": "1dd98fb99d2da4199fb44c7284e57d69a9f7fda2c6c8dc01975c151c592677bf", + "urls": [ + "https://files.pythonhosted.org/packages/34/95/6c70e2f7e8375354fd7b1db08405c93674f2e4ce4e714f379fadd06a92b1/pypiserver-2.0.1-py2.py3-none-any.whl" + ] + } + }, + "rules_fuzzing_py_deps_310_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_10_host//:python", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_310_six": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_10_host//:python", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_311_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_311_six": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_312_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_12_host//:python", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_312_six": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_12_host//:python", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_38_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_8_host//:python", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_38_six": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_8_host//:python", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_39_absl_py": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_9_host//:python", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_39_six": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@+python+python_3_9_host//:python", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "backports.tarfile-1.2.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "backports-tarfile==1.2.0", + "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", + "urls": [ + "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "backports_tarfile-1.2.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "backports-tarfile==1.2.0", + "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", + "urls": [ + "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_certifi_py3_none_any_ca78db45": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "certifi-2025.1.31-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "certifi==2025.1.31", + "sha256": "ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", + "urls": [ + "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_certifi_sdist_3d5da692": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "certifi-2025.1.31.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "certifi==2025.1.31", + "sha256": "3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "urls": [ + "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_8bfa33f4": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "urls": [ + "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_28bf5762": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "urls": [ + "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_234ac59e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "urls": [ + "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_09b5e673": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "urls": [ + "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_237bdbe6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "urls": [ + "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_d7f50a1f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "urls": [ + "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_py3_none_any_d98b1668": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "charset_normalizer-3.4.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "urls": [ + "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_sdist_44251f18": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "charset_normalizer-3.4.1.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "charset-normalizer==3.4.1", + "sha256": "44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "urls": [ + "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "docutils-0.21.2.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "docutils==0.21.2", + "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "urls": [ + "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_idna_sdist_12f65c9b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "idna-3.10.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "idna==3.10", + "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "urls": [ + "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "importlib_metadata-8.5.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "importlib-metadata==8.5.0", + "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "urls": [ + "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "importlib_metadata-8.5.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "importlib-metadata==8.5.0", + "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "urls": [ + "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "jaraco.classes-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-classes==3.4.0", + "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", + "urls": [ + "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco.classes-3.4.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-classes==3.4.0", + "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", + "urls": [ + "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "jaraco.context-6.0.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-context==6.0.1", + "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", + "urls": [ + "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_context-6.0.1.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-context==6.0.1", + "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "urls": [ + "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "jaraco.functools-4.1.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-functools==4.1.0", + "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", + "urls": [ + "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_functools-4.1.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "jaraco-functools==4.1.0", + "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "urls": [ + "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_keyring_py3_none_any_e67f8ac3": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "keyring-25.5.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "keyring==25.5.0", + "sha256": "e67f8ac32b04be4714b42fe84ce7dad9c40985b9ca827c592cc303e7c26d9741", + "urls": [ + "https://files.pythonhosted.org/packages/32/c9/353c156fa2f057e669106e5d6bcdecf85ef8d3536ce68ca96f18dc7b6d6f/keyring-25.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_keyring_sdist_4c753b3e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "keyring-25.5.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "keyring==25.5.0", + "sha256": "4c753b3ec91717fe713c4edd522d625889d8973a349b0e582622f49766de58e6", + "urls": [ + "https://files.pythonhosted.org/packages/f6/24/64447b13df6a0e2797b586dad715766d756c932ce8ace7f67bd384d76ae0/keyring-25.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "markdown-it-py-3.0.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "markdown-it-py==3.0.0", + "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", + "urls": [ + "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "mdurl-0.1.2.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "mdurl==0.1.2", + "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", + "urls": [ + "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_py3_none_any_d4398038": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "more_itertools-10.7.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "more-itertools==10.7.0", + "sha256": "d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e", + "urls": [ + "https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_sdist_9fddd540": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "more_itertools-10.7.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "more-itertools==10.7.0", + "sha256": "9fddd5403be01a94b204faadcff459ec3568cf110265d3c54323e1e866ad29d3", + "urls": [ + "https://files.pythonhosted.org/packages/ce/a0/834b0cebabbfc7e311f30b46c8188790a37f89fc8d756660346fe5abfd09/more_itertools-10.7.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_nh3_sdist_94a16692": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "nh3-0.2.18.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "nh3==0.2.18", + "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", + "urls": [ + "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "pkginfo-1.10.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pkginfo==1.10.0", + "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "urls": [ + "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pkginfo-1.10.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pkginfo==1.10.0", + "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", + "urls": [ + "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "pygments-2.18.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pygments==2.18.0", + "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", + "urls": [ + "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pygments_sdist_786ff802": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pygments-2.18.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "pygments==2.18.0", + "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "urls": [ + "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "readme_renderer-44.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "readme-renderer==44.0", + "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", + "urls": [ + "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "readme_renderer-44.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "readme-renderer==44.0", + "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", + "urls": [ + "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_sdist_55365417": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-2.32.3.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests==2.32.3", + "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "urls": [ + "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", + "urls": [ + "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-toolbelt-1.0.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "urls": [ + "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "rfc3986==2.0.0", + "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "urls": [ + "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rfc3986-2.0.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "rfc3986==2.0.0", + "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "urls": [ + "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "rich-13.9.4-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "rich==13.9.4", + "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", + "urls": [ + "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rich_sdist_43959497": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rich-13.9.4.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "rich==13.9.4", + "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", + "urls": [ + "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "twine-5.1.1-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "twine==5.1.1", + "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", + "urls": [ + "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "twine-5.1.1.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "twine==5.1.1", + "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "urls": [ + "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_urllib3_py3_none_any_4e166650": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "urllib3-2.4.0-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "urllib3==2.4.0", + "sha256": "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", + "urls": [ + "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_urllib3_sdist_414bc653": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "urllib3-2.4.0.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "urllib3==2.4.0", + "sha256": "414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", + "urls": [ + "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "filename": "zipp-3.20.2-py3-none-any.whl", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "zipp==3.20.2", + "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "urls": [ + "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { + "repoRuleId": "@@//python/private/pypi:whl_library.bzl%whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "zipp-3.20.2.tar.gz", + "python_interpreter_target": "@@+python+python_3_11_host//:python", + "requirement": "zipp==3.20.2", + "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", + "urls": [ + "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" + ] + } + }, + "dev_pip": { + "repoRuleId": "@@//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "dev_pip", + "extra_hub_aliases": {}, + "whl_map": { + "absl_py": "{\"dev_pip_311_absl_py\":[{\"version\":\"3.11\"}],\"dev_pip_311_absl_py_py3_none_any_e5797bc6\":[{\"filename\":\"absl_py-2.2.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_absl_py\":[{\"version\":\"3.13\"}],\"dev_pip_313_absl_py_py3_none_any_e5797bc6\":[{\"filename\":\"absl_py-2.2.2-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "alabaster": "{\"dev_pip_311_alabaster\":[{\"version\":\"3.11\"}],\"dev_pip_311_alabaster_py3_none_any_fc678640\":[{\"filename\":\"alabaster-1.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_alabaster\":[{\"version\":\"3.13\"}],\"dev_pip_313_alabaster_py3_none_any_fc678640\":[{\"filename\":\"alabaster-1.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "astroid": "{\"dev_pip_311_astroid\":[{\"version\":\"3.11\"}],\"dev_pip_311_astroid_py3_none_any_d05bfd0a\":[{\"filename\":\"astroid-3.3.9-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_astroid\":[{\"version\":\"3.13\"}],\"dev_pip_313_astroid_py3_none_any_d05bfd0a\":[{\"filename\":\"astroid-3.3.9-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "babel": "{\"dev_pip_311_babel\":[{\"version\":\"3.11\"}],\"dev_pip_311_babel_py3_none_any_4d0b5309\":[{\"filename\":\"babel-2.17.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_babel\":[{\"version\":\"3.13\"}],\"dev_pip_313_babel_py3_none_any_4d0b5309\":[{\"filename\":\"babel-2.17.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "certifi": "{\"dev_pip_311_certifi\":[{\"version\":\"3.11\"}],\"dev_pip_311_certifi_py3_none_any_ca78db45\":[{\"filename\":\"certifi-2025.1.31-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_certifi\":[{\"version\":\"3.13\"}],\"dev_pip_313_certifi_py3_none_any_ca78db45\":[{\"filename\":\"certifi-2025.1.31-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "charset_normalizer": "{\"dev_pip_311_charset_normalizer\":[{\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_8bfa33f4\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_28bf5762\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_234ac59e\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_09b5e673\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_237bdbe6\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_cp311_cp311_win_amd64_d7f50a1f\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_charset_normalizer_py3_none_any_d98b1668\":[{\"filename\":\"charset_normalizer-3.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_charset_normalizer\":[{\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_macosx_10_13_universal2_aabfa34b\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_manylinux_2_17_ppc64le_8436c508\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_manylinux_2_17_x86_64_955f8851\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_musllinux_1_2_aarch64_0924e81d\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_musllinux_1_2_s390x_09b26ae6\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_cp313_cp313_win_amd64_b1ac5992\":[{\"filename\":\"charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_charset_normalizer_py3_none_any_d98b1668\":[{\"filename\":\"charset_normalizer-3.4.1-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "colorama": "{\"dev_pip_311_colorama\":[{\"version\":\"3.11\"}],\"dev_pip_311_colorama_py2_none_any_4f1d9991\":[{\"filename\":\"colorama-0.4.6-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_colorama\":[{\"version\":\"3.13\"}],\"dev_pip_313_colorama_py2_none_any_4f1d9991\":[{\"filename\":\"colorama-0.4.6-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "docutils": "{\"dev_pip_311_docutils\":[{\"version\":\"3.11\"}],\"dev_pip_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_docutils\":[{\"version\":\"3.13\"}],\"dev_pip_313_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "idna": "{\"dev_pip_311_idna\":[{\"version\":\"3.11\"}],\"dev_pip_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_idna\":[{\"version\":\"3.13\"}],\"dev_pip_313_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "imagesize": "{\"dev_pip_311_imagesize\":[{\"version\":\"3.11\"}],\"dev_pip_311_imagesize_py2_none_any_0d8d18d0\":[{\"filename\":\"imagesize-1.4.1-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_imagesize\":[{\"version\":\"3.13\"}],\"dev_pip_313_imagesize_py2_none_any_0d8d18d0\":[{\"filename\":\"imagesize-1.4.1-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "jinja2": "{\"dev_pip_311_jinja2\":[{\"version\":\"3.11\"}],\"dev_pip_311_jinja2_py3_none_any_85ece445\":[{\"filename\":\"jinja2-3.1.6-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_jinja2\":[{\"version\":\"3.13\"}],\"dev_pip_313_jinja2_py3_none_any_85ece445\":[{\"filename\":\"jinja2-3.1.6-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "markdown_it_py": "{\"dev_pip_311_markdown_it_py\":[{\"version\":\"3.11\"}],\"dev_pip_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_markdown_it_py\":[{\"version\":\"3.13\"}],\"dev_pip_313_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "markupsafe": "{\"dev_pip_311_markupsafe\":[{\"version\":\"3.11\"}],\"dev_pip_311_markupsafe_cp311_cp311_macosx_10_9_universal2_9025b401\":[{\"filename\":\"MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"dev_pip_311_markupsafe_cp311_cp311_manylinux_2_17_aarch64_2cb8438c\":[{\"filename\":\"MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_markupsafe_cp311_cp311_musllinux_1_2_x86_64_0bff5e0a\":[{\"filename\":\"MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_markupsafe_cp311_cp311_win_amd64_70a87b41\":[{\"filename\":\"MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"dev_pip_313_markupsafe\":[{\"version\":\"3.13\"}],\"dev_pip_313_markupsafe_cp313_cp313t_macosx_10_13_universal2_b5a6b3ad\":[{\"filename\":\"MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl\",\"version\":\"3.13\"}],\"dev_pip_313_markupsafe_cp313_cp313t_macosx_11_0_arm64_a904af0a\":[{\"filename\":\"MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_markupsafe_cp313_cp313t_manylinux_2_17_aarch64_4aa4e5fa\":[{\"filename\":\"MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_markupsafe_cp313_cp313t_musllinux_1_2_x86_64_131a3c76\":[{\"filename\":\"MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_markupsafe_cp313_cp313t_win_amd64_e444a31f\":[{\"filename\":\"MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl\",\"version\":\"3.13\"}]}", + "mdit_py_plugins": "{\"dev_pip_311_mdit_py_plugins\":[{\"version\":\"3.11\"}],\"dev_pip_311_mdit_py_plugins_py3_none_any_0c673c3f\":[{\"filename\":\"mdit_py_plugins-0.4.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_mdit_py_plugins\":[{\"version\":\"3.13\"}],\"dev_pip_313_mdit_py_plugins_py3_none_any_0c673c3f\":[{\"filename\":\"mdit_py_plugins-0.4.2-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "mdurl": "{\"dev_pip_311_mdurl\":[{\"version\":\"3.11\"}],\"dev_pip_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_mdurl\":[{\"version\":\"3.13\"}],\"dev_pip_313_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "myst_parser": "{\"dev_pip_311_myst_parser\":[{\"version\":\"3.11\"}],\"dev_pip_311_myst_parser_py3_none_any_b9317997\":[{\"filename\":\"myst_parser-4.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_myst_parser\":[{\"version\":\"3.13\"}],\"dev_pip_313_myst_parser_py3_none_any_b9317997\":[{\"filename\":\"myst_parser-4.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "packaging": "{\"dev_pip_311_packaging\":[{\"version\":\"3.11\"}],\"dev_pip_311_packaging_py3_none_any_29572ef2\":[{\"filename\":\"packaging-25.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_packaging\":[{\"version\":\"3.13\"}],\"dev_pip_313_packaging_py3_none_any_29572ef2\":[{\"filename\":\"packaging-25.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "pygments": "{\"dev_pip_311_pygments\":[{\"version\":\"3.11\"}],\"dev_pip_311_pygments_py3_none_any_9ea1544a\":[{\"filename\":\"pygments-2.19.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_pygments\":[{\"version\":\"3.13\"}],\"dev_pip_313_pygments_py3_none_any_9ea1544a\":[{\"filename\":\"pygments-2.19.1-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "pyyaml": "{\"dev_pip_311_pyyaml\":[{\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_macosx_10_9_x86_64_cc1c1159\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_macosx_11_0_arm64_1e2120ef\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_aarch64_5d225db5\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_s390x_5ac9328e\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_manylinux_2_17_x86_64_3ad2a3de\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"dev_pip_311_pyyaml_cp311_cp311_win_amd64_e10ce637\":[{\"filename\":\"PyYAML-6.0.2-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"dev_pip_313_pyyaml\":[{\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_macosx_10_13_x86_64_efdca563\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_macosx_11_0_arm64_50187695\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_manylinux_2_17_aarch64_0ffe8360\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_manylinux_2_17_s390x_17e311b6\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_musllinux_1_1_x86_64_68ccc602\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl\",\"version\":\"3.13\"}],\"dev_pip_313_pyyaml_cp313_cp313_win_amd64_8388ee19\":[{\"filename\":\"PyYAML-6.0.2-cp313-cp313-win_amd64.whl\",\"version\":\"3.13\"}]}", + "readthedocs_sphinx_ext": "{\"dev_pip_311_readthedocs_sphinx_ext\":[{\"version\":\"3.11\"}],\"dev_pip_311_readthedocs_sphinx_ext_py2_none_any_f8c56184\":[{\"filename\":\"readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_readthedocs_sphinx_ext\":[{\"version\":\"3.13\"}],\"dev_pip_313_readthedocs_sphinx_ext_py2_none_any_f8c56184\":[{\"filename\":\"readthedocs_sphinx_ext-2.2.5-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "requests": "{\"dev_pip_311_requests\":[{\"version\":\"3.11\"}],\"dev_pip_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_requests\":[{\"version\":\"3.13\"}],\"dev_pip_313_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "snowballstemmer": "{\"dev_pip_311_snowballstemmer\":[{\"version\":\"3.11\"}],\"dev_pip_311_snowballstemmer_py2_none_any_c8e1716e\":[{\"filename\":\"snowballstemmer-2.2.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_snowballstemmer\":[{\"version\":\"3.13\"}],\"dev_pip_313_snowballstemmer_py2_none_any_c8e1716e\":[{\"filename\":\"snowballstemmer-2.2.0-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinx": "{\"dev_pip_311_sphinx\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinx_py3_none_any_09719015\":[{\"filename\":\"sphinx-8.1.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinx\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinx_py3_none_any_09719015\":[{\"filename\":\"sphinx-8.1.3-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinx_autodoc2": "{\"dev_pip_311_sphinx_autodoc2\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinx_autodoc2_py3_none_any_e867013b\":[{\"filename\":\"sphinx_autodoc2-0.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinx_autodoc2\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinx_autodoc2_py3_none_any_e867013b\":[{\"filename\":\"sphinx_autodoc2-0.5.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinx_reredirects": "{\"dev_pip_311_sphinx_reredirects\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinx_reredirects_py3_none_any_efd50c76\":[{\"filename\":\"sphinx_reredirects-0.1.6-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinx_reredirects\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinx_reredirects_py3_none_any_efd50c76\":[{\"filename\":\"sphinx_reredirects-0.1.6-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinx_rtd_theme": "{\"dev_pip_311_sphinx_rtd_theme\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinx_rtd_theme_py2_none_any_422ccc75\":[{\"filename\":\"sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinx_rtd_theme\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinx_rtd_theme_py2_none_any_422ccc75\":[{\"filename\":\"sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_applehelp": "{\"dev_pip_311_sphinxcontrib_applehelp\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_applehelp_py3_none_any_4cd3f0ec\":[{\"filename\":\"sphinxcontrib_applehelp-2.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_applehelp\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_applehelp_py3_none_any_4cd3f0ec\":[{\"filename\":\"sphinxcontrib_applehelp-2.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_devhelp": "{\"dev_pip_311_sphinxcontrib_devhelp\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_devhelp_py3_none_any_aefb8b83\":[{\"filename\":\"sphinxcontrib_devhelp-2.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_devhelp\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_devhelp_py3_none_any_aefb8b83\":[{\"filename\":\"sphinxcontrib_devhelp-2.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_htmlhelp": "{\"dev_pip_311_sphinxcontrib_htmlhelp\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_htmlhelp_py3_none_any_16675982\":[{\"filename\":\"sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_htmlhelp\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_htmlhelp_py3_none_any_16675982\":[{\"filename\":\"sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_jquery": "{\"dev_pip_311_sphinxcontrib_jquery\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_jquery_py2_none_any_f936030d\":[{\"filename\":\"sphinxcontrib_jquery-4.1-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_jquery\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_jquery_py2_none_any_f936030d\":[{\"filename\":\"sphinxcontrib_jquery-4.1-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_jsmath": "{\"dev_pip_311_sphinxcontrib_jsmath\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_jsmath_py2_none_any_2ec2eaeb\":[{\"filename\":\"sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_jsmath\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_jsmath_py2_none_any_2ec2eaeb\":[{\"filename\":\"sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_qthelp": "{\"dev_pip_311_sphinxcontrib_qthelp\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_qthelp_py3_none_any_b18a828c\":[{\"filename\":\"sphinxcontrib_qthelp-2.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_qthelp\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_qthelp_py3_none_any_b18a828c\":[{\"filename\":\"sphinxcontrib_qthelp-2.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "sphinxcontrib_serializinghtml": "{\"dev_pip_311_sphinxcontrib_serializinghtml\":[{\"version\":\"3.11\"}],\"dev_pip_311_sphinxcontrib_serializinghtml_py3_none_any_6e2cb0ee\":[{\"filename\":\"sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_sphinxcontrib_serializinghtml\":[{\"version\":\"3.13\"}],\"dev_pip_313_sphinxcontrib_serializinghtml_py3_none_any_6e2cb0ee\":[{\"filename\":\"sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "typing_extensions": "{\"dev_pip_311_typing_extensions\":[{\"version\":\"3.11\"}],\"dev_pip_311_typing_extensions_py3_none_any_a439e7c0\":[{\"filename\":\"typing_extensions-4.13.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_typing_extensions\":[{\"version\":\"3.13\"}],\"dev_pip_313_typing_extensions_py3_none_any_a439e7c0\":[{\"filename\":\"typing_extensions-4.13.2-py3-none-any.whl\",\"version\":\"3.13\"}]}", + "urllib3": "{\"dev_pip_311_urllib3\":[{\"version\":\"3.11\"}],\"dev_pip_311_urllib3_py3_none_any_4e166650\":[{\"filename\":\"urllib3-2.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"dev_pip_313_urllib3\":[{\"version\":\"3.13\"}],\"dev_pip_313_urllib3_py3_none_any_4e166650\":[{\"filename\":\"urllib3-2.4.0-py3-none-any.whl\",\"version\":\"3.13\"}]}" + }, + "packages": [ + "absl_py", + "alabaster", + "astroid", + "babel", + "certifi", + "charset_normalizer", + "docutils", + "idna", + "imagesize", + "jinja2", + "markdown_it_py", + "markupsafe", + "mdit_py_plugins", + "mdurl", + "myst_parser", + "packaging", + "pygments", + "pyyaml", + "readthedocs_sphinx_ext", + "requests", + "snowballstemmer", + "sphinx", + "sphinx_autodoc2", + "sphinx_reredirects", + "sphinx_rtd_theme", + "sphinxcontrib_applehelp", + "sphinxcontrib_devhelp", + "sphinxcontrib_htmlhelp", + "sphinxcontrib_jquery", + "sphinxcontrib_jsmath", + "sphinxcontrib_qthelp", + "sphinxcontrib_serializinghtml", + "typing_extensions", + "urllib3" + ], + "groups": {} + } + }, + "pip_deps": { + "repoRuleId": "@@//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pip_deps", + "extra_hub_aliases": {}, + "whl_map": { + "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", + "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "numpy", + "setuptools" + ], + "groups": {} + } + }, + "pypiserver": { + "repoRuleId": "@@//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "pypiserver", + "extra_hub_aliases": {}, + "whl_map": { + "pip": "{\"pypiserver_311_pip\":[{\"version\":\"3.11\"}],\"pypiserver_311_pip_py3_none_any_ba0d021a\":[{\"filename\":\"pip-24.0-py3-none-any.whl\",\"version\":\"3.11\"}]}", + "pypiserver": "{\"pypiserver_311_pypiserver\":[{\"version\":\"3.11\"}],\"pypiserver_311_pypiserver_py2_none_any_1dd98fb9\":[{\"filename\":\"pypiserver-2.0.1-py2.py3-none-any.whl\",\"version\":\"3.11\"}]}" + }, + "packages": [ + "pip", + "pypiserver" + ], + "groups": {} + } + }, + "rules_fuzzing_py_deps": { + "repoRuleId": "@@//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "rules_fuzzing_py_deps", + "extra_hub_aliases": {}, + "whl_map": { + "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", + "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "absl_py", + "six" + ], + "groups": {} + } + }, + "rules_python_publish_deps": { + "repoRuleId": "@@//python/private/pypi:hub_repository.bzl%hub_repository", + "attributes": { + "repo_name": "rules_python_publish_deps", + "extra_hub_aliases": {}, + "whl_map": { + "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", + "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_ca78db45\":[{\"filename\":\"certifi-2025.1.31-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_3d5da692\":[{\"filename\":\"certifi-2025.1.31.tar.gz\",\"version\":\"3.11\"}]}", + "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_8bfa33f4\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_28bf5762\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_234ac59e\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_09b5e673\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_237bdbe6\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_d7f50a1f\":[{\"filename\":\"charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_d98b1668\":[{\"filename\":\"charset_normalizer-3.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_44251f18\":[{\"filename\":\"charset_normalizer-3.4.1.tar.gz\",\"version\":\"3.11\"}]}", + "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", + "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", + "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", + "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_e67f8ac3\":[{\"filename\":\"keyring-25.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_4c753b3e\":[{\"filename\":\"keyring-25.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", + "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_d4398038\":[{\"filename\":\"more_itertools-10.7.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_9fddd540\":[{\"filename\":\"more_itertools-10.7.0.tar.gz\",\"version\":\"3.11\"}]}", + "nh3": "{\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", + "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", + "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", + "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", + "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", + "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", + "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", + "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_4e166650\":[{\"filename\":\"urllib3-2.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_414bc653\":[{\"filename\":\"urllib3-2.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" + }, + "packages": [ + "backports_tarfile", + "certifi", + "charset_normalizer", + "docutils", + "idna", + "importlib_metadata", + "jaraco_classes", + "jaraco_context", + "jaraco_functools", + "keyring", + "markdown_it_py", + "mdurl", + "more_itertools", + "nh3", + "pkginfo", + "pygments", + "readme_renderer", + "requests", + "requests_toolbelt", + "rfc3986", + "rich", + "twine", + "urllib3", + "zipp" + ], + "groups": {} + } + } + }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "", + "bazel_features", + "bazel_features+" + ], + [ + "", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "", + "bazel_tools", + "bazel_tools" + ], + [ + "", + "platforms", + "platforms" + ], + [ + "", + "pypi__build", + "+internal_deps+pypi__build" + ], + [ + "", + "pypi__click", + "+internal_deps+pypi__click" + ], + [ + "", + "pypi__colorama", + "+internal_deps+pypi__colorama" + ], + [ + "", + "pypi__importlib_metadata", + "+internal_deps+pypi__importlib_metadata" + ], + [ + "", + "pypi__installer", + "+internal_deps+pypi__installer" + ], + [ + "", + "pypi__more_itertools", + "+internal_deps+pypi__more_itertools" + ], + [ + "", + "pypi__packaging", + "+internal_deps+pypi__packaging" + ], + [ + "", + "pypi__pep517", + "+internal_deps+pypi__pep517" + ], + [ + "", + "pypi__pip", + "+internal_deps+pypi__pip" + ], + [ + "", + "pypi__pip_tools", + "+internal_deps+pypi__pip_tools" + ], + [ + "", + "pypi__pyproject_hooks", + "+internal_deps+pypi__pyproject_hooks" + ], + [ + "", + "pypi__setuptools", + "+internal_deps+pypi__setuptools" + ], + [ + "", + "pypi__tomli", + "+internal_deps+pypi__tomli" + ], + [ + "", + "pypi__wheel", + "+internal_deps+pypi__wheel" + ], + [ + "", + "pypi__zipp", + "+internal_deps+pypi__zipp" + ], + [ + "", + "pythons_hub", + "+python+pythons_hub" + ], + [ + "", + "rules_python_internal", + "+internal_deps+rules_python_internal" + ], + [ + "+python+pythons_hub", + "python_3_10_11_host", + "+python+python_3_10_11_host" + ], + [ + "+python+pythons_hub", + "python_3_10_12_host", + "+python+python_3_10_12_host" + ], + [ + "+python+pythons_hub", + "python_3_10_13_host", + "+python+python_3_10_13_host" + ], + [ + "+python+pythons_hub", + "python_3_10_14_host", + "+python+python_3_10_14_host" + ], + [ + "+python+pythons_hub", + "python_3_10_15_host", + "+python+python_3_10_15_host" + ], + [ + "+python+pythons_hub", + "python_3_10_16_host", + "+python+python_3_10_16_host" + ], + [ + "+python+pythons_hub", + "python_3_10_2_host", + "+python+python_3_10_2_host" + ], + [ + "+python+pythons_hub", + "python_3_10_4_host", + "+python+python_3_10_4_host" + ], + [ + "+python+pythons_hub", + "python_3_10_6_host", + "+python+python_3_10_6_host" + ], + [ + "+python+pythons_hub", + "python_3_10_8_host", + "+python+python_3_10_8_host" + ], + [ + "+python+pythons_hub", + "python_3_10_9_host", + "+python+python_3_10_9_host" + ], + [ + "+python+pythons_hub", + "python_3_10_host", + "+python+python_3_10_host" + ], + [ + "+python+pythons_hub", + "python_3_11_10_host", + "+python+python_3_11_10_host" + ], + [ + "+python+pythons_hub", + "python_3_11_11_host", + "+python+python_3_11_11_host" + ], + [ + "+python+pythons_hub", + "python_3_11_1_host", + "+python+python_3_11_1_host" + ], + [ + "+python+pythons_hub", + "python_3_11_3_host", + "+python+python_3_11_3_host" + ], + [ + "+python+pythons_hub", + "python_3_11_4_host", + "+python+python_3_11_4_host" + ], + [ + "+python+pythons_hub", + "python_3_11_5_host", + "+python+python_3_11_5_host" + ], + [ + "+python+pythons_hub", + "python_3_11_6_host", + "+python+python_3_11_6_host" + ], + [ + "+python+pythons_hub", + "python_3_11_7_host", + "+python+python_3_11_7_host" + ], + [ + "+python+pythons_hub", + "python_3_11_8_host", + "+python+python_3_11_8_host" + ], + [ + "+python+pythons_hub", + "python_3_11_9_host", + "+python+python_3_11_9_host" + ], + [ + "+python+pythons_hub", + "python_3_11_host", + "+python+python_3_11_host" + ], + [ + "+python+pythons_hub", + "python_3_12_0_host", + "+python+python_3_12_0_host" + ], + [ + "+python+pythons_hub", + "python_3_12_1_host", + "+python+python_3_12_1_host" + ], + [ + "+python+pythons_hub", + "python_3_12_2_host", + "+python+python_3_12_2_host" + ], + [ + "+python+pythons_hub", + "python_3_12_3_host", + "+python+python_3_12_3_host" + ], + [ + "+python+pythons_hub", + "python_3_12_4_host", + "+python+python_3_12_4_host" + ], + [ + "+python+pythons_hub", + "python_3_12_7_host", + "+python+python_3_12_7_host" + ], + [ + "+python+pythons_hub", + "python_3_12_8_host", + "+python+python_3_12_8_host" + ], + [ + "+python+pythons_hub", + "python_3_12_9_host", + "+python+python_3_12_9_host" + ], + [ + "+python+pythons_hub", + "python_3_12_host", + "+python+python_3_12_host" + ], + [ + "+python+pythons_hub", + "python_3_13_0_host", + "+python+python_3_13_0_host" + ], + [ + "+python+pythons_hub", + "python_3_13_1_host", + "+python+python_3_13_1_host" + ], + [ + "+python+pythons_hub", + "python_3_13_2_host", + "+python+python_3_13_2_host" + ], + [ + "+python+pythons_hub", + "python_3_13_host", + "+python+python_3_13_host" + ], + [ + "+python+pythons_hub", + "python_3_8_20_host", + "+python+python_3_8_20_host" + ], + [ + "+python+pythons_hub", + "python_3_8_host", + "+python+python_3_8_host" + ], + [ + "+python+pythons_hub", + "python_3_9_10_host", + "+python+python_3_9_10_host" + ], + [ + "+python+pythons_hub", + "python_3_9_12_host", + "+python+python_3_9_12_host" + ], + [ + "+python+pythons_hub", + "python_3_9_13_host", + "+python+python_3_9_13_host" + ], + [ + "+python+pythons_hub", + "python_3_9_15_host", + "+python+python_3_9_15_host" + ], + [ + "+python+pythons_hub", + "python_3_9_16_host", + "+python+python_3_9_16_host" + ], + [ + "+python+pythons_hub", + "python_3_9_17_host", + "+python+python_3_9_17_host" + ], + [ + "+python+pythons_hub", + "python_3_9_18_host", + "+python+python_3_9_18_host" + ], + [ + "+python+pythons_hub", + "python_3_9_19_host", + "+python+python_3_9_19_host" + ], + [ + "+python+pythons_hub", + "python_3_9_20_host", + "+python+python_3_9_20_host" + ], + [ + "+python+pythons_hub", + "python_3_9_21_host", + "+python+python_3_9_21_host" + ], + [ + "+python+pythons_hub", + "python_3_9_host", + "+python+python_3_9_host" + ], + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ] + ] + } + }, + "//python/uv:uv.bzl%uv": { + "general": { + "bzlTransitiveDigest": "974EMOCTeL5Jb/qml3KxnNfNQdofzzFZ8iWdijj0+tE=", + "usagesDigest": "bhObcl0GzSNBmZQBAHFo0gtLCgPUSlPbWZBi4MctAQI=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "uv_0_6_2_aarch64_apple_darwin": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "aarch64-apple-darwin", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-aarch64-apple-darwin.tar.gz" + ], + "sha256": "4af802a1216053650dd82eee85ea4241994f432937d41c8b0bc90f2639e6ae14" + } + }, + "uv_0_6_2_aarch64_unknown_linux_gnu": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "aarch64-unknown-linux-gnu", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-aarch64-unknown-linux-gnu.tar.gz" + ], + "sha256": "ca4c08724764a2b6c8f2173c4e3ca9dcde0d9d328e73b4d725cfb6b17a925eed" + } + }, + "uv_0_6_2_powerpc64_unknown_linux_gnu": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "powerpc64-unknown-linux-gnu", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-powerpc64-unknown-linux-gnu.tar.gz" + ], + "sha256": "de17553549280fd877452dd1f7f9d0a604e3544bfad007b8ec0b9943f103796f" + } + }, + "uv_0_6_2_powerpc64le_unknown_linux_gnu": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "powerpc64le-unknown-linux-gnu", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-powerpc64le-unknown-linux-gnu.tar.gz" + ], + "sha256": "f341fd4874d2d007135626a0657d1478f331a78991d8a1a06aaa0d52fbe16183" + } + }, + "uv_0_6_2_s390x_unknown_linux_gnu": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "s390x-unknown-linux-gnu", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-s390x-unknown-linux-gnu.tar.gz" + ], + "sha256": "17fd89bd8de75da9c91baf918b8079c1f1f92bb6a398f0cfbc5ddefe0c7f0ee5" + } + }, + "uv_0_6_2_x86_64_apple_darwin": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "x86_64-apple-darwin", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-x86_64-apple-darwin.tar.gz" + ], + "sha256": "2b9e78b2562aea93f13e42df1177cb07c59a4d4f1c8ff8907d0c31f3a5e5e8db" + } + }, + "uv_0_6_2_x86_64_pc_windows_msvc": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "x86_64-pc-windows-msvc", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-x86_64-pc-windows-msvc.zip" + ], + "sha256": "5f33c3cc5c183775cc51b3e661a0d2ce31142d32a50406a67c7ad0321fc841d9" + } + }, + "uv_0_6_2_x86_64_unknown_linux_gnu": { + "repoRuleId": "@@//python/uv/private:uv_repository.bzl%uv_repository", + "attributes": { + "version": "0.6.2", + "platform": "x86_64-unknown-linux-gnu", + "urls": [ + "https://github.com/astral-sh/uv/releases/download/0.6.2/uv-x86_64-unknown-linux-gnu.tar.gz" + ], + "sha256": "37ea31f099678a3bee56f8a757d73551aad43f8025d377a8dde80dd946c1b7f2" + } + }, + "uv": { + "repoRuleId": "@@//python/uv/private:uv_toolchains_repo.bzl%uv_toolchains_repo", + "attributes": { + "toolchain_type": "'@@//python/uv:uv_toolchain_type'", + "toolchain_names": [ + "0_6_2_aarch64_apple_darwin", + "0_6_2_aarch64_unknown_linux_gnu", + "0_6_2_powerpc64_unknown_linux_gnu", + "0_6_2_powerpc64le_unknown_linux_gnu", + "0_6_2_s390x_unknown_linux_gnu", + "0_6_2_x86_64_apple_darwin", + "0_6_2_x86_64_pc_windows_msvc", + "0_6_2_x86_64_unknown_linux_gnu" + ], + "toolchain_implementations": { + "0_6_2_aarch64_apple_darwin": "@uv_0_6_2_aarch64_apple_darwin//:uv_toolchain", + "0_6_2_aarch64_unknown_linux_gnu": "@uv_0_6_2_aarch64_unknown_linux_gnu//:uv_toolchain", + "0_6_2_powerpc64_unknown_linux_gnu": "@uv_0_6_2_powerpc64_unknown_linux_gnu//:uv_toolchain", + "0_6_2_powerpc64le_unknown_linux_gnu": "@uv_0_6_2_powerpc64le_unknown_linux_gnu//:uv_toolchain", + "0_6_2_s390x_unknown_linux_gnu": "@uv_0_6_2_s390x_unknown_linux_gnu//:uv_toolchain", + "0_6_2_x86_64_apple_darwin": "@uv_0_6_2_x86_64_apple_darwin//:uv_toolchain", + "0_6_2_x86_64_pc_windows_msvc": "@uv_0_6_2_x86_64_pc_windows_msvc//:uv_toolchain", + "0_6_2_x86_64_unknown_linux_gnu": "@uv_0_6_2_x86_64_unknown_linux_gnu//:uv_toolchain" + }, + "toolchain_compatible_with": { + "0_6_2_aarch64_apple_darwin": [ + "'@@platforms//os:macos'", + "'@@platforms//cpu:aarch64'" + ], + "0_6_2_aarch64_unknown_linux_gnu": [ + "'@@platforms//os:linux'", + "'@@platforms//cpu:aarch64'" + ], + "0_6_2_powerpc64_unknown_linux_gnu": [ + "'@@platforms//os:linux'", + "'@@platforms//cpu:ppc'" + ], + "0_6_2_powerpc64le_unknown_linux_gnu": [ + "'@@platforms//os:linux'", + "'@@platforms//cpu:ppc64le'" + ], + "0_6_2_s390x_unknown_linux_gnu": [ + "'@@platforms//os:linux'", + "'@@platforms//cpu:s390x'" + ], + "0_6_2_x86_64_apple_darwin": [ + "'@@platforms//os:macos'", + "'@@platforms//cpu:x86_64'" + ], + "0_6_2_x86_64_pc_windows_msvc": [ + "'@@platforms//os:windows'", + "'@@platforms//cpu:x86_64'" + ], + "0_6_2_x86_64_unknown_linux_gnu": [ + "'@@platforms//os:linux'", + "'@@platforms//cpu:x86_64'" + ] + }, + "toolchain_target_settings": {} + } + } + }, + "recordedRepoMappingEntries": [ + [ + "", + "platforms", + "platforms" + ] + ] + } + }, + "@@buildifier_prebuilt+//:defs.bzl%buildifier_prebuilt_deps_extension": { + "general": { + "bzlTransitiveDigest": "BQ67MS38sDZxeQEfUs4vghLhs3+m4IXU/i7XC50fl9s=", + "usagesDigest": "JCqhJg+TeFVLBlrKVGI0Npi9RChNqkZQAh9TYfbAobs=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "buildifier_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216" + } + }, + "buildifier_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-darwin-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6" + } + }, + "buildifier_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce" + } + }, + "buildifier_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-linux-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080" + } + }, + "buildifier_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildifier-windows-amd64.exe" + ], + "downloaded_file_path": "buildifier.exe", + "executable": true, + "sha256": "92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135" + } + }, + "buildozer_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431" + } + }, + "buildozer_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-darwin-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7" + } + }, + "buildozer_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b" + } + }, + "buildozer_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-linux-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac" + } + }, + "buildozer_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.1.2/buildozer-windows-amd64.exe" + ], + "downloaded_file_path": "buildozer.exe", + "executable": true, + "sha256": "07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b" + } + }, + "buildifier_prebuilt_toolchains": { + "repoRuleId": "@@buildifier_prebuilt+//:defs.bzl%_buildifier_toolchain_setup", + "attributes": { + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"e2f4a67691c5f55634fbfb3850eb97dd91be0edd059d947b6c83d120682e0216\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"7549b5f535219ac957aa2a6069d46fbfc9ea3f74abd85fd3d460af4b1a2099a6\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"51bc947dabb7b14ec6fb1224464fbcf7a7cb138f1a10a3b328f00835f72852ce\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0ba6e8e3208b5a029164e542ddb5509e618f87b639ffe8cc2f54770022853080\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"92bdd284fbc6766fc3e300b434ff9e68ac4d76a06cb29d1bdefe79a102a8d135\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"4014751a4cc5e91a7dc4b64be7b30c565bd9014ae6d1879818dc624562a1d431\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"e78bd5357f2356067d4b0d49ec4e4143dd9b1308746afc6ff11b55b952f462d7\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"2aef0f1ef80a0140b8fe6e6a8eb822e14827d8855bfc6681532c7530339ea23b\",\"version\":\"v6.1.2\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"586e27630cbc242e8bd6fe8e24485eca8dcadea6410cc13cbe059202655980ac\",\"version\":\"v6.1.2\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"07664d5d08ee099f069cd654070cabf2708efaae9f52dc83921fa400c67a868b\",\"version\":\"v6.1.2\"}]" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "buildifier_prebuilt+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "buildifier_prebuilt+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "general": { + "bzlTransitiveDigest": "sFhcgPbDQehmbD1EOXzX4H1q/CD5df8zwG4kp4jbvr8=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_github_jetbrains_kotlin_git": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", + "attributes": { + "urls": [ + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" + } + }, + "com_github_pinterest_ktlint": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "urls": [ + "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + ], + "executable": true + } + }, + "rules_android": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", + "urls": [ + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_kotlin+", + "bazel_tools", + "bazel_tools" + ] + ] + } + } + } +} diff --git a/python/private/pypi/BUILD.bazel b/python/private/pypi/BUILD.bazel index d89dc6c228..04b97bfff1 100644 --- a/python/private/pypi/BUILD.bazel +++ b/python/private/pypi/BUILD.bazel @@ -424,5 +424,8 @@ bzl_library( bzl_library( name = "whl_target_platforms_bzl", srcs = ["whl_target_platforms.bzl"], - deps = [":parse_whl_name_bzl"], + deps = [ + ":parse_whl_name_bzl", + "//python/private:version_bzl", + ], ) diff --git a/python/private/pypi/evaluate_markers.bzl b/python/private/pypi/evaluate_markers.bzl index 191933596e..48dd582923 100644 --- a/python/private/pypi/evaluate_markers.bzl +++ b/python/private/pypi/evaluate_markers.bzl @@ -15,9 +15,7 @@ """A simple function that evaluates markers using a python interpreter.""" load(":deps.bzl", "record_files") -load(":pep508_env.bzl", "env") load(":pep508_evaluate.bzl", "evaluate") -load(":pep508_platform.bzl", "platform_from_str") load(":pep508_requirement.bzl", "requirement") load(":pypi_repo_utils.bzl", "pypi_repo_utils") @@ -30,22 +28,26 @@ SRCS = [ Label("//python/private/pypi/whl_installer:platform.py"), ] -def evaluate_markers(requirements, python_version = None): +def evaluate_markers(*, requirements, platforms): """Return the list of supported platforms per requirements line. Args: requirements: {type}`dict[str, list[str]]` of the requirement file lines to evaluate. - python_version: {type}`str | None` the version that can be used when evaluating the markers. + platforms: {type}`dict[str | struct]` TODO Returns: dict of string lists with target platforms """ ret = {} - for req_string, platforms in requirements.items(): + for req_string, platform_strings in requirements.items(): req = requirement(req_string) - for platform in platforms: - if evaluate(req.marker, env = env(platform_from_str(platform, python_version))): - ret.setdefault(req_string, []).append(platform) + for platform_str in platform_strings: + env = platforms.get(platform_str) + if not env: + fail("Please define platform: '{}'".format(platform_str)) + + if evaluate(req.marker, env = env): + ret.setdefault(req_string, []).append(platform_str) return ret diff --git a/python/private/pypi/extension.bzl b/python/private/pypi/extension.bzl index b79be6e038..269eeade09 100644 --- a/python/private/pypi/extension.bzl +++ b/python/private/pypi/extension.bzl @@ -25,10 +25,11 @@ load("//python/private:repo_utils.bzl", "repo_utils") load("//python/private:version.bzl", "version") load("//python/private:version_label.bzl", "version_label") load(":attrs.bzl", "use_isolated") -load(":evaluate_markers.bzl", "evaluate_markers_py", EVALUATE_MARKERS_SRCS = "SRCS") +load(":evaluate_markers.bzl", "evaluate_markers_py", EVALUATE_MARKERS_SRCS = "SRCS", evaluate_markers_star = "evaluate_markers") load(":hub_repository.bzl", "hub_repository", "whl_config_settings_to_json") load(":parse_requirements.bzl", "parse_requirements") load(":parse_whl_name.bzl", "parse_whl_name") +load(":pep508_env.bzl", "env") load(":pip_repository_attrs.bzl", "ATTRS") load(":requirements_files_by_platform.bzl", "requirements_files_by_platform") load(":simpleapi_download.bzl", "simpleapi_download") @@ -65,14 +66,28 @@ def _whl_mods_impl(whl_mods_dict): whl_mods = whl_mods, ) +def _platforms(*, python_version, minor_mapping, config): + platforms = {} + python_version = full_version( + version = python_version, + minor_mapping = minor_mapping, + ) + abi = "cp3{}".format(python_version[2:]) + + for platform, values in config["platforms"].items(): + key = "{}_{}".format(abi, platform) + platforms[key] = env(key) | values.env + return platforms + def _create_whl_repos( module_ctx, *, pip_attr, whl_overrides, + config, available_interpreters = INTERPRETER_LABELS, minor_mapping = MINOR_MAPPING, - evaluate_markers = evaluate_markers_py, + evaluate_markers = None, get_index_urls = None, enable_pipstar = False): """create all of the whl repositories @@ -81,6 +96,7 @@ def _create_whl_repos( module_ctx: {type}`module_ctx`. pip_attr: {type}`struct` - the struct that comes from the tag class iteration. whl_overrides: {type}`dict[str, struct]` - per-wheel overrides. + config: TODO. get_index_urls: A function used to get the index URLs available_interpreters: {type}`dict[str, Label]` The dictionary of available interpreters that have been registered using the `python` bzlmod extension. @@ -104,6 +120,11 @@ def _create_whl_repos( """ logger = repo_utils.logger(module_ctx, "pypi:create_whl_repos") python_interpreter_target = pip_attr.python_interpreter_target + platforms = _platforms( + python_version = pip_attr.python_version, + minor_mapping = minor_mapping, + config = config, + ) # containers to aggregate outputs from this function whl_map = {} @@ -160,23 +181,14 @@ def _create_whl_repos( whl_group_mapping = {} requirement_cycles = {} - requirements_by_platform = parse_requirements( - module_ctx, - requirements_by_platform = requirements_files_by_platform( - requirements_by_platform = pip_attr.requirements_by_platform, - requirements_linux = pip_attr.requirements_linux, - requirements_lock = pip_attr.requirements_lock, - requirements_osx = pip_attr.requirements_darwin, - requirements_windows = pip_attr.requirements_windows, - extra_pip_args = pip_attr.extra_pip_args, - python_version = full_version( - version = pip_attr.python_version, - minor_mapping = minor_mapping, - ), - logger = logger, - ), - extra_pip_args = pip_attr.extra_pip_args, - get_index_urls = get_index_urls, + if evaluate_markers: + pass + elif enable_pipstar: + evaluate_markers = lambda _, requirements: evaluate_markers_star( + requirements = requirements, + platforms = platforms, + ) + else: # NOTE @aignas 2024-08-02: , we will execute any interpreter that we find either # in the PATH or if specified as a label. We will configure the env # markers when evaluating the requirement lines based on the output @@ -191,14 +203,41 @@ def _create_whl_repos( # instances to perform this manipulation. This function should be executed # only once by the underlying code to minimize the overhead needed to # spin up a Python interpreter. - evaluate_markers = lambda module_ctx, requirements: evaluate_markers( + evaluate_markers = lambda module_ctx, requirements: evaluate_markers_py( module_ctx, requirements = requirements, python_interpreter = pip_attr.python_interpreter, python_interpreter_target = python_interpreter_target, srcs = pip_attr._evaluate_markers_srcs, logger = logger, + ) + + requirements_by_platform = parse_requirements( + module_ctx, + requirements_by_platform = requirements_files_by_platform( + requirements_by_platform = pip_attr.requirements_by_platform, + requirements_linux = pip_attr.requirements_linux, + requirements_lock = pip_attr.requirements_lock, + requirements_osx = pip_attr.requirements_darwin, + requirements_windows = pip_attr.requirements_windows, + extra_pip_args = pip_attr.extra_pip_args, + python_version = full_version( + version = pip_attr.python_version, + minor_mapping = minor_mapping, + ), + platforms = sorted(platforms), # Only pass the keys + logger = logger, ), + extra_pip_args = pip_attr.extra_pip_args, + get_index_urls = get_index_urls, + evaluate_markers = evaluate_markers, + select_whls = { + key: struct( + platforms = p.whl_platforms, + whl_limit = p.whl_limit, + ) + for key, p in config["platforms"].items() + }, logger = logger, ) @@ -342,6 +381,108 @@ def _whl_repo(*, src, whl_library_args, is_multiple_versions, download_only, net ), ) +def _configure(config, *, platform, constraint_values, target_settings, os_name, arch_name, override = False, **values): + """Set the value in the config if the value is provided""" + config.setdefault("platforms", {}) + if not platform: + if constraint_values or target_settings: + fail("`platform` name must be specified when specifying `constraint_values`, `target_settings` or `urls`") + elif constraint_values or target_settings: + if not override and config.get("platforms", {}).get(platform): + return + + config["platforms"][platform] = struct( + name = platform.replace("-", "_").lower(), + constraint_values = constraint_values, + target_settings = target_settings, + os_name = os_name, + arch_name = arch_name, + env = { + k[4:]: v + for k, v in values.items() + if k.startswith("env_") and v + }, + whl_platforms = values["whl_platforms"], + whl_limit = values["whl_limit"], + ) + else: + config["platforms"].pop(platform) + +def _configure_defaults(defaults): + # this is probably a test, so add sane defaults + for cpu in [ + "x86_64", + "aarch64", + # TODO @aignas 2025-05-19: only leave tier 0-1 cpus when stabilizing the + # `pip.default` extension. i.e. drop the below values - users will have to + # define themselves if they need them. + "arm", + "ppc", + "ppc64le", + "s390x", + ]: + _configure( + defaults, + arch_name = cpu, + constraint_values = [ + "@platforms//os:linux", + "@platforms//cpu:{}".format(cpu), + ], + env_platform_version = "0", + os_name = "linux", + platform = "linux_{}".format(cpu), + whl_platforms = [ + # this is by the order of preference. + # TODO @aignas 2025-05-23: how do we specify the default libc version? + "manylinux_*_{}".format(cpu), + "linux_*_{}".format(cpu), + "musllinux_*_{}".format(cpu), + ], + ) + for cpu, wheel_cpu_values in { + # this is by the order of preference. + "aarch64": [ + "arm64", + "universal2", + ], + "x86_64": [ + "x86_64", + "universal2", + "intel", + ], + }.items(): + _configure( + defaults, + arch_name = cpu, + constraint_values = [ + "@platforms//os:osx", + "@platforms//cpu:{}".format(cpu), + ], + # We choose the oldest non-EOL version at the time when we release `rules_python`. + # See https://endoflife.date/macos + env_platform_version = "14.0", + os_name = "osx", + platform = "osx_{}".format(cpu), + whl_platforms = [ + # TODO @aignas 2025-05-23: how do we specify the default osx version? + "macosx_*_{}".format(wheel_cpu) + for wheel_cpu in wheel_cpu_values + ], + ) + + _configure( + defaults, + arch_name = "x86_64", + constraint_values = [ + "@platforms//os:windows", + "@platforms//cpu:x86_64", + ], + env_platform_version = "0", + os_name = "windows", + platform = "windows_x86_64", + whl_platforms = ["win_amd64"], + ) + def parse_modules( module_ctx, _fail = fail, @@ -389,6 +530,41 @@ You cannot use both the additive_build_content and additive_build_content_file a srcs_exclude_glob = whl_mod.srcs_exclude_glob, ) + defaults = { + "platforms": {}, + } + for mod in module_ctx.modules: + if not (mod.is_root or mod.name == "rules_python"): + continue + + for tag in mod.tags.default: + _configure( + defaults, + arch_name = tag.arch_name, + constraint_values = tag.constraint_values, + # The env_ values is only used if the `PIPSTAR` is enabled + env_implementation_name = tag.env_implementation_name, + env_os_name = tag.env_os_name, + env_platform_machine = tag.env_platform_machine, + env_platform_release = tag.env_platform_release, + env_platform_system = tag.env_platform_system, + env_platform_version = tag.env_platform_version, + env_sys_platform = tag.env_sys_platform, + os_name = tag.os_name, + platform = tag.platform, + target_settings = tag.target_settings, + whl_limit = tag.whl_limit, + whl_platforms = tag.whl_platforms, + override = mod.is_root, + # TODO @aignas 2025-05-19: add more attr groups: + # * for AUTH + # * for index config + ) + + if not defaults["platforms"]: + _configure_defaults(defaults) + + # Merge override API with the builder? _overriden_whl_set = {} whl_overrides = {} for module in module_ctx.modules: @@ -498,11 +674,14 @@ You cannot use both the additive_build_content and additive_build_content_file a elif pip_attr.experimental_index_url_overrides: fail("'experimental_index_url_overrides' is a no-op unless 'experimental_index_url' is set") + # TODO @aignas 2025-05-19: superimpose the pip.parse on top of the defaults + # and then pass everything as pip_attr out = _create_whl_repos( module_ctx, pip_attr = pip_attr, get_index_urls = get_index_urls, whl_overrides = whl_overrides, + config = defaults, **kwargs ) hub_whl_map.setdefault(hub_name, {}) @@ -647,10 +826,102 @@ def _pip_impl(module_ctx): # NOTE @aignas 2025-04-15: this is set to be reproducible, because the # results after calling the PyPI index should be reproducible on each # machine. - return module_ctx.extension_metadata(reproducible = True) + return module_ctx.extension_metadata(reproducible = False) else: return None +_default_attrs = { + "arch_name": attr.string( + doc = """\ +The CPU architecture name to be used. + +:::{note} +Either this or {attr}`env_platform_machine` should be specified. +::: +""", + ), + "constraint_values": attr.label_list( + doc = """\ +The list of labels to {obj}`constraint_value` that will be used in the `hub repository` when +including python packages that are compatible with this platform. +""", + ), + "os_name": attr.string( + doc = """\ +The OS name to be used. + +:::{note} +Either this or the appropriate `env_*` attributes should be specified. +::: +""", + ), + "platform": attr.string( + doc = """\ +A platform identifier which will be used as the unique identifier within the extension evaluation. +If you are defining custom platforms in your project and don't want things to clash, use extension +[isolation] feature. + +[isolation]: https://bazel.build/rules/lib/globals/module#use_extension.isolate +""", + ), + # TODO @aignas 2025-05-19: use the following + "target_settings": attr.label_list( + doc = """\ +A list of labels to {obj}`config_setting` targets that must be satisfied by the target +configuration in order for this platform to be matched during analysis phase. +""", + ), + "whl_limit": attr.int( + doc = """\ +The limit of wheels that we are going to include per platform. +""", + ), + "whl_platforms": attr.string_list( + doc = """\ +The platform_tag values to consider as supported for the target platforms. + +For `manylinux` and `musllinux` platform tags, please use the `manylinux_x_y_` +or `musllinux_x_y_` syntax. +""", + ), +} | { + # The values for PEP508 env marker evaluation during the lock file parsing + "env_implementation_name": attr.string( + doc = "Value for `implementation_name` to evaluate environment markers. Defaults to `cpython`.", + ), + "env_os_name": attr.string( + doc = "Value for `os_name` to evaluate environment markers. Defaults to a value inferred from the {attr}`os_name`.", + ), + "env_platform_machine": attr.string( + doc = "Value for `platform_machine` to evaluate environment markers. Defaults to a value inferred from the {attr}`arch_name`.", + ), + "env_platform_release": attr.string( + doc = "Value for `platform_machine` to evaluate environment markers. Defaults to an empty value.", + ), + "env_platform_system": attr.string( + doc = "Value for `platform_system` to evaluate environment markers. Defaults to a value inferred from the {attr}`os_name`.", + ), + "env_platform_version": attr.string( + doc = "Value for `platform_machine` to evaluate environment markers. Defaults to `0`.", + ), + "env_sys_platform": attr.string( + doc = "Value for `sys_platform` to evaluate environment markers. Defaults to a value inferred from the {attr}`os_name`.", + ), + # TODO @aignas 2025-05-19: add wiring for the following +} | AUTH_ATTRS | { + # TODO @aignas 2025-05-19: add wiring for the following + # "extra_index_urls": attr.string_list(), + # "index_url": attr.string(), + # "index_url_overrides": attr.string_dict(), + # "simpleapi_skip": attr.string_list(), +} + +# _configure_attrs = _default_attrs | { +# "hub_name": attr.string(), +# "python_version": attr.string(), +# "requirements_txt": attr.label(), +# } + def _pip_parse_ext_attrs(**kwargs): """Get the attributes for the pip extension. @@ -907,6 +1178,21 @@ the BUILD files for wheels. """, implementation = _pip_impl, tag_classes = { + "default": tag_class( + attrs = _default_attrs, + doc = """\ +This tag class allows for more customization of how the configuration for the hub repositories is built. + +This is still experimental and may be changed or removed without any notice. + +:::{seealso} +The [environment markers][environment_markers] specification for the explanation of the +terms used in this extension. + +[environment_markers]: https://packaging.python.org/en/latest/specifications/dependency-specifiers/#environment-markers +::: +""", + ), "override": _override_tag, "parse": tag_class( attrs = _pip_parse_ext_attrs(), diff --git a/python/private/pypi/parse_requirements.bzl b/python/private/pypi/parse_requirements.bzl index bd2981efc0..6a62ab86cb 100644 --- a/python/private/pypi/parse_requirements.bzl +++ b/python/private/pypi/parse_requirements.bzl @@ -41,6 +41,7 @@ def parse_requirements( get_index_urls = None, evaluate_markers = None, extract_url_srcs = True, + select_whls = {}, logger = None): """Get the requirements with platforms that the requirements apply to. @@ -61,6 +62,7 @@ def parse_requirements( requirements line. extract_url_srcs: A boolean to enable extracting URLs from requirement lines to enable using bazel downloader. + select_whls: TODO. logger: repo_utils.logger or None, a simple struct to log diagnostic messages. Returns: @@ -198,6 +200,7 @@ def parse_requirements( index_urls = index_urls, env_marker_target_platforms = env_marker_target_platforms, extract_url_srcs = extract_url_srcs, + select_whls = select_whls, logger = logger, ), ) @@ -221,6 +224,7 @@ def _package_srcs( index_urls, logger, env_marker_target_platforms, + select_whls, extract_url_srcs): """A function to return sources for a particular package.""" srcs = [] @@ -228,6 +232,7 @@ def _package_srcs( whls, sdist = _add_dists( requirement = r, index_urls = index_urls.get(name), + include_whls = select_whls, logger = logger, ) @@ -315,7 +320,7 @@ def host_platform(ctx): repo_utils.get_platforms_cpu_name(ctx), ) -def _add_dists(*, requirement, index_urls, logger = None): +def _add_dists(*, requirement, index_urls, include_whls, logger = None): """Populate dists based on the information from the PyPI index. This function will modify the given requirements_by_platform data structure. @@ -323,6 +328,7 @@ def _add_dists(*, requirement, index_urls, logger = None): Args: requirement: The result of parse_requirements function. index_urls: The result of simpleapi_download. + include_whls: TODO logger: A logger for printing diagnostic info. """ @@ -392,6 +398,11 @@ def _add_dists(*, requirement, index_urls, logger = None): ])) # Filter out the wheels that are incompatible with the target_platforms. - whls = select_whls(whls = whls, want_platforms = requirement.target_platforms, logger = logger) + whls = select_whls( + whls = whls, + want_platforms = requirement.target_platforms, + include_whls = include_whls, + logger = logger, + ) return whls, sdist diff --git a/python/private/pypi/pip_repository.bzl b/python/private/pypi/pip_repository.bzl index 724fb6ddba..e63bd6c3d1 100644 --- a/python/private/pypi/pip_repository.bzl +++ b/python/private/pypi/pip_repository.bzl @@ -80,6 +80,16 @@ def _pip_repository_impl(rctx): requirements_osx = rctx.attr.requirements_darwin, requirements_windows = rctx.attr.requirements_windows, extra_pip_args = rctx.attr.extra_pip_args, + platforms = [ + "linux_aarch64", + "linux_arm", + "linux_ppc", + "linux_s390x", + "linux_x86_64", + "osx_aarch64", + "osx_x86_64", + "windows_x86_64", + ], ), extra_pip_args = rctx.attr.extra_pip_args, evaluate_markers = lambda rctx, requirements: evaluate_markers_py( diff --git a/python/private/pypi/requirements_files_by_platform.bzl b/python/private/pypi/requirements_files_by_platform.bzl index 9165c05bed..d823320444 100644 --- a/python/private/pypi/requirements_files_by_platform.bzl +++ b/python/private/pypi/requirements_files_by_platform.bzl @@ -16,20 +16,7 @@ load(":whl_target_platforms.bzl", "whl_target_platforms") -# TODO @aignas 2024-05-13: consider using the same platform tags as are used in -# the //python:versions.bzl -DEFAULT_PLATFORMS = [ - "linux_aarch64", - "linux_arm", - "linux_ppc", - "linux_s390x", - "linux_x86_64", - "osx_aarch64", - "osx_x86_64", - "windows_x86_64", -] - -def _default_platforms(*, filter): +def _default_platforms_from(*, filter, python_version, choose_from): if not filter: fail("Must specific a filter string, got: {}".format(filter)) @@ -48,11 +35,11 @@ def _default_platforms(*, filter): fail("The filter can only contain '*' at the end of it") if not prefix: - return DEFAULT_PLATFORMS + return [_platform(p, python_version) for p in choose_from] - return [p for p in DEFAULT_PLATFORMS if p.startswith(prefix)] + return [_platform(p, python_version) for p in choose_from if p.startswith(prefix)] else: - return [p for p in DEFAULT_PLATFORMS if filter in p] + return [_platform(p, python_version) for p in choose_from if filter in p] def _platforms_from_args(extra_pip_args): platform_values = [] @@ -107,6 +94,7 @@ def requirements_files_by_platform( requirements_windows = None, extra_pip_args = None, python_version = None, + platforms = [], logger = None, fail_fn = fail): """Resolve the requirement files by target platform. @@ -123,6 +111,7 @@ def requirements_files_by_platform( be joined with args fined in files. python_version: str or None. This is needed when the get_index_urls is specified. It should be of the form "3.x.x", + platforms: {type}`list[str]` the list of default platforms to choose from. logger: repo_utils.logger or None, a simple struct to log diagnostic messages. fail_fn (Callable[[str], None]): A failure function used in testing failure cases. @@ -144,11 +133,17 @@ def requirements_files_by_platform( ) return None - platforms = _platforms_from_args(extra_pip_args) + _default_platforms = lambda f: _default_platforms_from( + filter = f, + python_version = python_version, + choose_from = platforms, + ) + + platforms_from_args = _platforms_from_args(extra_pip_args) if logger: - logger.debug(lambda: "Platforms from pip args: {}".format(platforms)) + logger.debug(lambda: "Platforms from pip args: {}".format(platforms_from_args)) - if platforms: + if platforms_from_args: lock_files = [ f for f in [ @@ -168,7 +163,7 @@ def requirements_files_by_platform( return None files_by_platform = [ - (lock_files[0], platforms), + (lock_files[0], platforms_from_args), ] if logger: logger.debug(lambda: "Files by platform with the platform set in the args: {}".format(files_by_platform)) @@ -177,7 +172,7 @@ def requirements_files_by_platform( file: [ platform for filter_or_platform in specifier.split(",") - for platform in (_default_platforms(filter = filter_or_platform) if filter_or_platform.endswith("*") else [filter_or_platform]) + for platform in (_default_platforms(filter_or_platform) if filter_or_platform.endswith("*") else [filter_or_platform]) ] for file, specifier in requirements_by_platform.items() }.items() @@ -188,9 +183,9 @@ def requirements_files_by_platform( for f in [ # If the users need a greater span of the platforms, they should consider # using the 'requirements_by_platform' attribute. - (requirements_linux, _default_platforms(filter = "linux_*")), - (requirements_osx, _default_platforms(filter = "osx_*")), - (requirements_windows, _default_platforms(filter = "windows_*")), + (requirements_linux, _default_platforms("linux_*")), + (requirements_osx, _default_platforms("osx_*")), + (requirements_windows, _default_platforms("windows_*")), (requirements_lock, None), ]: if f[0]: @@ -216,7 +211,7 @@ def requirements_files_by_platform( configured_platforms[p] = file else: - default_platforms = [_platform(p, python_version) for p in DEFAULT_PLATFORMS] + default_platforms = _default_platforms("*") plats = [ p for p in default_platforms diff --git a/python/private/pypi/whl_target_platforms.bzl b/python/private/pypi/whl_target_platforms.bzl index 6ea3f120c3..322c8596b4 100644 --- a/python/private/pypi/whl_target_platforms.bzl +++ b/python/private/pypi/whl_target_platforms.bzl @@ -16,6 +16,7 @@ A starlark implementation of the wheel platform tag parsing to get the target platform. """ +load("//python/private:version.bzl", "version") load(":parse_whl_name.bzl", "parse_whl_name") # The order of the dictionaries is to keep definitions with their aliases next to each @@ -46,13 +47,43 @@ _OS_PREFIXES = { "win": "windows", } # buildifier: disable=unsorted-dict-items -def select_whls(*, whls, want_platforms = [], logger = None): +_PY310 = version.parse("3.10") +_PY313 = version.parse("3.13") + +# factor this out +def _is_supported(p, parsed, min_py_version): + if parsed.abi_tag in ["none", "abi3"]: + if not version.is_ge(p.version, min_py_version): + # unsupported on target plat + return 0, False + elif parsed.abi_tag not in p.abis: + # unsupported + return 0, False + + if parsed.platform_tag == "any": + return (len(p.whl_platforms), True) + + # TODO @aignas 2025-06-01: handle priority + for priority, match_plat in enumerate(p.whl_platforms): + head, _, tail = match_plat.partition("*") + for whl_plat in parsed.platform_tag.split("."): + if not tail and match_plat == whl_plat: + return (priority, True) + elif tail and whl_plat.startswith(head) and whl_plat.endswith(tail): + return (priority, True) + + return 0, False + +def select_whls(*, whls, want_platforms = {}, include_whls = {}, logger = None): """Select a subset of wheels suitable for target platforms from a list. Args: - whls(list[struct]): A list of candidates which have a `filename` - attribute containing the `whl` filename. - want_platforms(str): The platforms in "{abi}_{os}_{cpu}" or "{os}_{cpu}" format. + whls: {type}`list[struct]` candidates which have a `filename` attribute containing + the `whl` filename. + want_platforms: {type}`dict[str, struct]` The platforms in "{abi}_{os}_{cpu}" or + "{os}_{cpu}" format for the keys and the values are options for further fine + tuning the selection. + include_whls: TODO logger: A logger for printing diagnostic messages. Returns: @@ -62,119 +93,76 @@ def select_whls(*, whls, want_platforms = [], logger = None): if not whls: return [] - want_abis = { - "abi3": None, - "none": None, - } - - _want_platforms = {} - version_limit = None - + # TODO @aignas 2025-06-01: do this want_platforms conversion before parse_requirements + _want_platforms = [] for p in want_platforms: if not p.startswith("cp3"): - fail("expected all platforms to start with ABI, but got: {}".format(p)) + logger.fail("expected all platforms to start with ABI, but got: {}".format(p)) + return [] abi, _, os_cpu = p.partition("_") + target_version = version.parse(abi.replace("cp3", "3."), strict = True) abi, _, _ = abi.partition(".") - _want_platforms[os_cpu] = None - - # TODO @aignas 2025-04-20: add a test - _want_platforms["{}_{}".format(abi, os_cpu)] = None - - version_limit_candidate = int(abi[3:]) - if not version_limit: - version_limit = version_limit_candidate - if version_limit and version_limit != version_limit_candidate: - fail("Only a single python version is supported for now") - - # For some legacy implementations the wheels may target the `cp3xm` ABI - _want_platforms["{}m_{}".format(abi, os_cpu)] = None - want_abis[abi] = None - want_abis[abi + "m"] = None - - # Also add freethreaded wheels if we find them since we started supporting them - _want_platforms["{}t_{}".format(abi, os_cpu)] = None - want_abis[abi + "t"] = None - - want_platforms = sorted(_want_platforms) - - candidates = {} + want_abis = { + abi: None, + } + + # TODO @aignas 2025-05-31: move this to be defined by the configure flag + # TODO @aignas 2025-05-31: think about how the version is matched + if version.is_lt(target_version, _PY310): + # The `m` wheels are only present for old Python versions + want_abis["{}m".format(abi)] = None + elif version.is_lt(target_version, _PY313): + pass + else: + # Free threaded is present recently + want_abis["{}t".format(abi)] = None + + include = include_whls.get(os_cpu) + _want_platforms.append(struct( + name = p, + os_cpu = os_cpu, + abis = want_abis, + version = target_version, + whl_platforms = include.platforms, + whl_limit = include.whl_limit, + )) + + compatible = {} for whl in whls: parsed = parse_whl_name(whl.filename) - - if logger: - logger.trace(lambda: "Deciding whether to use '{}'".format(whl.filename)) - - supported_implementations = {} - whl_version_min = 0 - for tag in parsed.python_tag.split("."): - supported_implementations[tag[:2]] = None - - if tag.startswith("cp3") or tag.startswith("py3"): - version = int(tag[len("..3"):] or 0) - else: - # In this case it should be eithor "cp2" or "py2" and we will default - # to `whl_version_min` = 0 + python_tag = parsed.python_tag + _, _, python_tag = python_tag.rpartition(".") + min_py_version = version.parse(python_tag[2:], strict = True) + + # if not ("cp" in supported_implementations or "py" in supported_implementations): + # if logger: + # logger.trace(lambda: "Discarding the whl because the whl does not support CPython, whl supported implementations are: {}".format(supported_implementations)) + # continue + + for p in _want_platforms: + priority, is_supported = _is_supported(p, parsed, min_py_version) + if not is_supported: continue - if whl_version_min == 0 or version < whl_version_min: - whl_version_min = version - - if not ("cp" in supported_implementations or "py" in supported_implementations): - if logger: - logger.trace(lambda: "Discarding the whl because the whl does not support CPython, whl supported implementations are: {}".format(supported_implementations)) - continue - - if want_abis and parsed.abi_tag not in want_abis: - # Filter out incompatible ABIs - if logger: - logger.trace(lambda: "Discarding the whl because the whl abi did not match") - continue - - if whl_version_min > version_limit: - if logger: - logger.trace(lambda: "Discarding the whl because the whl supported python version is too high") - continue - - compatible = False - if parsed.platform_tag == "any": - compatible = True - else: - for p in whl_target_platforms(parsed.platform_tag, abi_tag = parsed.abi_tag.strip("m") if parsed.abi_tag.startswith("cp") else None): - if p.target_platform in want_platforms: - compatible = True - break - - if not compatible: - if logger: - logger.trace(lambda: "Discarding the whl because the whl does not support the desired platforms: {}".format(want_platforms)) - continue - - for implementation in supported_implementations: - candidates.setdefault( - ( - parsed.abi_tag, - parsed.platform_tag, - ), - {}, - ).setdefault( - ( - # prefer cp implementation - implementation == "cp", - # prefer higher versions - whl_version_min, - # prefer abi3 over none - parsed.abi_tag != "none", - # prefer cpx abi over abi3 - parsed.abi_tag != "abi3", - ), - [], - ).append(whl) - - return [ - candidates[key][sorted(v)[-1]][-1] - for key, v in candidates.items() - ] + entry = struct( + whl = whl.filename, + priority = priority, + ) + + # model this as a priority queue + new_values = compatible.get(p.name, []) + new_values.append(entry) + sorted(new_values, key = lambda x: -x.priority) + compatible[p.name] = new_values[:p.whl_limit or 1] + + # return unique whls + candidates = { + c.whl: None + for p, values in compatible.items() + for c in values + } + return [whl for whl in whls if whl.filename in candidates] def whl_target_platforms(platform_tag, abi_tag = ""): """Parse the wheel abi and platform tags and return (os, cpu) tuples. diff --git a/tests/pypi/extension/extension_tests.bzl b/tests/pypi/extension/extension_tests.bzl index 8e325724f4..a86d98926f 100644 --- a/tests/pypi/extension/extension_tests.bzl +++ b/tests/pypi/extension/extension_tests.bzl @@ -49,13 +49,35 @@ simple==0.0.1 \ ], ) -def _mod(*, name, parse = [], override = [], whl_mods = [], is_root = True): +def _mod(*, name, default = [], parse = [], override = [], whl_mods = [], is_root = True): return struct( name = name, tags = struct( parse = parse, override = override, whl_mods = whl_mods, + # TODO @aignas 2025-05-19: add a test with the default tag + default = default or [ + _default( + arch_name = cpu, + constraint_values = [ + "@platforms//os:{}".format(os), + "@platforms//cpu:{}".format(cpu), + ], + os_name = os, + platform = "{}_{}".format(os, cpu), + ) + for os, cpu in [ + ("linux", "aarch64"), + ("linux", "arm"), + ("linux", "ppc"), + ("linux", "s390x"), + ("linux", "x86_64"), + ("osx", "aarch64"), + ("osx", "x86_64"), + ("windows", "x86_64"), + ] + ], ), is_root = is_root, ) @@ -77,6 +99,39 @@ def _parse_modules(env, **kwargs): ), ) +def _default( + arch_name = None, + constraint_values = None, + os_name = None, + platform = None, + target_settings = None, + env_implementation_name = None, + env_os_name = None, + env_platform_machine = None, + env_platform_release = None, + env_platform_system = None, + env_platform_version = None, + env_sys_platform = None, + whl_limit = None, + whl_platforms = None, +): + return struct( + arch_name = arch_name, + constraint_values = constraint_values, + os_name = os_name, + platform = platform, + target_settings = target_settings, + env_implementation_name = env_implementation_name, + env_os_name = env_os_name, + env_platform_machine = env_platform_machine, + env_platform_release = env_platform_release, + env_platform_system = env_platform_system, + env_platform_version = env_platform_version, + env_sys_platform = env_sys_platform, + whl_platforms = whl_platforms, + whl_limit = whl_limit, + ) + def _parse( *, hub_name, diff --git a/tests/pypi/requirements_files_by_platform/requirements_files_by_platform_tests.bzl b/tests/pypi/requirements_files_by_platform/requirements_files_by_platform_tests.bzl index b729b0eaf0..6688d72ffe 100644 --- a/tests/pypi/requirements_files_by_platform/requirements_files_by_platform_tests.bzl +++ b/tests/pypi/requirements_files_by_platform/requirements_files_by_platform_tests.bzl @@ -15,10 +15,27 @@ "" load("@rules_testing//lib:test_suite.bzl", "test_suite") -load("//python/private/pypi:requirements_files_by_platform.bzl", "requirements_files_by_platform") # buildifier: disable=bzl-visibility +load("//python/private/pypi:requirements_files_by_platform.bzl", _sut = "requirements_files_by_platform") # buildifier: disable=bzl-visibility _tests = [] +requirements_files_by_platform = lambda **kwargs: _sut( + platforms = kwargs.pop( + "platforms", + [ + "linux_aarch64", + "linux_arm", + "linux_ppc", + "linux_s390x", + "linux_x86_64", + "osx_aarch64", + "osx_x86_64", + "windows_x86_64", + ], + ), + **kwargs +) + def _test_fail_no_requirements(env): errors = [] requirements_files_by_platform( @@ -86,6 +103,28 @@ def _test_simple(env): _tests.append(_test_simple) +def _test_simple_limited(env): + for got in [ + requirements_files_by_platform( + requirements_lock = "requirements_lock", + platforms = ["linux_x86_64", "osx_x86_64"], + ), + requirements_files_by_platform( + requirements_by_platform = { + "requirements_lock": "*", + }, + platforms = ["linux_x86_64", "osx_x86_64"], + ), + ]: + env.expect.that_dict(got).contains_exactly({ + "requirements_lock": [ + "linux_x86_64", + "osx_x86_64", + ], + }) + +_tests.append(_test_simple_limited) + def _test_simple_with_python_version(env): for got in [ requirements_files_by_platform(