diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0-foss-2024a.eb b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0-foss-2024a.eb new file mode 100644 index 00000000000..917374084e8 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0-foss-2024a.eb @@ -0,0 +1,214 @@ +name = 'PyTorch' +version = '2.3.0' + +homepage = 'https://pytorch.org/' +description = """Tensors and Dynamic neural networks in Python with strong GPU acceleration. +PyTorch is a deep learning framework that puts Python first.""" + +toolchain = {'name': 'foss', 'version': '2024a'} + +source_urls = [GITHUB_RELEASE] +sources = ['%(namelower)s-v%(version)s.tar.gz'] +patches = [ + 'PyTorch-1.7.0_disable-dev-shm-test.patch', + 'PyTorch-1.12.1_add-hypothesis-suppression.patch', + 'PyTorch-1.12.1_fix-test_cpp_extensions_jit.patch', + 'PyTorch-1.12.1_fix-TestTorch.test_to.patch', + 'PyTorch-1.12.1_skip-test_round_robin.patch', + 'PyTorch-1.13.1_fix-gcc-12-warning-in-fbgemm.patch', + 'PyTorch-1.13.1_fix-protobuf-dependency.patch', + 'PyTorch-1.13.1_fix-warning-in-test-cpp-api.patch', + 'PyTorch-1.13.1_skip-failing-singular-grad-test.patch', + 'PyTorch-1.13.1_skip-tests-without-fbgemm.patch', + 'PyTorch-2.0.1_avoid-test_quantization-failures.patch', + 'PyTorch-2.0.1_fix-skip-decorators.patch', + 'PyTorch-2.0.1_fix-vsx-loadu.patch', + 'PyTorch-2.0.1_skip-failing-gradtest.patch', + 'PyTorch-2.0.1_skip-test_shuffle_reproducibility.patch', + 'PyTorch-2.0.1_skip-tests-skipped-in-subprocess.patch', + 'PyTorch-2.1.0_fix-vsx-vector-shift-functions.patch', + 'PyTorch-2.1.0_increase-tolerance-functorch-test_vmapvjpvjp.patch', + 'PyTorch-2.1.0_remove-test-requiring-online-access.patch', + 'PyTorch-2.1.0_skip-diff-test-on-ppc.patch', + 'PyTorch-2.1.0_skip-dynamo-test_predispatch.patch', + 'PyTorch-2.1.0_skip-test_jvp_linalg_det_singular.patch', + 'PyTorch-2.1.2_skip-cpu_repro-test-without-vectorization.patch', + 'PyTorch-2.1.2_workaround_dynamo_failure_without_nnpack.patch', + 'PyTorch-2.3.0_avoid_caffe2_test_cpp_jit.patch', + 'PyTorch-2.3.0_disable_DataType_dependent_test_if_tensorboard_is_not_available.patch', + 'PyTorch-2.3.0_disable_test_linear_package_if_no_half_types_are_available.patch', + 'PyTorch-2.3.0_disable_tests_which_need_network_download.patch', + 'PyTorch-2.3.0_disable-gcc12-warning.patch', + 'PyTorch-2.3.0_fix-cpuinfo-bug-with-smt.patch', + 'PyTorch-2.3.0_increase-tolerance-test_jit-test_freeze_conv_relu_fusion.patch', + 'PyTorch-2.3.0_fix_missing_masked_load_for_int_type.patch', + 'PyTorch-2.3.0_remove-fsspec-test.patch', + 'PyTorch-2.3.0_fix-compat-with-pytest-8.2.patch', + 'PyTorch-2.3.0_fix-mkldnn-avx512-f32-bias.patch', + 'PyTorch-2.3.0_fix-pytest-7-compat.patch', + 'PyTorch-2.3.0_fix-segfault-in-filestore-on-python-3.12.patch', + 'PyTorch-2.3.0_fix-sympy-1.13-compat.patch', + 'PyTorch-2.3.0_fix-test_extension_backend-without-vectorization.patch', + 'PyTorch-2.3.0_fix-test_fine_tuning.patch', + 'PyTorch-2.3.0_no-cuda-stubs-rpath.patch', + 'PyTorch-2.3.0_skip-test-logaddexp-complex-for-scipy-1.13.patch', + 'PyTorch-2.3.0_skip_test_sdpa_nn_functional_scaled_dot_product_attention_cpu.patch', + 'PyTorch-2.3.0_skip_test_var_mean_differentiable.patch', + 'PyTorch-2.3.0_skip-test_init_from_local_shards.patch', +] +checksums = [ + {'pytorch-v2.3.0.tar.gz': '69579513b26261bbab32e13b7efc99ad287fcf3103087f2d4fdf1adacd25316f'}, + {'PyTorch-1.7.0_disable-dev-shm-test.patch': '622cb1eaeadc06e13128a862d9946bcc1f1edd3d02b259c56a9aecc4d5406b8a'}, + {'PyTorch-1.12.1_add-hypothesis-suppression.patch': + 'e71ffb94ebe69f580fa70e0de84017058325fdff944866d6bd03463626edc32c'}, + {'PyTorch-1.12.1_fix-test_cpp_extensions_jit.patch': + '1efc9850c431d702e9117d4766277d3f88c5c8b3870997c9974971bce7f2ab83'}, + {'PyTorch-1.12.1_fix-TestTorch.test_to.patch': '75f27987c3f25c501e719bd2b1c70a029ae0ee28514a97fe447516aee02b1535'}, + {'PyTorch-1.12.1_skip-test_round_robin.patch': '63d4849b78605aa088fdff695637d9473ea60dee603a3ff7f788690d70c55349'}, + {'PyTorch-1.13.1_fix-gcc-12-warning-in-fbgemm.patch': + '5c7be91a6096083a0b1315efe0001537499c600f1f569953c6a2c7f4cc1d0910'}, + {'PyTorch-1.13.1_fix-protobuf-dependency.patch': + '8bd755a0cab7233a243bc65ca57c9630dfccdc9bf8c9792f0de4e07a644fcb00'}, + {'PyTorch-1.13.1_fix-warning-in-test-cpp-api.patch': + 'bdde0f2105215c95a54de64ec4b1a4520528510663174fef6d5b900eb1db3937'}, + {'PyTorch-1.13.1_skip-failing-singular-grad-test.patch': + '72688a57b2bb617665ad1a1d5e362c5111ae912c10936bb38a089c0204729f48'}, + {'PyTorch-1.13.1_skip-tests-without-fbgemm.patch': + '481e595f673baf8ae58b41697a6792b83048b0264aa79b422f48cd8c22948bb7'}, + {'PyTorch-2.0.1_avoid-test_quantization-failures.patch': + '02e3f47e4ed1d7d6077e26f1ae50073dc2b20426269930b505f4aefe5d2f33cd'}, + {'PyTorch-2.0.1_fix-skip-decorators.patch': '2039012cef45446065e1a2097839fe20bb29fe3c1dcc926c3695ebf29832e920'}, + {'PyTorch-2.0.1_fix-vsx-loadu.patch': 'a0ffa61da2d47c6acd09aaf6d4791e527d8919a6f4f1aa7ed38454cdcadb1f72'}, + {'PyTorch-2.0.1_skip-failing-gradtest.patch': '8030bdec6ba49b057ab232d19a7f1a5e542e47e2ec340653a246ec9ed59f8bc1'}, + {'PyTorch-2.0.1_skip-test_shuffle_reproducibility.patch': + '7047862abc1abaff62954da59700f36d4f39fcf83167a638183b1b7f8fec78ae'}, + {'PyTorch-2.0.1_skip-tests-skipped-in-subprocess.patch': + '166c134573a95230e39b9ea09ece3ad8072f39d370c9a88fb2a1e24f6aaac2b5'}, + {'PyTorch-2.1.0_fix-vsx-vector-shift-functions.patch': + '3793b4b878be1abe7791efcbd534774b87862cfe7dc4774ca8729b6cabb39e7e'}, + {'PyTorch-2.1.0_increase-tolerance-functorch-test_vmapvjpvjp.patch': + 'aef38adf1210d0c5455e91d7c7a9d9e5caad3ae568301e0ba9fc204309438e7b'}, + {'PyTorch-2.1.0_remove-test-requiring-online-access.patch': + '35184b8c5a1b10f79e511cc25db3b8a5585a5d58b5d1aa25dd3d250200b14fd7'}, + {'PyTorch-2.1.0_skip-diff-test-on-ppc.patch': '394157dbe565ffcbc1821cd63d05930957412156cc01e949ef3d3524176a1dda'}, + {'PyTorch-2.1.0_skip-dynamo-test_predispatch.patch': + '6298daf9ddaa8542850eee9ea005f28594ab65b1f87af43d8aeca1579a8c4354'}, + {'PyTorch-2.1.0_skip-test_jvp_linalg_det_singular.patch': + '5229ca88a71db7667a90ddc0b809b2c817698bd6e9c5aaabd73d3173cf9b99fe'}, + {'PyTorch-2.1.2_skip-cpu_repro-test-without-vectorization.patch': + '7ace835af60c58d9e0754a34c19d4b9a0c3a531f19e5d0eba8e2e49206eaa7eb'}, + {'PyTorch-2.1.2_workaround_dynamo_failure_without_nnpack.patch': + 'fb96eefabf394617bbb3fbd3a7a7c1aa5991b3836edc2e5d2a30e708bfe49ba1'}, + {'PyTorch-2.3.0_avoid_caffe2_test_cpp_jit.patch': + '041adcd91d994b8c2ab57d227f081cd57e572c157117b37171e1eb8eb576f8fc'}, + {'PyTorch-2.3.0_disable_DataType_dependent_test_if_tensorboard_is_not_available.patch': + '0dcbdfde6752c3ff54c5376f521b4a742167669feb7f0f1d4e1d4d55f72b664f'}, + {'PyTorch-2.3.0_disable_test_linear_package_if_no_half_types_are_available.patch': + '23416f2d9d5226695ec3fbea0671e3650c655c19deefd3f0f8ddab5afa50f485'}, + {'PyTorch-2.3.0_disable_tests_which_need_network_download.patch': + 'b7fd1a5135dfd4098cdc054182f7bf84a23ac98462a00477712182b5442da855'}, + {'PyTorch-2.3.0_disable-gcc12-warning.patch': 'a8a624e1a2a5f4c82610173e50bd0f853e49bd5621b432f5aac689f9f6eb1514'}, + {'PyTorch-2.3.0_fix-cpuinfo-bug-with-smt.patch': + '29fb95d1dba070133b513de050febd328ed36905a73f1ca135dc633f16beafa4'}, + {'PyTorch-2.3.0_increase-tolerance-test_jit-test_freeze_conv_relu_fusion.patch': + '6f8eba5b546129ea975cda1a8a7098ca3245ad2b040a31a98807ee6d69cad0d4'}, + {'PyTorch-2.3.0_fix_missing_masked_load_for_int_type.patch': + 'aa6ff764f3f7bf84372a8a257fe1b4ae6dc4b9744ad35f0f9015f2696c62a41e'}, + {'PyTorch-2.3.0_remove-fsspec-test.patch': '09be192401013cd8cd66add9d6565ac3e879e004d77e61145f826b768267ff61'}, + {'PyTorch-2.3.0_fix-compat-with-pytest-8.2.patch': + 'f249169f12b8603285b321cf6ae6e9062c09ab01fad2aa50c6c4601d5719126a'}, + {'PyTorch-2.3.0_fix-mkldnn-avx512-f32-bias.patch': + 'ee07d21c3ac7aeb0bd0e39507b18a417b9125284a529102929c4b5c6727c2976'}, + {'PyTorch-2.3.0_fix-pytest-7-compat.patch': 'a34c5e718f4b06d915504fc1ab49eaf168674ec6e498e6e040a882c2b31632ee'}, + {'PyTorch-2.3.0_fix-segfault-in-filestore-on-python-3.12.patch': + 'e9f213f52a255e082cda04cc98c328079f6731c587c0e6be44fbdeea857ef3a9'}, + {'PyTorch-2.3.0_fix-sympy-1.13-compat.patch': '3d6a1e766a4e5667b24f86f6e6a720e78283ab946fae1e749e71f89cfc62bbcc'}, + {'PyTorch-2.3.0_fix-test_extension_backend-without-vectorization.patch': + '36aa2d5ba175be17f4e996f4fb2d544fe477d4a0bd0644cd59a85063779afc8e'}, + {'PyTorch-2.3.0_fix-test_fine_tuning.patch': 'daa24801f3b2b5f76b639a14fba9a6ad84fe99ebed53401e217d02f94cfe48bf'}, + {'PyTorch-2.3.0_no-cuda-stubs-rpath.patch': '7ba26824b5def7379cff02ae821a080698e6affea0da45bc846e9ecb89939cb1'}, + {'PyTorch-2.3.0_skip-test-logaddexp-complex-for-scipy-1.13.patch': + '8149418df7a1180f29a6a6127bfe8cd33bcbdb1bff6e85911e1da749365080ab'}, + {'PyTorch-2.3.0_skip_test_sdpa_nn_functional_scaled_dot_product_attention_cpu.patch': + '7955f2655db3da18606574fdcbc5990be24098f49ad1db5e86ea756ea1cc506f'}, + {'PyTorch-2.3.0_skip_test_var_mean_differentiable.patch': + '9703fd0f1fca8916f6d79d83e9a7efe8e3f717362a5fdaa8f5d9da90d0c75018'}, + {'PyTorch-2.3.0_skip-test_init_from_local_shards.patch': + '90ed9c2870f57ee6dc032d00873a37e2217a2b92a13035ded1c25ad5306455f2'}, +] + +osdependencies = [OS_PKG_IBVERBS_DEV] + +builddependencies = [ + ('CMake', '3.29.3'), + ('hypothesis', '6.103.1'), + # For tests + ('pytest-flakefinder', '1.1.0'), + ('pytest-rerunfailures', '15.0'), + ('pytest-shard', '0.1.2'), + ('tlparse', '0.3.37'), + ('optree', '0.14.1'), + ('unittest-xml-reporting', '3.1.0'), +] + +dependencies = [ + ('Ninja', '1.12.1'), # Required for JIT compilation of C++ extensions + ('Python', '3.12.3'), + ('Python-bundle-PyPI', '2024.06'), + ('protobuf', '28.0'), + ('protobuf-python', '5.28.0'), + ('pybind11', '2.12.0'), + ('SciPy-bundle', '2024.05'), + ('PyYAML', '6.0.2'), + ('MPFR', '4.2.1'), + ('GMP', '6.3.0'), + ('numactl', '2.0.18'), + ('FFmpeg', '7.0.2'), + ('Pillow', '10.4.0'), + ('expecttest', '0.2.1'), + ('networkx', '3.4.2'), + ('sympy', '1.13.3'), + ('Z3', '4.13.0',), +] + +buildcmd = '%(python)s setup.py build' # Run the (long) build in the build step + +excluded_tests = { + '': [ + # This test seems to take too long on NVIDIA Ampere at least. + 'distributed/test_distributed_spawn', + # Broken on CUDA 11.6/11.7: https://github.com/pytorch/pytorch/issues/75375 + 'distributions/test_constraints', + # no xdoctest + 'doctests', + # failing on broadwell + # See https://github.com/easybuilders/easybuild-easyconfigs/issues/17712 + 'test_native_mha', + # intermittent failures on various systems + # See https://github.com/easybuilders/easybuild-easyconfigs/issues/17712 + 'distributed/rpc/test_tensorpipe_agent', + # This test is expected to fail when run in their CI, but won't in our case. + # It just checks for a "CI" env variable + 'test_ci_sanity_check_fail', + # This fails consistently and is disabled upstream + # See https://github.com/pytorch/pytorch/issues/100152 and + # https://github.com/pytorch/pytorch/pull/124712 + 'test_cpp_extensions_open_device_registration', + # These don't work with Python 3.12+, yet + 'distributed/_composable/test_replicate_with_compiler', + 'distributed/_tensor/experimental/test_tp_transform', + 'distributed/_tensor/test_dtensor_compile', + ] +} + +local_test_opts = '--continue-through-error --pipe-logs --verbose %(excluded_tests)s' +runtest = 'cd test && PYTHONUNBUFFERED=1 %(python)s run_test.py ' + local_test_opts + +# Especially test_quantization has a few corner cases that are triggered by the random input values, +# those cannot be easily avoided, see https://github.com/pytorch/pytorch/issues/107030 +# So allow a low number of tests to fail as the tests "usually" succeed +max_failed_tests = 6 + +tests = ['PyTorch-check-cpp-extension.py'] + +moduleclass = 'ai' diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-compat-with-pytest-8.2.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-compat-with-pytest-8.2.patch new file mode 100644 index 00000000000..d78c9293ff2 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-compat-with-pytest-8.2.patch @@ -0,0 +1,44 @@ +PyTest 8.2+ instantiates the test class with "runTest" causing an error: +> AttributeError: 'FSDPTest' object has no attribute 'runTest'. Did you mean: 'run_test'? + +Fix using backport of https://github.com/pytorch/pytorch/issues/127517 +author: Alexander Grund (TU Dresden) + +diff --git a/torch/testing/_internal/common_distributed.py b/torch/testing/_internal/common_distributed.py +index 48c8e4dabbb..b1910b5122c 100644 +--- a/torch/testing/_internal/common_distributed.py ++++ b/torch/testing/_internal/common_distributed.py +@@ -549,8 +549,14 @@ class MultiProcessTestCase(TestCase): + # or run the underlying test function. + def __init__(self, method_name: str = "runTest") -> None: + super().__init__(method_name) +- fn = getattr(self, method_name) +- setattr(self, method_name, self.join_or_run(fn)) ++ try: ++ fn = getattr(self, method_name) ++ setattr(self, method_name, self.join_or_run(fn)) ++ except AttributeError as e: ++ if method_name != 'runTest': ++ # we allow instantiation with no explicit method name ++ # but not an *incorrect* or missing method name ++ raise ValueError(f"no such test method in {self.__class__}: {method_name}") from e + + def setUp(self) -> None: + super().setUp() +@@ -964,8 +970,14 @@ class MultiThreadedTestCase(TestCase): + + def __init__(self, method_name: str = "runTest") -> None: + super().__init__(method_name) +- test_fn = getattr(self, method_name, None) +- setattr(self, method_name, self.join_or_run(test_fn)) ++ try: ++ fn = getattr(self, method_name) ++ setattr(self, method_name, self.join_or_run(fn)) ++ except AttributeError as e: ++ if method_name != 'runTest': ++ # we allow instantiation with no explicit method name ++ # but not an *incorrect* or missing method name ++ raise ValueError(f"no such test method in {self.__class__}: {method_name}") from e + + def perThreadSetUp(self): + # super().setUp() # TestCase.setUp() calls torch.manual_seed() diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-pytest-7-compat.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-pytest-7-compat.patch new file mode 100644 index 00000000000..f76aee644fc --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-pytest-7-compat.patch @@ -0,0 +1,47 @@ +PyTest 7 removed the ability to pass `None` to `pytest.warns()`, and expects no arguments instead. +This now leads to this error: +> TypeError: exceptions must be derived from Warning, not + +Update to use native warnings-as-errors handling. +See https://docs.pytest.org/en/7.0.x/how-to/capture-warnings.html#additional-use-cases-of-warnings-in-tests +Author: Alexander Grund (TU Dresden) +--- a/test/distributed/pipeline/sync/test_pipe.py ++++ b/test/distributed/pipeline/sync/test_pipe.py +@@ -9,6 +9,7 @@ + from collections import OrderedDict + from copy import deepcopy + import time ++import warnings + + import pytest + import random +@@ -87,23 +88,21 @@ def test_batch_size_indivisible(setup_rpc): + model = nn.Sequential(nn.Linear(1, 1)) + model = Pipe(model, chunks=4) + +- with pytest.warns(None) as record: ++ with warnings.catch_warnings(): ++ # Indivisible batch size is legal. ++ warnings.simplefilter("error") + model(torch.rand(7, 1)) + +- # Indivisible batch size is legal. +- assert not record +- + + def test_batch_size_small(setup_rpc): + model = nn.Sequential(nn.Linear(1, 1)) + model = Pipe(model, chunks=4) + +- with pytest.warns(None) as record: ++ with warnings.catch_warnings(): ++ # Batch size smaller than chunks is legal. ++ warnings.simplefilter("error") + model(torch.rand(2, 1)) + +- # Batch size smaller than chunks is legal. +- assert not record +- + + def test_checkpoint_mode(setup_rpc): + def count_grad_fn(grad_fn, name, visited=None): diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-segfault-in-filestore-on-python-3.12.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-segfault-in-filestore-on-python-3.12.patch new file mode 100644 index 00000000000..386693cb91b --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-segfault-in-filestore-on-python-3.12.patch @@ -0,0 +1,36 @@ +Fix a segmentation fault on Python 3.12 happening e.g. in distributed/test_store.py::FileStoreTest::test_compare_set + +Backport of https://github.com/pytorch/pytorch/pull/128212 + +Author: Alexander Grund (TU Dresden) + +diff --git a/torch/csrc/distributed/c10d/init.cpp b/torch/csrc/distributed/c10d/init.cpp +index 8056008579c..1d165dcbdfb 100644 +--- a/torch/csrc/distributed/c10d/init.cpp ++++ b/torch/csrc/distributed/c10d/init.cpp +@@ -997,16 +997,18 @@ Example:: + const std::string& key, + const std::string& expected_value, + const std::string& desired_value) -> py::bytes { +- std::vector expectedValue_( +- expected_value.begin(), expected_value.end()); +- std::vector desiredValue_( +- desired_value.begin(), desired_value.end()); +- auto value = +- store.compareSet(key, expectedValue_, desiredValue_); ++ auto value = [&]() { ++ py::gil_scoped_release guard; ++ std::vector expectedValue_( ++ expected_value.begin(), expected_value.end()); ++ std::vector desiredValue_( ++ desired_value.begin(), desired_value.end()); ++ return store.compareSet( ++ key, expectedValue_, desiredValue_); ++ }(); + return py::bytes( + reinterpret_cast(value.data()), value.size()); + }, +- py::call_guard(), + R"( + Inserts the key-value pair into the store based on the supplied ``key`` and + performs comparison between ``expected_value`` and ``desired_value`` before inserting. ``desired_value`` diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-sympy-1.13-compat.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-sympy-1.13-compat.patch new file mode 100644 index 00000000000..df2f3913be0 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-sympy-1.13-compat.patch @@ -0,0 +1,29 @@ +There is an assertion failure with sympy 1.13.3: +> File "torch/fx/experimental/symbolic_shapes.py", line 6403, in _evaluate_expr +> assert orig_expr == hint, f"{orig_expr} != {hint}" +> ^^^^^^^^^^^^^^^^^ +> AssertionError: 0 != 0.0 + +Backport of https://github.com/pytorch/pytorch/pull/147197 + +Author: Alexander Grund (TU Dresden) + +diff --git a/torch/fx/experimental/symbolic_shapes.py b/torch/fx/experimental/symbolic_shapes.py +index e9b7f56f974..7fea78c0c5e 100644 +--- a/torch/fx/experimental/symbolic_shapes.py ++++ b/torch/fx/experimental/symbolic_shapes.py +@@ -4105,9 +4105,11 @@ class ShapeEnv: + try: + if orig_expr.is_number: + self.log.debug("eval %s [trivial]", orig_expr) +- # NB: don't test float as there may be precision issues +- if isinstance(hint, (int, bool)): +- assert orig_expr == hint, f"{orig_expr} != {hint}" ++ if hint is not None: ++ if isinstance(hint, bool): ++ assert orig_expr == hint, f"{orig_expr} != {hint}" ++ else: ++ assert sympy.Eq(orig_expr, hint), f"{orig_expr} != {hint}" + return orig_expr + + expr = orig_expr diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-test_fine_tuning.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-test_fine_tuning.patch new file mode 100644 index 00000000000..62dbfe21134 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_fix-test_fine_tuning.patch @@ -0,0 +1,45 @@ +Fixes +> TypeError: get_state_dict() missing 1 required positional argument: 'optimizers' + +From 61d30b6e8acbd3cfb087761defa74f19f9be96bb Mon Sep 17 00:00:00 2001 +From: cdzhan +Date: Mon, 24 Jun 2024 20:02:08 +0800 +Subject: [PATCH] [easy][DCP] Fix test_fine_tuning.py for get/set_state_dict + API changes + +--- + test/distributed/checkpoint/e2e/test_fine_tuning.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/test/distributed/checkpoint/e2e/test_fine_tuning.py b/test/distributed/checkpoint/e2e/test_fine_tuning.py +index a93f242187709c..fd21524882c839 100644 +--- a/test/distributed/checkpoint/e2e/test_fine_tuning.py ++++ b/test/distributed/checkpoint/e2e/test_fine_tuning.py +@@ -9,7 +9,9 @@ + import torch.nn as nn + from torch.distributed._tensor import init_device_mesh + from torch.distributed.checkpoint.state_dict import ( ++ get_model_state_dict, + get_state_dict, ++ set_model_state_dict, + set_state_dict, + StateDictOptions, + ) +@@ -120,7 +122,7 @@ def finetune(self, pretrain_dir: str, finetune_dir: str) -> None: + # Simulate that the fine tuning restart after 3 iterations + for i in range(2): + # Load pretrain submodules checkpoint +- pretrain_state_dict, _ = get_state_dict( ++ pretrain_state_dict = get_model_state_dict( + model, + submodules={model.pretrain}, + options=StateDictOptions(keep_submodule_prefixes=False), +@@ -129,7 +131,7 @@ def finetune(self, pretrain_dir: str, finetune_dir: str) -> None: + {"model": pretrain_state_dict}, + storage_reader=dist_cp.FileSystemReader(pretrain_dir), + ) +- set_state_dict( ++ set_model_state_dict( + model, + model_state_dict={model.pretrain: pretrain_state_dict}, + options=StateDictOptions(strict=False), diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_increase-tolerance-test_jit-test_freeze_conv_relu_fusion.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_increase-tolerance-test_jit-test_freeze_conv_relu_fusion.patch new file mode 100644 index 00000000000..99e43d05aa4 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_increase-tolerance-test_jit-test_freeze_conv_relu_fusion.patch @@ -0,0 +1,19 @@ +test_jit, test_jit_legacy, test_jit_profiling fail in test_freeze_conv_relu_fusion with: +> Greatest absolute difference: 3.053247928619385e-05 at index (1, 1, 0, 0, 0) (up to 1e-05 allowed) +> Greatest relative difference: 0.0004548609140329063 at index (3, 1, 0, 0, 0) (up to 1.3e-06 allowed) + +Author: Alexander Grund (TU Dresden) + +diff --git a/test/jit/test_freezing.py b/test/jit/test_freezing.py +index f13c2b113b4..454df769d9c 100644 +--- a/test/jit/test_freezing.py ++++ b/test/jit/test_freezing.py +@@ -2795,7 +2795,7 @@ class TestFrozenOptimizations(JitTestCase): + else: + FileCheck().check("aten::cudnn_convolution_relu").run(frozen_mod.graph) + +- self.assertEqual(mod_eager(inp), frozen_mod(inp)) ++ self.assertEqual(mod_eager(inp), frozen_mod(inp), atol=4e-5, rtol=5e-4) + + @unittest.skipIf(not (TEST_CUDNN or TEST_WITH_ROCM), "requires CUDNN") + def test_freeze_conv_relu_fusion_not_forward(self): diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_remove-fsspec-test.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_remove-fsspec-test.patch new file mode 100644 index 00000000000..b207270fd1a --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_remove-fsspec-test.patch @@ -0,0 +1,67 @@ +Use part of a revert commit to avoid failures caused by: +> storage_reader = storage_reader or DCP.FileSystemReader() +> ^^^^^^^^^^^^^^^^^^^^^^ +> TypeError: FileSystemReader.__init__() missing 1 required positional argument: 'path' + +Author: Alexander Grund (TU Dresden) + +--- a/test/distributed/checkpoint/e2e/test_e2e_save_and_load.py ++++ b/test/distributed/checkpoint/e2e/test_e2e_save_and_load.py +@@ -171,28 +171,7 @@ class TestE2ESaveAndLoad(DTensorTestBase, VerifyStateDictMixin): + def test_e2e_async(self): + self._run_e2e_test(compile=False, model_type=ModelType.FSDP, async_op=True) + +- @with_comms +- @skip_if_lt_x_gpu(4) +- @with_temp_dir +- def test_fsspec(self): +- self._run_e2e_test( +- compile=False, +- model_type=ModelType.FSDP, +- storage_reader=DCP.FsspecReader(), +- storage_writer=DCP.FsspecWriter(), +- ) +- +- def _run_e2e_test( +- self, +- compile, +- model_type, +- async_op=False, +- storage_reader=None, +- storage_writer=None, +- ): +- storage_reader = storage_reader or DCP.FileSystemReader() +- storage_writer = storage_writer or DCP.FileSystemWriter() +- ++ def _run_e2e_test(self, compile, model_type, async_op=False): + model, optim = self._create_model(compile, ModelType.NONE) + _train(model, optim, train_steps=2) + +@@ -207,9 +186,7 @@ class TestE2ESaveAndLoad(DTensorTestBase, VerifyStateDictMixin): + } + + if async_op: +- f = saver.async_save( +- sd, checkpoint_id=self.temp_dir, storage_writer=storage_writer +- ) ++ f = saver.async_save(sd, checkpoint_id=self.temp_dir) + t = time.monotonic() + while not f.done(): + time.sleep(1) +@@ -217,7 +194,7 @@ class TestE2ESaveAndLoad(DTensorTestBase, VerifyStateDictMixin): + + f.result() + else: +- DCP.save(sd, checkpoint_id=self.temp_dir, storage_writer=storage_writer) ++ DCP.save(sd, checkpoint_id=self.temp_dir) + + loaded_stateful_obj = TestStatefulObj() + dist_model, dist_optim = self._create_model(compile, model_type) +@@ -232,7 +209,6 @@ class TestE2ESaveAndLoad(DTensorTestBase, VerifyStateDictMixin): + "s": loaded_stateful_obj, + }, + checkpoint_id=self.temp_dir, +- storage_reader=storage_reader, + ) + + self.assertEqual(original_stateful_obj, loaded_stateful_obj) diff --git a/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_skip-test-logaddexp-complex-for-scipy-1.13.patch b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_skip-test-logaddexp-complex-for-scipy-1.13.patch new file mode 100644 index 00000000000..40d3b0f17b3 --- /dev/null +++ b/easybuild/easyconfigs/p/PyTorch/PyTorch-2.3.0_skip-test-logaddexp-complex-for-scipy-1.13.patch @@ -0,0 +1,18 @@ +Scipy 1.13 on at least Python 3.12+ causes failures for complex logaddexp in these tests: + TestBinaryUfuncsCPU.test_logaddexp_cpu_complex64 + TestBinaryUfuncsCPU.test_logaddexp_cpu_complex128 +See https://github.com/pytorch/pytorch/issues/123655 + +diff --git a/test/test_binary_ufuncs.py b/test/test_binary_ufuncs.py +index 55ead3684cc..80937d23ff2 100644 +--- a/test/test_binary_ufuncs.py ++++ b/test/test_binary_ufuncs.py +@@ -3447,6 +3447,8 @@ class TestBinaryUfuncs(TestCase): + our_func = torch.logaddexp2 + elif dtype in (torch.complex64, torch.complex128): + # numpy has not implemented logaddexp for complex ++ if scipy.__version__.startswith('1.13.'): ++ return # scipy 1.13.0 has a bug in logaddexp for complex + def _ref_func(x, y): + return scipy.special.logsumexp(np.stack((x, y), axis=0), axis=0) + ref_func = _ref_func diff --git a/easybuild/easyconfigs/p/pytest-rerunfailures/pytest-rerunfailures-15.0-GCCcore-13.3.0.eb b/easybuild/easyconfigs/p/pytest-rerunfailures/pytest-rerunfailures-15.0-GCCcore-13.3.0.eb new file mode 100644 index 00000000000..a7d32510320 --- /dev/null +++ b/easybuild/easyconfigs/p/pytest-rerunfailures/pytest-rerunfailures-15.0-GCCcore-13.3.0.eb @@ -0,0 +1,25 @@ +easyblock = 'PythonPackage' + +name = 'pytest-rerunfailures' +version = '15.0' + +homepage = 'https://github.com/pytest-dev/pytest-rerunfailures' +description = "pytest plugin to re-run tests to eliminate flaky failures." + +toolchain = {'name': 'GCCcore', 'version': '13.3.0'} + +builddependencies = [ + ('binutils', '2.42'), +] +dependencies = [ + ('Python', '3.12.3'), + ('Python-bundle-PyPI', '2024.06'), +] + +# 8.2.2 is allowed with https://github.com/easybuilders/easybuild-easyconfigs/pull/22602 +preinstallopts = "sed -i 's|pytest!=8.2.2,|pytest|' pyproject.toml && " + +sources = [SOURCE_TAR_GZ] +checksums = ['2d9ac7baf59f4c13ac730b47f6fa80e755d1ba0581da45ce30b72fb3542b4474'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/p/pytest-shard/pytest-shard-0.1.2-GCCcore-13.3.0.eb b/easybuild/easyconfigs/p/pytest-shard/pytest-shard-0.1.2-GCCcore-13.3.0.eb new file mode 100644 index 00000000000..14649a289f9 --- /dev/null +++ b/easybuild/easyconfigs/p/pytest-shard/pytest-shard-0.1.2-GCCcore-13.3.0.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'pytest-shard' +version = '0.1.2' + +homepage = 'https://github.com/AdamGleave/pytest-shard' +description = """pytest plugin to support parallelism across multiple machines. + +Shards tests based on a hash of their test name enabling easy parallelism across machines, +suitable for a wide variety of continuous integration services. +Tests are split at the finest level of granularity, individual test cases, +enabling parallelism even if all of your tests are in a single file +(or even single parameterized test method). +""" + +toolchain = {'name': 'GCCcore', 'version': '13.3.0'} + +builddependencies = [ + ('binutils', '2.42'), +] +dependencies = [ + ('Python', '3.12.3'), + ('Python-bundle-PyPI', '2024.06'), +] + +sources = [SOURCE_TAR_GZ] +checksums = ['b86a967fbfd1c8e50295095ccda031b7e890862ee06531d5142844f4c1d1cd67'] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/t/tlparse/tlparse-0.3.37-GCCcore-13.3.0.eb b/easybuild/easyconfigs/t/tlparse/tlparse-0.3.37-GCCcore-13.3.0.eb new file mode 100644 index 00000000000..91e5623e1e3 --- /dev/null +++ b/easybuild/easyconfigs/t/tlparse/tlparse-0.3.37-GCCcore-13.3.0.eb @@ -0,0 +1,283 @@ +easyblock = 'CargoPythonPackage' + +name = 'tlparse' +version = '0.3.37' + +homepage = 'https://github.com/ezyang/tlparse' +description = "Parse structured PT2 (PyTorch 2) logs" + +toolchain = {'name': 'GCCcore', 'version': '13.3.0'} + +github_account = 'ezyang' +source_urls = [GITHUB_SOURCE] +sources = ['v%(version)s.tar.gz'] +checksums = [ + {'v0.3.37.tar.gz': '96f8401a902aee3aa33b132e6438503c7b1bbbd926c050844f0bbd4ee9b407a6'}, + {'adler2-2.0.0.tar.gz': '512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627'}, + {'aho-corasick-1.1.3.tar.gz': '8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916'}, + {'android-tzdata-0.1.1.tar.gz': 'e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0'}, + {'android_system_properties-0.1.5.tar.gz': '819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311'}, + {'anstream-0.6.18.tar.gz': '8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b'}, + {'anstyle-1.0.10.tar.gz': '55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9'}, + {'anstyle-parse-0.2.6.tar.gz': '3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9'}, + {'anstyle-query-1.1.2.tar.gz': '79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c'}, + {'anstyle-wincon-3.0.6.tar.gz': '2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125'}, + {'anyhow-1.0.94.tar.gz': 'c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7'}, + {'autocfg-1.4.0.tar.gz': 'ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26'}, + {'base16ct-0.2.0.tar.gz': '4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf'}, + {'base64-0.22.1.tar.gz': '72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6'}, + {'bincode-1.3.3.tar.gz': 'b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad'}, + {'bitflags-1.3.2.tar.gz': 'bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a'}, + {'block-buffer-0.10.4.tar.gz': '3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71'}, + {'bstr-1.11.0.tar.gz': '1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22'}, + {'bumpalo-3.16.0.tar.gz': '79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c'}, + {'byteorder-1.5.0.tar.gz': '1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b'}, + {'cc-1.2.2.tar.gz': 'f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc'}, + {'cfg-if-1.0.0.tar.gz': 'baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd'}, + {'chrono-0.4.38.tar.gz': 'a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401'}, + {'clap-4.5.22.tar.gz': '69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b'}, + {'clap_builder-4.5.22.tar.gz': '6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1'}, + {'clap_derive-4.5.18.tar.gz': '4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab'}, + {'clap_lex-0.7.3.tar.gz': 'afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7'}, + {'colorchoice-1.0.3.tar.gz': '5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990'}, + {'console-0.15.8.tar.gz': '0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb'}, + {'core-foundation-sys-0.8.7.tar.gz': '773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b'}, + {'crc32fast-1.4.2.tar.gz': 'a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3'}, + {'crypto-common-0.1.6.tar.gz': '1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3'}, + {'deranged-0.3.11.tar.gz': 'b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4'}, + {'digest-0.10.7.tar.gz': '9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292'}, + {'encode_unicode-0.3.6.tar.gz': 'a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f'}, + {'equivalent-1.0.1.tar.gz': '5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5'}, + {'flate2-1.0.35.tar.gz': 'c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c'}, + {'fnv-1.0.7.tar.gz': '3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1'}, + {'fxhash-0.2.1.tar.gz': 'c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c'}, + {'generic-array-0.14.7.tar.gz': '85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a'}, + {'hashbrown-0.15.2.tar.gz': 'bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289'}, + {'heck-0.5.0.tar.gz': '2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea'}, + {'html-escape-0.2.13.tar.gz': '6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476'}, + {'iana-time-zone-0.1.61.tar.gz': '235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220'}, + {'iana-time-zone-haiku-0.1.2.tar.gz': 'f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f'}, + {'indexmap-2.7.0.tar.gz': '62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f'}, + {'indicatif-0.17.9.tar.gz': 'cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281'}, + {'is_terminal_polyfill-1.70.1.tar.gz': '7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf'}, + {'itoa-1.0.14.tar.gz': 'd75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674'}, + {'js-sys-0.3.74.tar.gz': 'a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705'}, + {'lazy_static-1.5.0.tar.gz': 'bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe'}, + {'libc-0.2.167.tar.gz': '09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc'}, + {'linked-hash-map-0.5.6.tar.gz': '0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f'}, + {'log-0.4.22.tar.gz': 'a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24'}, + {'md-5-0.10.6.tar.gz': 'd89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf'}, + {'memchr-2.7.4.tar.gz': '78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3'}, + {'miniz_oxide-0.8.0.tar.gz': 'e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1'}, + {'normpath-1.3.0.tar.gz': 'c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed'}, + {'num-conv-0.1.0.tar.gz': '51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9'}, + {'num-traits-0.2.19.tar.gz': '071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841'}, + {'number_prefix-0.4.0.tar.gz': '830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3'}, + {'once_cell-1.20.2.tar.gz': '1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775'}, + {'onig-6.4.0.tar.gz': '8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f'}, + {'onig_sys-69.8.1.tar.gz': '7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7'}, + {'opener-0.6.1.tar.gz': '6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788'}, + {'pkg-config-0.3.31.tar.gz': '953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2'}, + {'plist-1.7.0.tar.gz': '42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016'}, + {'portable-atomic-1.10.0.tar.gz': '280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6'}, + {'powerfmt-0.2.0.tar.gz': '439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391'}, + {'proc-macro2-1.0.92.tar.gz': '37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0'}, + {'quick-xml-0.32.0.tar.gz': '1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2'}, + {'quote-1.0.37.tar.gz': 'b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af'}, + {'regex-1.11.1.tar.gz': 'b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191'}, + {'regex-automata-0.4.9.tar.gz': '809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908'}, + {'regex-syntax-0.8.5.tar.gz': '2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c'}, + {'ryu-1.0.18.tar.gz': 'f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f'}, + {'same-file-1.0.6.tar.gz': '93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502'}, + {'serde-1.0.215.tar.gz': '6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f'}, + {'serde_derive-1.0.215.tar.gz': 'ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0'}, + {'serde_json-1.0.133.tar.gz': 'c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377'}, + {'shlex-1.3.0.tar.gz': '0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64'}, + {'strsim-0.11.1.tar.gz': '7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f'}, + {'syn-2.0.90.tar.gz': '919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31'}, + {'syntect-5.2.0.tar.gz': '874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1'}, + {'thiserror-1.0.69.tar.gz': 'b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52'}, + {'thiserror-impl-1.0.69.tar.gz': '4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1'}, + {'time-0.3.37.tar.gz': '35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21'}, + {'time-core-0.1.2.tar.gz': 'ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3'}, + {'time-macros-0.2.19.tar.gz': '2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de'}, + {'tinytemplate-1.2.1.tar.gz': 'be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc'}, + {'typenum-1.17.0.tar.gz': '42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825'}, + {'unicode-ident-1.0.14.tar.gz': 'adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83'}, + {'unicode-width-0.1.14.tar.gz': '7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af'}, + {'unicode-width-0.2.0.tar.gz': '1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd'}, + {'utf8-width-0.1.7.tar.gz': '86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3'}, + {'utf8parse-0.2.2.tar.gz': '06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821'}, + {'version_check-0.9.5.tar.gz': '0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a'}, + {'walkdir-2.5.0.tar.gz': '29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b'}, + {'wasm-bindgen-0.2.97.tar.gz': 'd15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c'}, + {'wasm-bindgen-backend-0.2.97.tar.gz': '8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd'}, + {'wasm-bindgen-macro-0.2.97.tar.gz': '705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051'}, + {'wasm-bindgen-macro-support-0.2.97.tar.gz': '98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d'}, + {'wasm-bindgen-shared-0.2.97.tar.gz': '6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49'}, + {'web-time-1.1.0.tar.gz': '5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb'}, + {'winapi-0.3.9.tar.gz': '5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419'}, + {'winapi-i686-pc-windows-gnu-0.4.0.tar.gz': 'ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6'}, + {'winapi-util-0.1.9.tar.gz': 'cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb'}, + {'winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz': '712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f'}, + {'windows-core-0.52.0.tar.gz': '33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9'}, + {'windows-sys-0.52.0.tar.gz': '282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d'}, + {'windows-sys-0.59.0.tar.gz': '1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b'}, + {'windows-targets-0.52.6.tar.gz': '9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973'}, + {'windows_aarch64_gnullvm-0.52.6.tar.gz': '32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3'}, + {'windows_aarch64_msvc-0.52.6.tar.gz': '09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469'}, + {'windows_i686_gnu-0.52.6.tar.gz': '8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b'}, + {'windows_i686_gnullvm-0.52.6.tar.gz': '0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66'}, + {'windows_i686_msvc-0.52.6.tar.gz': '240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66'}, + {'windows_x86_64_gnu-0.52.6.tar.gz': '147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78'}, + {'windows_x86_64_gnullvm-0.52.6.tar.gz': '24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d'}, + {'windows_x86_64_msvc-0.52.6.tar.gz': '589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec'}, + {'yaml-rust-0.4.5.tar.gz': '56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85'}, +] + +builddependencies = [ + ('binutils', '2.42'), + ('maturin', '1.6.0'), +] + +dependencies = [ + ('Python', '3.12.3'), +] + +options = { + 'modulename': False, +} + +crates = [ + ('adler2', '2.0.0'), + ('aho-corasick', '1.1.3'), + ('android-tzdata', '0.1.1'), + ('android_system_properties', '0.1.5'), + ('anstream', '0.6.18'), + ('anstyle', '1.0.10'), + ('anstyle-parse', '0.2.6'), + ('anstyle-query', '1.1.2'), + ('anstyle-wincon', '3.0.6'), + ('anyhow', '1.0.94'), + ('autocfg', '1.4.0'), + ('base16ct', '0.2.0'), + ('base64', '0.22.1'), + ('bincode', '1.3.3'), + ('bitflags', '1.3.2'), + ('block-buffer', '0.10.4'), + ('bstr', '1.11.0'), + ('bumpalo', '3.16.0'), + ('byteorder', '1.5.0'), + ('cc', '1.2.2'), + ('cfg-if', '1.0.0'), + ('chrono', '0.4.38'), + ('clap', '4.5.22'), + ('clap_builder', '4.5.22'), + ('clap_derive', '4.5.18'), + ('clap_lex', '0.7.3'), + ('colorchoice', '1.0.3'), + ('console', '0.15.8'), + ('core-foundation-sys', '0.8.7'), + ('crc32fast', '1.4.2'), + ('crypto-common', '0.1.6'), + ('deranged', '0.3.11'), + ('digest', '0.10.7'), + ('encode_unicode', '0.3.6'), + ('equivalent', '1.0.1'), + ('flate2', '1.0.35'), + ('fnv', '1.0.7'), + ('fxhash', '0.2.1'), + ('generic-array', '0.14.7'), + ('hashbrown', '0.15.2'), + ('heck', '0.5.0'), + ('html-escape', '0.2.13'), + ('iana-time-zone', '0.1.61'), + ('iana-time-zone-haiku', '0.1.2'), + ('indexmap', '2.7.0'), + ('indicatif', '0.17.9'), + ('is_terminal_polyfill', '1.70.1'), + ('itoa', '1.0.14'), + ('js-sys', '0.3.74'), + ('lazy_static', '1.5.0'), + ('libc', '0.2.167'), + ('linked-hash-map', '0.5.6'), + ('log', '0.4.22'), + ('md-5', '0.10.6'), + ('memchr', '2.7.4'), + ('miniz_oxide', '0.8.0'), + ('normpath', '1.3.0'), + ('num-conv', '0.1.0'), + ('num-traits', '0.2.19'), + ('number_prefix', '0.4.0'), + ('once_cell', '1.20.2'), + ('onig', '6.4.0'), + ('onig_sys', '69.8.1'), + ('opener', '0.6.1'), + ('pkg-config', '0.3.31'), + ('plist', '1.7.0'), + ('portable-atomic', '1.10.0'), + ('powerfmt', '0.2.0'), + ('proc-macro2', '1.0.92'), + ('quick-xml', '0.32.0'), + ('quote', '1.0.37'), + ('regex', '1.11.1'), + ('regex-automata', '0.4.9'), + ('regex-syntax', '0.8.5'), + ('ryu', '1.0.18'), + ('same-file', '1.0.6'), + ('serde', '1.0.215'), + ('serde_derive', '1.0.215'), + ('serde_json', '1.0.133'), + ('shlex', '1.3.0'), + ('strsim', '0.11.1'), + ('syn', '2.0.90'), + ('syntect', '5.2.0'), + ('thiserror', '1.0.69'), + ('thiserror-impl', '1.0.69'), + ('time', '0.3.37'), + ('time-core', '0.1.2'), + ('time-macros', '0.2.19'), + ('tinytemplate', '1.2.1'), + ('typenum', '1.17.0'), + ('unicode-ident', '1.0.14'), + ('unicode-width', '0.1.14'), + ('unicode-width', '0.2.0'), + ('utf8-width', '0.1.7'), + ('utf8parse', '0.2.2'), + ('version_check', '0.9.5'), + ('walkdir', '2.5.0'), + ('wasm-bindgen', '0.2.97'), + ('wasm-bindgen-backend', '0.2.97'), + ('wasm-bindgen-macro', '0.2.97'), + ('wasm-bindgen-macro-support', '0.2.97'), + ('wasm-bindgen-shared', '0.2.97'), + ('web-time', '1.1.0'), + ('winapi', '0.3.9'), + ('winapi-i686-pc-windows-gnu', '0.4.0'), + ('winapi-util', '0.1.9'), + ('winapi-x86_64-pc-windows-gnu', '0.4.0'), + ('windows-core', '0.52.0'), + ('windows-sys', '0.52.0'), + ('windows-sys', '0.59.0'), + ('windows-targets', '0.52.6'), + ('windows_aarch64_gnullvm', '0.52.6'), + ('windows_aarch64_msvc', '0.52.6'), + ('windows_i686_gnu', '0.52.6'), + ('windows_i686_gnullvm', '0.52.6'), + ('windows_i686_msvc', '0.52.6'), + ('windows_x86_64_gnu', '0.52.6'), + ('windows_x86_64_gnullvm', '0.52.6'), + ('windows_x86_64_msvc', '0.52.6'), + ('yaml-rust', '0.4.5'), +] + +sanity_check_paths = { + 'files': ['bin/tlparse'], + 'dirs': [], +} + +sanity_check_commands = [ + 'tlparse --version', +] + +moduleclass = 'tools'