From 793cc7fa632c8a5d6262be9325d184e8224de7e3 Mon Sep 17 00:00:00 2001 From: SollyCB Date: Wed, 22 Jul 2026 18:59:57 +0000 Subject: [PATCH 1/8] pytorch - Less fraught mnist requirements install Its `requirements.txt` only lists torch and vision, so it should be noop except for pulling in other unmet deps. But rather than risk it pulling in thirdparty builds of these things if our build or install of torch/vision ever breaks for some reason, and then us not noticing, let's just install what it wants without potentially shooting ourselves in the foot. --- pytorch/06-run-example-mnist.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pytorch/06-run-example-mnist.sh b/pytorch/06-run-example-mnist.sh index 0e6809d..b8893ff 100755 --- a/pytorch/06-run-example-mnist.sh +++ b/pytorch/06-run-example-mnist.sh @@ -8,6 +8,12 @@ source pytorch/.venv/bin/activate # Pytorch tries to use and other GPUs leading to errors. export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0}" +# mnist's requirements.txt only lists torch and torchvision. It should be a +# noop to install deps via this file, except for pulling in deps, but rather +# than risk having something break and CI mistakenly installing and running +# the pip pytorch, let's just install pillow. +python -m pip install pillow + EPOCHS="${EPOCHS:-5}" cd examples/mnist From 6e7eb0adc87b045ad085073ecf16418df32654b3 Mon Sep 17 00:00:00 2001 From: SollyCB Date: Wed, 22 Jul 2026 20:27:25 +0000 Subject: [PATCH 2/8] pytorch - mnist pillow wtf --- pytorch/06-run-example-mnist.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pytorch/06-run-example-mnist.sh b/pytorch/06-run-example-mnist.sh index b8893ff..618a875 100755 --- a/pytorch/06-run-example-mnist.sh +++ b/pytorch/06-run-example-mnist.sh @@ -8,10 +8,11 @@ source pytorch/.venv/bin/activate # Pytorch tries to use and other GPUs leading to errors. export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0}" -# mnist's requirements.txt only lists torch and torchvision. It should be a -# noop to install deps via this file, except for pulling in deps, but rather -# than risk having something break and CI mistakenly installing and running -# the pip pytorch, let's just install pillow. +# FIXME: This can hopefully be imminently deleted. Something weird is happening +# with dependencies: it seemed that this install call was required or else mnist +# complained about not being able to find pillow (PIL), but reading the log +# after adding this call, the dependency is already satisfied and the example +# happily runs. python -m pip install pillow EPOCHS="${EPOCHS:-5}" From 236ebcb3341787cc2b813f464454a968e4f2c347 Mon Sep 17 00:00:00 2001 From: melanterite Date: Fri, 17 Jul 2026 04:51:01 +0100 Subject: [PATCH 3/8] for very extended pytorch comparisons --- pytorch/08-run-extendedtests.sh | 81 + pytorch/pytorch_extended_tests/.gitignore | 7 + pytorch/pytorch_extended_tests/README.md | 439 ++ .../pytorch_extended_tests/cases/README.md | 23 + .../pytorch_extended_tests/cases/__init__.py | 1 + .../cases/common/README.md | 15 + .../cases/common/__init__.py | 64 + .../cases/common/composite.py | 162 + .../cases/common/data.py | 41 + .../cases/common/demo.py | 121 + .../cases/common/dispatch.py | 29 + .../cases/common/learning.py | 152 + .../cases/common/mixed_precision.py | 96 + .../cases/common/models.py | 293 ++ .../cases/common/tensors.py | 73 + .../cases/common/workloads.py | 365 ++ .../cases/level_0_smoke_workloads/README.md | 14 + .../cases/level_0_smoke_workloads/__init__.py | 1 + .../test_demo_workloads.py | 140 + .../cases/level_1_core_tensor/__init__.py | 1 + .../test_elementwise_arithmetic.py | 172 + .../test_indexing_and_shape.py | 176 + .../test_tensor_creation_and_dtypes.py | 153 + .../test_transcendental_functions.py | 128 + .../test_type_promotion.py | 138 + .../level_2_numerical_kernels/__init__.py | 1 + .../test_convolution.py | 118 + .../test_eigensystems.py | 67 + .../test_factorisations.py | 93 + .../level_2_numerical_kernels/test_fft.py | 103 + .../test_linear_solve.py | 107 + .../test_matrix_multiplication.py | 121 + .../level_2_numerical_kernels/test_pooling.py | 154 + .../test_reductions_and_statistics.py | 171 + .../test_special_functions.py | 100 + .../level_3_autograd_and_learning/__init__.py | 1 + .../test_attention.py | 159 + .../test_autograd_elementwise.py | 122 + .../test_autograd_matrix_ops.py | 117 + .../test_losses.py | 115 + .../test_nn_linear_and_conv.py | 167 + .../test_normalisation.py | 154 + .../test_optimizer_adamw.py | 81 + .../test_optimizer_sgd.py | 81 + .../level_4_precision_and_execution/README.md | 10 + .../__init__.py | 1 + .../test_amp_bfloat16.py | 51 + .../test_amp_fp16.py | 85 + .../test_fp32_precision_modes.py | 101 + .../test_serialisation_roundtrip.py | 253 + .../cases/level_5_composite_models/README.md | 13 + .../level_5_composite_models/__init__.py | 1 + .../test_attention_block.py | 61 + .../test_cnn_block.py | 52 + .../test_mlp_block.py | 52 + .../cases/level_6_real_workloads/README.md | 18 + .../cases/level_6_real_workloads/__init__.py | 1 + .../test_cnn_training_workload.py | 71 + .../test_tabular_training_workload.py | 71 + .../test_transformer_training_workload.py | 77 + .../pytorch_extended_tests/config/README.md | 99 + .../pytorch_extended_tests/config/__init__.py | 21 + .../config/suite_config.py | 670 +++ .../config/suite_config_old.py | 670 +++ .../config/test_catalogue.py | 666 +++ .../datasets/FASHION_MNIST_LICENSE.txt | 7 + .../pytorch_extended_tests/datasets/README.md | 216 + .../datasets/THIRD_PARTY_DATASETS.md | 50 + .../datasets/dataset_manifest.json | 261 ++ .../datasets/generate_datasets.py | 1158 +++++ .../breast_cancer_wisconsin_v1/evaluation.npz | Bin 0 -> 14017 bytes .../breast_cancer_wisconsin_v1/metadata.json | 14 + .../preprocessing.npz | Bin 0 -> 911 bytes .../breast_cancer_wisconsin_v1/train.npz | Bin 0 -> 53119 bytes .../prepared/fashion_mnist_v1/evaluation.npz | Bin 0 -> 662950 bytes .../prepared/fashion_mnist_v1/metadata.json | 14 + .../prepared/fashion_mnist_v1/train.npz | Bin 0 -> 2661946 bytes .../attention_initial_state.npz | Bin 0 -> 17716 bytes .../prepared/model_inputs_v1/block_inputs.npz | Bin 0 -> 158808 bytes .../model_inputs_v1/cnn_initial_state.npz | Bin 0 -> 193106 bytes .../model_inputs_v1/linear_initial_state.npz | Bin 0 -> 636 bytes .../prepared/model_inputs_v1/metadata.json | 6 + .../model_inputs_v1/mlp_initial_state.npz | Bin 0 -> 6764 bytes .../sms_transformer_initial_state.npz | Bin 0 -> 560915 bytes .../numerical_inputs_v1/convolutions.npz | Bin 0 -> 60173 bytes .../numerical_inputs_v1/elementwise.npz | Bin 0 -> 14697 bytes .../prepared/numerical_inputs_v1/fft.npz | Bin 0 -> 18671 bytes .../prepared/numerical_inputs_v1/indexing.npz | Bin 0 -> 12446 bytes .../numerical_inputs_v1/linear_algebra.npz | Bin 0 -> 12561 bytes .../numerical_inputs_v1/matrix_operations.npz | Bin 0 -> 411050 bytes .../numerical_inputs_v1/metadata.json | 5 + .../numerical_inputs_v1/reductions.npz | Bin 0 -> 146623 bytes .../numerical_inputs_v1/special_functions.npz | Bin 0 -> 13036 bytes .../prepared/sms_spam_v1/evaluation.npz | Bin 0 -> 49816 bytes .../prepared/sms_spam_v1/metadata.json | 17 + .../datasets/prepared/sms_spam_v1/train.npz | Bin 0 -> 199241 bytes .../prepared/sms_spam_v1/vocabulary.json | 4098 +++++++++++++++++ .../run_pytorch_extended_tests.ps1 | 50 + .../manual_comparison_stuff/README.md | 117 + .../analyse_repeatability.py | 1665 +++++++ .../compare_environment_outputs.py | 874 ++++ .../compare_repeatability_analyses.py | 537 +++ .../comparison_graphs.py | 1017 ++++ .../comparison_policy.py | 422 ++ .../comparison_policy_template.json | 246 + .../level_0_first_look.py | 693 +++ .../manual_comparison_stuff/manual-how-to.md | 408 ++ .../src/pytorch_extended_tests/__init__.py | 5 + .../src/pytorch_extended_tests/case_api.py | 87 + .../datasets/__init__.py | 5 + .../datasets/validation.py | 166 + .../orchestrator/__init__.py | 1 + .../orchestrator/execution_plan.py | 120 + .../orchestrator/run_suite.py | 162 + .../orchestrator/run_test_file.py | 352 ++ .../orchestrator/subprocess_runner.py | 148 + .../precision_settings.py | 69 + .../results/__init__.py | 12 + .../results/artifact_writer.py | 227 + .../results/level_0_summary.py | 114 + .../results/observation.py | 127 + .../results/result_bundle.py | 129 + .../results/tensor_storage.py | 210 + .../pytorch_extended_tests/tools/README.md | 32 + .../tools/inspect_result_bundle.py | 208 + .../tools/validate_setup.py | 143 + 126 files changed, 22153 insertions(+) create mode 100755 pytorch/08-run-extendedtests.sh create mode 100644 pytorch/pytorch_extended_tests/.gitignore create mode 100644 pytorch/pytorch_extended_tests/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/common/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/composite.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/data.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/demo.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/dispatch.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/learning.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/mixed_precision.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/models.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/tensors.py create mode 100644 pytorch/pytorch_extended_tests/cases/common/workloads.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/test_demo_workloads.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_elementwise_arithmetic.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_indexing_and_shape.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_tensor_creation_and_dtypes.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_transcendental_functions.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_type_promotion.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_convolution.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_eigensystems.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_factorisations.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_fft.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_linear_solve.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_matrix_multiplication.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_pooling.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_reductions_and_statistics.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_special_functions.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_attention.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_elementwise.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_matrix_ops.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_losses.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_nn_linear_and_conv.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_normalisation.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_adamw.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_sgd.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_bfloat16.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_fp16.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_fp32_precision_modes.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_serialisation_roundtrip.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_5_composite_models/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/level_5_composite_models/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_attention_block.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_cnn_block.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_mlp_block.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_6_real_workloads/README.md create mode 100644 pytorch/pytorch_extended_tests/cases/level_6_real_workloads/__init__.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_cnn_training_workload.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_tabular_training_workload.py create mode 100644 pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_transformer_training_workload.py create mode 100644 pytorch/pytorch_extended_tests/config/README.md create mode 100644 pytorch/pytorch_extended_tests/config/__init__.py create mode 100644 pytorch/pytorch_extended_tests/config/suite_config.py create mode 100644 pytorch/pytorch_extended_tests/config/suite_config_old.py create mode 100644 pytorch/pytorch_extended_tests/config/test_catalogue.py create mode 100644 pytorch/pytorch_extended_tests/datasets/FASHION_MNIST_LICENSE.txt create mode 100644 pytorch/pytorch_extended_tests/datasets/README.md create mode 100644 pytorch/pytorch_extended_tests/datasets/THIRD_PARTY_DATASETS.md create mode 100644 pytorch/pytorch_extended_tests/datasets/dataset_manifest.json create mode 100644 pytorch/pytorch_extended_tests/datasets/generate_datasets.py create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/evaluation.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/metadata.json create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/preprocessing.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/train.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/evaluation.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/metadata.json create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/train.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/attention_initial_state.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/block_inputs.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/cnn_initial_state.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/linear_initial_state.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/metadata.json create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/mlp_initial_state.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/model_inputs_v1/sms_transformer_initial_state.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/convolutions.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/elementwise.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/fft.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/indexing.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/linear_algebra.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/matrix_operations.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/metadata.json create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/reductions.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/numerical_inputs_v1/special_functions.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/sms_spam_v1/evaluation.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/sms_spam_v1/metadata.json create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/sms_spam_v1/train.npz create mode 100644 pytorch/pytorch_extended_tests/datasets/prepared/sms_spam_v1/vocabulary.json create mode 100644 pytorch/pytorch_extended_tests/just_for_windows/run_pytorch_extended_tests.ps1 create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/README.md create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/analyse_repeatability.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/compare_environment_outputs.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/compare_repeatability_analyses.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/comparison_graphs.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/comparison_policy.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/comparison_policy_template.json create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/level_0_first_look.py create mode 100644 pytorch/pytorch_extended_tests/manual_comparison_stuff/manual-how-to.md create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/__init__.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/case_api.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/datasets/__init__.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/datasets/validation.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/orchestrator/__init__.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/orchestrator/execution_plan.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/orchestrator/run_suite.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/orchestrator/run_test_file.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/orchestrator/subprocess_runner.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/precision_settings.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/__init__.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/artifact_writer.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/level_0_summary.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/observation.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/result_bundle.py create mode 100644 pytorch/pytorch_extended_tests/src/pytorch_extended_tests/results/tensor_storage.py create mode 100644 pytorch/pytorch_extended_tests/tools/README.md create mode 100644 pytorch/pytorch_extended_tests/tools/inspect_result_bundle.py create mode 100644 pytorch/pytorch_extended_tests/tools/validate_setup.py diff --git a/pytorch/08-run-extendedtests.sh b/pytorch/08-run-extendedtests.sh new file mode 100755 index 0000000..ff876b7 --- /dev/null +++ b/pytorch/08-run-extendedtests.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +set -ETeuo pipefail + +# Keep PyTorch on the GPU selected by CI +# Fall back to the first GPU when CI has not already selected one +export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0}" + +# Do not let packages from the runner's user site leak into the PyTorch venv +export PYTHONNOUSERSITE=1 + +SCRIPT_DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" +SUITE_ROOT="${SCRIPT_DIR}/pytorch_extended_tests" +OUT_DIR="$(realpath .)" +SRCROOT="${OUT_DIR}/pytorch" +RESULTS_DIR="/tmp/ci_benchmarks/pytorch" + +if [[ ! -d "${SUITE_ROOT}" ]]; then + echo "Could not find the test suite in ${SUITE_ROOT}" + exit 1 +fi + +if [[ ! -d "${SRCROOT}" ]]; then + echo "Could not find the PyTorch source tree in ${SRCROOT}" + exit 1 +fi + +if [[ ! -f "${SRCROOT}/.venv/bin/activate" ]]; then + echo "Could not find .venv in ${SRCROOT}" + exit 1 +fi + +cd "${SRCROOT}" +source "${SRCROOT}/.venv/bin/activate" + +PYTHON="${PYTHON:-python}" + +if ! command -v "${PYTHON}" >/dev/null 2>&1; then + echo "Could not find Python executable: ${PYTHON}" + exit 1 +fi + +cd "${SUITE_ROOT}" + +# Start clean so the CI artefact only contains this run +rm -rf "${RESULTS_DIR}" +mkdir -p "${RESULTS_DIR}" + +# Keep both the src package and root config package importable +export PYTHONPATH="${SUITE_ROOT}/src:${SUITE_ROOT}${PYTHONPATH:+:${PYTHONPATH}}" + +# Use unbuffered Python output so CI logs remain useful during a long run +export PYTHONUNBUFFERED=1 + +echo "Running pytorch_extended_tests" +echo "PyTorch source tree: ${SRCROOT}" +echo "Python: $(command -v "${PYTHON}")" +echo "CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}" +echo "Writing results to ${RESULTS_DIR}/" + +# Capture the full log but still return the suite's real exit status +set +e +"${PYTHON}" -u -m pytorch_extended_tests.orchestrator.run_suite \ + --results-dir "${RESULTS_DIR}" \ + --keep-existing \ + "$@" \ + |& tee "${RESULTS_DIR}/execution.log" +PIPE_STATUSES=("${PIPESTATUS[@]}") +set -e + +SUITE_STATUS="${PIPE_STATUSES[0]}" +TEE_STATUS="${PIPE_STATUSES[1]}" + +echo "Results are available in ${RESULTS_DIR}/" + +if [[ "${TEE_STATUS}" -ne 0 ]]; then + echo "Failed to write ${RESULTS_DIR}/execution.log" + exit "${TEE_STATUS}" +fi + +exit "${SUITE_STATUS}" diff --git a/pytorch/pytorch_extended_tests/.gitignore b/pytorch/pytorch_extended_tests/.gitignore new file mode 100644 index 0000000..3c122b9 --- /dev/null +++ b/pytorch/pytorch_extended_tests/.gitignore @@ -0,0 +1,7 @@ +__pycache__/ +*.py[cod] +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +.venv/ +venv/ diff --git a/pytorch/pytorch_extended_tests/README.md b/pytorch/pytorch_extended_tests/README.md new file mode 100644 index 0000000..de2ce51 --- /dev/null +++ b/pytorch/pytorch_extended_tests/README.md @@ -0,0 +1,439 @@ +# pytorch_extended_tests + +A set of really extended PyTorch numerical tests which to run against different compiler and GPU builds + +The CI job runs the cases and saves raw outputs. It does not decide whether one build matches another. +For now, please somebody manually retrieve the CI artifacts and run the repeatability and cross-environment comparisons separately with the scripts in `manual_comparison_stuff/` + +That can be automated as well in future and put in CI somewhere, but doesn't fit into the way CI runs the scale validation repo. Should save reference standards somewhere, once there's enough accumulated. + +## Why the suite is split into levels + +The levels move from small, hopefully-easy-to-diagnose stuff towards longer pieces of work. If a training workload differs, looking back through the lower levels should help work out whether the first disagreement was in a basic tensor operation, a numerical kernel, autograd, mixed precision or the combined model itself +Examples different = bad. Look at lower levels to see where/why. Hopefully. + +- Level 0 runs four quick training and inference demonstrations: a linear classifier, MLP, CNN and attention model +- Level 1 does core tensor creation, arithmetic, mathematical functions, indexing, shape operations and type promotion +- Level 2 does reductions, matrix multiplication, convolution, pooling, linear solves, matrix factorisations, eigensystems, FFTs and special functions +- Level 3 does autograd graphs, neural-network layers, normalisation, attention, losses and optimiser updates +- Level 4 does float32 backend precision modes, FP16 and BF16 autocast, gradient scaling and serialisation round trips +- Level 5 combines the lower-level operations into short MLP, CNN and attention blocks with fixed optimiser updates +- Level 6 runs small tabular, image and text training workloads with fixed datasets and initial states + + +## How to use it + +For the default Level 0 run, generate the fixed model inputs once: + +```bash +python datasets/generate_datasets.py --only generated +``` + +Commit the generated `datasets/prepared/` files and the updated `datasets/dataset_manifest.json`. + +I want CI to only consume those prepared files, not regenerate data. Just in case that's a source of differences. But these should get moved to somewhere that CI can read from eventually, not stay in the scale validation repo xxx + +Level 0 does not need the externally downloaded datasets. +But we do need to download and prepare those from `datasets/README.md` before enabling Level 6 + +The normal CI entry point runs Level 0 only. Once that looks sensible, enable the other levels. This example runs the complete suite: + +```bash +cd .. +./run_pytorch_extended_tests.sh \ + --levels \ + level_0_smoke_workloads \ + level_1_core_tensor \ + level_2_numerical_kernels \ + level_3_autograd_and_learning \ + level_4_precision_and_execution \ + level_5_composite_models \ + level_6_real_workloads +``` + +Check the selected environment before running the suite: + +```bash +python tools/validate_setup.py +``` + +For the CPU reference job: + +```bash +python tools/validate_setup.py --device cpu +``` + +Run the normal CI entry point with: + +```bash +cd .. +./run_pytorch_extended_tests.sh +``` + +The script activates `pytorch/.venv`. Set `PYTHON` only when that environment needs a non-default interpreter command: + +```bash +cd .. +PYTHON=/path/to/python ./run_pytorch_extended_tests.sh +``` + +Set the CPU reference device with: + +```bash +cd .. +PYTORCH_EXTENDED_TESTS_DEVICE=cpu ./run_pytorch_extended_tests.sh +``` + +The shell script passes extra arguments to the Python orchestrator. For example, this runs only Level 4 FP32 cases on CPU: + +```bash +cd .. +PYTORCH_EXTENDED_TESTS_DEVICE=cpu \ + ./run_pytorch_extended_tests.sh \ + --levels level_4_precision_and_execution \ + --profiles controlled_fp32 +``` + +The Linux CI wrapper writes the complete raw bundle to: + +```text +/tmp/ci_benchmarks/pytorch +``` + +Check a completed result bundle with: + +```bash +python tools/inspect_result_bundle.py /tmp/ci_benchmarks/pytorch +``` + +To analyse repeatability, collect unmodified result bundles from repeated runs of the same environment beneath one directory. Each bundle directory must begin with `repeatability_`: + +```text +collected_runs/ +├── repeatability_run_001/ +├── repeatability_run_002/ +└── repeatability_run_003/ +``` + +Then run: + +```bash +python manual_comparison_stuff/analyse_repeatability.py collected_runs +``` + +This writes an overly detailed json file, a markdown report and graphs in `collected_runs/repeatability_analysis/`. Add `--write-populated-policy` when the runs are from the reference environment and the analyser will also fill the central policy template from the observed reference variability. + +To compare portable repeatability JSON files, put `reference.json` and the candidate json files in `repeatability_outputs/` and run `manual_comparison_stuff/compare_repeatability_analyses.py`. To perform the actual tensor-level GPU comparison, use `manual_comparison_stuff/compare_environment_outputs.py` with a `reference/` folder and one folder per compiler-GPU combo. + +## Precision profiles + +The names are slightly PyTorch-specific, but the basic idea is: + +- **FP32** is normal 32-bit floating point. The main baseline, because it has a hopefully sensible balance of speed, range and precision +- **FP16** is 16-bit floating point. It is faster and smaller on suitable GPUs, but has a much narrower numerical range and is easier to overflow or underflow +- **AMP** means Automatic Mixed Precision. PyTorch runs suitable operations in a lower precision while keeping numerically sensitive work and the main model state in FP32. AMP FP16 normally also uses gradient scaling to protect small gradients +- **BF16** is another 16-bit format. It has less precision than FP32 but a much wider range than FP16, so is apparently often easier to train with on newer hardware +- **FP64** is 64-bit floating point. It is mainly useful here as a high-precision diagnostic rather than a normal deep-learning setting... +- A `controlled_...` profile moves the inputs and model parameters themselves to that dtype and applies the suite's deterministic settings. An `amp_...` profile keeps the main state in FP32 and uses autocast for eligible operations + +I'd use FP32 and AMP FP16 only on CUDA for CI for now. That is the default in the config for now. FP32 gives the clearest baseline, while AMP FP16 tests the lower-precision path most likely to be used for normal GPU training without converting the model parameters themselves to raw FP16 + +The default profiles are: + +- CUDA: `controlled_fp32` and `amp_fp16` +- CPU: `controlled_fp32` + +`amp_fp16` keeps the model and optimiser state in FP32, runs eligible forward operations under FP16 autocast, and uses gradient scaling. This is a better initial test than `controlled_fp16`, which moves model parameters themselves to FP16 and is more likely to fail because of range or operator-support limitations + +The other profiles remain available as explicit opt-ins: + +- `controlled_fp64`: useful as a higher-precision diagnostic where the operation supports it +- `controlled_fp16`: raw FP16 tensors and model parameters on CUDA +- `controlled_bfloat16`: raw BF16 tensors and model parameters +- `amp_bfloat16`: FP32 model parameters with BF16 autocast + +For example, this adds BF16 autocast and FP64 to a CUDA run: + +```bash +cd .. +./run_pytorch_extended_tests.sh \ + --profiles controlled_fp32 amp_fp16 amp_bfloat16 controlled_fp64 +``` + +Do not add FP16 to the CPU reference job. CPU runs use FP32 by default; BF16 autocast can be enabled separately where the CPU and PyTorch build support it + +## Current scope and CUDA backend notes + +Currently tests one CPU or one GPU process at a time. It does **not** test multi-GPU stuff. + +Sparse tensors store only the non-zero parts of data which is mostly zero, using formats such as COO or CSR. They have their own storage invariants, operator coverage, autograd behaviour and CUDA kernels. I have left them out for now because the current suite is deliberately a dense-tensor baseline; adding a few sparse operations would probably just give an illusion of coverage without testing the important format and coalescing cases properly. Sparse support should be added later as a distinct category rather than mixed into the dense tests... + +Most CUDA maths in the suite will dispatch through the backend PyTorch selects, for example cuBLAS or cuBLASLt for matrix multiplication and cuFFT for FFTs. The repository tree marks test files containing cases which would normally use **cuDNN** on CUDA when cuDNN is available. Because no cuDNN yet. The marker does not mean that every case in that file uses cuDNN. + +The suite does not require `torch.backends.cudnn.is_available()` to be true. If PyTorch was built without cuDNN, convolution or normalisation operations will use a native CUDA implementation where PyTorch provides one. These paths can be slower and can produce different numerical results from cuDNN, which is useful to observe but means reference and candidate environments should have matching cuDNN availability when the aim is a like-for-like comparison. If a particular operation, dtype or shape has no fallback, the case fails and the exception is retained in the result bundle; it is not silently skipped. Maybe we should disable it for all of them for now actually rather than assuming that the installs mirror SCALE? Does our CUDA install have any packages that we don't do? + + + +## Repository layout + +```text +pytorch_extended_tests/ +├── README.md +├── manual_comparison_stuff/ +│ ├── README.md +│ ├── analyse_repeatability.py +│ ├── compare_environment_outputs.py +│ ├── compare_repeatability_analyses.py +│ ├── comparison_policy.py +│ ├── comparison_policy_template.json +│ └── level_0_first_look.py +├── cases/ +│ ├── README.md +│ ├── common/ +│ │ ├── README.md +│ │ ├── data.py +│ │ ├── demo.py +│ │ ├── dispatch.py +│ │ ├── learning.py +│ │ ├── mixed_precision.py +│ │ ├── models.py +│ │ ├── tensors.py +│ │ └── workloads.py +│ ├── level_0_smoke_workloads/ +│ │ ├── README.md +│ │ └── test_demo_workloads.py [cuDNN: CNN case] +│ ├── level_1_core_tensor/ +│ │ ├── test_tensor_creation_and_dtypes.py +│ │ ├── test_elementwise_arithmetic.py +│ │ ├── test_transcendental_functions.py +│ │ ├── test_indexing_and_shape.py +│ │ └── test_type_promotion.py +│ ├── level_2_numerical_kernels/ +│ │ ├── test_reductions_and_statistics.py +│ │ ├── test_matrix_multiplication.py +│ │ ├── test_convolution.py [cuDNN] +│ │ ├── test_pooling.py +│ │ ├── test_linear_solve.py +│ │ ├── test_factorisations.py +│ │ ├── test_eigensystems.py +│ │ ├── test_fft.py +│ │ └── test_special_functions.py +│ ├── level_3_autograd_and_learning/ +│ │ ├── test_autograd_elementwise.py +│ │ ├── test_autograd_matrix_ops.py [cuDNN: convolution case] +│ │ ├── test_nn_linear_and_conv.py [cuDNN: convolution cases] +│ │ ├── test_normalisation.py [cuDNN: BatchNorm cases where supported] +│ │ ├── test_attention.py +│ │ ├── test_losses.py +│ │ ├── test_optimizer_sgd.py +│ │ └── test_optimizer_adamw.py +│ ├── level_4_precision_and_execution/ +│ │ ├── README.md +│ │ ├── test_fp32_precision_modes.py [cuDNN: convolution case] +│ │ ├── test_amp_fp16.py +│ │ ├── test_amp_bfloat16.py +│ │ └── test_serialisation_roundtrip.py +│ ├── level_5_composite_models/ +│ │ ├── README.md +│ │ ├── test_mlp_block.py +│ │ ├── test_cnn_block.py [cuDNN] +│ │ └── test_attention_block.py +│ └── level_6_real_workloads/ +│ ├── README.md +│ ├── test_tabular_training_workload.py +│ ├── test_cnn_training_workload.py [cuDNN] +│ └── test_transformer_training_workload.py +├── ci/ +│ └── run_pytorch_extended_tests.ps1 +├── config/ +│ ├── README.md +│ ├── suite_config.py +│ └── test_catalogue.py +├── datasets/ +│ ├── README.md +│ ├── dataset_manifest.json +│ ├── generate_datasets.py +│ ├── downloaded/ +│ └── prepared/ +├── src/ +│ └── pytorch_extended_tests/ +│ ├── case_api.py +│ ├── precision_settings.py +│ ├── datasets/ +│ │ └── validation.py +│ ├── orchestrator/ +│ │ ├── execution_plan.py +│ │ ├── run_suite.py +│ │ ├── run_test_file.py +│ │ └── subprocess_runner.py +│ └── results/ +│ ├── artifact_writer.py +│ ├── level_0_summary.py +│ ├── observation.py +│ ├── result_bundle.py +│ └── tensor_storage.py +└── tools/ + ├── README.md + ├── inspect_result_bundle.py + └── validate_setup.py +``` + +Generated and downloaded dataset files are not all shown in the tree because that would make it fairly unreadable + +## What the non-level files are for + +- `README.md`: the main entry point for the repository + This file =) + +- `../run_pytorch_extended_tests.sh`: the Linux CI wrapper + It clears the fixed result directory, launches the Python orchestrator and keeps a combined execution log + The orchestrator performs configuration and dataset preflight checks before starting case processes + +- `manual_comparison_stuff/`: the manual repeatability and comparison harness + It is the only copy of these scripts in the repository; CI does not import or run them + +- `config/suite_config.py`: the central place for suite-wide choices + It holds the root seed, profiles, precision controls, timeouts, model sizes, optimiser settings and the enabled levels so these decisions are not copied into individual cases + +- `config/test_catalogue.py`: the stable map of test IDs, case IDs and output IDs + The orchestrator uses it to plan work and the manual comparison harness uses the same names to line up outputs from different builds + +- `config/README.md`: notes on changing central configuration + It calls out which changes require data regeneration or a version update and documents the environment-variable overrides + +- `datasets/generate_datasets.py`: the one manual data-generation and preprocessing script + It generates canonical numerical inputs, fixed model states and prepared versions of the downloaded datasets from the root seed + +- `datasets/dataset_manifest.json`: the record of dataset sources and generated files + It stores URLs, checksums, shapes and preprocessing metadata so CI can prove that each build used the same inputs + +- `datasets/README.md`: the dataset setup guide + It lists the download links, expected filenames, licences and the one-off preparation command + +- `cases/README.md`: the case-writing contract + It explains that case files produce raw named observations and must not contain comparison tolerances + +- `cases/common/data.py`: the prepared-array loader + It returns independent NumPy copies so an in-place test cannot modify the input seen by the next case + +- `cases/common/dispatch.py`: the small case-ID dispatcher + It keeps each test module's public `run_case` function consistent and gives a clear error for an unimplemented catalogue case + +- `cases/common/demo.py`: the small Level 0 summary builder + It turns the detailed block outputs into a few readable losses, predictions, logit statistics, activation statistics, gradient norms and parameter norms + +- `cases/common/tensors.py`: tensor conversion and structure helpers + It handles device and dtype conversion in one place and keeps complex and non-contiguous cases predictable + +- `cases/common/models.py`: the fixed shared model definitions + The parameter names match the generated initial-state files, which lets different builds start from exactly the same values + +- `cases/common/learning.py`: model, gradient and optimiser-state helpers + It snapshots named tensors in a stable way so training-related cases retain enough detail to locate the first divergence + +- `cases/common/mixed_precision.py`: the shared AMP and GradScaler helpers + It keeps scaler construction and step-skipping records consistent between the mixed-precision and composite-model cases + +- `cases/common/composite.py`: the shared short-training loop for Levels 0 and 5 + It records the same initial forward pass, first gradients, parameter checkpoints and evaluation outputs for each composite model + +- `cases/common/workloads.py`: the shared Level 6 training and evaluation loop + It fixes the batch order from the root seed and records the same losses, gradients, checkpoints, optimiser state and final metrics for all three real workloads + +- `src/pytorch_extended_tests/case_api.py`: the public interface passed to case modules + It exposes the selected profile, device, seed, temporary directory, prepared dataset paths and the output recorder protocol + +- `src/pytorch_extended_tests/precision_settings.py`: the compatibility layer for float32 precision controls + It avoids mixing old and new PyTorch TF32 APIs while still supporting older builds where cuDNN only exposes the legacy flag + +- `src/pytorch_extended_tests/datasets/validation.py`: the CI dataset preflight + It verifies required prepared files and checksums before any test process starts, so missing or stale inputs fail clearly + +- `src/pytorch_extended_tests/orchestrator/execution_plan.py`: the ordered task planner + It combines selected levels, tests, profiles and device into isolated test-module/profile tasks + +- `src/pytorch_extended_tests/orchestrator/run_suite.py`: the main Python suite runner + It validates data, runs the task plan, gathers statuses and finalises the raw result bundle + +- `src/pytorch_extended_tests/orchestrator/run_test_file.py`: the child-process entry point + It applies the profile, seeds the process, imports one test module and checks that every required output was produced + +- `src/pytorch_extended_tests/orchestrator/subprocess_runner.py`: the process-isolation wrapper + It sets the deterministic child environment, captures logs and protects the rest of the run from timeouts or CUDA failures in one module + +- `src/pytorch_extended_tests/results/level_0_summary.py`: the Level 0 CSV writer + It collects the required summary observation from each quick example and writes one row per example and precision profile + +- `src/pytorch_extended_tests/results/observation.py`: the JSON record model + It defines the stable machine-readable shape used for case statuses and named outputs + +- `src/pytorch_extended_tests/results/tensor_storage.py`: the lossless tensor binary format + It stores dtype, shape and raw bytes without silently converting lower-precision, complex or integer tensors + +- `src/pytorch_extended_tests/results/artifact_writer.py`: the observation and artifact writer + It validates output kinds, writes tensors into the artifact tree and records checksums and paths in JSONL + +- `src/pytorch_extended_tests/results/result_bundle.py`: the top-level bundle finaliser + It writes the manifest, merges task observations and creates the final execution summary even when some tasks fail + +- `tools/validate_setup.py`: the local and CI preflight command + It checks configuration, catalogue entries, datasets, selected profiles, PyTorch import, device availability and case-module imports + +- `manual_comparison_stuff/analyse_repeatability.py`: the repeated-run analysis tool + It measures within-environment variation, writes JSON/Markdown/graphs and can populate a central policy from the reference runs + +- `manual_comparison_stuff/comparison_policy_template.json`: the central comparison-policy starting point + It contains exact-match rules, static numerical floors and hard ceilings; reference repeatability fills the per-output limits + +- `manual_comparison_stuff/comparison_policy.py`: the shared policy calibration and judgement code + The manual comparison scripts use this module so policy population and PASS/MAYBE/FAIL decisions stay consistent + +- `manual_comparison_stuff/compare_repeatability_analyses.py`: the portable repeatability-summary comparator + It compares `reference.json` with other repeatability-analysis JSON files but cannot measure changed tensor values without the raw artefacts + +- `manual_comparison_stuff/compare_environment_outputs.py`: the full raw-output comparator + It calibrates the policy from `reference/`, checks each environment's repeatability and compares candidate runs with the reference tensor by tensor + +- `manual_comparison_stuff/level_0_first_look.py`: the rough manual Level 0 comparison script + It collates summary CSV files and gives a deliberately coarse PASS, FAIL or MAYBE result against `reference.csv` + +- `tools/inspect_result_bundle.py`: the completed-bundle checker + It parses the JSON files, verifies every tensor artifact and flags missing, corrupt or unreferenced files before results are archived + +- `tools/README.md`: quick notes for the maintenance tools + It gives the normal commands without making the root README even longer + +- `.gitignore`: exclusions for local Python and editor noise + Prepared test inputs are intentionally not ignored because they are part of the fixed inputs used by CI + +- `__init__.py` files: package markers and small public re-exports + They keep imports predictable without containing suite policy or test behaviour + +## Result files + +A successful Linux or CI invocation writes: + +```text +/tmp/ci_benchmarks/pytorch/ +├── run_manifest.json +├── test_catalogue.json +├── test_status.json +├── observations.jsonl +├── level_0_summary.csv +├── execution.log +└── artifacts/ +``` + + +The tensor values are stored as lossless binary artifacts. `observations.jsonl` contains their dtypes, shapes, checksums and relative paths + +`level_0_summary.csv` is written whenever Level 0 is selected. It is only a convenient first look; the detailed artefacts should be the gold standard comparison source of truth + +## Configuration notes + +Everything that is expected to stay consistent between builds should be centralised in `config/suite_config.py`. This includes the seed, backend profiles, AMP scaler settings, model dimensions, optimiser values and checkpoint choices + +Stable test, case and output IDs live in `config/test_catalogue.py` + +Numerical tolerances live in `manual_comparison_stuff/comparison_policy_template.json` and are populated from the reference repeatability analysis. + diff --git a/pytorch/pytorch_extended_tests/cases/README.md b/pytorch/pytorch_extended_tests/cases/README.md new file mode 100644 index 0000000..ab00652 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/README.md @@ -0,0 +1,23 @@ +# Case modules + +This folder contains the executable examples whose raw outputs are retained by CI + +Each test file maps directly to one entry in `config/test_catalogue.py`. The files produce named observations but do not decide whether those observations are numerically close enough to another build + +## Current implementation status + +- Level 0 quick model demonstrations are implemented and enabled by default +- Level 1 core tensor behaviour is implemented +- Level 2 numerical kernels is implemented +- Level 3 autograd and learning components is implemented +- Level 4 precision modes, mixed precision and serialisation is implemented +- Level 5 composite MLP, CNN and attention models are implemented +- Level 6 tabular, image and Transformer workloads are implemented + +All levels are implemented. The default enabled-level list contains Level 0 only so a new build gets a quick first check before the full suite is enabled + +## Shared helpers + +The `common/` folder contains the prepared-data loader, tensor conversion helpers, fixed model builders, learning-state helpers, mixed-precision helpers, the shared composite-model and workload loops and the small case dispatcher + +Case files should keep global choices in `config/suite_config.py` rather than adding local seeds, sizes, learning rates, scaler values or execution settings diff --git a/pytorch/pytorch_extended_tests/cases/__init__.py b/pytorch/pytorch_extended_tests/cases/__init__.py new file mode 100644 index 0000000..7246595 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/__init__.py @@ -0,0 +1 @@ +"""Executable case modules for the pytorch_extended_tests suite.""" diff --git a/pytorch/pytorch_extended_tests/cases/common/README.md b/pytorch/pytorch_extended_tests/cases/common/README.md new file mode 100644 index 0000000..bc6da38 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/README.md @@ -0,0 +1,15 @@ +# Shared case helpers + +These files keep repeated setup and output handling out of the actual test cases + +- `data.py` loads independent copies of prepared NumPy arrays +- `demo.py` builds the small readable summary used by Level 0 and its CSV +- `dispatch.py` maps catalogue case IDs to their implementation functions +- `tensors.py` handles predictable device and dtype conversion +- `models.py` defines the fixed linear, MLP, CNN, attention and Transformer models used by generated initial states +- `learning.py` loads model state and snapshots parameters, gradients and optimiser internals +- `mixed_precision.py` builds the fixed AMP batch and records GradScaler decisions consistently +- `composite.py` runs the common two-step Level 5 optimisation path and records matching checkpoints for each model +- `workloads.py` runs the fixed Level 6 training and evaluation path, including exact batch rows, full checkpoint logits and optimiser state + +Suite-wide choices still belong in `config/suite_config.py`. These helpers should implement behaviour, not invent new policy diff --git a/pytorch/pytorch_extended_tests/cases/common/__init__.py b/pytorch/pytorch_extended_tests/cases/common/__init__.py new file mode 100644 index 0000000..70e182f --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/__init__.py @@ -0,0 +1,64 @@ +"""Shared helpers used by the executable case modules.""" + +from cases.common.composite import run_composite_block +from cases.common.data import load_prepared_npz +from cases.common.demo import build_demo_summary +from cases.common.dispatch import run_registered_case +from cases.common.learning import ( + clone_module_state, + clone_named_gradients, + clone_named_parameters, + flatten_optimizer_state, + load_module_state, + module_to_profile, + tensor_mapping, +) +from cases.common.models import ( + build_attention_block, + build_linear_classifier, + build_cnn, + build_mlp, + build_sms_transformer, +) +from cases.common.mixed_precision import ( + build_mlp_batch, + make_grad_scaler, + parameters_changed, + scaler_state_record, +) +from cases.common.workloads import WorkloadBatch, run_training_workload +from cases.common.tensors import ( + as_profile_tensor, + describe_tensor, + describe_tensors, + paired_complex_dtype, +) + +__all__ = [ + "WorkloadBatch", + "as_profile_tensor", + "build_attention_block", + "build_demo_summary", + "build_linear_classifier", + "build_cnn", + "build_mlp", + "build_sms_transformer", + "build_mlp_batch", + "clone_module_state", + "clone_named_gradients", + "clone_named_parameters", + "describe_tensor", + "describe_tensors", + "flatten_optimizer_state", + "load_module_state", + "make_grad_scaler", + "load_prepared_npz", + "module_to_profile", + "paired_complex_dtype", + "parameters_changed", + "run_composite_block", + "run_registered_case", + "run_training_workload", + "scaler_state_record", + "tensor_mapping", +] diff --git a/pytorch/pytorch_extended_tests/cases/common/composite.py b/pytorch/pytorch_extended_tests/cases/common/composite.py new file mode 100644 index 0000000..916ee0e --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/composite.py @@ -0,0 +1,162 @@ +"""Shared execution loop for the Level 0 and Level 5 composite models.""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping +from typing import Any + +from config.suite_config import BLOCK_TESTS +from cases.common.learning import clone_named_gradients, clone_named_parameters +from cases.common.mixed_precision import make_grad_scaler +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +ForwardFunction = Callable[[Any, bool], tuple[Any, Mapping[str, Any]]] + + +def _build_optimizer( + model_name: str, + model: Any, + optimiser_settings: Mapping[str, Any] | None, +) -> Any: + import torch + + if optimiser_settings is None: + optimiser_name = str(BLOCK_TESTS["model_optimizers"][model_name]) + settings = BLOCK_TESTS[optimiser_name] + else: + optimiser_name = str(optimiser_settings["optimiser"]) + settings = optimiser_settings + + if optimiser_name == "sgd": + return torch.optim.SGD( + model.parameters(), + lr=float(settings["learning_rate"]), + momentum=float(settings.get("momentum", 0.0)), + weight_decay=float(settings.get("weight_decay", 0.0)), + ) + if optimiser_name == "adamw": + return torch.optim.AdamW( + model.parameters(), + lr=float(settings["learning_rate"]), + betas=tuple(float(value) for value in settings["betas"]), + eps=float(settings["epsilon"]), + weight_decay=float(settings.get("weight_decay", 0.0)), + ) + raise ValueError(f"Unknown composite-model optimiser: {optimiser_name}") + + +def _evaluation( + context: CaseContext, + model: Any, + labels: Any, + forward: ForwardFunction, + *, + retain_activations: bool, +) -> tuple[Any, float, dict[str, Any]]: + import torch + + was_training = model.training + model.eval() + with torch.no_grad(), context.autocast(): + logits, activations = forward(model, retain_activations) + loss = torch.nn.functional.cross_entropy(logits, labels) + model.train(was_training) + return ( + logits.detach().clone(), + float(loss.detach().cpu().item()), + {name: value.detach().clone() for name, value in activations.items()}, + ) + + +def run_composite_block( + context: CaseContext, + recorder: ObservationRecorder, + *, + model_name: str, + model: Any, + labels: Any, + forward: ForwardFunction, + optimiser_settings: Mapping[str, Any] | None = None, +) -> dict[str, Any]: + """Run a fixed short optimisation path and retain each diagnostic checkpoint.""" + + import torch + + optimisation_steps = int(BLOCK_TESTS["optimisation_steps"]) + checkpoint_steps = tuple(int(value) for value in BLOCK_TESTS["checkpoint_steps"]) + optimizer = _build_optimizer(model_name, model, optimiser_settings) + scaler = make_grad_scaler(context) if context.profile_id == "amp_fp16" else None + + initial_logits, initial_loss, initial_activations = _evaluation( + context, + model, + labels, + forward, + retain_activations=True, + ) + initial_forward: dict[str, Any] = { + "logits": initial_logits, + "loss": torch.tensor(initial_loss, device=initial_logits.device, dtype=torch.float64), + } + initial_forward.update( + {f"activation.{name}": value for name, value in initial_activations.items()} + ) + + loss_series = [initial_loss] + parameter_states: dict[str, Any] = {"step_0": clone_named_parameters(model)} + evaluation_outputs: dict[str, Any] = {"step_0": {"logits": initial_logits}} + first_gradients: dict[str, Any] | None = None + + model.train() + for step in range(optimisation_steps): + optimizer.zero_grad(set_to_none=True) + with context.autocast(): + logits, _ = forward(model, False) + loss = torch.nn.functional.cross_entropy(logits, labels) + + if scaler is None: + loss.backward() + else: + scaler.scale(loss).backward() + scaler.unscale_(optimizer) + + if step == 0: + first_gradients = clone_named_gradients(model) + + if scaler is None: + optimizer.step() + else: + scaler.step(optimizer) + scaler.update() + + checkpoint = step + 1 + if checkpoint in checkpoint_steps: + checkpoint_logits, checkpoint_loss, _ = _evaluation( + context, + model, + labels, + forward, + retain_activations=False, + ) + loss_series.append(checkpoint_loss) + parameter_states[f"step_{checkpoint}"] = clone_named_parameters(model) + evaluation_outputs[f"step_{checkpoint}"] = {"logits": checkpoint_logits} + + if first_gradients is None: + raise RuntimeError("The composite block did not execute a backward pass") + if len(loss_series) != len(checkpoint_steps): + raise RuntimeError("Composite-model loss checkpoints do not match the configured steps") + + recorder.record("initial_forward", initial_forward) + recorder.record("loss_series", loss_series) + recorder.record("first_gradients", first_gradients) + recorder.record("parameter_states", parameter_states) + recorder.record("evaluation_outputs", evaluation_outputs) + + return { + "initial_forward": initial_forward, + "loss_series": loss_series, + "first_gradients": first_gradients, + "parameter_states": parameter_states, + "evaluation_outputs": evaluation_outputs, + } diff --git a/pytorch/pytorch_extended_tests/cases/common/data.py b/pytorch/pytorch_extended_tests/cases/common/data.py new file mode 100644 index 0000000..0ddacdb --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/data.py @@ -0,0 +1,41 @@ +"""Load the canonical prepared arrays used by the case modules.""" + +from __future__ import annotations + +from pathlib import Path + +import numpy as np + +from pytorch_extended_tests.case_api import CaseContext + + +def load_prepared_npz( + context: CaseContext, + dataset_id: str, + filename: str, +) -> dict[str, np.ndarray]: + """Load one prepared NPZ file and return independent NumPy arrays.""" + + path = context.dataset_path(dataset_id) / filename + if not path.is_file(): + raise FileNotFoundError( + f"Prepared dataset file is missing: {path}\n" + "Run datasets/generate_datasets.py before running the suite" + ) + + try: + with np.load(path, allow_pickle=False) as archive: + # Copy these so a case can safely use an in-place operation + # The next case should still see the original prepared input + return {name: np.array(archive[name], copy=True) for name in archive.files} + except (OSError, ValueError) as exc: + raise RuntimeError(f"Could not load prepared dataset file: {path}") from exc + + +def require_prepared_file(context: CaseContext, dataset_id: str, filename: str) -> Path: + """Return one prepared file path after checking that it exists.""" + + path = context.dataset_path(dataset_id) / filename + if not path.is_file(): + raise FileNotFoundError(f"Prepared dataset file is missing: {path}") + return path diff --git a/pytorch/pytorch_extended_tests/cases/common/demo.py b/pytorch/pytorch_extended_tests/cases/common/demo.py new file mode 100644 index 0000000..05670b9 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/demo.py @@ -0,0 +1,121 @@ +"""Build the concise human-facing summary for the Level 0 examples.""" + +from __future__ import annotations + +import math +from collections.abc import Mapping +from typing import Any + +from config.suite_config import LEVEL_0_DEMOS +from pytorch_extended_tests.case_api import CaseContext + + +def _tensor_l2(values: Mapping[str, Any]) -> float: + import torch + + total = torch.zeros((), dtype=torch.float64) + for value in values.values(): + if isinstance(value, Mapping): + nested = _tensor_l2(value) + total += nested * nested + elif isinstance(value, torch.Tensor): + current = value.detach().to(device="cpu", dtype=torch.float64) + total += torch.sum(current * current) + return math.sqrt(float(total.item())) + + +def _logit_stats(value: Any) -> dict[str, float]: + import torch + + current = value.detach().to(device="cpu", dtype=torch.float64) + return { + "mean": float(current.mean().item()), + "standard_deviation": float(current.std(unbiased=False).item()), + "maximum_absolute": float(current.abs().max().item()), + } + + +def build_demo_summary( + context: CaseContext, + *, + model_type: str, + optimiser_name: str, + labels: Any, + outputs: Mapping[str, Any], +) -> dict[str, Any]: + """Return the small set of values shown in level_0_summary.csv.""" + + import torch + + losses = [float(value) for value in outputs["loss_series"]] + initial_logits = outputs["initial_forward"]["logits"] + evaluation_outputs = outputs["evaluation_outputs"] + final_step = max(int(name.removeprefix("step_")) for name in evaluation_outputs) + final_logits = evaluation_outputs[f"step_{final_step}"]["logits"] + labels_cpu = labels.detach().to(device="cpu", dtype=torch.int64) + initial_predictions = torch.argmax(initial_logits.detach(), dim=1).to(device="cpu") + final_predictions = torch.argmax(final_logits.detach(), dim=1).to(device="cpu") + preview_count = int(LEVEL_0_DEMOS["prediction_preview_count"]) + + activations = { + name.removeprefix("activation."): value + for name, value in outputs["initial_forward"].items() + if name.startswith("activation.") + } + # Masked attention scores use the dtype minimum as a sentinel + # Keeping that sentinel in the quick aggregate makes the number useless + summary_activations = { + name: value + for name, value in activations.items() + if name != "attention_scores" + } + activation_names = sorted(summary_activations) + activation_values = [ + value.detach().to(device="cpu", dtype=torch.float64).reshape(-1) + for value in summary_activations.values() + ] + if activation_values: + combined_activations = torch.cat(activation_values) + activation_mean_absolute = float(combined_activations.abs().mean().item()) + activation_maximum_absolute = float(combined_activations.abs().max().item()) + else: + activation_mean_absolute = 0.0 + activation_maximum_absolute = 0.0 + + initial_stats = _logit_stats(initial_logits) + final_stats = _logit_stats(final_logits) + + return { + "example": context.case_id, + "model_type": model_type, + "optimiser": optimiser_name, + "training_steps": final_step, + "profile_id": context.profile_id, + "device": context.device, + "dtype": context.autocast_dtype_name or context.dtype_name, + "sample_count": int(labels_cpu.numel()), + "class_count": int(final_logits.shape[-1]), + "initial_loss": losses[0], + "final_loss": losses[-1], + "loss_change": losses[-1] - losses[0], + "initial_accuracy": float((initial_predictions == labels_cpu).float().mean().item()), + "final_accuracy": float((final_predictions == labels_cpu).float().mean().item()), + "prediction_changes": int((initial_predictions != final_predictions).sum().item()), + "initial_predictions": [int(value) for value in initial_predictions[:preview_count]], + "final_predictions": [int(value) for value in final_predictions[:preview_count]], + "initial_logits_mean": initial_stats["mean"], + "initial_logits_standard_deviation": initial_stats["standard_deviation"], + "initial_logits_maximum_absolute": initial_stats["maximum_absolute"], + "final_logits_mean": final_stats["mean"], + "final_logits_standard_deviation": final_stats["standard_deviation"], + "final_logits_maximum_absolute": final_stats["maximum_absolute"], + "first_gradient_l2": _tensor_l2(outputs["first_gradients"]), + "initial_parameter_l2": _tensor_l2(outputs["parameter_states"]["step_0"]), + "final_parameter_l2": _tensor_l2( + outputs["parameter_states"][f"step_{final_step}"] + ), + "activation_count": len(activation_names), + "activation_mean_absolute": activation_mean_absolute, + "activation_maximum_absolute": activation_maximum_absolute, + "activation_names": activation_names, + } diff --git a/pytorch/pytorch_extended_tests/cases/common/dispatch.py b/pytorch/pytorch_extended_tests/cases/common/dispatch.py new file mode 100644 index 0000000..3aee74f --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/dispatch.py @@ -0,0 +1,29 @@ +"""Small dispatch helper shared by case files.""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping +from typing import Any + +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +CaseFunction = Callable[[CaseContext, ObservationRecorder], None] + + +def run_registered_case( + context: CaseContext, + recorder: ObservationRecorder, + cases: Mapping[str, CaseFunction], +) -> None: + """Run the function registered for the current catalogue case ID.""" + + try: + case_function = cases[context.case_id] + except KeyError as exc: + known = ", ".join(sorted(cases)) + raise KeyError( + f"No implementation is registered for {context.case_id!r}\n" + f"Known cases: {known}" + ) from exc + + case_function(context, recorder) diff --git a/pytorch/pytorch_extended_tests/cases/common/learning.py b/pytorch/pytorch_extended_tests/cases/common/learning.py new file mode 100644 index 0000000..0559faa --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/learning.py @@ -0,0 +1,152 @@ +"""Helpers for loading fixed states and recording learning internals.""" + +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any + +from cases.common.data import load_prepared_npz +from pytorch_extended_tests.case_api import CaseContext + + +MODEL_DATASET_ID = "model_inputs_v1" + + +def load_module_state(context: CaseContext, module: Any, filename: str) -> None: + """Load one generated state file into a module without changing its dtype.""" + + import torch + + arrays = load_prepared_npz(context, MODEL_DATASET_ID, filename) + expected = module.state_dict() + if set(arrays) != set(expected): + missing = sorted(set(expected) - set(arrays)) + unexpected = sorted(set(arrays) - set(expected)) + raise ValueError( + f"Initial state does not match the module\n" + f"Missing keys: {missing}\n" + f"Unexpected keys: {unexpected}" + ) + + converted: dict[str, Any] = {} + for name, target in expected.items(): + value = torch.from_numpy(arrays[name]) + converted[name] = value.to(device=target.device, dtype=target.dtype) + module.load_state_dict(converted, strict=True) + + +def clone_named_parameters(module: Any) -> dict[str, Any]: + """Clone all named parameters in state-dictionary order.""" + + return { + name: parameter.detach().clone() + for name, parameter in module.named_parameters() + } + + +def clone_named_gradients(module: Any) -> dict[str, Any]: + """Clone every parameter gradient and fail clearly when one is missing.""" + + gradients: dict[str, Any] = {} + for name, parameter in module.named_parameters(): + if parameter.grad is None: + raise RuntimeError(f"Parameter did not receive a gradient: {name}") + gradients[name] = parameter.grad.detach().clone() + return gradients + + +def clone_module_state(module: Any) -> dict[str, Any]: + """Clone parameters and buffers from a module state dictionary.""" + + return { + name: value.detach().clone() + for name, value in module.state_dict().items() + } + + +def flatten_optimizer_state(optimizer: Any, module: Any) -> dict[str, Any]: + """Return optimiser tensors with stable parameter names.""" + + import torch + + parameter_names = {parameter: name for name, parameter in module.named_parameters()} + first_parameter = next(module.parameters()) + output: dict[str, Any] = {} + + # Keep the main numeric group settings as tensors as plain SGD has no state tensors + # This also makes it obvious when two jobs used different optimiser settings + numeric_group_fields = ( + "lr", + "momentum", + "dampening", + "weight_decay", + "eps", + "maximize", + "nesterov", + "amsgrad", + ) + for group_index, group in enumerate(optimizer.param_groups): + prefix = f"param_group_{group_index}" + for field in numeric_group_fields: + value = group.get(field) + if isinstance(value, (bool, int, float)): + # Keep optimiser settings independent of the model precision + # Storing an LR in FP16 can round or underflow a configuration value + if isinstance(value, bool): + stored_value = int(value) + dtype = torch.int64 + elif isinstance(value, int): + stored_value = value + dtype = torch.int64 + else: + stored_value = value + dtype = torch.float64 + output[f"{prefix}.{field}"] = torch.tensor( + stored_value, + device=first_parameter.device, + dtype=dtype, + ) + betas = group.get("betas") + if isinstance(betas, tuple) and len(betas) == 2: + output[f"{prefix}.beta1"] = torch.tensor( + betas[0], device=first_parameter.device, dtype=torch.float64 + ) + output[f"{prefix}.beta2"] = torch.tensor( + betas[1], device=first_parameter.device, dtype=torch.float64 + ) + + for parameter, state in optimizer.state.items(): + parameter_name = parameter_names.get(parameter) + if parameter_name is None: + raise RuntimeError("Optimiser contains a parameter which is not in the model") + for state_name, value in state.items(): + if isinstance(value, torch.Tensor): + output[f"{parameter_name}.{state_name}"] = value.detach().clone() + elif isinstance(value, (bool, int, float)): + if isinstance(value, bool): + stored_value = int(value) + dtype = torch.int64 + elif isinstance(value, int): + stored_value = value + dtype = torch.int64 + else: + stored_value = value + dtype = torch.float64 + output[f"{parameter_name}.{state_name}"] = torch.tensor( + stored_value, + device=first_parameter.device, + dtype=dtype, + ) + return output + + +def module_to_profile(context: CaseContext, module: Any) -> Any: + """Move a module to the selected device and ordinary profile dtype.""" + + return module.to(device=context.device, dtype=context.torch_dtype()) + + +def tensor_mapping(values: Mapping[str, Any]) -> dict[str, Any]: + """Detach and clone a named tensor mapping.""" + + return {name: value.detach().clone() for name, value in values.items()} diff --git a/pytorch/pytorch_extended_tests/cases/common/mixed_precision.py b/pytorch/pytorch_extended_tests/cases/common/mixed_precision.py new file mode 100644 index 0000000..f2e209b --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/mixed_precision.py @@ -0,0 +1,96 @@ +"""Shared helpers for the mixed-precision cases.""" + +from __future__ import annotations + +from typing import Any + +from config.suite_config import AMP_GRAD_SCALER +from cases.common.data import load_prepared_npz +from cases.common.learning import ( + clone_named_gradients, + clone_named_parameters, + load_module_state, + module_to_profile, +) +from cases.common.models import build_mlp +from cases.common.tensors import as_profile_tensor +from pytorch_extended_tests.case_api import CaseContext + + +MODEL_DATASET_ID = "model_inputs_v1" + + +def build_mlp_batch(context: CaseContext) -> tuple[Any, Any, Any]: + """Build the fixed MLP and return its canonical input and labels.""" + + import torch + + arrays = load_prepared_npz(context, MODEL_DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"], requires_grad=True) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + model = module_to_profile(context, build_mlp()) + load_module_state(context, model, "mlp_initial_state.npz") + return model, value, labels + + +def make_grad_scaler(context: CaseContext) -> Any: + """Build the configured GradScaler using the public device-aware API.""" + + import torch + + settings = AMP_GRAD_SCALER + device_type = torch.device(context.device).type + try: + return torch.amp.GradScaler( + device_type, + init_scale=float(settings["initial_scale"]), + growth_factor=float(settings["growth_factor"]), + backoff_factor=float(settings["backoff_factor"]), + growth_interval=int(settings["growth_interval"]), + enabled=True, + ) + except TypeError: + # Older PyTorch releases exposed the CUDA scaler without a device argument + # Keep this fallback until all tested builds use the newer torch.amp API + return torch.cuda.amp.GradScaler( + init_scale=float(settings["initial_scale"]), + growth_factor=float(settings["growth_factor"]), + backoff_factor=float(settings["backoff_factor"]), + growth_interval=int(settings["growth_interval"]), + enabled=True, + ) + + +def parameters_changed(before: dict[str, Any], after: dict[str, Any]) -> bool: + """Return whether any named parameter changed exactly.""" + + import torch + + if before.keys() != after.keys(): + raise ValueError("Parameter mappings do not have the same keys") + return any(not torch.equal(before[name], after[name]) for name in before) + + +def scaler_state_record( + scaler: Any, + *, + initial_scale: float, + step_requested: bool, + step_skipped: bool, + overflow_injected: bool, +) -> dict[str, Any]: + """Return the public scaler state with the decisions made by this case.""" + + state = dict(scaler.state_dict()) + return { + "enabled": bool(scaler.is_enabled()), + "initial_scale": float(initial_scale), + "final_scale": float(scaler.get_scale()), + "growth_factor": float(state.get("growth_factor", 1.0)), + "backoff_factor": float(state.get("backoff_factor", 1.0)), + "growth_interval": int(state.get("growth_interval", 0)), + "growth_tracker": int(state.get("_growth_tracker", 0)), + "step_requested": bool(step_requested), + "step_skipped": bool(step_skipped), + "overflow_injected": bool(overflow_injected), + } diff --git a/pytorch/pytorch_extended_tests/cases/common/models.py b/pytorch/pytorch_extended_tests/cases/common/models.py new file mode 100644 index 0000000..831900e --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/models.py @@ -0,0 +1,293 @@ +"""Small fixed models shared by the learning cases.""" + +from __future__ import annotations + +import math +from typing import Any + +from config.suite_config import MODEL_ARCHITECTURES + + +def build_linear_classifier() -> Any: + """Build the small linear classifier used by the Level 0 demo.""" + + import torch + + architecture = MODEL_ARCHITECTURES["linear"] + + class FixedLinearClassifier(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.linear = torch.nn.Linear( + int(architecture["input_features"]), + int(architecture["output_features"]), + ) + + def forward(self, value: Any, *, return_activations: bool = False) -> Any: + logits = self.linear(value) + if return_activations: + return logits, {"logits": logits} + return logits + + return FixedLinearClassifier() + + +def build_mlp() -> Any: + """Build the MLP whose parameter names match the generated initial state.""" + + import torch + + architecture = MODEL_ARCHITECTURES["mlp"] + + class FixedMLP(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + dimensions = ( + architecture["input_features"], + *architecture["hidden_features"], + architecture["output_features"], + ) + self.layers = torch.nn.ModuleList( + torch.nn.Linear(input_size, output_size) + for input_size, output_size in zip(dimensions, dimensions[1:]) + ) + + def forward(self, value: Any, *, return_activations: bool = False) -> Any: + activations: dict[str, Any] = {} + current = value + for index, layer in enumerate(self.layers): + current = layer(current) + activations[f"linear_{index}"] = current + if index + 1 != len(self.layers): + current = torch.relu(current) + activations[f"relu_{index}"] = current + if return_activations: + return current, activations + return current + + return FixedMLP() + + +def build_cnn() -> Any: + """Build the small CNN used by block and image-workload cases.""" + + import torch + + architecture = MODEL_ARCHITECTURES["cnn"] + input_channels, first_channels, second_channels = architecture["channels"] + + class FixedCNN(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.features = torch.nn.Sequential( + torch.nn.Conv2d(input_channels, first_channels, kernel_size=3, padding=1), + torch.nn.ReLU(), + torch.nn.MaxPool2d(kernel_size=2), + torch.nn.Conv2d(first_channels, second_channels, kernel_size=3, padding=1), + torch.nn.ReLU(), + torch.nn.MaxPool2d(kernel_size=2), + ) + flattened_features = second_channels * 7 * 7 + self.classifier = torch.nn.Sequential( + torch.nn.Linear( + flattened_features, + architecture["classifier_hidden_features"], + ), + torch.nn.ReLU(), + torch.nn.Linear( + architecture["classifier_hidden_features"], + architecture["classes"], + ), + ) + + def forward(self, value: Any, *, return_activations: bool = False) -> Any: + activations: dict[str, Any] = {} + current = value + activation_names = ( + "conv_0", + "relu_0", + "pool_0", + "conv_1", + "relu_1", + "pool_1", + ) + for name, layer in zip(activation_names, self.features): + current = layer(current) + activations[name] = current + + current = torch.flatten(current, start_dim=1) + activations["flattened"] = current + current = self.classifier[0](current) + activations["classifier_linear_0"] = current + current = self.classifier[1](current) + activations["classifier_relu_0"] = current + current = self.classifier[2](current) + activations["logits"] = current + + if return_activations: + return current, activations + return current + + return FixedCNN() + + +def build_attention_block() -> Any: + """Build a small residual multi-head attention classifier.""" + + import torch + + architecture = MODEL_ARCHITECTURES["attention"] + embedding_size = int(architecture["embedding_size"]) + head_count = int(architecture["heads"]) + head_size = embedding_size // head_count + + class FixedAttentionBlock(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.q_proj = torch.nn.Linear(embedding_size, embedding_size) + self.k_proj = torch.nn.Linear(embedding_size, embedding_size) + self.v_proj = torch.nn.Linear(embedding_size, embedding_size) + self.out_proj = torch.nn.Linear(embedding_size, embedding_size) + self.norm = torch.nn.LayerNorm(embedding_size) + self.classifier = torch.nn.Linear(embedding_size, architecture["classes"]) + + def _split_heads(self, value: Any) -> Any: + batch_size, sequence_length, _ = value.shape + return value.reshape( + batch_size, + sequence_length, + head_count, + head_size, + ).transpose(1, 2) + + def forward( + self, + value: Any, + padding_mask: Any, + *, + return_activations: bool = False, + ) -> Any: + query = self._split_heads(self.q_proj(value)) + key = self._split_heads(self.k_proj(value)) + projected_value = self._split_heads(self.v_proj(value)) + + scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(head_size) + key_mask = padding_mask[:, None, None, :] + scores = scores.masked_fill(key_mask, torch.finfo(scores.dtype).min) + weights = torch.softmax(scores, dim=-1) + attended = torch.matmul(weights, projected_value) + attended = attended.transpose(1, 2).contiguous().reshape(value.shape) + + projected = self.out_proj(attended) + normalised = self.norm(value + projected) + valid_tokens = (~padding_mask).to(dtype=normalised.dtype).unsqueeze(-1) + pooled = (normalised * valid_tokens).sum(dim=1) / valid_tokens.sum(dim=1) + logits = self.classifier(pooled) + + if return_activations: + return logits, { + "query": query, + "key": key, + "value": projected_value, + "attention_scores": scores, + "attention_weights": weights, + "attended": attended, + "projected": projected, + "normalised": normalised, + "pooled": pooled, + } + return logits + + return FixedAttentionBlock() + + +def build_sms_transformer() -> Any: + """Build the small Transformer used by the SMS workload.""" + + import torch + + architecture = MODEL_ARCHITECTURES["sms_transformer"] + sequence_length = int(architecture["sequence_length"]) + embedding_size = int(architecture["embedding_size"]) + vocabulary_size = int(architecture["vocabulary_size"]) + + class FixedSMSTransformer(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.token_embedding = torch.nn.Embedding( + vocabulary_size, + embedding_size, + padding_idx=0, + ) + self.position_embedding = torch.nn.Embedding( + sequence_length, + embedding_size, + ) + layer = torch.nn.TransformerEncoderLayer( + d_model=embedding_size, + nhead=int(architecture["heads"]), + dim_feedforward=int(architecture["feedforward_size"]), + dropout=float(architecture["dropout"]), + activation=str(architecture["activation"]), + batch_first=True, + norm_first=bool(architecture["norm_first"]), + ) + try: + self.encoder = torch.nn.TransformerEncoder( + layer, + num_layers=int(architecture["layers"]), + enable_nested_tensor=False, + ) + except TypeError: + # Older PyTorch releases do not expose the nested-tensor switch + # The ordinary padded path is still selected by the Boolean mask + self.encoder = torch.nn.TransformerEncoder( + layer, + num_layers=int(architecture["layers"]), + ) + self.final_norm = torch.nn.LayerNorm(embedding_size) + self.classifier = torch.nn.Linear( + embedding_size, + int(architecture["classes"]), + ) + + def forward( + self, + input_ids: Any, + attention_mask: Any, + *, + return_activations: bool = False, + ) -> Any: + batch_size, current_length = input_ids.shape + if current_length > sequence_length: + raise ValueError( + f"Input sequence length {current_length} exceeds {sequence_length}" + ) + + positions = torch.arange( + current_length, + device=input_ids.device, + dtype=torch.int64, + ).unsqueeze(0).expand(batch_size, -1) + embedded = self.token_embedding(input_ids) + self.position_embedding(positions) + padding_mask = ~attention_mask + encoded = self.encoder( + embedded, + src_key_padding_mask=padding_mask, + ) + normalised = self.final_norm(encoded) + valid_tokens = attention_mask.to(dtype=normalised.dtype).unsqueeze(-1) + pooled = (normalised * valid_tokens).sum(dim=1) / valid_tokens.sum(dim=1) + logits = self.classifier(pooled) + + if return_activations: + return logits, { + "embedded": embedded, + "encoded": encoded, + "normalised": normalised, + "pooled": pooled, + } + return logits + + return FixedSMSTransformer() + diff --git a/pytorch/pytorch_extended_tests/cases/common/tensors.py b/pytorch/pytorch_extended_tests/cases/common/tensors.py new file mode 100644 index 0000000..9cb4120 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/tensors.py @@ -0,0 +1,73 @@ +"""Tensor conversion and structure helpers for case outputs.""" + +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any + +import numpy as np + +from pytorch_extended_tests.case_api import CaseContext + + +def paired_complex_dtype(dtype: Any) -> Any: + """Return the complex dtype corresponding to a real PyTorch dtype.""" + + import torch + + if dtype == torch.float64: + return torch.complex128 + return torch.complex64 + + +def as_profile_tensor( + context: CaseContext, + value: np.ndarray | Any, + *, + dtype: Any | None = None, + requires_grad: bool = False, +) -> Any: + """Move an array to the case device with predictable dtype handling.""" + + import torch + + array = np.asarray(value) + tensor = torch.from_numpy(np.ascontiguousarray(array)) + + if dtype is None: + if np.issubdtype(array.dtype, np.floating): + dtype = context.torch_dtype() + elif np.issubdtype(array.dtype, np.complexfloating): + dtype = paired_complex_dtype(context.torch_dtype()) + + tensor = tensor.to(device=context.device, dtype=dtype) + if requires_grad: + if not tensor.is_floating_point() and not tensor.is_complex(): + raise TypeError("Only floating-point and complex tensors can require gradients") + tensor.requires_grad_(True) + return tensor + + +def describe_tensor(value: Any) -> dict[str, Any]: + """Return comparison-friendly tensor structure without embedding values.""" + + import torch + + if not isinstance(value, torch.Tensor): + raise TypeError(f"Expected a PyTorch tensor, got {type(value)!r}") + + return { + "shape": list(value.shape), + "dtype": str(value.dtype).removeprefix("torch."), + "strides": list(value.stride()), + "layout": str(value.layout).removeprefix("torch."), + "is_contiguous": bool(value.is_contiguous()), + "numel": value.numel(), + "requires_grad": bool(value.requires_grad), + } + + +def describe_tensors(values: Mapping[str, Any]) -> dict[str, Any]: + """Describe a named tensor mapping in stable insertion order.""" + + return {name: describe_tensor(value) for name, value in values.items()} diff --git a/pytorch/pytorch_extended_tests/cases/common/workloads.py b/pytorch/pytorch_extended_tests/cases/common/workloads.py new file mode 100644 index 0000000..f27e46f --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/common/workloads.py @@ -0,0 +1,365 @@ +"""Shared training and evaluation loop for the Level 6 workloads.""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping +from dataclasses import dataclass +from typing import Any + +import numpy as np + +from config.suite_config import DATALOADER, OUTPUT_CAPTURE, WORKLOAD_CAPTURE, WORKLOADS +from cases.common.learning import ( + clone_named_gradients, + clone_named_parameters, + flatten_optimizer_state, +) +from cases.common.mixed_precision import make_grad_scaler +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + + +@dataclass(frozen=True, slots=True) +class WorkloadBatch: + """One model batch with positional inputs, keyword inputs and labels.""" + + args: tuple[Any, ...] + kwargs: Mapping[str, Any] + labels: Any + + +BatchBuilder = Callable[[np.ndarray], WorkloadBatch] +ForwardFunction = Callable[[Any, WorkloadBatch], Any] + + +def _build_optimizer(settings: Mapping[str, Any], model: Any) -> Any: + import torch + + optimiser_name = str(settings["optimiser"]) + if optimiser_name == "sgd": + return torch.optim.SGD( + model.parameters(), + lr=float(settings["learning_rate"]), + momentum=float(settings["momentum"]), + weight_decay=float(settings["weight_decay"]), + ) + if optimiser_name == "adamw": + return torch.optim.AdamW( + model.parameters(), + lr=float(settings["learning_rate"]), + betas=tuple(float(value) for value in settings["betas"]), + eps=float(settings["epsilon"]), + weight_decay=float(settings["weight_decay"]), + ) + raise ValueError(f"Unknown workload optimiser: {optimiser_name}") + + +def _batch_schedule( + *, + sample_count: int, + batch_size: int, + step_count: int, + seed: int, + shuffle: bool, + drop_last: bool, +) -> tuple[np.ndarray, ...]: + """Build the exact training rows used by every optimisation step.""" + + if sample_count < 1: + raise ValueError("The training dataset must contain at least one sample") + if batch_size < 1: + raise ValueError("The training batch size must be positive") + if drop_last and sample_count < batch_size: + raise ValueError("drop_last cannot be used when the dataset is smaller than one batch") + + generator = np.random.Generator(np.random.PCG64(seed)) + batches: list[np.ndarray] = [] + order = np.arange(sample_count, dtype=np.int64) + position = sample_count + + for _ in range(step_count): + if position >= sample_count or (drop_last and position + batch_size > sample_count): + order = ( + generator.permutation(sample_count).astype(np.int64, copy=False) + if shuffle + else np.arange(sample_count, dtype=np.int64) + ) + position = 0 + + stop = min(position + batch_size, sample_count) + batches.append(np.array(order[position:stop], dtype=np.int64, copy=True)) + position = stop + + return tuple(batches) + + +def _evaluation_rows(sample_count: int, batch_size: int) -> tuple[np.ndarray, ...]: + rows = np.arange(sample_count, dtype=np.int64) + return tuple( + np.array(rows[start : start + batch_size], copy=True) + for start in range(0, sample_count, batch_size) + ) + + +def _evaluate( + context: CaseContext, + model: Any, + *, + rows: tuple[np.ndarray, ...], + build_batch: BatchBuilder, + forward: ForwardFunction, +) -> tuple[Any, float, Any, int]: + import torch + + was_training = model.training + model.eval() + logits_parts: list[Any] = [] + label_parts: list[Any] = [] + with torch.no_grad(): + for row_indices in rows: + batch = build_batch(row_indices) + with context.autocast(): + logits = forward(model, batch) + logits_parts.append(logits.detach()) + label_parts.append(batch.labels.detach()) + + logits = torch.cat(logits_parts, dim=0) + labels = torch.cat(label_parts, dim=0) + with context.autocast(): + loss = torch.nn.functional.cross_entropy(logits, labels) + predictions = torch.argmax(logits, dim=1) + correct = int((predictions == labels).sum().detach().cpu().item()) + model.train(was_training) + return logits.clone(), float(loss.detach().cpu().item()), predictions.clone(), correct + + +def _metric_tensors( + *, + loss: float, + correct_count: int, + sample_count: int, + device: Any, +) -> dict[str, Any]: + import torch + + return { + "loss": torch.tensor(loss, dtype=torch.float64, device=device), + "accuracy": torch.tensor( + correct_count / sample_count, + dtype=torch.float64, + device=device, + ), + "correct_count": torch.tensor(correct_count, dtype=torch.int64, device=device), + "sample_count": torch.tensor(sample_count, dtype=torch.int64, device=device), + } + + +def _optimizer_snapshot(optimizer: Any, model: Any, scaler: Any | None) -> dict[str, Any]: + import torch + + output: dict[str, Any] = { + "optimizer": flatten_optimizer_state(optimizer, model), + } + if scaler is not None: + reference = next(model.parameters()) + state = scaler.state_dict() + output["grad_scaler"] = { + "scale": torch.tensor( + float(scaler.get_scale()), + dtype=torch.float64, + device=reference.device, + ), + "growth_factor": torch.tensor( + float(state.get("growth_factor", 1.0)), + dtype=torch.float64, + device=reference.device, + ), + "backoff_factor": torch.tensor( + float(state.get("backoff_factor", 1.0)), + dtype=torch.float64, + device=reference.device, + ), + "growth_interval": torch.tensor( + int(state.get("growth_interval", 0)), + dtype=torch.int64, + device=reference.device, + ), + "growth_tracker": torch.tensor( + int(state.get("_growth_tracker", 0)), + dtype=torch.int64, + device=reference.device, + ), + } + return output + + +def run_training_workload( + context: CaseContext, + recorder: ObservationRecorder, + *, + workload_name: str, + model: Any, + training_sample_count: int, + evaluation_sample_count: int, + training_source_indices: np.ndarray, + build_training_batch: BatchBuilder, + build_evaluation_batch: BatchBuilder, + forward: ForwardFunction, +) -> None: + """Run one fixed step-limited workload and retain its diagnostic outputs.""" + + import torch + + settings = WORKLOADS[workload_name] + training_steps = int(settings["training_steps"]) + checkpoint_steps = tuple(int(value) for value in settings["checkpoint_steps"]) + early_steps = set(int(value) for value in WORKLOAD_CAPTURE["early_parameter_state_steps"]) + optimizer = _build_optimizer(settings, model) + scaler = make_grad_scaler(context) if context.profile_id == "amp_fp16" else None + + batch_rows = _batch_schedule( + sample_count=training_sample_count, + batch_size=int(settings["batch_size"]), + step_count=training_steps, + seed=context.seed_for("training_order"), + shuffle=bool(settings["shuffle_training_data"]), + drop_last=bool(DATALOADER["drop_last"]), + ) + evaluation_rows = _evaluation_rows( + evaluation_sample_count, + int(settings["evaluation_batch_size"]), + ) + + initial_logits, initial_loss, initial_predictions, initial_correct = _evaluate( + context, + model, + rows=evaluation_rows, + build_batch=build_evaluation_batch, + forward=forward, + ) + + checkpoint_logits: dict[str, Any] = {"step_0": initial_logits} + checkpoint_metrics: dict[str, Any] = { + "step_0": _metric_tensors( + loss=initial_loss, + correct_count=initial_correct, + sample_count=evaluation_sample_count, + device=initial_logits.device, + ) + } + early_parameter_states: dict[str, Any] = {} + if 0 in early_steps: + early_parameter_states["step_0"] = clone_named_parameters(model) + + optimizer_states: dict[str, Any] = {} + if OUTPUT_CAPTURE["store_optimizer_state"]: + optimizer_states["step_0"] = _optimizer_snapshot(optimizer, model, scaler) + + training_losses: list[float] = [] + training_batch_indices: dict[str, Any] = {} + first_gradients: dict[str, Any] | None = None + + model.train() + for step_index, row_indices in enumerate(batch_rows, start=1): + batch = build_training_batch(row_indices) + source_rows = np.asarray(training_source_indices[row_indices], dtype=np.int64) + training_batch_indices[f"step_{step_index}"] = torch.from_numpy( + np.ascontiguousarray(source_rows) + ) + + optimizer.zero_grad(set_to_none=True) + with context.autocast(): + logits = forward(model, batch) + loss = torch.nn.functional.cross_entropy(logits, batch.labels) + + if scaler is None: + loss.backward() + else: + scaler.scale(loss).backward() + scaler.unscale_(optimizer) + + if step_index == 1: + first_gradients = clone_named_gradients(model) + + if scaler is None: + optimizer.step() + else: + scaler.step(optimizer) + scaler.update() + + training_losses.append(float(loss.detach().cpu().item())) + + if step_index in early_steps: + early_parameter_states[f"step_{step_index}"] = clone_named_parameters(model) + + if step_index in checkpoint_steps: + logits_at_step, loss_at_step, _, correct_at_step = _evaluate( + context, + model, + rows=evaluation_rows, + build_batch=build_evaluation_batch, + forward=forward, + ) + checkpoint_logits[f"step_{step_index}"] = logits_at_step + checkpoint_metrics[f"step_{step_index}"] = _metric_tensors( + loss=loss_at_step, + correct_count=correct_at_step, + sample_count=evaluation_sample_count, + device=logits_at_step.device, + ) + if OUTPUT_CAPTURE["store_optimizer_state"]: + optimizer_states[f"step_{step_index}"] = _optimizer_snapshot( + optimizer, + model, + scaler, + ) + + if first_gradients is None: + raise RuntimeError("The workload did not execute its first backward pass") + missing_checkpoints = { + f"step_{step}" for step in checkpoint_steps + } - set(checkpoint_logits) + if missing_checkpoints: + raise RuntimeError(f"Workload did not produce checkpoints: {sorted(missing_checkpoints)}") + + final_logits = checkpoint_logits[f"step_{training_steps}"] + final_predictions = torch.argmax(final_logits, dim=1) + final_metric_tensors = checkpoint_metrics[f"step_{training_steps}"] + final_loss = float(final_metric_tensors["loss"].detach().cpu().item()) + final_correct = int(final_metric_tensors["correct_count"].detach().cpu().item()) + + recorder.record("initial_logits", initial_logits) + recorder.record("initial_loss", initial_loss) + recorder.record("training_loss", training_losses) + recorder.record("training_batch_indices", training_batch_indices) + recorder.record("checkpoint_logits", checkpoint_logits) + recorder.record("checkpoint_metrics", checkpoint_metrics) + recorder.record("first_gradients", first_gradients) + recorder.record("early_parameter_states", early_parameter_states) + if OUTPUT_CAPTURE["store_optimizer_state"]: + recorder.record("optimizer_states", optimizer_states) + if OUTPUT_CAPTURE["store_final_parameters"]: + recorder.record("final_parameters", clone_named_parameters(model)) + recorder.record("final_predictions", final_predictions) + recorder.record( + "final_metrics", + { + "dataset_id": str(settings["dataset_id"]), + "training_steps": training_steps, + "training_batch_size": int(settings["batch_size"]), + "evaluation_batch_size": int(settings["evaluation_batch_size"]), + "training_sample_count": training_sample_count, + "evaluation_sample_count": evaluation_sample_count, + "examples_seen": int(sum(len(rows) for rows in batch_rows)), + "initial_evaluation_loss": initial_loss, + "initial_correct_count": initial_correct, + "initial_accuracy": initial_correct / evaluation_sample_count, + "final_evaluation_loss": final_loss, + "final_correct_count": final_correct, + "final_accuracy": final_correct / evaluation_sample_count, + "checkpoint_steps": list(checkpoint_steps), + "initial_prediction_count": int(initial_predictions.numel()), + "final_prediction_count": int(final_predictions.numel()), + "grad_scaler_enabled": scaler is not None, + "final_grad_scale": float(scaler.get_scale()) if scaler is not None else None, + }, + ) diff --git a/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/README.md b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/README.md new file mode 100644 index 0000000..b08892e --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/README.md @@ -0,0 +1,14 @@ +# Level 0 quick workloads + +This is the first thing I expect people to run when checking a new build or showing the suite to someone + +It trains and evaluates four small classifiers using the fixed generated model inputs: + +- a linear classifier +- the Level 5 MLP +- the Level 5 CNN +- the Level 5 residual multi-head attention classifier + +The MLP, CNN and attention examples call the same execution functions as Level 5. This keeps the quick demonstration representative rather than maintaining a second cut-down implementation + +The ordinary detailed tensor artefacts are still saved. The suite also writes `level_0_summary.csv` at the top of the result bundle so there is a quick human-readable view of the initial and final losses, predictions, logits, gradients and parameter norms diff --git a/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/__init__.py b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/__init__.py new file mode 100644 index 0000000..e2235f6 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/__init__.py @@ -0,0 +1 @@ +"""Quick model-training demonstrations used as the first CI check.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/test_demo_workloads.py b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/test_demo_workloads.py new file mode 100644 index 0000000..d7b6f74 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_0_smoke_workloads/test_demo_workloads.py @@ -0,0 +1,140 @@ +"""Run the four small model-training demonstrations used by Level 0.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import BLOCK_TESTS, LEVEL_0_DEMOS +from cases.common import ( + as_profile_tensor, + build_demo_summary, + build_linear_classifier, + load_module_state, + load_prepared_npz, + module_to_profile, + run_composite_block, + run_registered_case, +) +from cases.level_5_composite_models.test_attention_block import ( + run_example as run_attention_example, +) +from cases.level_5_composite_models.test_cnn_block import run_example as run_cnn_example +from cases.level_5_composite_models.test_mlp_block import run_example as run_mlp_example +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _record_summary( + context: CaseContext, + recorder: ObservationRecorder, + *, + model_type: str, + optimiser_name: str, + labels: object, + outputs: dict[str, object], +) -> None: + recorder.record( + "summary", + build_demo_summary( + context, + model_type=model_type, + optimiser_name=optimiser_name, + labels=labels, + outputs=outputs, + ), + ) + + +def _linear_classifier(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + model = module_to_profile(context, build_linear_classifier()) + load_module_state(context, model, "linear_initial_state.npz") + + def forward(current_model: object, retain_activations: bool) -> tuple[object, dict[str, object]]: + logits, activations = current_model(value, return_activations=True) + return logits, activations if retain_activations else {} + + outputs = run_composite_block( + context, + recorder, + model_name="linear", + model=model, + labels=labels, + forward=forward, + optimiser_settings=LEVEL_0_DEMOS["linear"], + ) + _record_summary( + context, + recorder, + model_type="linear_classifier", + optimiser_name=str(LEVEL_0_DEMOS["linear"]["optimiser"]), + labels=labels, + outputs=outputs, + ) + + +def _mlp_classifier(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + outputs = run_mlp_example(context, recorder) + _record_summary( + context, + recorder, + model_type="multilayer_perceptron", + optimiser_name=str(BLOCK_TESTS["model_optimizers"]["mlp"]), + labels=labels, + outputs=outputs, + ) + + +def _cnn_classifier(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + labels = as_profile_tensor(context, arrays["cnn_labels"], dtype=torch.int64) + outputs = run_cnn_example(context, recorder) + _record_summary( + context, + recorder, + model_type="convolutional_neural_network", + optimiser_name=str(BLOCK_TESTS["model_optimizers"]["cnn"]), + labels=labels, + outputs=outputs, + ) + + +def _attention_classifier(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + labels = as_profile_tensor(context, arrays["attention_labels"], dtype=torch.int64) + outputs = run_attention_example(context, recorder) + _record_summary( + context, + recorder, + model_type="residual_multi_head_attention", + optimiser_name=str(BLOCK_TESTS["model_optimizers"]["attention"]), + labels=labels, + outputs=outputs, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "linear_classifier": _linear_classifier, + "mlp_classifier": _mlp_classifier, + "cnn_classifier": _cnn_classifier, + "attention_classifier": _attention_classifier, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the quick demonstration selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/__init__.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/__init__.py new file mode 100644 index 0000000..75d44aa --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/__init__.py @@ -0,0 +1 @@ +"""Level 1 core tensor case modules.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_elementwise_arithmetic.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_elementwise_arithmetic.py new file mode 100644 index 0000000..6a5dc19 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_elementwise_arithmetic.py @@ -0,0 +1,172 @@ +"""Elementwise arithmetic cases over canonical input classes.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + if name != "special_values" + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _add(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + _record( + recorder, + { + "ordinary_reversed": values["ordinary"] + values["ordinary"].flip(0), + "near_zero_and_ordinary": values["near_zero"] + values["ordinary"], + "broadcast": values["broadcast_left"] + values["broadcast_right"], + }, + ) + + +def _subtract(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + _record( + recorder, + { + "ordinary_reversed": values["ordinary"] - values["ordinary"].flip(0), + "mixed_sign_and_ordinary": values["mixed_sign"] - values["ordinary"], + "broadcast": values["broadcast_left"] - values["broadcast_right"], + }, + ) + + +def _multiply(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + _record( + recorder, + { + "ordinary_unit_interval": values["ordinary"] * values["unit_interval"], + "near_zero_ordinary": values["near_zero"] * values["ordinary"], + "broadcast": values["broadcast_left"] * values["broadcast_right"], + }, + ) + + +def _true_divide(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + denominator = torch.clamp(values["positive"], min=0.125) + _record( + recorder, + { + "ordinary_by_positive": torch.true_divide(values["ordinary"], denominator), + "near_zero_by_positive": torch.true_divide(values["near_zero"], denominator), + "broadcast": torch.true_divide( + values["broadcast_left"], + values["broadcast_right"].abs() + 0.5, + ), + }, + ) + + +def _floor_divide(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + denominator = torch.clamp(values["positive"], min=0.5) + _record( + recorder, + { + "ordinary_by_positive": torch.floor_divide(values["ordinary"], denominator), + "mixed_sign_by_positive": torch.floor_divide( + values["mixed_sign"], + denominator, + ), + }, + ) + + +def _remainder(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + denominator = torch.clamp(values["positive"], min=0.5) + _record( + recorder, + { + "ordinary": torch.remainder(values["ordinary"], denominator), + "mixed_sign": torch.remainder(values["mixed_sign"], denominator), + }, + ) + + +def _power(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + positive = torch.clamp(values["positive"], min=1e-3, max=16.0) + bounded = torch.clamp(values["unit_interval"], min=-0.95, max=0.95) + _record( + recorder, + { + "square": torch.pow(bounded, 2), + "cube": torch.pow(bounded, 3), + "square_root": torch.pow(positive, 0.5), + }, + ) + + +def _minimum_and_maximum(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + _record( + recorder, + { + "minimum": torch.minimum(values["ordinary"], values["mixed_sign"]), + "maximum": torch.maximum(values["ordinary"], values["mixed_sign"]), + "fmin": torch.fmin(values["ordinary"], values["mixed_sign"]), + "fmax": torch.fmax(values["ordinary"], values["mixed_sign"]), + }, + ) + + +def _clamp(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + _record( + recorder, + { + "symmetric": torch.clamp(values["ordinary"], min=-1.5, max=2.0), + "lower_only": torch.clamp_min(values["mixed_sign"], -2.5), + "upper_only": torch.clamp_max(values["mixed_sign"], 3.5), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "add": _add, + "subtract": _subtract, + "multiply": _multiply, + "true_divide": _true_divide, + "floor_divide": _floor_divide, + "remainder": _remainder, + "power": _power, + "minimum_and_maximum": _minimum_and_maximum, + "clamp": _clamp, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one elementwise arithmetic case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_indexing_and_shape.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_indexing_and_shape.py new file mode 100644 index 0000000..02146be --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_indexing_and_shape.py @@ -0,0 +1,176 @@ +"""Indexing, view and shape-manipulation cases.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import ( + as_profile_tensor, + describe_tensors, + load_prepared_npz, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "indexing.npz") + return { + "source": as_profile_tensor(context, arrays["source"]), + "row_indices": as_profile_tensor(context, arrays["row_indices"]), + "column_indices": as_profile_tensor(context, arrays["column_indices"]), + "gather_indices": as_profile_tensor(context, arrays["gather_indices"]), + "boolean_mask": as_profile_tensor(context, arrays["boolean_mask"]), + "scatter_values": as_profile_tensor(context, arrays["scatter_values"]), + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("structure", describe_tensors(values)) + recorder.record("values", values) + + +def _basic_slicing(context: CaseContext, recorder: ObservationRecorder) -> None: + source = _inputs(context)["source"] + _record( + recorder, + { + "middle_block": source[1:6, 2:10, 3:12], + "strided": source[::2, 1::3, ::2], + "single_plane": source[3], + }, + ) + + +def _advanced_indexing(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + source = values["source"] + rows = values["row_indices"] + columns = values["column_indices"] + _record( + recorder, + { + "selected_rows": source[rows], + "paired_rows_and_columns": source[rows, :, columns], + "selected_columns": source[:, :, columns], + }, + ) + + +def _boolean_masking(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + source = values["source"] + mask = values["boolean_mask"] + _record( + recorder, + { + "selected": source[mask], + "filled": source.masked_fill(mask, -3.0), + }, + ) + + +def _gather(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + source = values["source"] + indices = values["gather_indices"] + _record( + recorder, + { + "gather_last_dimension": torch.gather(source, dim=2, index=indices), + "take_along_last_dimension": torch.take_along_dim( + source, + indices, + dim=2, + ), + }, + ) + + +def _scatter(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + source = values["source"] + scatter_values = values["scatter_values"] + + # Keep the indices unique along the scatter dimension + # Duplicate indices would turn this into a nondeterminism test instead + base_indices = torch.tensor( + [0, 3, 6, 9, 12], + device=context.device, + dtype=torch.int64, + ) + indices = base_indices.view(1, 1, 5).expand_as(scatter_values) + scattered = torch.zeros_like(source).scatter(2, indices, scatter_values) + added = torch.zeros_like(source).scatter_add(2, indices, scatter_values) + _record( + recorder, + { + "scatter": scattered, + "scatter_add": added, + }, + ) + + +def _reshape_and_view(context: CaseContext, recorder: ObservationRecorder) -> None: + source = _inputs(context)["source"] + _record( + recorder, + { + "flatten": source.flatten(), + "reshape_2d": source.reshape(7, 11 * 13), + "view_2d": source.view(7 * 11, 13), + "unflatten": source.flatten().unflatten(0, (7, 11, 13)), + }, + ) + + +def _transpose_and_permute(context: CaseContext, recorder: ObservationRecorder) -> None: + source = _inputs(context)["source"] + _record( + recorder, + { + "transpose": source.transpose(0, 2), + "permute": source.permute(2, 0, 1), + "movedim": source.movedim((0, 2), (2, 0)), + }, + ) + + +def _concatenate_and_stack(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + source = _inputs(context)["source"] + first = source[:3] + second = source[3:6] + _record( + recorder, + { + "concatenate": torch.cat((first, second), dim=0), + "stack": torch.stack((source[0], source[1], source[2]), dim=0), + "column_concatenate": torch.cat((source[:, :, :5], source[:, :, 5:]), dim=2), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "basic_slicing": _basic_slicing, + "advanced_indexing": _advanced_indexing, + "boolean_masking": _boolean_masking, + "gather": _gather, + "scatter": _scatter, + "reshape_and_view": _reshape_and_view, + "transpose_and_permute": _transpose_and_permute, + "concatenate_and_stack": _concatenate_and_stack, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one indexing or shape case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_tensor_creation_and_dtypes.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_tensor_creation_and_dtypes.py new file mode 100644 index 0000000..0614204 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_tensor_creation_and_dtypes.py @@ -0,0 +1,153 @@ +"""Core tensor creation, conversion and layout cases.""" + +from __future__ import annotations + +from collections.abc import Callable + +import numpy as np + +from cases.common import ( + as_profile_tensor, + describe_tensors, + load_prepared_npz, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _record( + recorder: ObservationRecorder, + values: dict[str, object], + *, + extra_structure: dict[str, object] | None = None, +) -> None: + structure = describe_tensors(values) + if extra_structure: + structure.update(extra_structure) + recorder.record("structure", structure) + recorder.record("values", values) + + +def _from_numpy(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + inputs = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + source = np.ascontiguousarray(inputs["ordinary"]) + cpu_view = torch.from_numpy(source) + converted = cpu_view.to(device=context.device, dtype=context.torch_dtype()) + values = { + "converted": converted, + "source_round_trip": converted.to(device="cpu"), + } + _record( + recorder, + values, + extra_structure={ + "numpy_source": { + "shape": list(source.shape), + "dtype": source.dtype.name, + "strides_bytes": list(source.strides), + "is_c_contiguous": bool(source.flags.c_contiguous), + } + }, + ) + + +def _zeros_ones_full(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + dtype = context.torch_dtype() + values = { + "zeros": torch.zeros((7, 11, 13), device=context.device, dtype=dtype), + "ones": torch.ones((7, 11, 13), device=context.device, dtype=dtype), + "full_positive": torch.full( + (7, 11, 13), + 1.25, + device=context.device, + dtype=dtype, + ), + "full_negative": torch.full( + (7, 11, 13), + -2.5, + device=context.device, + dtype=dtype, + ), + } + _record(recorder, values) + + +def _scalar_construction(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + dtype = context.torch_dtype() + values = { + "positive": torch.tensor(3.25, device=context.device, dtype=dtype), + "negative": torch.tensor(-7.5, device=context.device, dtype=dtype), + "zero": torch.tensor(0.0, device=context.device, dtype=dtype), + "integer": torch.tensor(17, device=context.device, dtype=torch.int64), + "boolean": torch.tensor(True, device=context.device, dtype=torch.bool), + } + _record(recorder, values) + + +def _dtype_conversion(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + inputs = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + source = as_profile_tensor(context, inputs["ordinary"], dtype=torch.float64) + values = { + "profile_dtype": source.to(dtype=context.torch_dtype()), + "float32": source.to(dtype=torch.float32), + "int32": source.to(dtype=torch.int32), + "boolean": source.to(dtype=torch.bool), + } + _record(recorder, values) + + +def _device_round_trip(context: CaseContext, recorder: ObservationRecorder) -> None: + inputs = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + original = as_profile_tensor(context, inputs["mixed_sign"]) + cpu_copy = original.to(device="cpu") + round_trip = cpu_copy.to(device=context.device) + values = { + "original": original, + "cpu_copy": cpu_copy, + "round_trip": round_trip, + } + _record(recorder, values) + + +def _contiguous_and_non_contiguous( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + inputs = load_prepared_npz(context, DATASET_ID, "indexing.npz") + source = as_profile_tensor(context, inputs["source"]) + transposed = source.transpose(0, 2) + narrowed = source[:, ::2, :] + values = { + "source": source, + "transposed_view": transposed, + "transposed_contiguous": transposed.contiguous(), + "strided_view": narrowed, + "strided_contiguous": narrowed.contiguous(), + } + _record(recorder, values) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "from_numpy": _from_numpy, + "zeros_ones_full": _zeros_ones_full, + "scalar_construction": _scalar_construction, + "dtype_conversion": _dtype_conversion, + "device_round_trip": _device_round_trip, + "contiguous_and_non_contiguous": _contiguous_and_non_contiguous, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one tensor creation case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_transcendental_functions.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_transcendental_functions.py new file mode 100644 index 0000000..b9cd9cb --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_transcendental_functions.py @@ -0,0 +1,128 @@ +"""Transcendental and activation-function cases.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + if name in {"ordinary", "near_zero", "positive", "unit_interval", "mixed_sign"} + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _exp_and_log(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + signed = torch.clamp(values["ordinary"], min=-8.0, max=8.0) + positive = torch.clamp(values["positive"], min=1e-4, max=20.0) + unit = torch.clamp(values["unit_interval"], min=-0.95, max=0.95) + _record( + recorder, + { + "exp": torch.exp(signed), + "expm1": torch.expm1(signed), + "log": torch.log(positive), + "log2": torch.log2(positive), + "log10": torch.log10(positive), + "log1p": torch.log1p(unit), + }, + ) + + +def _sqrt_and_rsqrt(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + positive = torch.clamp(values["positive"], min=1e-4, max=20.0) + small = torch.clamp(values["near_zero"].abs(), min=1e-4) + _record( + recorder, + { + "sqrt_positive": torch.sqrt(positive), + "rsqrt_positive": torch.rsqrt(positive), + "sqrt_small": torch.sqrt(small), + "rsqrt_small": torch.rsqrt(small), + }, + ) + + +def _trigonometric(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + angles = values["unit_interval"] * 1.25 + _record( + recorder, + { + "sin": torch.sin(angles), + "cos": torch.cos(angles), + "tan": torch.tan(angles), + "asin": torch.asin(values["unit_interval"]), + "acos": torch.acos(values["unit_interval"]), + "atan": torch.atan(values["ordinary"]), + }, + ) + + +def _hyperbolic(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + bounded = torch.clamp(values["mixed_sign"], min=-4.0, max=4.0) + inverse_input = torch.clamp(values["unit_interval"], min=-0.95, max=0.95) + _record( + recorder, + { + "sinh": torch.sinh(bounded), + "cosh": torch.cosh(bounded), + "tanh": torch.tanh(bounded), + "asinh": torch.asinh(bounded), + "atanh": torch.atanh(inverse_input), + }, + ) + + +def _sigmoid_family(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + import torch.nn.functional as functional + + values = _inputs(context) + bounded = torch.clamp(values["ordinary"], min=-12.0, max=12.0) + _record( + recorder, + { + "sigmoid": torch.sigmoid(bounded), + "log_sigmoid": functional.logsigmoid(bounded), + "softplus": functional.softplus(bounded), + "silu": functional.silu(bounded), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "exp_and_log": _exp_and_log, + "sqrt_and_rsqrt": _sqrt_and_rsqrt, + "trigonometric": _trigonometric, + "hyperbolic": _hyperbolic, + "sigmoid_family": _sigmoid_family, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one transcendental-function case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_type_promotion.py b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_type_promotion.py new file mode 100644 index 0000000..9421d17 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_1_core_tensor/test_type_promotion.py @@ -0,0 +1,138 @@ +"""Type-promotion cases with explicit operand dtypes.""" + +from __future__ import annotations + +from collections.abc import Callable + +import numpy as np + +from cases.common import describe_tensors, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + import torch + + structure = describe_tensors(values) + structure["result_types"] = { + name: str(value.dtype).removeprefix("torch.") + for name, value in values.items() + if isinstance(value, torch.Tensor) + } + recorder.record("structure", structure) + recorder.record("values", values) + + +def _base_values(context: CaseContext) -> np.ndarray: + return np.linspace(-3.0, 3.0, num=17, dtype=np.float64) + + +def _integer_and_float(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + integer = torch.arange(-8, 9, device=context.device, dtype=torch.int32) + floating = torch.tensor( + _base_values(context), + device=context.device, + dtype=context.torch_dtype(), + ) + _record( + recorder, + { + "add": integer + floating, + "multiply": integer * floating, + "true_divide": integer / (floating.abs() + 0.5), + }, + ) + + +def _float_widths(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + base = _base_values(context) + float16 = torch.tensor(base, device=context.device, dtype=torch.float16) + float32 = torch.tensor(base, device=context.device, dtype=torch.float32) + float64 = torch.tensor(base, device=context.device, dtype=torch.float64) + profile = torch.tensor(base, device=context.device, dtype=context.torch_dtype()) + lower = float32 if context.torch_dtype() == torch.float64 else float16 + _record( + recorder, + { + "float16_plus_float32": float16 + float32, + "float32_plus_float64": float32 + float64, + "lower_plus_profile": lower + profile, + }, + ) + + +def _scalar_and_tensor(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + tensor = torch.tensor( + _base_values(context), + device=context.device, + dtype=context.torch_dtype(), + ) + _record( + recorder, + { + "python_integer": tensor + 3, + "python_float": tensor + 0.25, + "zero_dimensional_integer": tensor + + torch.tensor(3, device=context.device, dtype=torch.int64), + "zero_dimensional_float": tensor + + torch.tensor(0.25, device=context.device, dtype=torch.float32), + }, + ) + + +def _boolean_and_numeric(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + numeric = torch.tensor( + _base_values(context), + device=context.device, + dtype=context.torch_dtype(), + ) + boolean = numeric > 0 + _record( + recorder, + { + "add": boolean + numeric, + "multiply": boolean * numeric, + "where": torch.where(boolean, numeric, -numeric), + }, + ) + + +def _complex_and_real(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + real_dtype = context.torch_dtype() + complex_dtype = torch.complex128 if real_dtype == torch.float64 else torch.complex64 + real = torch.tensor(_base_values(context), device=context.device, dtype=real_dtype) + imaginary = torch.linspace(1.0, 2.0, 17, device=context.device, dtype=real_dtype) + complex_values = torch.complex(real, imaginary).to(dtype=complex_dtype) + _record( + recorder, + { + "add": complex_values + real, + "multiply": complex_values * real, + "divide": complex_values / (real.abs() + 0.5), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "integer_and_float": _integer_and_float, + "float_widths": _float_widths, + "scalar_and_tensor": _scalar_and_tensor, + "boolean_and_numeric": _boolean_and_numeric, + "complex_and_real": _complex_and_real, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one type-promotion case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/__init__.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/__init__.py new file mode 100644 index 0000000..2860cb6 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/__init__.py @@ -0,0 +1 @@ +"""Level 2 numerical kernel cases.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_convolution.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_convolution.py new file mode 100644 index 0000000..5f1ed25 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_convolution.py @@ -0,0 +1,118 @@ +"""Convolution cases using fixed inputs, weights and biases.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "convolutions.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _conv1d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + values = _inputs(context) + source = values["conv1d_input"] + weight = values["conv1d_weight"] + bias = values["conv1d_bias"] + _record( + recorder, + { + "valid": functional.conv1d(source, weight, bias), + "same_length": functional.conv1d(source, weight, bias, padding=2), + "strided": functional.conv1d(source, weight, bias, stride=2, padding=2), + "dilated": functional.conv1d(source, weight, bias, dilation=2, padding=4), + }, + ) + + +def _conv2d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + values = _inputs(context) + source = values["conv2d_input"] + weight = values["conv2d_weight"] + bias = values["conv2d_bias"] + _record( + recorder, + { + "valid": functional.conv2d(source, weight, bias), + "same_shape": functional.conv2d(source, weight, bias, padding=1), + "strided": functional.conv2d(source, weight, bias, stride=2, padding=1), + "dilated": functional.conv2d(source, weight, bias, dilation=2, padding=2), + }, + ) + + +def _grouped_conv2d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + values = _inputs(context) + source = values["grouped_conv2d_input"] + weight = values["grouped_conv2d_weight"] + bias = values["grouped_conv2d_bias"] + _record( + recorder, + { + "groups_two": functional.conv2d( + source, + weight, + bias, + padding=1, + groups=2, + ), + "groups_two_strided": functional.conv2d( + source, + weight, + bias, + stride=2, + padding=1, + groups=2, + ), + }, + ) + + +def _conv3d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + values = _inputs(context) + source = values["conv3d_input"] + weight = values["conv3d_weight"] + bias = values["conv3d_bias"] + _record( + recorder, + { + "valid": functional.conv3d(source, weight, bias), + "same_shape": functional.conv3d(source, weight, bias, padding=1), + "strided": functional.conv3d(source, weight, bias, stride=2, padding=1), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "conv1d": _conv1d, + "conv2d": _conv2d, + "grouped_conv2d": _grouped_conv2d, + "conv3d": _conv3d, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one convolution case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_eigensystems.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_eigensystems.py new file mode 100644 index 0000000..ac303de --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_eigensystems.py @@ -0,0 +1,67 @@ +"""Symmetric eigensystem cases with residual and subspace outputs.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "linear_algebra.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _eigensystem_invariants(matrix: object, *, degenerate_count: int) -> dict[str, object]: + import torch + + eigenvalues, eigenvectors = torch.linalg.eigh(matrix) + reconstructed_action = matrix @ eigenvectors + scaled_vectors = eigenvectors * eigenvalues.unsqueeze(0) + identity = torch.eye( + eigenvectors.shape[1], + dtype=eigenvectors.dtype, + device=eigenvectors.device, + ) + subspace = eigenvectors[:, :degenerate_count] + return { + "eigenvalues": eigenvalues, + "eigenvectors": eigenvectors, + "eigen_residual": reconstructed_action - scaled_vectors, + "orthogonality_residual": eigenvectors.transpose(-2, -1) @ eigenvectors - identity, + "leading_subspace_projector": subspace @ subspace.transpose(-2, -1), + } + + +def _symmetric_distinct(context: CaseContext, recorder: ObservationRecorder) -> None: + matrix = _inputs(context)["well_conditioned_matrix"] + recorder.record( + "invariants", + _eigensystem_invariants(matrix, degenerate_count=1), + ) + + +def _symmetric_degenerate(context: CaseContext, recorder: ObservationRecorder) -> None: + matrix = _inputs(context)["degenerate_symmetric_matrix"] + recorder.record( + "invariants", + _eigensystem_invariants(matrix, degenerate_count=3), + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "symmetric_distinct": _symmetric_distinct, + "symmetric_degenerate": _symmetric_degenerate, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one eigensystem case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_factorisations.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_factorisations.py new file mode 100644 index 0000000..71e1ccd --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_factorisations.py @@ -0,0 +1,93 @@ +"""Matrix factorisation cases with reconstruction and orthogonality checks.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "linear_algebra.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("invariants", values) + + +def _qr(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + matrix = _inputs(context)["rectangular_matrix"] + q, r = torch.linalg.qr(matrix, mode="reduced") + identity = torch.eye(q.shape[1], dtype=q.dtype, device=q.device) + reconstruction = q @ r + _record( + recorder, + { + "q": q, + "r": r, + "reconstruction": reconstruction, + "reconstruction_residual": reconstruction - matrix, + "orthogonality_residual": q.transpose(-2, -1) @ q - identity, + }, + ) + + +def _svd(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + matrix = _inputs(context)["svd_matrix"] + u, singular_values, vh = torch.linalg.svd(matrix, full_matrices=False) + reconstruction = (u * singular_values.unsqueeze(0)) @ vh + u_identity = torch.eye(u.shape[1], dtype=u.dtype, device=u.device) + v_identity = torch.eye(vh.shape[0], dtype=vh.dtype, device=vh.device) + _record( + recorder, + { + "u": u, + "singular_values": singular_values, + "vh": vh, + "reconstruction": reconstruction, + "reconstruction_residual": reconstruction - matrix, + "u_orthogonality_residual": u.transpose(-2, -1) @ u - u_identity, + "v_orthogonality_residual": vh @ vh.transpose(-2, -1) - v_identity, + }, + ) + + +def _cholesky(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + matrix = _inputs(context)["positive_definite_matrix"] + factor = torch.linalg.cholesky(matrix) + reconstruction = factor @ factor.transpose(-2, -1) + _record( + recorder, + { + "factor": factor, + "reconstruction": reconstruction, + "reconstruction_residual": reconstruction - matrix, + "strict_upper_triangle": torch.triu(factor, diagonal=1), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "qr": _qr, + "svd": _svd, + "cholesky": _cholesky, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one factorisation case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_fft.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_fft.py new file mode 100644 index 0000000..84013e8 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_fft.py @@ -0,0 +1,103 @@ +"""FFT cases which retain both transforms and inverse reconstructions.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "fft.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record( + recorder: ObservationRecorder, + *, + transforms: dict[str, object], + reconstructions: dict[str, object], +) -> None: + recorder.record("transforms", transforms) + recorder.record("reconstructions", reconstructions) + + +def _fft_1d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + source = _inputs(context)["complex_1d"] + transform = torch.fft.fft(source) + orthonormal_transform = torch.fft.fft(source, norm="ortho") + _record( + recorder, + transforms={"default": transform, "orthonormal": orthonormal_transform}, + reconstructions={ + "default": torch.fft.ifft(transform), + "orthonormal": torch.fft.ifft(orthonormal_transform, norm="ortho"), + }, + ) + + +def _fft_2d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + source = _inputs(context)["complex_2d"] + transform = torch.fft.fft2(source) + shifted = torch.fft.fftshift(transform) + _record( + recorder, + transforms={"default": transform, "shifted": shifted}, + reconstructions={ + "default": torch.fft.ifft2(transform), + "shifted": torch.fft.ifft2(torch.fft.ifftshift(shifted)), + }, + ) + + +def _real_fft(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + source_1d = _inputs(context)["real_1d"] + source_2d = _inputs(context)["real_2d"] + transform_1d = torch.fft.rfft(source_1d) + transform_2d = torch.fft.rfft2(source_2d) + _record( + recorder, + transforms={"one_dimensional": transform_1d, "two_dimensional": transform_2d}, + reconstructions={ + "one_dimensional": torch.fft.irfft(transform_1d, n=source_1d.shape[0]), + "two_dimensional": torch.fft.irfft2(transform_2d, s=source_2d.shape), + }, + ) + + +def _inverse_round_trip(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + source = _inputs(context)["complex_2d"] + inverse_transform = torch.fft.ifftn(source) + _record( + recorder, + transforms={"inverse": inverse_transform}, + reconstructions={"forward_after_inverse": torch.fft.fftn(inverse_transform)}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "fft_1d": _fft_1d, + "fft_2d": _fft_2d, + "real_fft": _real_fft, + "inverse_round_trip": _inverse_round_trip, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one FFT case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_linear_solve.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_linear_solve.py new file mode 100644 index 0000000..6a4c11f --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_linear_solve.py @@ -0,0 +1,107 @@ +"""Linear solve cases with residuals against the original equations.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "linear_algebra.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record( + recorder: ObservationRecorder, + *, + solutions: dict[str, object], + residuals: dict[str, object], +) -> None: + recorder.record("solutions", solutions) + recorder.record("residuals", residuals) + + +def _well_conditioned_solve( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + import torch + + values = _inputs(context) + matrix = values["well_conditioned_matrix"] + right_hand_side = values["well_conditioned_rhs"] + solution = torch.linalg.solve(matrix, right_hand_side) + _record( + recorder, + solutions={"solution": solution}, + residuals={"equation": matrix @ solution - right_hand_side}, + ) + + +def _ill_conditioned_solve( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + import torch + + values = _inputs(context) + matrix = values["ill_conditioned_matrix"] + right_hand_side = values["ill_conditioned_rhs"] + solution = torch.linalg.solve(matrix, right_hand_side) + _record( + recorder, + solutions={"solution": solution}, + residuals={"equation": matrix @ solution - right_hand_side}, + ) + + +def _matrix_inverse(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + matrix = _inputs(context)["well_conditioned_matrix"] + inverse = torch.linalg.inv(matrix) + identity = torch.eye(matrix.shape[0], dtype=matrix.dtype, device=matrix.device) + _record( + recorder, + solutions={"inverse": inverse}, + residuals={ + "left_identity": matrix @ inverse - identity, + "right_identity": inverse @ matrix - identity, + }, + ) + + +def _cholesky_solve(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + matrix = values["positive_definite_matrix"] + right_hand_side = values["well_conditioned_rhs"] + factor = torch.linalg.cholesky(matrix) + solution = torch.cholesky_solve(right_hand_side, factor) + _record( + recorder, + solutions={"factor": factor, "solution": solution}, + residuals={"equation": matrix @ solution - right_hand_side}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "well_conditioned_solve": _well_conditioned_solve, + "ill_conditioned_solve": _ill_conditioned_solve, + "matrix_inverse": _matrix_inverse, + "cholesky_solve": _cholesky_solve, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one linear solve case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_matrix_multiplication.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_matrix_multiplication.py new file mode 100644 index 0000000..7d80218 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_matrix_multiplication.py @@ -0,0 +1,121 @@ +"""Matrix multiplication cases over fixed irregular dimensions.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "matrix_operations.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _matrix_vector(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + left = values["left"] + vector = values["vector"] + _record( + recorder, + { + "mv": torch.mv(left, vector), + "matmul": torch.matmul(left, vector), + "transposed_mv": torch.mv(left.transpose(0, 1), left[:, 0]), + }, + ) + + +def _matrix_matrix(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + left = values["left"] + right = values["right"] + _record( + recorder, + { + "mm": torch.mm(left, right), + "matmul": torch.matmul(left, right), + "left_gram": left.transpose(0, 1) @ left, + "right_gram": right @ right.transpose(0, 1), + }, + ) + + +def _batched_matrix_matrix(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + batch_left = values["batch_left"] + batch_right = values["batch_right"] + _record( + recorder, + { + "bmm": torch.bmm(batch_left, batch_right), + "matmul": torch.matmul(batch_left, batch_right), + "broadcast_right": torch.matmul(batch_left, batch_right[0]), + }, + ) + + +def _einsum(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + left = values["einsum_left"] + right = values["einsum_right"] + _record( + recorder, + { + "contract_last_dimension": torch.einsum("bij,jk->bik", left, right), + "batch_gram": torch.einsum("bij,bik->bjk", left, left), + "diagonal_trace": torch.einsum("bii->b", left[:, :, :7]), + }, + ) + + +def _inner_and_outer(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + vector = values["vector"] + second = values["left"][0] + short_left = vector[:31] + short_right = second[:31] + _record( + recorder, + { + "inner": torch.inner(vector, second), + "dot": torch.dot(vector, second), + "outer": torch.outer(short_left, short_right), + "ger": torch.ger(short_left, short_right), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "matrix_vector": _matrix_vector, + "matrix_matrix": _matrix_matrix, + "batched_matrix_matrix": _batched_matrix_matrix, + "einsum": _einsum, + "inner_and_outer": _inner_and_outer, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one matrix operation case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_pooling.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_pooling.py new file mode 100644 index 0000000..cdd3d7e --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_pooling.py @@ -0,0 +1,154 @@ +"""Pooling cases over the prepared convolution inputs.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "convolutions.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + if name.endswith("_input") + } + + +def _empty_indices(context: CaseContext) -> object: + import torch + + return torch.empty(0, dtype=torch.int64, device=context.device) + + +def _record( + recorder: ObservationRecorder, + *, + values: dict[str, object], + indices: dict[str, object], +) -> None: + recorder.record("values", values) + recorder.record("indices", indices) + + +def _max_pool1d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + source = _inputs(context)["conv1d_input"] + values, indices = functional.max_pool1d( + source, + kernel_size=3, + stride=2, + padding=1, + return_indices=True, + ) + ceil_values, ceil_indices = functional.max_pool1d( + source, + kernel_size=4, + stride=3, + padding=1, + ceil_mode=True, + return_indices=True, + ) + _record( + recorder, + values={"standard": values, "ceil_mode": ceil_values}, + indices={"standard": indices, "ceil_mode": ceil_indices}, + ) + + +def _max_pool2d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + source = _inputs(context)["conv2d_input"] + values, indices = functional.max_pool2d( + source, + kernel_size=(3, 2), + stride=(2, 2), + padding=(1, 0), + return_indices=True, + ) + dilated_values, dilated_indices = functional.max_pool2d( + source, + kernel_size=3, + stride=2, + padding=1, + dilation=2, + return_indices=True, + ) + _record( + recorder, + values={"standard": values, "dilated": dilated_values}, + indices={"standard": indices, "dilated": dilated_indices}, + ) + + +def _average_pool2d(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + source = _inputs(context)["conv2d_input"] + _record( + recorder, + values={ + "include_padding": functional.avg_pool2d( + source, + kernel_size=3, + stride=2, + padding=1, + count_include_pad=True, + ), + "exclude_padding": functional.avg_pool2d( + source, + kernel_size=3, + stride=2, + padding=1, + count_include_pad=False, + ), + "divisor_override": functional.avg_pool2d( + source, + kernel_size=2, + stride=2, + divisor_override=5, + ), + }, + indices={"not_applicable": _empty_indices(context)}, + ) + + +def _adaptive_average_pool2d( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + import torch.nn.functional as functional + + source = _inputs(context)["conv2d_input"] + _record( + recorder, + values={ + "one_by_one": functional.adaptive_avg_pool2d(source, output_size=(1, 1)), + "irregular": functional.adaptive_avg_pool2d(source, output_size=(5, 7)), + "partially_preserved": functional.adaptive_avg_pool2d( + source, + output_size=(None, 4), + ), + }, + indices={"not_applicable": _empty_indices(context)}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "max_pool1d": _max_pool1d, + "max_pool2d": _max_pool2d, + "average_pool2d": _average_pool2d, + "adaptive_average_pool2d": _adaptive_average_pool2d, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one pooling case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_reductions_and_statistics.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_reductions_and_statistics.py new file mode 100644 index 0000000..610f8be --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_reductions_and_statistics.py @@ -0,0 +1,171 @@ +"""Reduction and statistics cases over canonical prepared inputs.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "reductions.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _sum_and_mean(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + positive = values["positive"] + mixed_sign = values["mixed_sign"] + cube = values["cube"] + _record( + recorder, + { + "positive_sum_all": positive.sum(), + "positive_sum_rows": positive.sum(dim=1), + "positive_mean_columns": positive.mean(dim=0), + "mixed_sign_sum_all": mixed_sign.sum(), + "mixed_sign_mean_rows": mixed_sign.mean(dim=1), + "cube_sum_last_dimension": cube.sum(dim=-1), + "cube_mean_first_two_dimensions": cube.mean(dim=(0, 1)), + }, + ) + + +def _variance_and_standard_deviation( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + values = _inputs(context) + mixed_sign = values["mixed_sign"] + cube = values["cube"] + _record( + recorder, + { + "variance_population_all": mixed_sign.var(correction=0), + "variance_sample_rows": mixed_sign.var(dim=1, correction=1), + "standard_deviation_population_columns": mixed_sign.std( + dim=0, + correction=0, + ), + "cube_variance_last_dimension": cube.var(dim=-1, correction=0), + "cube_standard_deviation_first_dimension": cube.std( + dim=0, + correction=1, + ), + }, + ) + + +def _minimum_and_maximum(context: CaseContext, recorder: ObservationRecorder) -> None: + values = _inputs(context) + mixed_sign = values["mixed_sign"] + cube = values["cube"] + row_minimum = mixed_sign.min(dim=1) + column_maximum = mixed_sign.max(dim=0) + cube_minimum = cube.amin(dim=(1, 2)) + cube_maximum = cube.amax(dim=(0, 2)) + _record( + recorder, + { + "global_minimum": mixed_sign.min(), + "global_maximum": mixed_sign.max(), + "row_minimum_values": row_minimum.values, + "row_minimum_indices": row_minimum.indices, + "column_maximum_values": column_maximum.values, + "column_maximum_indices": column_maximum.indices, + "cube_minimum": cube_minimum, + "cube_maximum": cube_maximum, + }, + ) + + +def _cumulative_operations(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + mixed_sign = values["mixed_sign"] + positive = values["positive"] + integer_values = values["integer_values"] + + # Keep cumprod close to one so lower precision profiles do not overflow immediately + stable_product_values = 1.0 + (positive[:7, :17] - 5.0) * 1e-3 + _record( + recorder, + { + "mixed_sign_cumsum_rows": torch.cumsum(mixed_sign, dim=1), + "mixed_sign_cumsum_columns": torch.cumsum(mixed_sign, dim=0), + "stable_cumprod_rows": torch.cumprod(stable_product_values, dim=1), + "integer_cumsum_rows": torch.cumsum(integer_values, dim=1), + "mixed_sign_logcumsumexp_rows": torch.logcumsumexp(mixed_sign, dim=1), + }, + ) + + +def _vector_and_matrix_norms(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + mixed_sign = values["mixed_sign"] + cube = values["cube"] + vector = mixed_sign[0] + matrix = mixed_sign[:31, :29] + _record( + recorder, + { + "vector_l1": torch.linalg.vector_norm(vector, ord=1), + "vector_l2": torch.linalg.vector_norm(vector, ord=2), + "vector_infinity": torch.linalg.vector_norm(vector, ord=float("inf")), + "matrix_frobenius": torch.linalg.matrix_norm(matrix, ord="fro"), + "matrix_one_norm": torch.linalg.matrix_norm(matrix, ord=1), + "batched_vector_norm": torch.linalg.vector_norm(cube, dim=-1), + }, + ) + + +def _cancellation_heavy_sum(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + values = _inputs(context) + cancellation = values["cancellation"] + flattened = cancellation.reshape(-1) + ascending = torch.sort(flattened).values + descending = ascending.flip(0) + complete_pattern_length = (flattened.numel() // 5) * 5 + paired = flattened[:complete_pattern_length].reshape(-1, 5) + _record( + recorder, + { + "source_order_sum": flattened.sum(), + "ascending_order_sum": ascending.sum(), + "descending_order_sum": descending.sum(), + "row_sums": cancellation.sum(dim=1), + "pattern_sums": paired.sum(dim=1), + "mean": flattened.mean(), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "sum_and_mean": _sum_and_mean, + "variance_and_standard_deviation": _variance_and_standard_deviation, + "minimum_and_maximum": _minimum_and_maximum, + "cumulative_operations": _cumulative_operations, + "vector_and_matrix_norms": _vector_and_matrix_norms, + "cancellation_heavy_sum": _cancellation_heavy_sum, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one reduction or statistics case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_special_functions.py b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_special_functions.py new file mode 100644 index 0000000..0550076 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_2_numerical_kernels/test_special_functions.py @@ -0,0 +1,100 @@ +"""Special mathematical function cases over bounded canonical inputs.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _inputs(context: CaseContext) -> dict[str, object]: + arrays = load_prepared_npz(context, DATASET_ID, "special_functions.npz") + return { + name: as_profile_tensor(context, value) + for name, value in arrays.items() + } + + +def _record(recorder: ObservationRecorder, values: dict[str, object]) -> None: + recorder.record("results", values) + + +def _erf_family(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + signed = _inputs(context)["signed"] + inverse_input = torch.tanh(signed / 4.0) * 0.95 + _record( + recorder, + { + "erf": torch.erf(signed), + "erfc": torch.erfc(signed), + "erfinv": torch.erfinv(inverse_input), + }, + ) + + +def _gamma_family(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + gamma_inputs = _inputs(context)["gamma_inputs"] + _record( + recorder, + { + "lgamma": torch.lgamma(gamma_inputs), + "gammaln": torch.special.gammaln(gamma_inputs), + "digamma": torch.digamma(gamma_inputs), + "polygamma_one": torch.polygamma(1, gamma_inputs), + }, + ) + + +def _softmax_and_log_softmax( + context: CaseContext, + recorder: ObservationRecorder, +) -> None: + import torch + + matrix = _inputs(context)["softmax_matrix"] + _record( + recorder, + { + "softmax_rows": torch.softmax(matrix, dim=1), + "log_softmax_rows": torch.log_softmax(matrix, dim=1), + "logsumexp_rows": torch.logsumexp(matrix, dim=1), + "softmax_columns": torch.softmax(matrix, dim=0), + }, + ) + + +def _logit_and_expit(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + probabilities = _inputs(context)["probabilities"] + logits = torch.logit(probabilities) + _record( + recorder, + { + "logit": logits, + "expit": torch.special.expit(logits), + "sigmoid": torch.sigmoid(logits), + "logit_with_epsilon": torch.logit(probabilities, eps=1e-5), + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "erf_family": _erf_family, + "gamma_family": _gamma_family, + "softmax_and_log_softmax": _softmax_and_log_softmax, + "logit_and_expit": _logit_and_expit, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one special-function case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/__init__.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/__init__.py new file mode 100644 index 0000000..bec6feb --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/__init__.py @@ -0,0 +1 @@ +"""Level 3 autograd and learning-component cases.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_attention.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_attention.py new file mode 100644 index 0000000..3072139 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_attention.py @@ -0,0 +1,159 @@ +"""Attention forward and backward cases with fixed projections and masks.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import MODEL_ARCHITECTURES +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _inputs(context: CaseContext) -> tuple[object, object, dict[str, object]]: + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + state_arrays = load_prepared_npz(context, DATASET_ID, "attention_initial_state.npz") + value = as_profile_tensor(context, arrays["attention_input"], requires_grad=True) + mask = as_profile_tensor(context, arrays["attention_padding_mask"]) + state = {name: as_profile_tensor(context, array) for name, array in state_arrays.items()} + return value, mask, state + + +def _functional_attention( + context: CaseContext, + recorder: ObservationRecorder, + *, + use_mask: bool, +) -> None: + import math + import torch + + value, padding_mask, state = _inputs(context) + architecture = MODEL_ARCHITECTURES["attention"] + head_count = architecture["heads"] + head_size = architecture["embedding_size"] // head_count + + q_weight = state["q_proj.weight"].detach().clone().requires_grad_(True) + k_weight = state["k_proj.weight"].detach().clone().requires_grad_(True) + v_weight = state["v_proj.weight"].detach().clone().requires_grad_(True) + q_bias = state["q_proj.bias"].detach().clone().requires_grad_(True) + k_bias = state["k_proj.bias"].detach().clone().requires_grad_(True) + v_bias = state["v_proj.bias"].detach().clone().requires_grad_(True) + + query = torch.nn.functional.linear(value, q_weight, q_bias) + key = torch.nn.functional.linear(value, k_weight, k_bias) + projected_value = torch.nn.functional.linear(value, v_weight, v_bias) + + def split_heads(tensor: object) -> object: + return tensor.reshape(tensor.shape[0], tensor.shape[1], head_count, head_size).transpose(1, 2) + + query_heads = split_heads(query) + key_heads = split_heads(key) + value_heads = split_heads(projected_value) + scores = query_heads @ key_heads.transpose(-2, -1) / math.sqrt(head_size) + if use_mask: + # Keep at least one key visible even if a prepared row was fully masked + padding_mask = padding_mask.clone() + padding_mask[:, 0] = False + scores = scores.masked_fill(padding_mask[:, None, None, :], float("-inf")) + weights = torch.softmax(scores, dim=-1) + attended = weights @ value_heads + output = attended.transpose(1, 2).contiguous().reshape_as(value) + loss = output.square().mean() + loss.backward() + + recorder.record( + "forward", + { + "query": query, + "key": key, + "value": projected_value, + "attention_weights": weights, + "output": output, + }, + ) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record("input_gradients", {"value": value.grad.detach().clone()}) + recorder.record( + "parameter_gradients", + { + "q_weight": q_weight.grad.detach().clone(), + "k_weight": k_weight.grad.detach().clone(), + "v_weight": v_weight.grad.detach().clone(), + "q_bias": q_bias.grad.detach().clone(), + "k_bias": k_bias.grad.detach().clone(), + "v_bias": v_bias.grad.detach().clone(), + }, + ) + + +def _scaled_dot_product(context: CaseContext, recorder: ObservationRecorder) -> None: + _functional_attention(context, recorder, use_mask=False) + + +def _masked_scaled_dot_product(context: CaseContext, recorder: ObservationRecorder) -> None: + _functional_attention(context, recorder, use_mask=True) + + +def _multihead_attention(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + value, padding_mask, state = _inputs(context) + architecture = MODEL_ARCHITECTURES["attention"] + module = torch.nn.MultiheadAttention( + architecture["embedding_size"], + architecture["heads"], + dropout=0.0, + batch_first=True, + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.in_proj_weight.copy_( + torch.cat( + [state["q_proj.weight"], state["k_proj.weight"], state["v_proj.weight"]], + dim=0, + ) + ) + module.in_proj_bias.copy_( + torch.cat( + [state["q_proj.bias"], state["k_proj.bias"], state["v_proj.bias"]], + dim=0, + ) + ) + module.out_proj.weight.copy_(state["out_proj.weight"]) + module.out_proj.bias.copy_(state["out_proj.bias"]) + padding_mask = padding_mask.clone() + padding_mask[:, 0] = False + output, weights = module( + value, + value, + value, + key_padding_mask=padding_mask, + need_weights=True, + average_attn_weights=False, + ) + loss = output.square().mean() + loss.backward() + recorder.record("forward", {"output": output, "attention_weights": weights}) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record("input_gradients", {"value": value.grad.detach().clone()}) + recorder.record( + "parameter_gradients", + { + name: parameter.grad.detach().clone() + for name, parameter in module.named_parameters() + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "scaled_dot_product": _scaled_dot_product, + "masked_scaled_dot_product": _masked_scaled_dot_product, + "multihead_attention": _multihead_attention, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one attention case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_elementwise.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_elementwise.py new file mode 100644 index 0000000..243f817 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_elementwise.py @@ -0,0 +1,122 @@ +"""Autograd cases built from small elementwise computation graphs.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _finish( + recorder: ObservationRecorder, + *, + forward: dict[str, object], + loss: object, + inputs: dict[str, object], + parameters: dict[str, object], +) -> None: + loss.backward() + recorder.record("forward", forward) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record( + "input_gradients", + {name: value.grad.detach().clone() for name, value in inputs.items()}, + ) + recorder.record( + "parameter_gradients", + {name: value.grad.detach().clone() for name, value in parameters.items()}, + ) + + +def _scalar_chain(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + value = as_profile_tensor(context, arrays["positive"][:64], requires_grad=True) + scale = torch.tensor(1.25, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + bias = torch.tensor(-0.1, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + affine = value * scale + bias + output = torch.exp(affine).log1p() + loss = output.square().mean() + _finish( + recorder, + forward={"affine": affine, "output": output}, + loss=loss, + inputs={"value": value}, + parameters={"scale": scale, "bias": bias}, + ) + + +def _branching_graph(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + value = as_profile_tensor(context, arrays["mixed_sign"][:96], requires_grad=True) + frequency = torch.tensor(0.75, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + offset = torch.tensor(0.2, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + sine_branch = torch.sin(value * frequency) + cosine_branch = torch.cos(value + offset) + output = sine_branch * cosine_branch + sine_branch + loss = output.square().mean() + _finish( + recorder, + forward={"sine_branch": sine_branch, "cosine_branch": cosine_branch, "output": output}, + loss=loss, + inputs={"value": value}, + parameters={"frequency": frequency, "offset": offset}, + ) + + +def _reused_tensor(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "elementwise.npz") + value = as_profile_tensor(context, arrays["ordinary"][:80], requires_grad=True) + scale = torch.tensor(1.1, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + shared = torch.tanh(value * scale) + output = shared.square() + shared * shared.mean() + shared + loss = output.abs().mean() + _finish( + recorder, + forward={"shared": shared, "output": output}, + loss=loss, + inputs={"value": value}, + parameters={"scale": scale}, + ) + + +def _reduction_graph(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "reductions.npz") + value = as_profile_tensor(context, arrays["mixed_sign"][:31, :29], requires_grad=True) + scale = torch.tensor(0.9, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + offset = torch.tensor(0.15, device=context.device, dtype=context.torch_dtype(), requires_grad=True) + transformed = value * scale + offset + row_means = transformed.mean(dim=1) + output = torch.log1p(row_means.square()) + loss = output.sum() + _finish( + recorder, + forward={"transformed": transformed, "row_means": row_means, "output": output}, + loss=loss, + inputs={"value": value}, + parameters={"scale": scale, "offset": offset}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "scalar_chain": _scalar_chain, + "branching_graph": _branching_graph, + "reused_tensor": _reused_tensor, + "reduction_graph": _reduction_graph, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one elementwise autograd case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_matrix_ops.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_matrix_ops.py new file mode 100644 index 0000000..9d111b1 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_autograd_matrix_ops.py @@ -0,0 +1,117 @@ +"""Autograd cases for matrix, convolution and solve operations.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "numerical_inputs_v1" + + +def _finish( + recorder: ObservationRecorder, + *, + forward: dict[str, object], + loss: object, + inputs: dict[str, object], + parameters: dict[str, object], +) -> None: + loss.backward() + recorder.record("forward", forward) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record( + "input_gradients", + {name: value.grad.detach().clone() for name, value in inputs.items()}, + ) + recorder.record( + "parameter_gradients", + {name: value.grad.detach().clone() for name, value in parameters.items()}, + ) + + +def _matrix_multiplication(context: CaseContext, recorder: ObservationRecorder) -> None: + arrays = load_prepared_npz(context, DATASET_ID, "matrix_operations.npz") + left = as_profile_tensor(context, arrays["left"], requires_grad=True) + weight = as_profile_tensor(context, arrays["right"], requires_grad=True) + output = left @ weight + loss = output.square().mean() + _finish( + recorder, + forward={"output": output, "row_summary": output.mean(dim=1)}, + loss=loss, + inputs={"left": left}, + parameters={"weight": weight}, + ) + + +def _batched_matrix_multiplication(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "matrix_operations.npz") + left = as_profile_tensor(context, arrays["batch_left"], requires_grad=True) + weight = as_profile_tensor(context, arrays["batch_right"], requires_grad=True) + output = torch.bmm(left, weight) + loss = output.abs().mean() + _finish( + recorder, + forward={"output": output, "batch_summary": output.mean(dim=(1, 2))}, + loss=loss, + inputs={"left": left}, + parameters={"weight": weight}, + ) + + +def _convolution(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + arrays = load_prepared_npz(context, DATASET_ID, "convolutions.npz") + value = as_profile_tensor(context, arrays["conv2d_input"], requires_grad=True) + weight = as_profile_tensor(context, arrays["conv2d_weight"], requires_grad=True) + bias = as_profile_tensor(context, arrays["conv2d_bias"], requires_grad=True) + output = functional.conv2d(value, weight, bias, stride=2, padding=1) + loss = output.square().mean() + _finish( + recorder, + forward={"output": output, "channel_means": output.mean(dim=(0, 2, 3))}, + loss=loss, + inputs={"value": value}, + parameters={"weight": weight, "bias": bias}, + ) + + +def _linear_solve(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "linear_algebra.npz") + right_hand_side = as_profile_tensor( + context, arrays["well_conditioned_rhs"], requires_grad=True + ) + matrix = as_profile_tensor( + context, arrays["well_conditioned_matrix"], requires_grad=True + ) + solution = torch.linalg.solve(matrix, right_hand_side) + residual = matrix @ solution - right_hand_side + loss = solution.square().mean() + residual.square().mean() + _finish( + recorder, + forward={"solution": solution, "residual": residual}, + loss=loss, + inputs={"right_hand_side": right_hand_side}, + parameters={"matrix": matrix}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "matrix_multiplication": _matrix_multiplication, + "batched_matrix_multiplication": _batched_matrix_multiplication, + "convolution": _convolution, + "linear_solve": _linear_solve, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one matrix-operation autograd case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_losses.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_losses.py new file mode 100644 index 0000000..9167f3d --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_losses.py @@ -0,0 +1,115 @@ +"""Loss-function cases covering reductions and input gradients.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _record_reductions( + recorder: ObservationRecorder, + builders: dict[str, Callable[[], tuple[object, object]]], +) -> None: + losses: dict[str, object] = {} + gradients: dict[str, object] = {} + for reduction, builder in builders.items(): + value, loss = builder() + objective = loss.sum() if loss.ndim else loss + objective.backward() + losses[reduction] = loss.detach().clone() + gradients[reduction] = value.grad.detach().clone() + recorder.record("losses", losses) + recorder.record("input_gradients", gradients) + + +def _mse(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + source = as_profile_tensor(context, arrays["mlp_input"][:, :12]) + target = source.detach() * 0.7 - 0.15 + + def build(reduction: str) -> tuple[object, object]: + value = source.detach().clone().requires_grad_(True) + return value, functional.mse_loss(value, target, reduction=reduction) + + _record_reductions( + recorder, + {reduction: lambda reduction=reduction: build(reduction) for reduction in ("none", "mean", "sum")}, + ) + + +def _cross_entropy(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch.nn.functional as functional + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + source = as_profile_tensor(context, arrays["mlp_input"][:, :5]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=None) + + def build(reduction: str) -> tuple[object, object]: + value = source.detach().clone().requires_grad_(True) + return value, functional.cross_entropy(value, labels, reduction=reduction) + + _record_reductions( + recorder, + {reduction: lambda reduction=reduction: build(reduction) for reduction in ("none", "mean", "sum")}, + ) + + +def _binary_cross_entropy_with_logits( + context: CaseContext, recorder: ObservationRecorder +) -> None: + import torch.nn.functional as functional + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + source = as_profile_tensor(context, arrays["mlp_input"][:, 0]) + target = as_profile_tensor(context, arrays["mlp_labels"]).to(dtype=context.torch_dtype()) + + def build(reduction: str) -> tuple[object, object]: + value = source.detach().clone().requires_grad_(True) + return value, functional.binary_cross_entropy_with_logits(value, target, reduction=reduction) + + _record_reductions( + recorder, + {reduction: lambda reduction=reduction: build(reduction) for reduction in ("none", "mean", "sum")}, + ) + + +def _kl_divergence(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + import torch.nn.functional as functional + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + source_logits = as_profile_tensor(context, arrays["mlp_input"][:, :7]) + target = torch.softmax(source_logits.detach() * 0.8 + 0.1, dim=-1) + + def build(reduction: str) -> tuple[object, object]: + value = source_logits.detach().clone().requires_grad_(True) + log_probabilities = torch.log_softmax(value, dim=-1) + return value, functional.kl_div(log_probabilities, target, reduction=reduction) + + _record_reductions( + recorder, + { + reduction: lambda reduction=reduction: build(reduction) + for reduction in ("none", "batchmean", "sum") + }, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "mse": _mse, + "cross_entropy": _cross_entropy, + "binary_cross_entropy_with_logits": _binary_cross_entropy_with_logits, + "kl_divergence": _kl_divergence, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one loss-function case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_nn_linear_and_conv.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_nn_linear_and_conv.py new file mode 100644 index 0000000..4e95b5b --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_nn_linear_and_conv.py @@ -0,0 +1,167 @@ +"""Forward and backward cases for common neural-network layers.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_3_TESTS +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +NUMERICAL_DATASET_ID = "numerical_inputs_v1" +MODEL_DATASET_ID = "model_inputs_v1" + + +def _finish( + recorder: ObservationRecorder, + *, + module: object, + forward: dict[str, object], + loss: object, + input_gradients: dict[str, object], +) -> None: + loss.backward() + recorder.record("forward", forward) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record( + "input_gradients", + {name: value.grad.detach().clone() for name, value in input_gradients.items()}, + ) + recorder.record( + "parameter_gradients", + { + name: parameter.grad.detach().clone() + for name, parameter in module.named_parameters() + if parameter.grad is not None + }, + ) + + +def _linear(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + inputs = load_prepared_npz(context, MODEL_DATASET_ID, "block_inputs.npz") + state = load_prepared_npz(context, MODEL_DATASET_ID, "mlp_initial_state.npz") + value = as_profile_tensor(context, inputs["mlp_input"], requires_grad=True) + module = torch.nn.Linear(30, 32).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.weight.copy_(as_profile_tensor(context, state["layers.0.weight"])) + module.bias.copy_(as_profile_tensor(context, state["layers.0.bias"])) + output = module(value) + activation = torch.relu(output) + loss = activation.square().mean() + _finish( + recorder, + module=module, + forward={"output": output, "activation": activation}, + loss=loss, + input_gradients={"value": value}, + ) + + +def _conv_case( + context: CaseContext, + recorder: ObservationRecorder, + *, + dimension: int, +) -> None: + import torch + + arrays = load_prepared_npz(context, NUMERICAL_DATASET_ID, "convolutions.npz") + prefix = f"conv{dimension}d" + value = as_profile_tensor(context, arrays[f"{prefix}_input"], requires_grad=True) + weight = arrays[f"{prefix}_weight"] + bias = arrays[f"{prefix}_bias"] + convolution_class = getattr(torch.nn, f"Conv{dimension}d") + module = convolution_class( + in_channels=weight.shape[1], + out_channels=weight.shape[0], + kernel_size=weight.shape[2:], + padding=1, + bias=True, + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.weight.copy_(as_profile_tensor(context, weight)) + module.bias.copy_(as_profile_tensor(context, bias)) + output = module(value) + activation = torch.tanh(output) + loss = activation.square().mean() + _finish( + recorder, + module=module, + forward={"output": output, "activation": activation}, + loss=loss, + input_gradients={"value": value}, + ) + + +def _conv1d(context: CaseContext, recorder: ObservationRecorder) -> None: + _conv_case(context, recorder, dimension=1) + + +def _conv2d(context: CaseContext, recorder: ObservationRecorder) -> None: + _conv_case(context, recorder, dimension=2) + + +def _conv3d(context: CaseContext, recorder: ObservationRecorder) -> None: + _conv_case(context, recorder, dimension=3) + + +def _embedding(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + settings = LEVEL_3_TESTS["embedding"] + module = torch.nn.Embedding( + settings["num_embeddings"], settings["embedding_dim"] + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + values = torch.linspace( + -1.0, + 1.0, + steps=settings["num_embeddings"] * settings["embedding_dim"], + device=context.device, + dtype=context.torch_dtype(), + ).reshape_as(module.weight) + module.weight.copy_(values) + + indices = torch.arange( + settings["batch_size"] * settings["sequence_length"], + device=context.device, + dtype=torch.int64, + ).reshape(settings["batch_size"], settings["sequence_length"]) + indices = indices.remainder(settings["num_embeddings"]) + token_weights = torch.linspace( + 0.5, + 1.5, + steps=indices.numel(), + device=context.device, + dtype=context.torch_dtype(), + requires_grad=True, + ).reshape(*indices.shape, 1) + token_weights.retain_grad() + embedded = module(indices) + output = embedded * token_weights + pooled = output.mean(dim=1) + loss = pooled.square().mean() + _finish( + recorder, + module=module, + forward={"embedded": embedded, "output": output, "pooled": pooled}, + loss=loss, + input_gradients={"token_weights": token_weights}, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "linear": _linear, + "conv1d": _conv1d, + "conv2d": _conv2d, + "conv3d": _conv3d, + "embedding": _embedding, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one neural-network layer case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_normalisation.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_normalisation.py new file mode 100644 index 0000000..7df86ed --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_normalisation.py @@ -0,0 +1,154 @@ +"""Training and evaluation cases for normalisation layers.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_3_TESTS +from cases.common import as_profile_tensor, clone_module_state, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _finish( + recorder: ObservationRecorder, + *, + module: object, + forward: dict[str, object], + loss: object, + value: object, +) -> None: + loss.backward() + recorder.record("forward", forward) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record("input_gradients", {"value": value.grad.detach().clone()}) + recorder.record( + "parameter_gradients", + { + name: parameter.grad.detach().clone() + for name, parameter in module.named_parameters() + if parameter.grad is not None + }, + ) + recorder.record("module_state", clone_module_state(module)) + + +def _attention_input(context: CaseContext) -> object: + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + return as_profile_tensor(context, arrays["attention_input"]) + + +def _batch_norm_training(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + settings = LEVEL_3_TESTS["normalisation"] + value = _attention_input(context).transpose(1, 2).contiguous().requires_grad_(True) + module = torch.nn.BatchNorm1d( + value.shape[1], + eps=settings["epsilon"], + momentum=settings["batch_norm_momentum"], + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.weight.copy_(torch.linspace(0.8, 1.2, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.bias.copy_(torch.linspace(-0.1, 0.1, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.train() + first = module(value) + second = module(value * 0.75 + 0.1) + loss = first.square().mean() + second.abs().mean() + _finish( + recorder, + module=module, + forward={"first": first, "second": second}, + loss=loss, + value=value, + ) + + +def _batch_norm_evaluation(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + settings = LEVEL_3_TESTS["normalisation"] + value = _attention_input(context).transpose(1, 2).contiguous().requires_grad_(True) + module = torch.nn.BatchNorm1d( + value.shape[1], + eps=settings["epsilon"], + momentum=settings["batch_norm_momentum"], + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.weight.copy_(torch.linspace(0.9, 1.1, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.bias.copy_(torch.linspace(-0.05, 0.05, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.running_mean.copy_(torch.linspace(-0.2, 0.2, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.running_var.copy_(torch.linspace(0.7, 1.3, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.eval() + output = module(value) + loss = output.square().mean() + _finish( + recorder, + module=module, + forward={"output": output}, + loss=loss, + value=value, + ) + + +def _layer_norm(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + settings = LEVEL_3_TESTS["normalisation"] + value = _attention_input(context).requires_grad_(True) + module = torch.nn.LayerNorm(value.shape[-1], eps=settings["epsilon"]).to( + device=context.device, dtype=context.torch_dtype() + ) + with torch.no_grad(): + module.weight.copy_(torch.linspace(0.85, 1.15, value.shape[-1], device=context.device, dtype=context.torch_dtype())) + module.bias.copy_(torch.linspace(-0.08, 0.08, value.shape[-1], device=context.device, dtype=context.torch_dtype())) + output = module(value) + loss = output.square().mean() + _finish( + recorder, + module=module, + forward={"output": output, "feature_means": output.mean(dim=-1)}, + loss=loss, + value=value, + ) + + +def _group_norm(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + settings = LEVEL_3_TESTS["normalisation"] + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["cnn_input"]).repeat(1, 8, 1, 1) + value.requires_grad_(True) + module = torch.nn.GroupNorm( + settings["group_norm_groups"], + value.shape[1], + eps=settings["epsilon"], + ).to(device=context.device, dtype=context.torch_dtype()) + with torch.no_grad(): + module.weight.copy_(torch.linspace(0.9, 1.1, value.shape[1], device=context.device, dtype=context.torch_dtype())) + module.bias.copy_(torch.linspace(-0.05, 0.05, value.shape[1], device=context.device, dtype=context.torch_dtype())) + output = module(value) + loss = output.abs().mean() + _finish( + recorder, + module=module, + forward={"output": output, "channel_means": output.mean(dim=(0, 2, 3))}, + loss=loss, + value=value, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "batch_norm_training": _batch_norm_training, + "batch_norm_evaluation": _batch_norm_evaluation, + "layer_norm": _layer_norm, + "group_norm": _group_norm, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one normalisation case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_adamw.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_adamw.py new file mode 100644 index 0000000..8e83045 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_adamw.py @@ -0,0 +1,81 @@ +"""Short deterministic optimisation runs for AdamW variants.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_3_TESTS +from cases.common import ( + as_profile_tensor, + build_mlp, + clone_named_gradients, + clone_named_parameters, + flatten_optimizer_state, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _run_optimizer( + context: CaseContext, + recorder: ObservationRecorder, + *, + settings: dict[str, object], +) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + model = module_to_profile(context, build_mlp()) + load_module_state(context, model, "mlp_initial_state.npz") + optimizer = torch.optim.AdamW(model.parameters(), **settings) + steps = int(LEVEL_3_TESTS["optimizer_steps"]) + + loss_values: list[float] = [] + parameter_states: dict[str, object] = {"step_0": clone_named_parameters(model)} + parameter_gradients: dict[str, object] = {} + optimizer_states: dict[str, object] = { + "step_0": flatten_optimizer_state(optimizer, model) + } + + for step in range(steps): + optimizer.zero_grad(set_to_none=True) + logits = model(value) + loss = torch.nn.functional.cross_entropy(logits, labels) + loss_values.append(float(loss.detach().cpu().item())) + loss.backward() + parameter_gradients[f"step_{step}"] = clone_named_gradients(model) + optimizer.step() + parameter_states[f"step_{step + 1}"] = clone_named_parameters(model) + optimizer_states[f"step_{step + 1}"] = flatten_optimizer_state(optimizer, model) + + with torch.no_grad(): + final_loss = torch.nn.functional.cross_entropy(model(value), labels) + loss_values.append(float(final_loss.detach().cpu().item())) + + recorder.record("loss_series", loss_values) + recorder.record("parameter_states", parameter_states) + recorder.record("parameter_gradients", parameter_gradients) + recorder.record("optimizer_states", optimizer_states) + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + settings = dict(LEVEL_3_TESTS["adamw_cases"][context.case_id]) + _run_optimizer(context, recorder, settings=settings) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + case_id: _case for case_id in LEVEL_3_TESTS["adamw_cases"] +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one AdamW variant selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_sgd.py b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_sgd.py new file mode 100644 index 0000000..3adc834 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_3_autograd_and_learning/test_optimizer_sgd.py @@ -0,0 +1,81 @@ +"""Short deterministic optimisation runs for SGD variants.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_3_TESTS +from cases.common import ( + as_profile_tensor, + build_mlp, + clone_named_gradients, + clone_named_parameters, + flatten_optimizer_state, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def _run_optimizer( + context: CaseContext, + recorder: ObservationRecorder, + *, + settings: dict[str, object], +) -> None: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + model = module_to_profile(context, build_mlp()) + load_module_state(context, model, "mlp_initial_state.npz") + optimizer = torch.optim.SGD(model.parameters(), **settings) + steps = int(LEVEL_3_TESTS["optimizer_steps"]) + + loss_values: list[float] = [] + parameter_states: dict[str, object] = {"step_0": clone_named_parameters(model)} + parameter_gradients: dict[str, object] = {} + optimizer_states: dict[str, object] = { + "step_0": flatten_optimizer_state(optimizer, model) + } + + for step in range(steps): + optimizer.zero_grad(set_to_none=True) + logits = model(value) + loss = torch.nn.functional.cross_entropy(logits, labels) + loss_values.append(float(loss.detach().cpu().item())) + loss.backward() + parameter_gradients[f"step_{step}"] = clone_named_gradients(model) + optimizer.step() + parameter_states[f"step_{step + 1}"] = clone_named_parameters(model) + optimizer_states[f"step_{step + 1}"] = flatten_optimizer_state(optimizer, model) + + with torch.no_grad(): + final_loss = torch.nn.functional.cross_entropy(model(value), labels) + loss_values.append(float(final_loss.detach().cpu().item())) + + recorder.record("loss_series", loss_values) + recorder.record("parameter_states", parameter_states) + recorder.record("parameter_gradients", parameter_gradients) + recorder.record("optimizer_states", optimizer_states) + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + settings = dict(LEVEL_3_TESTS["sgd_cases"][context.case_id]) + _run_optimizer(context, recorder, settings=settings) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + case_id: _case for case_id in LEVEL_3_TESTS["sgd_cases"] +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one SGD variant selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/README.md b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/README.md new file mode 100644 index 0000000..90e9972 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/README.md @@ -0,0 +1,10 @@ +# Level 4 precision and execution cases + +This level checks execution modes which can change the numerical path without changing the high-level model code + +- `test_fp32_precision_modes.py` records matmul and convolution outputs under the configured strict, high and medium float32 modes +- `test_amp_fp16.py` records CUDA FP16 autocast, unscaled gradients, optimiser-step behaviour and an intentionally injected overflow +- `test_amp_bfloat16.py` records BF16 autocast on supported CPU or CUDA builds +- `test_serialisation_roundtrip.py` checks tensor, model, optimiser and complete-checkpoint save/load paths + +The precision settings and GradScaler values are centralised in `config/suite_config.py` diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/__init__.py b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/__init__.py new file mode 100644 index 0000000..9f29b57 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/__init__.py @@ -0,0 +1 @@ +"""Level 4 precision-mode, mixed-precision and serialisation cases.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_bfloat16.py b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_bfloat16.py new file mode 100644 index 0000000..a8cf50f --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_bfloat16.py @@ -0,0 +1,51 @@ +"""Exercise bfloat16 autocast for forward, backward and optimiser updates.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_4_TESTS +from cases.common import clone_named_gradients, clone_named_parameters, run_registered_case +from cases.common.mixed_precision import build_mlp_batch +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + + +def _run(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + model, value, labels = build_mlp_batch(context) + settings = LEVEL_4_TESTS["amp"] + optimizer = torch.optim.SGD(model.parameters(), lr=float(settings["learning_rate"])) + optimizer.zero_grad(set_to_none=True) + + with context.autocast(): + logits, activations = model(value, return_activations=True) + loss = torch.nn.functional.cross_entropy(logits, labels) + loss.backward() + + input_gradients = {"input": value.grad.detach().clone()} + parameter_gradients = clone_named_gradients(model) + if context.case_id == "optimizer_step": + optimizer.step() + updated_parameters = clone_named_parameters(model) + + forward = {"logits": logits.detach().clone()} + forward.update({f"activation.{name}": item.detach().clone() for name, item in activations.items()}) + recorder.record("forward", forward) + recorder.record("loss", float(loss.detach().cpu().item())) + recorder.record("input_gradients", input_gradients) + recorder.record("parameter_gradients", parameter_gradients) + recorder.record("updated_parameters", updated_parameters) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "forward": _run, + "backward": _run, + "optimizer_step": _run, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one bfloat16 AMP scenario selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_fp16.py b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_fp16.py new file mode 100644 index 0000000..471af53 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_amp_fp16.py @@ -0,0 +1,85 @@ +"""Exercise CUDA float16 autocast, gradient scaling and overflow handling.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import LEVEL_4_TESTS +from cases.common import ( + clone_named_gradients, + clone_named_parameters, + run_registered_case, +) +from cases.common.mixed_precision import ( + build_mlp_batch, + make_grad_scaler, + parameters_changed, + scaler_state_record, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder, UnsupportedCase + + +def _run(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + if torch.device(context.device).type != "cuda": + raise UnsupportedCase("FP16 autocast is only exercised on CUDA in this suite") + + model, value, labels = build_mlp_batch(context) + settings = LEVEL_4_TESTS["amp"] + optimizer = torch.optim.SGD(model.parameters(), lr=float(settings["learning_rate"])) + scaler = make_grad_scaler(context) + initial_scale = float(scaler.get_scale()) + before = clone_named_parameters(model) + + optimizer.zero_grad(set_to_none=True) + with context.autocast(): + logits, activations = model(value, return_activations=True) + normal_loss = torch.nn.functional.cross_entropy(logits, labels) + + overflow_injected = context.case_id == "loss_scaler_overflow" + backward_loss = normal_loss * float("inf") if overflow_injected else normal_loss + scaler.scale(backward_loss).backward() + scaler.unscale_(optimizer) + input_gradients = {"input": value.grad.detach().clone()} + parameter_gradients = clone_named_gradients(model) + + step_requested = context.case_id in {"optimizer_step", "loss_scaler_overflow"} + if step_requested: + scaler.step(optimizer) + scaler.update() + after = clone_named_parameters(model) + changed = parameters_changed(before, after) + step_skipped = bool(step_requested and not changed) + + forward = {"logits": logits.detach().clone()} + forward.update({f"activation.{name}": item.detach().clone() for name, item in activations.items()}) + recorder.record("forward", forward) + recorder.record("loss", float(normal_loss.detach().cpu().item())) + recorder.record("input_gradients", input_gradients) + recorder.record("parameter_gradients", parameter_gradients) + recorder.record( + "scaler_state", + scaler_state_record( + scaler, + initial_scale=initial_scale, + step_requested=step_requested, + step_skipped=step_skipped, + overflow_injected=overflow_injected, + ), + ) + recorder.record("updated_parameters", after) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "forward": _run, + "backward": _run, + "optimizer_step": _run, + "loss_scaler_overflow": _run, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one float16 AMP scenario selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_fp32_precision_modes.py b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_fp32_precision_modes.py new file mode 100644 index 0000000..63aadcf --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_fp32_precision_modes.py @@ -0,0 +1,101 @@ +"""Exercise float32 matmul and convolution under each configured precision mode.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import PRECISION_MODE_CASES +from cases.common import as_profile_tensor, load_prepared_npz, run_registered_case +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder +from pytorch_extended_tests.precision_settings import ( + apply_float32_precision, + float32_precision_record, +) + + +DATASET_ID = "numerical_inputs_v1" + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + import torch.nn.functional as functional + + matrix_arrays = load_prepared_npz(context, DATASET_ID, "matrix_operations.npz") + convolution_arrays = load_prepared_npz(context, DATASET_ID, "convolutions.npz") + settings = dict(PRECISION_MODE_CASES[context.case_id]) + original = float32_precision_record() + + try: + apply_float32_precision( + allow_tf32=bool(settings["allow_tf32"]), + matmul_precision=str(settings["float32_matmul_precision"]), + ) + left = as_profile_tensor(context, matrix_arrays["left"], dtype=torch.float32) + right = as_profile_tensor(context, matrix_arrays["right"], dtype=torch.float32) + batch_left = as_profile_tensor(context, matrix_arrays["batch_left"], dtype=torch.float32) + batch_right = as_profile_tensor(context, matrix_arrays["batch_right"], dtype=torch.float32) + + conv_input = as_profile_tensor( + context, convolution_arrays["conv2d_input"], dtype=torch.float32 + ) + conv_weight = as_profile_tensor( + context, convolution_arrays["conv2d_weight"], dtype=torch.float32 + ) + conv_bias = as_profile_tensor( + context, convolution_arrays["conv2d_bias"], dtype=torch.float32 + ) + grouped_input = as_profile_tensor( + context, convolution_arrays["grouped_conv2d_input"], dtype=torch.float32 + ) + grouped_weight = as_profile_tensor( + context, convolution_arrays["grouped_conv2d_weight"], dtype=torch.float32 + ) + grouped_bias = as_profile_tensor( + context, convolution_arrays["grouped_conv2d_bias"], dtype=torch.float32 + ) + + matrix_results = { + "matmul": torch.matmul(left, right), + "batched_matmul": torch.matmul(batch_left, batch_right), + "linear_equivalent": functional.linear(left, right.transpose(0, 1)), + } + convolution_results = { + "conv2d": functional.conv2d(conv_input, conv_weight, conv_bias, padding=1), + "grouped_conv2d": functional.conv2d( + grouped_input, + grouped_weight, + grouped_bias, + padding=1, + groups=2, + ), + } + applied = { + "case_id": context.case_id, + "device_type": torch.device(context.device).type, + "requested_allow_tf32": bool(settings["allow_tf32"]), + "requested_float32_matmul_precision": str( + settings["float32_matmul_precision"] + ), + **float32_precision_record(), + } + + recorder.record("matrix_results", matrix_results) + recorder.record("convolution_results", convolution_results) + recorder.record("applied_settings", applied) + finally: + original_convolution_precision = original["cudnn_convolution_precision"] + apply_float32_precision( + allow_tf32=original_convolution_precision == "tf32", + matmul_precision=str(original["float32_matmul_precision"]), + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + case_id: _case for case_id in PRECISION_MODE_CASES +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one backend precision mode selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_serialisation_roundtrip.py b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_serialisation_roundtrip.py new file mode 100644 index 0000000..fa3f141 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_4_precision_and_execution/test_serialisation_roundtrip.py @@ -0,0 +1,253 @@ +"""Save and reload tensors, models, optimiser state and complete checkpoints.""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping +from pathlib import Path +from typing import Any + +from config.suite_config import LEVEL_4_TESTS +from cases.common import ( + as_profile_tensor, + build_mlp, + clone_module_state, + flatten_optimizer_state, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + + +DATASET_ID = "model_inputs_v1" + + +def _load(path: Path, *, map_location: str) -> Any: + import torch + + try: + return torch.load(path, map_location=map_location, weights_only=True) + except TypeError: + # weights_only was added after some older PyTorch releases + # The saved objects here are still only tensors and basic Python values + return torch.load(path, map_location=map_location) + + +def _tensor_structure(values: Mapping[str, Any]) -> dict[str, Any]: + import torch + + structure: dict[str, Any] = {} + for name, value in values.items(): + if isinstance(value, torch.Tensor): + structure[name] = { + "kind": "tensor", + "shape": list(value.shape), + "dtype": str(value.dtype).removeprefix("torch."), + } + else: + structure[name] = {"kind": type(value).__name__, "value": value} + return structure + + +def _flatten_loaded_optimizer(optimizer: Any, model: Any) -> dict[str, Any]: + return flatten_optimizer_state(optimizer, model) + + +def _fixed_batch(context: CaseContext) -> tuple[Any, Any]: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + return value, labels + + +def _new_model(context: CaseContext) -> Any: + model = module_to_profile(context, build_mlp()) + load_module_state(context, model, "mlp_initial_state.npz") + return model + + +def _tensor_case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + value, labels = _fixed_batch(context) + payload = { + "input": value, + "labels": labels, + "projection": torch.arange( + value.shape[1] * 7, + device=context.device, + dtype=context.torch_dtype(), + ).reshape(value.shape[1], 7) + / 100.0, + } + path = context.temporary_directory / "tensor_bundle.pt" + torch.save(payload, path) + loaded = _load(path, map_location=context.device) + model = _new_model(context) + with torch.no_grad(): + logits = model(loaded["input"]) + projection = loaded["input"] @ loaded["projection"] + + recorder.record("structure", _tensor_structure(loaded)) + recorder.record("loaded_values", dict(loaded)) + recorder.record("post_load_forward", {"logits": logits, "projection": projection}) + + +def _model_state_case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + value, _ = _fixed_batch(context) + model = _new_model(context) + path = context.temporary_directory / "model_state.pt" + torch.save(model.state_dict(), path) + loaded_state = _load(path, map_location=context.device) + reloaded = module_to_profile(context, build_mlp()) + reloaded.load_state_dict(loaded_state, strict=True) + with torch.no_grad(): + logits = reloaded(value) + + recorder.record("structure", _tensor_structure(loaded_state)) + recorder.record("loaded_values", dict(loaded_state)) + recorder.record("post_load_forward", {"logits": logits}) + + +def _trained_model_and_optimizer(context: CaseContext) -> tuple[Any, Any, Any, Any]: + import torch + + value, labels = _fixed_batch(context) + model = _new_model(context) + settings = LEVEL_4_TESTS["serialisation"] + optimizer = torch.optim.AdamW( + model.parameters(), + lr=float(settings["learning_rate"]), + betas=tuple(settings["betas"]), + eps=float(settings["epsilon"]), + weight_decay=float(settings["weight_decay"]), + ) + optimizer.zero_grad(set_to_none=True) + logits = model(value) + loss = torch.nn.functional.cross_entropy(logits, labels) + loss.backward() + optimizer.step() + return model, optimizer, value, labels + + +def _optimizer_state_case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + model, optimizer, value, _ = _trained_model_and_optimizer(context) + path = context.temporary_directory / "optimizer_state.pt" + torch.save( + {"model": model.state_dict(), "optimizer": optimizer.state_dict()}, + path, + ) + loaded = _load(path, map_location=context.device) + reloaded_model = module_to_profile(context, build_mlp()) + reloaded_model.load_state_dict(loaded["model"], strict=True) + settings = LEVEL_4_TESTS["serialisation"] + reloaded_optimizer = torch.optim.AdamW( + reloaded_model.parameters(), + lr=float(settings["learning_rate"]), + betas=tuple(settings["betas"]), + eps=float(settings["epsilon"]), + weight_decay=float(settings["weight_decay"]), + ) + reloaded_optimizer.load_state_dict(loaded["optimizer"]) + with torch.no_grad(): + logits = reloaded_model(value) + + loaded_values = { + **{f"model.{name}": tensor for name, tensor in clone_module_state(reloaded_model).items()}, + **{ + f"optimizer.{name}": tensor + for name, tensor in _flatten_loaded_optimizer( + reloaded_optimizer, reloaded_model + ).items() + }, + } + structure = { + "top_level_keys": sorted(loaded), + "model": _tensor_structure(loaded["model"]), + "optimizer_param_group_count": len(loaded["optimizer"]["param_groups"]), + "optimizer_state_entry_count": len(loaded["optimizer"]["state"]), + } + recorder.record("structure", structure) + recorder.record("loaded_values", loaded_values) + recorder.record("post_load_forward", {"logits": logits}) + + +def _complete_checkpoint_case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + model, optimizer, value, labels = _trained_model_and_optimizer(context) + with torch.no_grad(): + checkpoint_loss = torch.nn.functional.cross_entropy(model(value), labels) + checkpoint = { + "format_version": str(LEVEL_4_TESTS["serialisation"]["checkpoint_version"]), + "step": int(LEVEL_4_TESTS["serialisation"]["checkpoint_step"]), + "model": model.state_dict(), + "optimizer": optimizer.state_dict(), + "loss": checkpoint_loss.detach(), + "cpu_rng_state": torch.get_rng_state(), + } + path = context.temporary_directory / "complete_checkpoint.pt" + torch.save(checkpoint, path) + loaded = _load(path, map_location=context.device) + + reloaded_model = module_to_profile(context, build_mlp()) + reloaded_model.load_state_dict(loaded["model"], strict=True) + settings = LEVEL_4_TESTS["serialisation"] + reloaded_optimizer = torch.optim.AdamW( + reloaded_model.parameters(), + lr=float(settings["learning_rate"]), + betas=tuple(settings["betas"]), + eps=float(settings["epsilon"]), + weight_decay=float(settings["weight_decay"]), + ) + reloaded_optimizer.load_state_dict(loaded["optimizer"]) + with torch.no_grad(): + logits = reloaded_model(value) + loss = torch.nn.functional.cross_entropy(logits, labels) + + loaded_values = { + **{f"model.{name}": tensor for name, tensor in clone_module_state(reloaded_model).items()}, + **{ + f"optimizer.{name}": tensor + for name, tensor in _flatten_loaded_optimizer( + reloaded_optimizer, reloaded_model + ).items() + }, + "checkpoint.loss": loaded["loss"], + "checkpoint.cpu_rng_state": loaded["cpu_rng_state"], + "checkpoint.step": torch.tensor( + loaded["step"], device=context.device, dtype=torch.int64 + ), + } + structure = { + "top_level_keys": sorted(loaded), + "format_version": loaded["format_version"], + "step": int(loaded["step"]), + "model": _tensor_structure(loaded["model"]), + "optimizer_param_group_count": len(loaded["optimizer"]["param_groups"]), + "optimizer_state_entry_count": len(loaded["optimizer"]["state"]), + } + recorder.record("structure", structure) + recorder.record("loaded_values", loaded_values) + recorder.record("post_load_forward", {"logits": logits, "loss": loss.detach()}) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "tensor": _tensor_case, + "model_state": _model_state_case, + "optimizer_state": _optimizer_state_case, + "complete_checkpoint": _complete_checkpoint_case, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run one serialisation round trip selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_5_composite_models/README.md b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/README.md new file mode 100644 index 0000000..6a708f0 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/README.md @@ -0,0 +1,13 @@ +# Level 5 composite models + +These cases join several of the lower-level operations into short model blocks without yet becoming full dataset workloads + +Each model starts from a generated state and uses one fixed prepared batch. The cases retain the initial activations, first gradients, parameter checkpoints and evaluation logits around two optimiser updates + +- `test_mlp_block.py` combines Linear layers, ReLU, cross-entropy, autograd and AdamW +- `test_cnn_block.py` combines convolution, ReLU, pooling, flattening, Linear layers, cross-entropy, autograd and SGD +- `test_attention_block.py` combines projections, batched matrix multiplication, masking, softmax, residual addition, LayerNorm, pooling, cross-entropy, autograd and AdamW + +The run is intentionally short. Level 5 is meant to catch interactions between components while keeping the first divergence fairly easy to locate + +The three modules expose their example functions as well as the normal catalogue dispatcher. Level 0 calls those same functions, so the quick demonstrations and Level 5 use the same model setup and optimisation path diff --git a/pytorch/pytorch_extended_tests/cases/level_5_composite_models/__init__.py b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/__init__.py new file mode 100644 index 0000000..2bb61ca --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/__init__.py @@ -0,0 +1 @@ +"""Level 5 composite-model cases.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_attention_block.py b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_attention_block.py new file mode 100644 index 0000000..366762d --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_attention_block.py @@ -0,0 +1,61 @@ +"""Run a short deterministic optimisation path through the attention block.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import ( + as_profile_tensor, + build_attention_block, + load_module_state, + load_prepared_npz, + module_to_profile, + run_composite_block, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def run_example(context: CaseContext, recorder: ObservationRecorder) -> dict[str, object]: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["attention_input"]) + padding_mask = as_profile_tensor( + context, + arrays["attention_padding_mask"], + dtype=torch.bool, + ) + labels = as_profile_tensor(context, arrays["attention_labels"], dtype=torch.int64) + model = module_to_profile(context, build_attention_block()) + load_module_state(context, model, "attention_initial_state.npz") + + def forward(current_model: object, retain_activations: bool) -> tuple[object, dict[str, object]]: + logits, activations = current_model( + value, + padding_mask, + return_activations=True, + ) + return logits, activations if retain_activations else {} + + return run_composite_block( + context, + recorder, + model_name="attention", + model=model, + labels=labels, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "forward_backward_and_updates": run_example, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the attention composite case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_cnn_block.py b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_cnn_block.py new file mode 100644 index 0000000..07955d5 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_cnn_block.py @@ -0,0 +1,52 @@ +"""Run a short deterministic optimisation path through the fixed CNN.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import ( + as_profile_tensor, + build_cnn, + load_module_state, + load_prepared_npz, + module_to_profile, + run_composite_block, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def run_example(context: CaseContext, recorder: ObservationRecorder) -> dict[str, object]: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["cnn_input"]) + labels = as_profile_tensor(context, arrays["cnn_labels"], dtype=torch.int64) + model = module_to_profile(context, build_cnn()) + load_module_state(context, model, "cnn_initial_state.npz") + + def forward(current_model: object, retain_activations: bool) -> tuple[object, dict[str, object]]: + logits, activations = current_model(value, return_activations=True) + return logits, activations if retain_activations else {} + + return run_composite_block( + context, + recorder, + model_name="cnn", + model=model, + labels=labels, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "forward_backward_and_updates": run_example, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the CNN composite case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_mlp_block.py b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_mlp_block.py new file mode 100644 index 0000000..e4f7d6b --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_5_composite_models/test_mlp_block.py @@ -0,0 +1,52 @@ +"""Run a short deterministic optimisation path through the fixed MLP.""" + +from __future__ import annotations + +from collections.abc import Callable + +from cases.common import ( + as_profile_tensor, + build_mlp, + load_module_state, + load_prepared_npz, + module_to_profile, + run_composite_block, + run_registered_case, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +DATASET_ID = "model_inputs_v1" + + +def run_example(context: CaseContext, recorder: ObservationRecorder) -> dict[str, object]: + import torch + + arrays = load_prepared_npz(context, DATASET_ID, "block_inputs.npz") + value = as_profile_tensor(context, arrays["mlp_input"]) + labels = as_profile_tensor(context, arrays["mlp_labels"], dtype=torch.int64) + model = module_to_profile(context, build_mlp()) + load_module_state(context, model, "mlp_initial_state.npz") + + def forward(current_model: object, retain_activations: bool) -> tuple[object, dict[str, object]]: + logits, activations = current_model(value, return_activations=True) + return logits, activations if retain_activations else {} + + return run_composite_block( + context, + recorder, + model_name="mlp", + model=model, + labels=labels, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "forward_backward_and_updates": run_example, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the MLP composite case selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/README.md b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/README.md new file mode 100644 index 0000000..179098a --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/README.md @@ -0,0 +1,18 @@ +# Level 6 real workloads + +These cases run short but complete training jobs on the three prepared datasets + +They are deliberately step-limited rather than accuracy benchmarks. The point is to exercise a realistic chain of data loading, forward passes, losses, backward passes, optimiser updates and full evaluation while keeping the output small enough to compare between CI jobs + +Each workload records: + +- the exact source rows used by every training batch +- full evaluation logits before training and at each configured checkpoint +- training loss at every optimiser step +- checkpoint loss and accuracy values +- all gradients from the first backward pass +- the early parameter states +- optimiser and gradient-scaler state at checkpoints +- final parameters, predictions and task metrics + +The downloaded source datasets must be prepared with `datasets/generate_datasets.py` before this level can run diff --git a/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/__init__.py b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/__init__.py new file mode 100644 index 0000000..48cf3ae --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/__init__.py @@ -0,0 +1 @@ +"""Level 6 real-workload training cases.""" diff --git a/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_cnn_training_workload.py b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_cnn_training_workload.py new file mode 100644 index 0000000..79660fe --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_cnn_training_workload.py @@ -0,0 +1,71 @@ +"""Train the fixed CNN on the prepared Fashion-MNIST subset.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import WORKLOADS +from cases.common import ( + WorkloadBatch, + as_profile_tensor, + build_cnn, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, + run_training_workload, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +WORKLOAD_NAME = "image_classification" +DATASET_ID = str(WORKLOADS[WORKLOAD_NAME]["dataset_id"]) + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + training = load_prepared_npz(context, DATASET_ID, "train.npz") + evaluation = load_prepared_npz(context, DATASET_ID, "evaluation.npz") + model = module_to_profile(context, build_cnn()) + load_module_state( + context, + model, + str(WORKLOADS[WORKLOAD_NAME]["initial_state_file"]), + ) + + def build_training_batch(rows: object) -> WorkloadBatch: + images = as_profile_tensor(context, training["images"][rows]) + labels = as_profile_tensor(context, training["labels"][rows], dtype=torch.int64) + return WorkloadBatch((images,), {}, labels) + + def build_evaluation_batch(rows: object) -> WorkloadBatch: + images = as_profile_tensor(context, evaluation["images"][rows]) + labels = as_profile_tensor(context, evaluation["labels"][rows], dtype=torch.int64) + return WorkloadBatch((images,), {}, labels) + + def forward(current_model: object, batch: WorkloadBatch) -> object: + return current_model(*batch.args, **batch.kwargs) + + run_training_workload( + context, + recorder, + workload_name=WORKLOAD_NAME, + model=model, + training_sample_count=len(training["labels"]), + evaluation_sample_count=len(evaluation["labels"]), + training_source_indices=training["source_indices"], + build_training_batch=build_training_batch, + build_evaluation_batch=build_evaluation_batch, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "fashion_mnist_cnn": _case, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the image workload selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_tabular_training_workload.py b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_tabular_training_workload.py new file mode 100644 index 0000000..a7f8a7e --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_tabular_training_workload.py @@ -0,0 +1,71 @@ +"""Train the fixed MLP on the prepared breast-cancer dataset.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import WORKLOADS +from cases.common import ( + WorkloadBatch, + as_profile_tensor, + build_mlp, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, + run_training_workload, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +WORKLOAD_NAME = "tabular_classification" +DATASET_ID = str(WORKLOADS[WORKLOAD_NAME]["dataset_id"]) + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + training = load_prepared_npz(context, DATASET_ID, "train.npz") + evaluation = load_prepared_npz(context, DATASET_ID, "evaluation.npz") + model = module_to_profile(context, build_mlp()) + load_module_state( + context, + model, + str(WORKLOADS[WORKLOAD_NAME]["initial_state_file"]), + ) + + def build_training_batch(rows: object) -> WorkloadBatch: + features = as_profile_tensor(context, training["features"][rows]) + labels = as_profile_tensor(context, training["labels"][rows], dtype=torch.int64) + return WorkloadBatch((features,), {}, labels) + + def build_evaluation_batch(rows: object) -> WorkloadBatch: + features = as_profile_tensor(context, evaluation["features"][rows]) + labels = as_profile_tensor(context, evaluation["labels"][rows], dtype=torch.int64) + return WorkloadBatch((features,), {}, labels) + + def forward(current_model: object, batch: WorkloadBatch) -> object: + return current_model(*batch.args, **batch.kwargs) + + run_training_workload( + context, + recorder, + workload_name=WORKLOAD_NAME, + model=model, + training_sample_count=len(training["labels"]), + evaluation_sample_count=len(evaluation["labels"]), + training_source_indices=training["source_indices"], + build_training_batch=build_training_batch, + build_evaluation_batch=build_evaluation_batch, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "breast_cancer_mlp": _case, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the tabular workload selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_transformer_training_workload.py b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_transformer_training_workload.py new file mode 100644 index 0000000..afd22a3 --- /dev/null +++ b/pytorch/pytorch_extended_tests/cases/level_6_real_workloads/test_transformer_training_workload.py @@ -0,0 +1,77 @@ +"""Train the fixed Transformer on the prepared SMS spam dataset.""" + +from __future__ import annotations + +from collections.abc import Callable + +from config.suite_config import WORKLOADS +from cases.common import ( + WorkloadBatch, + as_profile_tensor, + build_sms_transformer, + load_module_state, + load_prepared_npz, + module_to_profile, + run_registered_case, + run_training_workload, +) +from pytorch_extended_tests.case_api import CaseContext, ObservationRecorder + +WORKLOAD_NAME = "transformer_sequence_classification" +DATASET_ID = str(WORKLOADS[WORKLOAD_NAME]["dataset_id"]) + + +def _case(context: CaseContext, recorder: ObservationRecorder) -> None: + import torch + + training = load_prepared_npz(context, DATASET_ID, "train.npz") + evaluation = load_prepared_npz(context, DATASET_ID, "evaluation.npz") + model = module_to_profile(context, build_sms_transformer()) + load_module_state( + context, + model, + str(WORKLOADS[WORKLOAD_NAME]["initial_state_file"]), + ) + + def make_batch(dataset: dict[str, object], rows: object) -> WorkloadBatch: + input_ids = as_profile_tensor(context, dataset["input_ids"][rows], dtype=torch.int64) + attention_mask = as_profile_tensor( + context, + dataset["attention_mask"][rows], + dtype=torch.bool, + ) + labels = as_profile_tensor(context, dataset["labels"][rows], dtype=torch.int64) + return WorkloadBatch((input_ids, attention_mask), {}, labels) + + def build_training_batch(rows: object) -> WorkloadBatch: + return make_batch(training, rows) + + def build_evaluation_batch(rows: object) -> WorkloadBatch: + return make_batch(evaluation, rows) + + def forward(current_model: object, batch: WorkloadBatch) -> object: + return current_model(*batch.args, **batch.kwargs) + + run_training_workload( + context, + recorder, + workload_name=WORKLOAD_NAME, + model=model, + training_sample_count=len(training["labels"]), + evaluation_sample_count=len(evaluation["labels"]), + training_source_indices=training["source_indices"], + build_training_batch=build_training_batch, + build_evaluation_batch=build_evaluation_batch, + forward=forward, + ) + + +_CASES: dict[str, Callable[[CaseContext, ObservationRecorder], None]] = { + "sms_spam_transformer": _case, +} + + +def run_case(context: CaseContext, recorder: ObservationRecorder) -> None: + """Run the Transformer workload selected by the catalogue.""" + + run_registered_case(context, recorder, _CASES) diff --git a/pytorch/pytorch_extended_tests/config/README.md b/pytorch/pytorch_extended_tests/config/README.md new file mode 100644 index 0000000..94e6d74 --- /dev/null +++ b/pytorch/pytorch_extended_tests/config/README.md @@ -0,0 +1,99 @@ +# Configuration + +The suite uses Python configuration rather than machine-specific YAML files. +They are a bit more readable. + +## Files + +- `suite_config.py` contains suite-wide execution, seed, dataset, model, precision, AMP and workload choices +- `test_catalogue.py` contains stable test, case and output IDs +- `__init__.py` exposes the small set of version and seed values used by other packages + +`test_catalogue.py` deliberately contains no numerical tolerances. CI records raw outputs only. Comparison policies will be introduced with the separate comparison harness + +## Device selection + +The default device is CUDA. Set this environment variable for the CPU reference job: + +```bash +export PYTORCH_EXTENDED_TESTS_DEVICE=cpu +``` + +The Python orchestrator validates the value against `ALLOWED_DEVICES` + +## Seeds + +`ROOT_SEED` is the only manually selected seed. Code which needs a distinct random stream should call: + +```python +from config.suite_config import derive_seed + +seed = derive_seed("workloads.tabular_classification", "training_order") +``` + +Do not use Python's built-in `hash()` to derive seeds because its output can vary between processes + +## Changing configuration + +Changing generated dataset settings requires regenerating and recommitting the prepared datasets and `dataset_manifest.json` + +Changes which alter result meaning should also update the relevant version string. For the first implementation these are all `v1` + +## Default profiles by device + +CUDA jobs run `controlled_fp32` and `amp_fp16` by default. This gives an ordinary FP32 baseline and the usual mixed-precision FP16 training path without paying for every optional precision mode in the first CI pass + +CPU jobs run `controlled_fp32` by default. Raw FP16 is deliberately CUDA-only in this suite + +FP64, raw FP16, raw BF16 and BF16 autocast remain available as explicit opt-ins: + +```bash +PYTHONPATH=src:. python -m pytorch_extended_tests.orchestrator.run_suite \ + --profiles controlled_fp32 amp_fp16 amp_bfloat16 controlled_fp64 +``` + +## Child-process environment + +`SUBPROCESS_ENVIRONMENT` fixes Python hashing, deterministic CUDA BLAS workspace behaviour and the main CPU thread-count environment variables before each isolated test process starts. These values should normally remain unchanged within a suite version + +## Implemented and enabled levels + +All seven levels are implemented: + +- `level_0_smoke_workloads` +- `level_1_core_tensor` +- `level_2_numerical_kernels` +- `level_3_autograd_and_learning` +- `level_4_precision_and_execution` +- `level_5_composite_models` +- `level_6_real_workloads` + +`EXECUTION["enabled_levels"]` contains Level 0 only by default. The quick run needs only `model_inputs_v1`, so it does not depend on the external Level 6 datasets + +## Level 3 settings + +`LEVEL_3_TESTS` keeps the embedding shape, normalisation settings and optimiser variants in one place + +The individual case files should not add their own learning rates, optimiser betas or other suite-wide constants + +## Level 4 settings + +`PRECISION_MODE_CASES` defines the strict, high and medium float32 modes + +`LEVEL_4_TESTS` holds the AMP learning rate, GradScaler values and serialisation checkpoint settings. The mixed-precision and save/load cases should not add separate local values. + +## Level 5 settings + +`BLOCK_TESTS` contains the short composite-model training length, checkpoint steps and optimiser choices. The MLP and attention block use AdamW, while the CNN uses SGD, so the level covers both optimiser paths without adding more nearly identical cases + +## Level 6 settings + +`WORKLOADS` contains the dataset, optimiser, batch-size, training-length and checkpoint choices for each real workload + +`WORKLOAD_CAPTURE` defines which early parameter states are retained. The workload helper derives the exact shuffled batch order from the root seed and records the source indices used at every step. + +## Level 0 settings + +`LEVEL_0_DEMOS` holds the CSV filename, prediction preview length and the linear example's optimiser settings + +The MLP, CNN and attention examples deliberately reuse `BLOCK_TESTS` and the public Level 5 execution functions. This means the quick demonstrations and the detailed composite tests use the same calculations. diff --git a/pytorch/pytorch_extended_tests/config/__init__.py b/pytorch/pytorch_extended_tests/config/__init__.py new file mode 100644 index 0000000..3f61868 --- /dev/null +++ b/pytorch/pytorch_extended_tests/config/__init__.py @@ -0,0 +1,21 @@ +"""Configuration package for pytorch_extended_tests.""" + +from .suite_config import ( + CONFIG_VERSION, + RESULT_FORMAT_VERSION, + ROOT_SEED, + SUITE_NAME, + SUITE_VERSION, + TEST_CATALOGUE_VERSION, + derive_seed, +) + +__all__ = [ + "CONFIG_VERSION", + "RESULT_FORMAT_VERSION", + "ROOT_SEED", + "SUITE_NAME", + "SUITE_VERSION", + "TEST_CATALOGUE_VERSION", + "derive_seed", +] diff --git a/pytorch/pytorch_extended_tests/config/suite_config.py b/pytorch/pytorch_extended_tests/config/suite_config.py new file mode 100644 index 0000000..61e71d2 --- /dev/null +++ b/pytorch/pytorch_extended_tests/config/suite_config.py @@ -0,0 +1,670 @@ +"""Central configuration for the pytorch_extended_tests suite. + +Keep suite-wide choices here rather than spreading them through the case files. +The dataset generator imports this module as well, so it must not import PyTorch. +""" + +from __future__ import annotations + +import hashlib +import os +import tempfile +from pathlib import Path +from typing import Final + + +SUITE_NAME: Final = "pytorch_extended_tests" +SUITE_VERSION: Final = "v1" +CONFIG_VERSION: Final = "v1" +TEST_CATALOGUE_VERSION: Final = "v1" +RESULT_FORMAT_VERSION: Final = "v1" +SEED_DERIVATION_VERSION: Final = "v1" + +# This is the only root seed used by the suite +# Derive named sub-seeds with derive_seed rather than adding local constants +ROOT_SEED: Final = 42 + +REPOSITORY_ROOT: Final = Path(__file__).resolve().parents[1] +DATASETS_DIR: Final = REPOSITORY_ROOT / "datasets" +PREPARED_DATASETS_DIR: Final = DATASETS_DIR / "prepared" +DATASET_MANIFEST_PATH: Final = DATASETS_DIR / "dataset_manifest.json" +# Keep the CI path unchanged on Linux +# Use the normal temporary directory on Windows so local runs work there too +RESULTS_DIR: Final = ( + Path(tempfile.gettempdir()) / "ci_benchmarks" / "pytorch" + if os.name == "nt" + else Path("/tmp/ci_benchmarks/pytorch") +) + +DEFAULT_DEVICE: Final = "cuda" +DEVICE_ENVIRONMENT_VARIABLE: Final = "PYTORCH_EXTENDED_TESTS_DEVICE" +ALLOWED_DEVICES: Final = ("cpu", "cuda") + +# These must be set before the child Python process starts +# The values are fixed here so every CI environment gets the same behaviour +SUBPROCESS_ENVIRONMENT: Final = { + "PYTHONHASHSEED": str(ROOT_SEED), + "PYTHONUNBUFFERED": "1", + "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + "OMP_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "NUMEXPR_NUM_THREADS": "1", +} + + +# Keep the profile values as plain Python data +# The orchestrator will translate these strings into PyTorch settings +EXECUTION_PROFILES: Final = { + "controlled_fp64": { + "dtype": "float64", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_fp32": { + "dtype": "float32", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_fp16": { + "dtype": "float16", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_bfloat16": { + "dtype": "bfloat16", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "amp_fp16": { + "dtype": "float32", + "autocast_dtype": "float16", + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "amp_bfloat16": { + "dtype": "float32", + "autocast_dtype": "bfloat16", + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, +} + +DEFAULT_PROFILE_ORDER: Final = ( + "controlled_fp64", + "controlled_fp32", + "controlled_fp16", + "controlled_bfloat16", + "amp_fp16", + "amp_bfloat16", +) + +# CPU is mainly a diagnostic reference for the ordinary precision paths +# Extra CPU bfloat16 profiles can still be selected explicitly from the command line +DEFAULT_PROFILES_BY_DEVICE: Final = { + # Start with the two profiles most people will care about first + # The lower-precision CUDA profile is AMP FP16 rather than raw FP16 parameters + "cpu": ("controlled_fp32",), + "cuda": ("controlled_fp32", "amp_fp16"), +} + +LEVELS: Final = ( + "level_0_smoke_workloads", + "level_1_core_tensor", + "level_2_numerical_kernels", + "level_3_autograd_and_learning", + "level_4_precision_and_execution", + "level_5_composite_models", + "level_6_real_workloads", +) + +# All levels are implemented, but the normal CI job starts with Level 0 only +# Pass --levels explicitly once the quick demonstration results look sensible +IMPLEMENTED_LEVELS: Final = LEVELS +# DEFAULT_CI_LEVELS: Final = ("level_0_smoke_workloads",) +DEFAULT_CI_LEVELS: Final = ( + "level_0_smoke_workloads", + "level_1_core_tensor", + "level_2_numerical_kernels", + "level_3_autograd_and_learning", + "level_4_precision_and_execution", + "level_5_composite_models", +) +# levels 0-5 only need the generated data from python .\datasets\generate_datasets.py --only generated --force + +EXECUTION: Final = { + "enabled_levels": DEFAULT_CI_LEVELS, + "enabled_test_ids": (), + "disabled_test_ids": (), + "subprocess_timeout_seconds": 1_200, + "continue_after_test_file_failure": True, + "maximum_concurrent_test_files": 1, + "fail_on_missing_required_output": True, + "fail_on_unsupported_required_case": False, + "remove_existing_results": True, + # CI and normal local runs use the prepared files only + # The downloaded source archives are needed only when regenerating Level 6 data + "validate_downloaded_sources": False, + "write_catalogue_snapshot": True, +} + + +# These are the fixed model shapes used by generated initial states and case code +MODEL_ARCHITECTURES: Final = { + "linear": { + "input_features": 30, + "output_features": 2, + }, + "mlp": { + "input_features": 30, + "hidden_features": (32, 16), + "output_features": 2, + }, + "cnn": { + "channels": (1, 8, 16), + "classifier_hidden_features": 64, + "classes": 10, + }, + "attention": { + "sequence_length": 16, + "embedding_size": 32, + "heads": 4, + "classes": 2, + }, + "sms_transformer": { + "sequence_length": 64, + "vocabulary_size": 4_096, + "embedding_size": 32, + "heads": 4, + "feedforward_size": 64, + "layers": 2, + "classes": 2, + "activation": "gelu", + "dropout": 0.0, + "norm_first": False, + }, +} + + +# The generator reads this dictionary directly +# Keep its keys stable once prepared data has been committed +DATASET_GENERATION: Final = { + "breast_cancer_wisconsin": { + "evaluation_fraction": 0.2, + }, + "fashion_mnist": { + "training_samples": 4_096, + "evaluation_samples": 1_024, + }, + "sms_spam": { + "evaluation_fraction": 0.2, + "max_sequence_length": MODEL_ARCHITECTURES["sms_transformer"]["sequence_length"], + "max_vocabulary_size": MODEL_ARCHITECTURES["sms_transformer"]["vocabulary_size"], + "minimum_token_frequency": 1, + }, + "numerical_inputs": { + "vector_length": 257, + "reduction_rows": 127, + "reduction_columns": 61, + "matrix_m": 127, + "matrix_k": 61, + "matrix_n": 89, + "matrix_batch_size": 3, + }, + "model_inputs": { + "batch_size": 32, + "linear_input_features": MODEL_ARCHITECTURES["linear"]["input_features"], + "linear_output_features": MODEL_ARCHITECTURES["linear"]["output_features"], + "mlp_input_features": MODEL_ARCHITECTURES["mlp"]["input_features"], + "mlp_hidden_features": MODEL_ARCHITECTURES["mlp"]["hidden_features"], + "mlp_output_features": MODEL_ARCHITECTURES["mlp"]["output_features"], + "cnn_channels": MODEL_ARCHITECTURES["cnn"]["channels"], + "cnn_classes": MODEL_ARCHITECTURES["cnn"]["classes"], + "attention_sequence_length": MODEL_ARCHITECTURES["attention"]["sequence_length"], + "attention_embedding_size": MODEL_ARCHITECTURES["attention"]["embedding_size"], + "attention_heads": MODEL_ARCHITECTURES["attention"]["heads"], + "transformer_feedforward_size": MODEL_ARCHITECTURES["sms_transformer"]["feedforward_size"], + "transformer_layers": MODEL_ARCHITECTURES["sms_transformer"]["layers"], + }, +} + +DATASET_PATHS: Final = { + "numerical_inputs_v1": PREPARED_DATASETS_DIR / "numerical_inputs_v1", + "model_inputs_v1": PREPARED_DATASETS_DIR / "model_inputs_v1", + "breast_cancer_wisconsin_v1": PREPARED_DATASETS_DIR / "breast_cancer_wisconsin_v1", + "fashion_mnist_v1": PREPARED_DATASETS_DIR / "fashion_mnist_v1", + "sms_spam_v1": PREPARED_DATASETS_DIR / "sms_spam_v1", +} + +DATALOADER: Final = { + "num_workers": 0, + "pin_memory": False, + "persistent_workers": False, + "drop_last": False, +} + +LEVEL_3_TESTS: Final = { + "embedding": { + "num_embeddings": 23, + "embedding_dim": 8, + "batch_size": 4, + "sequence_length": 7, + }, + "normalisation": { + "epsilon": 1e-5, + "batch_norm_momentum": 0.1, + "group_norm_groups": 4, + }, + "optimizer_steps": 2, + "sgd_cases": { + "plain_sgd": { + "lr": 0.01, + "momentum": 0.0, + "weight_decay": 0.0, + "nesterov": False, + }, + "momentum": { + "lr": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + "nesterov": False, + }, + "nesterov": { + "lr": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + "nesterov": True, + }, + "weight_decay": { + "lr": 0.01, + "momentum": 0.0, + "weight_decay": 0.01, + "nesterov": False, + }, + }, + "adamw_cases": { + "default_betas": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": False, + }, + "custom_betas": { + "lr": 0.001, + "betas": (0.8, 0.95), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": False, + }, + "weight_decay": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.01, + "amsgrad": False, + }, + "amsgrad": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": True, + }, + }, +} + +AMP_GRAD_SCALER: Final = { + "initial_scale": 128.0, + "growth_factor": 2.0, + "backoff_factor": 0.5, + "growth_interval": 2, +} + +LEVEL_0_DEMOS: Final = { + "summary_filename": "level_0_summary.csv", + "prediction_preview_count": 8, + "linear": { + "optimiser": "sgd", + "learning_rate": 0.02, + "momentum": 0.0, + "weight_decay": 0.0, + }, +} + +BLOCK_TESTS: Final = { + "optimisation_steps": 2, + "checkpoint_steps": (0, 1, 2), + "model_optimizers": { + "mlp": "adamw", + "cnn": "sgd", + "attention": "adamw", + }, + "sgd": { + "learning_rate": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + }, + "adamw": { + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + }, +} + +WORKLOAD_CAPTURE: Final = { + "early_parameter_state_steps": (0, 1, 2), +} + +WORKLOADS: Final = { + "tabular_classification": { + "dataset_id": "breast_cancer_wisconsin_v1", + "initial_state_file": "mlp_initial_state.npz", + "training_steps": 20, + "checkpoint_steps": (0, 1, 2, 5, 10, 20), + "batch_size": 32, + "evaluation_batch_size": 256, + "shuffle_training_data": True, + "optimiser": "adamw", + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.0001, + }, + "image_classification": { + "dataset_id": "fashion_mnist_v1", + "initial_state_file": "cnn_initial_state.npz", + "training_steps": 30, + "checkpoint_steps": (0, 1, 2, 5, 10, 20, 30), + "batch_size": 64, + "evaluation_batch_size": 256, + "shuffle_training_data": True, + "optimiser": "sgd", + "learning_rate": 0.01, + "momentum": 0.9, + "weight_decay": 0.0001, + }, + "transformer_sequence_classification": { + "dataset_id": "sms_spam_v1", + "initial_state_file": "sms_transformer_initial_state.npz", + "training_steps": 30, + "checkpoint_steps": (0, 1, 2, 5, 10, 20, 30), + "batch_size": 32, + "evaluation_batch_size": 128, + "shuffle_training_data": True, + "optimiser": "adamw", + "learning_rate": 0.0005, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + }, +} + +PRECISION_MODE_CASES: Final = { + "fp32_strict": { + "allow_tf32": False, + "float32_matmul_precision": "highest", + }, + "fp32_high": { + "allow_tf32": True, + "float32_matmul_precision": "high", + }, + "fp32_medium": { + "allow_tf32": True, + "float32_matmul_precision": "medium", + }, +} + +LEVEL_4_TESTS: Final = { + "amp": { + "learning_rate": 0.01, + "grad_scaler": AMP_GRAD_SCALER, + }, + "serialisation": { + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + "checkpoint_version": "v1", + "checkpoint_step": 1, + }, +} + +OUTPUT_CAPTURE: Final = { + "store_tensor_payloads": True, + "store_tensor_checksums": True, + "store_first_step_gradients": True, + "store_first_step_parameter_deltas": True, + "store_optimizer_state": True, + "store_final_parameters": True, + "store_intermediate_activations_at_steps": (0,), + "store_evaluation_logits_at_checkpoints": True, + "maximum_inline_series_length": 4_096, +} + + +# Use a digest rather than hash() because Python deliberately randomises hash values +def derive_seed(*parts: str) -> int: + """Derive a stable positive seed from ROOT_SEED and a set of names.""" + + if not parts or any(not isinstance(part, str) or not part for part in parts): + raise ValueError("derive_seed requires one or more non-empty string parts") + + digest = hashlib.sha256() + digest.update(SEED_DERIVATION_VERSION.encode("ascii")) + digest.update(b"\0") + digest.update(str(ROOT_SEED).encode("ascii")) + for part in parts: + digest.update(b"\0") + digest.update(part.encode("utf-8")) + + # Stay within the range accepted cleanly by NumPy and PyTorch seed APIs + return int.from_bytes(digest.digest()[:8], "big") % (2**63 - 1) + + +def validate_suite_config() -> None: + """Check configuration relationships which would otherwise fail much later.""" + + if not isinstance(ROOT_SEED, int) or isinstance(ROOT_SEED, bool) or ROOT_SEED < 0: + raise ValueError("ROOT_SEED must be a non-negative integer") + if not RESULTS_DIR.is_absolute(): + raise ValueError("RESULTS_DIR must be an absolute path") + if DEFAULT_DEVICE not in ALLOWED_DEVICES: + raise ValueError("DEFAULT_DEVICE must be listed in ALLOWED_DEVICES") + if set(DEFAULT_PROFILE_ORDER) != set(EXECUTION_PROFILES): + raise ValueError("DEFAULT_PROFILE_ORDER must contain each execution profile once") + if len(DEFAULT_PROFILE_ORDER) != len(set(DEFAULT_PROFILE_ORDER)): + raise ValueError("DEFAULT_PROFILE_ORDER contains duplicate profiles") + if set(DEFAULT_PROFILES_BY_DEVICE) != set(ALLOWED_DEVICES): + raise ValueError("DEFAULT_PROFILES_BY_DEVICE must cover every allowed device") + for device, profile_ids in DEFAULT_PROFILES_BY_DEVICE.items(): + if not profile_ids or set(profile_ids) - set(EXECUTION_PROFILES): + raise ValueError(f"Invalid default profiles for {device}") + expected_order = tuple( + profile_id for profile_id in DEFAULT_PROFILE_ORDER if profile_id in profile_ids + ) + if tuple(profile_ids) != expected_order: + raise ValueError(f"Default profiles for {device} must use the central profile order") + enabled_levels = tuple(EXECUTION["enabled_levels"]) + if not enabled_levels: + raise ValueError("EXECUTION enabled_levels must not be empty") + if set(enabled_levels) - set(LEVELS): + raise ValueError("EXECUTION enabled_levels contains an unknown level") + expected_enabled_order = tuple(level for level in LEVELS if level in enabled_levels) + if enabled_levels != expected_enabled_order: + raise ValueError("EXECUTION enabled_levels must use the central LEVELS order") + + linear = MODEL_ARCHITECTURES["linear"] + mlp = MODEL_ARCHITECTURES["mlp"] + if int(linear["input_features"]) != int(mlp["input_features"]): + raise ValueError("The Level 0 linear and MLP inputs must use the same width") + if int(linear["output_features"]) != int(mlp["output_features"]): + raise ValueError("The Level 0 linear and MLP outputs must use the same class count") + + attention = MODEL_ARCHITECTURES["attention"] + transformer = MODEL_ARCHITECTURES["sms_transformer"] + if attention["embedding_size"] % attention["heads"] != 0: + raise ValueError("Attention embedding size must be divisible by its head count") + if transformer["embedding_size"] % transformer["heads"] != 0: + raise ValueError("Transformer embedding size must be divisible by its head count") + if int(transformer["sequence_length"]) < 2: + raise ValueError("Transformer sequence length must be at least two") + if int(transformer["vocabulary_size"]) < 8: + raise ValueError("Transformer vocabulary size must be at least eight") + if float(transformer["dropout"]) != 0.0: + raise ValueError("The fixed Transformer workload must keep dropout disabled") + if str(transformer["activation"]) not in {"relu", "gelu"}: + raise ValueError("Transformer activation must be relu or gelu") + + level_0 = LEVEL_0_DEMOS + if str(level_0["summary_filename"]) != "level_0_summary.csv": + raise ValueError("Level 0 summary filename must remain level_0_summary.csv") + if int(level_0["prediction_preview_count"]) < 1: + raise ValueError("Level 0 prediction preview count must be positive") + linear_demo = level_0["linear"] + if linear_demo["optimiser"] != "sgd": + raise ValueError("The Level 0 linear example must use SGD") + if float(linear_demo["learning_rate"]) <= 0: + raise ValueError("The Level 0 linear learning rate must be positive") + + if LEVEL_3_TESTS["optimizer_steps"] < 1: + raise ValueError("Level 3 optimizer_steps must be at least one") + if set(LEVEL_3_TESTS["sgd_cases"]) != {"plain_sgd", "momentum", "nesterov", "weight_decay"}: + raise ValueError("Level 3 SGD cases do not match the catalogue") + if set(LEVEL_3_TESTS["adamw_cases"]) != {"default_betas", "custom_betas", "weight_decay", "amsgrad"}: + raise ValueError("Level 3 AdamW cases do not match the catalogue") + + if set(PRECISION_MODE_CASES) != {"fp32_strict", "fp32_high", "fp32_medium"}: + raise ValueError("Level 4 precision-mode cases do not match the catalogue") + valid_matmul_precisions = {"highest", "high", "medium"} + for case_name, settings in PRECISION_MODE_CASES.items(): + if settings["float32_matmul_precision"] not in valid_matmul_precisions: + raise ValueError(f"Invalid float32 matmul precision for {case_name}") + if not isinstance(settings["allow_tf32"], bool): + raise ValueError(f"allow_tf32 must be Boolean for {case_name}") + + scaler = LEVEL_4_TESTS["amp"]["grad_scaler"] + if float(LEVEL_4_TESTS["amp"]["learning_rate"]) <= 0: + raise ValueError("Level 4 AMP learning rate must be positive") + if float(scaler["initial_scale"]) <= 0: + raise ValueError("Level 4 GradScaler initial scale must be positive") + if float(scaler["growth_factor"]) <= 1: + raise ValueError("Level 4 GradScaler growth factor must be greater than one") + if not 0 < float(scaler["backoff_factor"]) < 1: + raise ValueError("Level 4 GradScaler backoff factor must be between zero and one") + if int(scaler["growth_interval"]) < 1: + raise ValueError("Level 4 GradScaler growth interval must be at least one") + + block_steps = int(BLOCK_TESTS["optimisation_steps"]) + block_checkpoints = tuple(int(value) for value in BLOCK_TESTS["checkpoint_steps"]) + if block_steps < 1: + raise ValueError("Level 5 optimisation_steps must be at least one") + if tuple(sorted(set(block_checkpoints))) != block_checkpoints: + raise ValueError("Level 5 checkpoint_steps must be sorted and unique") + if block_checkpoints[0] != 0 or block_checkpoints[-1] != block_steps: + raise ValueError( + "Level 5 checkpoint_steps must start at 0 and end at optimisation_steps" + ) + expected_block_models = {"mlp", "cnn", "attention"} + if set(BLOCK_TESTS["model_optimizers"]) != expected_block_models: + raise ValueError("Level 5 model optimiser choices do not match the catalogue") + if set(BLOCK_TESTS["model_optimizers"].values()) - {"sgd", "adamw"}: + raise ValueError("Level 5 model optimisers must be sgd or adamw") + if float(BLOCK_TESTS["sgd"]["learning_rate"]) <= 0: + raise ValueError("Level 5 SGD learning rate must be positive") + if float(BLOCK_TESTS["adamw"]["learning_rate"]) <= 0: + raise ValueError("Level 5 AdamW learning rate must be positive") + + serialisation = LEVEL_4_TESTS["serialisation"] + if float(serialisation["learning_rate"]) <= 0: + raise ValueError("Level 4 serialisation learning rate must be positive") + if int(serialisation["checkpoint_step"]) < 0: + raise ValueError("Level 4 checkpoint step must be non-negative") + if not str(serialisation["checkpoint_version"]): + raise ValueError("Level 4 checkpoint version must not be empty") + + early_workload_steps = tuple( + int(value) for value in WORKLOAD_CAPTURE["early_parameter_state_steps"] + ) + if tuple(sorted(set(early_workload_steps))) != early_workload_steps: + raise ValueError("Level 6 early parameter steps must be sorted and unique") + if not early_workload_steps or early_workload_steps[0] != 0: + raise ValueError("Level 6 early parameter steps must start at zero") + + expected_workloads = { + "tabular_classification", + "image_classification", + "transformer_sequence_classification", + } + if set(WORKLOADS) != expected_workloads: + raise ValueError("Level 6 workload names do not match the catalogue") + + for workload_name, workload in WORKLOADS.items(): + steps = int(workload["training_steps"]) + checkpoints = tuple(int(value) for value in workload["checkpoint_steps"]) + if steps < 1: + raise ValueError(f"{workload_name} training_steps must be positive") + if tuple(sorted(set(checkpoints))) != checkpoints: + raise ValueError(f"{workload_name} checkpoint_steps must be sorted and unique") + if checkpoints[0] != 0 or checkpoints[-1] != steps: + raise ValueError( + f"{workload_name} checkpoint_steps must start at 0 and end at training_steps" + ) + if set(early_workload_steps) - set(checkpoints): + raise ValueError( + f"{workload_name} must include every early parameter step as a checkpoint" + ) + if workload["dataset_id"] not in DATASET_PATHS: + raise ValueError(f"{workload_name} refers to an unknown dataset") + if int(workload["batch_size"]) < 1: + raise ValueError(f"{workload_name} batch_size must be positive") + if int(workload["evaluation_batch_size"]) < 1: + raise ValueError(f"{workload_name} evaluation_batch_size must be positive") + if float(workload["learning_rate"]) <= 0: + raise ValueError(f"{workload_name} learning_rate must be positive") + if workload["optimiser"] not in {"sgd", "adamw"}: + raise ValueError(f"{workload_name} optimiser must be sgd or adamw") + + +validate_suite_config() diff --git a/pytorch/pytorch_extended_tests/config/suite_config_old.py b/pytorch/pytorch_extended_tests/config/suite_config_old.py new file mode 100644 index 0000000..c451958 --- /dev/null +++ b/pytorch/pytorch_extended_tests/config/suite_config_old.py @@ -0,0 +1,670 @@ +"""Central configuration for the pytorch_extended_tests suite. + +Keep suite-wide choices here rather than spreading them through the case files. +The dataset generator imports this module as well, so it must not import PyTorch. +""" + +from __future__ import annotations + +import hashlib +import os +import tempfile +from pathlib import Path +from typing import Final + + +SUITE_NAME: Final = "pytorch_extended_tests" +SUITE_VERSION: Final = "v1" +CONFIG_VERSION: Final = "v1" +TEST_CATALOGUE_VERSION: Final = "v1" +RESULT_FORMAT_VERSION: Final = "v1" +SEED_DERIVATION_VERSION: Final = "v1" + +# This is the only root seed used by the suite +# Derive named sub-seeds with derive_seed rather than adding local constants +ROOT_SEED: Final = 42 + +REPOSITORY_ROOT: Final = Path(__file__).resolve().parents[1] +DATASETS_DIR: Final = REPOSITORY_ROOT / "datasets" +PREPARED_DATASETS_DIR: Final = DATASETS_DIR / "prepared" +DATASET_MANIFEST_PATH: Final = DATASETS_DIR / "dataset_manifest.json" +# Keep the CI path unchanged on Linux +# Use the normal temporary directory on Windows so local runs work there too +RESULTS_DIR: Final = ( + Path(tempfile.gettempdir()) / "ci_benchmarks" / "pytorch" + if os.name == "nt" + else Path("/tmp/ci_benchmarks/pytorch") +) + +DEFAULT_DEVICE: Final = "cuda" +DEVICE_ENVIRONMENT_VARIABLE: Final = "PYTORCH_EXTENDED_TESTS_DEVICE" +ALLOWED_DEVICES: Final = ("cpu", "cuda") + +# These must be set before the child Python process starts +# The values are fixed here so every CI environment gets the same behaviour +SUBPROCESS_ENVIRONMENT: Final = { + "PYTHONHASHSEED": str(ROOT_SEED), + "PYTHONUNBUFFERED": "1", + "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + "OMP_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "NUMEXPR_NUM_THREADS": "1", +} + + +# Keep the profile values as plain Python data +# The orchestrator will translate these strings into PyTorch settings +EXECUTION_PROFILES: Final = { + "controlled_fp64": { + "dtype": "float64", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_fp32": { + "dtype": "float32", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_fp16": { + "dtype": "float16", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "controlled_bfloat16": { + "dtype": "bfloat16", + "autocast_dtype": None, + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "amp_fp16": { + "dtype": "float32", + "autocast_dtype": "float16", + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, + "amp_bfloat16": { + "dtype": "float32", + "autocast_dtype": "bfloat16", + "deterministic_algorithms": True, + "deterministic_warn_only": False, + "cudnn_benchmark": False, + "cudnn_deterministic": True, + "allow_tf32": False, + "float32_matmul_precision": "highest", + "cpu_threads": 1, + "interop_threads": 1, + }, +} + +DEFAULT_PROFILE_ORDER: Final = ( + "controlled_fp64", + "controlled_fp32", + "controlled_fp16", + "controlled_bfloat16", + "amp_fp16", + "amp_bfloat16", +) + +# CPU is mainly a diagnostic reference for the ordinary precision paths +# Extra CPU bfloat16 profiles can still be selected explicitly from the command line +DEFAULT_PROFILES_BY_DEVICE: Final = { + # Start with the two profiles most people will care about first + # The lower-precision CUDA profile is AMP FP16 rather than raw FP16 parameters + "cpu": ("controlled_fp32",), + "cuda": ("controlled_fp32", "amp_fp16"), +} + +LEVELS: Final = ( + "level_0_smoke_workloads", + "level_1_core_tensor", + "level_2_numerical_kernels", + "level_3_autograd_and_learning", + "level_4_precision_and_execution", + "level_5_composite_models", + "level_6_real_workloads", +) + + + +# All levels are implemented, but the normal CI job starts with Level 0 only +# Pass --levels explicitly once the quick demonstration results look sensible +IMPLEMENTED_LEVELS: Final = LEVELS +# DEFAULT_CI_LEVELS: Final = ("level_0_smoke_workloads",) +DEFAULT_CI_LEVELS: Final = ( + "level_0_smoke_workloads", + "level_1_core_tensor", + "level_2_numerical_kernels", + "level_3_autograd_and_learning", + "level_4_precision_and_execution", + "level_5_composite_models", +) +# levels 0-5 only need the generated data from python .\datasets\generate_datasets.py --only generated --force + +EXECUTION: Final = { + "enabled_levels": DEFAULT_CI_LEVELS, + "enabled_test_ids": (), + "disabled_test_ids": (), + "subprocess_timeout_seconds": 1_200, + "continue_after_test_file_failure": True, + "maximum_concurrent_test_files": 1, + "fail_on_missing_required_output": True, + "fail_on_unsupported_required_case": False, + "remove_existing_results": True, + "validate_downloaded_sources": True, + "write_catalogue_snapshot": True, +} + + +# These are the fixed model shapes used by generated initial states and case code +MODEL_ARCHITECTURES: Final = { + "linear": { + "input_features": 30, + "output_features": 2, + }, + "mlp": { + "input_features": 30, + "hidden_features": (32, 16), + "output_features": 2, + }, + "cnn": { + "channels": (1, 8, 16), + "classifier_hidden_features": 64, + "classes": 10, + }, + "attention": { + "sequence_length": 16, + "embedding_size": 32, + "heads": 4, + "classes": 2, + }, + "sms_transformer": { + "sequence_length": 64, + "vocabulary_size": 4_096, + "embedding_size": 32, + "heads": 4, + "feedforward_size": 64, + "layers": 2, + "classes": 2, + "activation": "gelu", + "dropout": 0.0, + "norm_first": False, + }, +} + + +# The generator reads this dictionary directly +# Keep its keys stable once prepared data has been committed +DATASET_GENERATION: Final = { + "breast_cancer_wisconsin": { + "evaluation_fraction": 0.2, + }, + "fashion_mnist": { + "training_samples": 4_096, + "evaluation_samples": 1_024, + }, + "sms_spam": { + "evaluation_fraction": 0.2, + "max_sequence_length": MODEL_ARCHITECTURES["sms_transformer"]["sequence_length"], + "max_vocabulary_size": MODEL_ARCHITECTURES["sms_transformer"]["vocabulary_size"], + "minimum_token_frequency": 1, + }, + "numerical_inputs": { + "vector_length": 257, + "reduction_rows": 127, + "reduction_columns": 61, + "matrix_m": 127, + "matrix_k": 61, + "matrix_n": 89, + "matrix_batch_size": 3, + }, + "model_inputs": { + "batch_size": 32, + "linear_input_features": MODEL_ARCHITECTURES["linear"]["input_features"], + "linear_output_features": MODEL_ARCHITECTURES["linear"]["output_features"], + "mlp_input_features": MODEL_ARCHITECTURES["mlp"]["input_features"], + "mlp_hidden_features": MODEL_ARCHITECTURES["mlp"]["hidden_features"], + "mlp_output_features": MODEL_ARCHITECTURES["mlp"]["output_features"], + "cnn_channels": MODEL_ARCHITECTURES["cnn"]["channels"], + "cnn_classes": MODEL_ARCHITECTURES["cnn"]["classes"], + "attention_sequence_length": MODEL_ARCHITECTURES["attention"]["sequence_length"], + "attention_embedding_size": MODEL_ARCHITECTURES["attention"]["embedding_size"], + "attention_heads": MODEL_ARCHITECTURES["attention"]["heads"], + "transformer_feedforward_size": MODEL_ARCHITECTURES["sms_transformer"]["feedforward_size"], + "transformer_layers": MODEL_ARCHITECTURES["sms_transformer"]["layers"], + }, +} + +DATASET_PATHS: Final = { + "numerical_inputs_v1": PREPARED_DATASETS_DIR / "numerical_inputs_v1", + "model_inputs_v1": PREPARED_DATASETS_DIR / "model_inputs_v1", + "breast_cancer_wisconsin_v1": PREPARED_DATASETS_DIR / "breast_cancer_wisconsin_v1", + "fashion_mnist_v1": PREPARED_DATASETS_DIR / "fashion_mnist_v1", + "sms_spam_v1": PREPARED_DATASETS_DIR / "sms_spam_v1", +} + +DATALOADER: Final = { + "num_workers": 0, + "pin_memory": False, + "persistent_workers": False, + "drop_last": False, +} + +LEVEL_3_TESTS: Final = { + "embedding": { + "num_embeddings": 23, + "embedding_dim": 8, + "batch_size": 4, + "sequence_length": 7, + }, + "normalisation": { + "epsilon": 1e-5, + "batch_norm_momentum": 0.1, + "group_norm_groups": 4, + }, + "optimizer_steps": 2, + "sgd_cases": { + "plain_sgd": { + "lr": 0.01, + "momentum": 0.0, + "weight_decay": 0.0, + "nesterov": False, + }, + "momentum": { + "lr": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + "nesterov": False, + }, + "nesterov": { + "lr": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + "nesterov": True, + }, + "weight_decay": { + "lr": 0.01, + "momentum": 0.0, + "weight_decay": 0.01, + "nesterov": False, + }, + }, + "adamw_cases": { + "default_betas": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": False, + }, + "custom_betas": { + "lr": 0.001, + "betas": (0.8, 0.95), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": False, + }, + "weight_decay": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.01, + "amsgrad": False, + }, + "amsgrad": { + "lr": 0.001, + "betas": (0.9, 0.999), + "eps": 1e-8, + "weight_decay": 0.0, + "amsgrad": True, + }, + }, +} + +AMP_GRAD_SCALER: Final = { + "initial_scale": 128.0, + "growth_factor": 2.0, + "backoff_factor": 0.5, + "growth_interval": 2, +} + +LEVEL_0_DEMOS: Final = { + "summary_filename": "level_0_summary.csv", + "prediction_preview_count": 8, + "linear": { + "optimiser": "sgd", + "learning_rate": 0.02, + "momentum": 0.0, + "weight_decay": 0.0, + }, +} + +BLOCK_TESTS: Final = { + "optimisation_steps": 2, + "checkpoint_steps": (0, 1, 2), + "model_optimizers": { + "mlp": "adamw", + "cnn": "sgd", + "attention": "adamw", + }, + "sgd": { + "learning_rate": 0.01, + "momentum": 0.9, + "weight_decay": 0.0, + }, + "adamw": { + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + }, +} + +WORKLOAD_CAPTURE: Final = { + "early_parameter_state_steps": (0, 1, 2), +} + +WORKLOADS: Final = { + "tabular_classification": { + "dataset_id": "breast_cancer_wisconsin_v1", + "initial_state_file": "mlp_initial_state.npz", + "training_steps": 20, + "checkpoint_steps": (0, 1, 2, 5, 10, 20), + "batch_size": 32, + "evaluation_batch_size": 256, + "shuffle_training_data": True, + "optimiser": "adamw", + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.0001, + }, + "image_classification": { + "dataset_id": "fashion_mnist_v1", + "initial_state_file": "cnn_initial_state.npz", + "training_steps": 30, + "checkpoint_steps": (0, 1, 2, 5, 10, 20, 30), + "batch_size": 64, + "evaluation_batch_size": 256, + "shuffle_training_data": True, + "optimiser": "sgd", + "learning_rate": 0.01, + "momentum": 0.9, + "weight_decay": 0.0001, + }, + "transformer_sequence_classification": { + "dataset_id": "sms_spam_v1", + "initial_state_file": "sms_transformer_initial_state.npz", + "training_steps": 30, + "checkpoint_steps": (0, 1, 2, 5, 10, 20, 30), + "batch_size": 32, + "evaluation_batch_size": 128, + "shuffle_training_data": True, + "optimiser": "adamw", + "learning_rate": 0.0005, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + }, +} + +PRECISION_MODE_CASES: Final = { + "fp32_strict": { + "allow_tf32": False, + "float32_matmul_precision": "highest", + }, + "fp32_high": { + "allow_tf32": True, + "float32_matmul_precision": "high", + }, + "fp32_medium": { + "allow_tf32": True, + "float32_matmul_precision": "medium", + }, +} + +LEVEL_4_TESTS: Final = { + "amp": { + "learning_rate": 0.01, + "grad_scaler": AMP_GRAD_SCALER, + }, + "serialisation": { + "learning_rate": 0.001, + "betas": (0.9, 0.999), + "epsilon": 1e-8, + "weight_decay": 0.01, + "checkpoint_version": "v1", + "checkpoint_step": 1, + }, +} + +OUTPUT_CAPTURE: Final = { + "store_tensor_payloads": True, + "store_tensor_checksums": True, + "store_first_step_gradients": True, + "store_first_step_parameter_deltas": True, + "store_optimizer_state": True, + "store_final_parameters": True, + "store_intermediate_activations_at_steps": (0,), + "store_evaluation_logits_at_checkpoints": True, + "maximum_inline_series_length": 4_096, +} + + +# Use a digest rather than hash() because Python deliberately randomises hash values +def derive_seed(*parts: str) -> int: + """Derive a stable positive seed from ROOT_SEED and a set of names.""" + + if not parts or any(not isinstance(part, str) or not part for part in parts): + raise ValueError("derive_seed requires one or more non-empty string parts") + + digest = hashlib.sha256() + digest.update(SEED_DERIVATION_VERSION.encode("ascii")) + digest.update(b"\0") + digest.update(str(ROOT_SEED).encode("ascii")) + for part in parts: + digest.update(b"\0") + digest.update(part.encode("utf-8")) + + # Stay within the range accepted cleanly by NumPy and PyTorch seed APIs + return int.from_bytes(digest.digest()[:8], "big") % (2**63 - 1) + + +def validate_suite_config() -> None: + """Check configuration relationships which would otherwise fail much later.""" + + if not isinstance(ROOT_SEED, int) or isinstance(ROOT_SEED, bool) or ROOT_SEED < 0: + raise ValueError("ROOT_SEED must be a non-negative integer") + if not RESULTS_DIR.is_absolute(): + raise ValueError("RESULTS_DIR must be an absolute path") + if DEFAULT_DEVICE not in ALLOWED_DEVICES: + raise ValueError("DEFAULT_DEVICE must be listed in ALLOWED_DEVICES") + if set(DEFAULT_PROFILE_ORDER) != set(EXECUTION_PROFILES): + raise ValueError("DEFAULT_PROFILE_ORDER must contain each execution profile once") + if len(DEFAULT_PROFILE_ORDER) != len(set(DEFAULT_PROFILE_ORDER)): + raise ValueError("DEFAULT_PROFILE_ORDER contains duplicate profiles") + if set(DEFAULT_PROFILES_BY_DEVICE) != set(ALLOWED_DEVICES): + raise ValueError("DEFAULT_PROFILES_BY_DEVICE must cover every allowed device") + for device, profile_ids in DEFAULT_PROFILES_BY_DEVICE.items(): + if not profile_ids or set(profile_ids) - set(EXECUTION_PROFILES): + raise ValueError(f"Invalid default profiles for {device}") + expected_order = tuple( + profile_id for profile_id in DEFAULT_PROFILE_ORDER if profile_id in profile_ids + ) + if tuple(profile_ids) != expected_order: + raise ValueError(f"Default profiles for {device} must use the central profile order") + enabled_levels = tuple(EXECUTION["enabled_levels"]) + if not enabled_levels: + raise ValueError("EXECUTION enabled_levels must not be empty") + if set(enabled_levels) - set(LEVELS): + raise ValueError("EXECUTION enabled_levels contains an unknown level") + expected_enabled_order = tuple(level for level in LEVELS if level in enabled_levels) + if enabled_levels != expected_enabled_order: + raise ValueError("EXECUTION enabled_levels must use the central LEVELS order") + + linear = MODEL_ARCHITECTURES["linear"] + mlp = MODEL_ARCHITECTURES["mlp"] + if int(linear["input_features"]) != int(mlp["input_features"]): + raise ValueError("The Level 0 linear and MLP inputs must use the same width") + if int(linear["output_features"]) != int(mlp["output_features"]): + raise ValueError("The Level 0 linear and MLP outputs must use the same class count") + + attention = MODEL_ARCHITECTURES["attention"] + transformer = MODEL_ARCHITECTURES["sms_transformer"] + if attention["embedding_size"] % attention["heads"] != 0: + raise ValueError("Attention embedding size must be divisible by its head count") + if transformer["embedding_size"] % transformer["heads"] != 0: + raise ValueError("Transformer embedding size must be divisible by its head count") + if int(transformer["sequence_length"]) < 2: + raise ValueError("Transformer sequence length must be at least two") + if int(transformer["vocabulary_size"]) < 8: + raise ValueError("Transformer vocabulary size must be at least eight") + if float(transformer["dropout"]) != 0.0: + raise ValueError("The fixed Transformer workload must keep dropout disabled") + if str(transformer["activation"]) not in {"relu", "gelu"}: + raise ValueError("Transformer activation must be relu or gelu") + + level_0 = LEVEL_0_DEMOS + if str(level_0["summary_filename"]) != "level_0_summary.csv": + raise ValueError("Level 0 summary filename must remain level_0_summary.csv") + if int(level_0["prediction_preview_count"]) < 1: + raise ValueError("Level 0 prediction preview count must be positive") + linear_demo = level_0["linear"] + if linear_demo["optimiser"] != "sgd": + raise ValueError("The Level 0 linear example must use SGD") + if float(linear_demo["learning_rate"]) <= 0: + raise ValueError("The Level 0 linear learning rate must be positive") + + if LEVEL_3_TESTS["optimizer_steps"] < 1: + raise ValueError("Level 3 optimizer_steps must be at least one") + if set(LEVEL_3_TESTS["sgd_cases"]) != {"plain_sgd", "momentum", "nesterov", "weight_decay"}: + raise ValueError("Level 3 SGD cases do not match the catalogue") + if set(LEVEL_3_TESTS["adamw_cases"]) != {"default_betas", "custom_betas", "weight_decay", "amsgrad"}: + raise ValueError("Level 3 AdamW cases do not match the catalogue") + + if set(PRECISION_MODE_CASES) != {"fp32_strict", "fp32_high", "fp32_medium"}: + raise ValueError("Level 4 precision-mode cases do not match the catalogue") + valid_matmul_precisions = {"highest", "high", "medium"} + for case_name, settings in PRECISION_MODE_CASES.items(): + if settings["float32_matmul_precision"] not in valid_matmul_precisions: + raise ValueError(f"Invalid float32 matmul precision for {case_name}") + if not isinstance(settings["allow_tf32"], bool): + raise ValueError(f"allow_tf32 must be Boolean for {case_name}") + + scaler = LEVEL_4_TESTS["amp"]["grad_scaler"] + if float(LEVEL_4_TESTS["amp"]["learning_rate"]) <= 0: + raise ValueError("Level 4 AMP learning rate must be positive") + if float(scaler["initial_scale"]) <= 0: + raise ValueError("Level 4 GradScaler initial scale must be positive") + if float(scaler["growth_factor"]) <= 1: + raise ValueError("Level 4 GradScaler growth factor must be greater than one") + if not 0 < float(scaler["backoff_factor"]) < 1: + raise ValueError("Level 4 GradScaler backoff factor must be between zero and one") + if int(scaler["growth_interval"]) < 1: + raise ValueError("Level 4 GradScaler growth interval must be at least one") + + block_steps = int(BLOCK_TESTS["optimisation_steps"]) + block_checkpoints = tuple(int(value) for value in BLOCK_TESTS["checkpoint_steps"]) + if block_steps < 1: + raise ValueError("Level 5 optimisation_steps must be at least one") + if tuple(sorted(set(block_checkpoints))) != block_checkpoints: + raise ValueError("Level 5 checkpoint_steps must be sorted and unique") + if block_checkpoints[0] != 0 or block_checkpoints[-1] != block_steps: + raise ValueError( + "Level 5 checkpoint_steps must start at 0 and end at optimisation_steps" + ) + expected_block_models = {"mlp", "cnn", "attention"} + if set(BLOCK_TESTS["model_optimizers"]) != expected_block_models: + raise ValueError("Level 5 model optimiser choices do not match the catalogue") + if set(BLOCK_TESTS["model_optimizers"].values()) - {"sgd", "adamw"}: + raise ValueError("Level 5 model optimisers must be sgd or adamw") + if float(BLOCK_TESTS["sgd"]["learning_rate"]) <= 0: + raise ValueError("Level 5 SGD learning rate must be positive") + if float(BLOCK_TESTS["adamw"]["learning_rate"]) <= 0: + raise ValueError("Level 5 AdamW learning rate must be positive") + + serialisation = LEVEL_4_TESTS["serialisation"] + if float(serialisation["learning_rate"]) <= 0: + raise ValueError("Level 4 serialisation learning rate must be positive") + if int(serialisation["checkpoint_step"]) < 0: + raise ValueError("Level 4 checkpoint step must be non-negative") + if not str(serialisation["checkpoint_version"]): + raise ValueError("Level 4 checkpoint version must not be empty") + + early_workload_steps = tuple( + int(value) for value in WORKLOAD_CAPTURE["early_parameter_state_steps"] + ) + if tuple(sorted(set(early_workload_steps))) != early_workload_steps: + raise ValueError("Level 6 early parameter steps must be sorted and unique") + if not early_workload_steps or early_workload_steps[0] != 0: + raise ValueError("Level 6 early parameter steps must start at zero") + + expected_workloads = { + "tabular_classification", + "image_classification", + "transformer_sequence_classification", + } + if set(WORKLOADS) != expected_workloads: + raise ValueError("Level 6 workload names do not match the catalogue") + + for workload_name, workload in WORKLOADS.items(): + steps = int(workload["training_steps"]) + checkpoints = tuple(int(value) for value in workload["checkpoint_steps"]) + if steps < 1: + raise ValueError(f"{workload_name} training_steps must be positive") + if tuple(sorted(set(checkpoints))) != checkpoints: + raise ValueError(f"{workload_name} checkpoint_steps must be sorted and unique") + if checkpoints[0] != 0 or checkpoints[-1] != steps: + raise ValueError( + f"{workload_name} checkpoint_steps must start at 0 and end at training_steps" + ) + if set(early_workload_steps) - set(checkpoints): + raise ValueError( + f"{workload_name} must include every early parameter step as a checkpoint" + ) + if workload["dataset_id"] not in DATASET_PATHS: + raise ValueError(f"{workload_name} refers to an unknown dataset") + if int(workload["batch_size"]) < 1: + raise ValueError(f"{workload_name} batch_size must be positive") + if int(workload["evaluation_batch_size"]) < 1: + raise ValueError(f"{workload_name} evaluation_batch_size must be positive") + if float(workload["learning_rate"]) <= 0: + raise ValueError(f"{workload_name} learning_rate must be positive") + if workload["optimiser"] not in {"sgd", "adamw"}: + raise ValueError(f"{workload_name} optimiser must be sgd or adamw") + + +validate_suite_config() diff --git a/pytorch/pytorch_extended_tests/config/test_catalogue.py b/pytorch/pytorch_extended_tests/config/test_catalogue.py new file mode 100644 index 0000000..969e5bb --- /dev/null +++ b/pytorch/pytorch_extended_tests/config/test_catalogue.py @@ -0,0 +1,666 @@ +"""Stable catalogue of test files, cases and expected outputs. + +The catalogue is intentionally free of numerical tolerances. CI only records raw +outputs for now, and the later comparison harness will attach policies to these +stable test, case and output IDs. +""" + +from __future__ import annotations + +from dataclasses import asdict, dataclass +from typing import Final + +from config.suite_config import ( + DATASET_PATHS, + DEFAULT_PROFILE_ORDER, + EXECUTION_PROFILES, + LEVELS, + TEST_CATALOGUE_VERSION, +) + + +OUTPUT_KINDS: Final = { + "exact_record", + "scalar", + "tensor", + "tensor_map", + "series", + "invariant_bundle", +} +OUTPUT_IMPORTANCE: Final = {"required", "diagnostic", "informational"} + +ALL_CONTROLLED_PROFILES: Final = ( + "controlled_fp64", + "controlled_fp32", + "controlled_fp16", + "controlled_bfloat16", +) +FP32_FP64_PROFILES: Final = ("controlled_fp64", "controlled_fp32") +FP32_PROFILE: Final = ("controlled_fp32",) +TRAINING_PROFILES: Final = ("controlled_fp32", "amp_fp16", "amp_bfloat16") +AMP_FP16_PROFILE: Final = ("amp_fp16",) +AMP_BFLOAT16_PROFILE: Final = ("amp_bfloat16",) + + +@dataclass(frozen=True, slots=True) +class OutputSpec: + """One named output produced by every successful case in a test file.""" + + output_id: str + kind: str + importance: str + description: str + + +@dataclass(frozen=True, slots=True) +class TestSpec: + """Metadata needed to plan and validate one test module.""" + + test_id: str + level: str + category: str + module: str + case_ids: tuple[str, ...] + profile_ids: tuple[str, ...] + dataset_ids: tuple[str, ...] + outputs: tuple[OutputSpec, ...] + required_capabilities: tuple[str, ...] = () + unsupported_is_allowed: bool = True + + +def output( + output_id: str, + kind: str, + importance: str, + description: str, +) -> OutputSpec: + return OutputSpec(output_id, kind, importance, description) + + +STRUCTURE_AND_VALUES: Final = ( + output("structure", "exact_record", "required", "Shapes, dtypes and layout details"), + output("values", "tensor_map", "required", "Named result tensors"), +) + +FORWARD_AND_BACKWARD: Final = ( + output("forward", "tensor_map", "required", "Forward outputs and selected activations"), + output("loss", "scalar", "required", "Scalar loss used for backward"), + output("input_gradients", "tensor_map", "required", "Gradients with respect to inputs"), + output("parameter_gradients", "tensor_map", "required", "Named parameter gradients"), +) + +OPTIMISER_OUTPUTS: Final = ( + output("loss_series", "series", "required", "Loss at the initial and updated steps"), + output("parameter_states", "tensor_map", "required", "Named parameters at each step"), + output("parameter_gradients", "tensor_map", "required", "Named gradients at each step"), + output("optimizer_states", "tensor_map", "required", "Named optimiser state tensors"), +) + +BLOCK_OUTPUTS: Final = ( + output("initial_forward", "tensor_map", "required", "Initial block output and activations"), + output("loss_series", "series", "required", "Loss through the short optimisation run"), + output("first_gradients", "tensor_map", "required", "All gradients from the first backward pass"), + output("parameter_states", "tensor_map", "required", "Parameters at configured checkpoints"), + output("evaluation_outputs", "tensor_map", "required", "Fixed-batch outputs at checkpoints"), +) + +LEVEL_0_OUTPUTS: Final = ( + *BLOCK_OUTPUTS, + output( + "summary", + "exact_record", + "required", + "Small human-facing summary used to build level_0_summary.csv", + ), +) + +WORKLOAD_OUTPUTS: Final = ( + output("initial_logits", "tensor", "required", "Evaluation logits before training"), + output("initial_loss", "scalar", "required", "Evaluation loss before training"), + output("training_loss", "series", "required", "Training loss at every optimisation step"), + output("training_batch_indices", "tensor_map", "required", "Exact source rows used by each training step"), + output("checkpoint_logits", "tensor_map", "required", "Evaluation logits at configured checkpoints"), + output("checkpoint_metrics", "tensor_map", "required", "Evaluation loss and accuracy at each checkpoint"), + output("first_gradients", "tensor_map", "required", "All parameter gradients from the first step"), + output("early_parameter_states", "tensor_map", "required", "Parameters from the early checkpoints"), + output("optimizer_states", "tensor_map", "diagnostic", "Optimiser state at configured checkpoints"), + output("final_parameters", "tensor_map", "diagnostic", "Final named model parameters"), + output("final_predictions", "tensor", "diagnostic", "Final predicted classes"), + output("final_metrics", "exact_record", "required", "Loss, accuracy and sample counts"), +) + + +TEST_CATALOGUE: Final = ( + TestSpec( + test_id="demo.model_workloads", + level="level_0_smoke_workloads", + category="Quick model demonstrations", + module="cases.level_0_smoke_workloads.test_demo_workloads", + case_ids=( + "linear_classifier", + "mlp_classifier", + "cnn_classifier", + "attention_classifier", + ), + profile_ids=TRAINING_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=LEVEL_0_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="core.tensor_creation_and_dtypes", + level="level_1_core_tensor", + category="Tensor creation and dtypes", + module="cases.level_1_core_tensor.test_tensor_creation_and_dtypes", + case_ids=( + "from_numpy", + "zeros_ones_full", + "scalar_construction", + "dtype_conversion", + "device_round_trip", + "contiguous_and_non_contiguous", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=STRUCTURE_AND_VALUES, + ), + TestSpec( + test_id="core.elementwise_arithmetic", + level="level_1_core_tensor", + category="Elementwise arithmetic", + module="cases.level_1_core_tensor.test_elementwise_arithmetic", + case_ids=( + "add", + "subtract", + "multiply", + "true_divide", + "floor_divide", + "remainder", + "power", + "minimum_and_maximum", + "clamp", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Results for each numerical input class"),), + ), + TestSpec( + test_id="core.transcendental_functions", + level="level_1_core_tensor", + category="Mathematical functions", + module="cases.level_1_core_tensor.test_transcendental_functions", + case_ids=( + "exp_and_log", + "sqrt_and_rsqrt", + "trigonometric", + "hyperbolic", + "sigmoid_family", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Named function outputs"),), + ), + TestSpec( + test_id="core.indexing_and_shape", + level="level_1_core_tensor", + category="Indexing and shape operations", + module="cases.level_1_core_tensor.test_indexing_and_shape", + case_ids=( + "basic_slicing", + "advanced_indexing", + "boolean_masking", + "gather", + "scatter", + "reshape_and_view", + "transpose_and_permute", + "concatenate_and_stack", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=STRUCTURE_AND_VALUES, + ), + TestSpec( + test_id="core.type_promotion", + level="level_1_core_tensor", + category="Type promotion", + module="cases.level_1_core_tensor.test_type_promotion", + case_ids=( + "integer_and_float", + "float_widths", + "scalar_and_tensor", + "boolean_and_numeric", + "complex_and_real", + ), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=STRUCTURE_AND_VALUES, + ), + TestSpec( + test_id="kernels.reductions_and_statistics", + level="level_2_numerical_kernels", + category="Reductions and statistics", + module="cases.level_2_numerical_kernels.test_reductions_and_statistics", + case_ids=( + "sum_and_mean", + "variance_and_standard_deviation", + "minimum_and_maximum", + "cumulative_operations", + "vector_and_matrix_norms", + "cancellation_heavy_sum", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Scalar and tensor reduction outputs"),), + ), + TestSpec( + test_id="kernels.matrix_multiplication", + level="level_2_numerical_kernels", + category="Matrix operations", + module="cases.level_2_numerical_kernels.test_matrix_multiplication", + case_ids=( + "matrix_vector", + "matrix_matrix", + "batched_matrix_matrix", + "einsum", + "inner_and_outer", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Matrix operation outputs"),), + ), + TestSpec( + test_id="kernels.convolution", + level="level_2_numerical_kernels", + category="Convolution", + module="cases.level_2_numerical_kernels.test_convolution", + case_ids=("conv1d", "conv2d", "grouped_conv2d", "conv3d"), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Convolution outputs"),), + ), + TestSpec( + test_id="kernels.pooling", + level="level_2_numerical_kernels", + category="Pooling", + module="cases.level_2_numerical_kernels.test_pooling", + case_ids=( + "max_pool1d", + "max_pool2d", + "average_pool2d", + "adaptive_average_pool2d", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=( + output("values", "tensor_map", "required", "Pooling outputs"), + output("indices", "tensor_map", "required", "Indices returned by max pooling"), + ), + ), + TestSpec( + test_id="linalg.linear_solve", + level="level_2_numerical_kernels", + category="Linear algebra: solves", + module="cases.level_2_numerical_kernels.test_linear_solve", + case_ids=( + "well_conditioned_solve", + "ill_conditioned_solve", + "matrix_inverse", + "cholesky_solve", + ), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=( + output("solutions", "tensor_map", "required", "Calculated solutions or inverses"), + output("residuals", "tensor_map", "required", "Residuals against the original equations"), + ), + ), + TestSpec( + test_id="linalg.factorisations", + level="level_2_numerical_kernels", + category="Linear algebra: factorisations", + module="cases.level_2_numerical_kernels.test_factorisations", + case_ids=("qr", "svd", "cholesky"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("invariants", "invariant_bundle", "required", "Factors, reconstructions and residuals"),), + ), + TestSpec( + test_id="linalg.eigensystems", + level="level_2_numerical_kernels", + category="Linear algebra: eigensystems", + module="cases.level_2_numerical_kernels.test_eigensystems", + case_ids=("symmetric_distinct", "symmetric_degenerate"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("invariants", "invariant_bundle", "required", "Eigenvalues, residuals and subspace projectors"),), + ), + TestSpec( + test_id="kernels.fft", + level="level_2_numerical_kernels", + category="FFT and signal operations", + module="cases.level_2_numerical_kernels.test_fft", + case_ids=("fft_1d", "fft_2d", "real_fft", "inverse_round_trip"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=( + output("transforms", "tensor_map", "required", "Forward transform outputs"), + output("reconstructions", "tensor_map", "required", "Inverse-transform reconstructions"), + ), + ), + TestSpec( + test_id="kernels.special_functions", + level="level_2_numerical_kernels", + category="Special mathematical functions", + module="cases.level_2_numerical_kernels.test_special_functions", + case_ids=( + "erf_family", + "gamma_family", + "softmax_and_log_softmax", + "logit_and_expit", + ), + profile_ids=ALL_CONTROLLED_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=(output("results", "tensor_map", "required", "Named special-function outputs"),), + ), + TestSpec( + test_id="autograd.elementwise", + level="level_3_autograd_and_learning", + category="Autograd", + module="cases.level_3_autograd_and_learning.test_autograd_elementwise", + case_ids=("scalar_chain", "branching_graph", "reused_tensor", "reduction_graph"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=FORWARD_AND_BACKWARD, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="autograd.matrix_operations", + level="level_3_autograd_and_learning", + category="Autograd", + module="cases.level_3_autograd_and_learning.test_autograd_matrix_ops", + case_ids=("matrix_multiplication", "batched_matrix_multiplication", "convolution", "linear_solve"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1",), + outputs=FORWARD_AND_BACKWARD, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="nn.linear_and_convolution", + level="level_3_autograd_and_learning", + category="Neural-network layers", + module="cases.level_3_autograd_and_learning.test_nn_linear_and_conv", + case_ids=("linear", "conv1d", "conv2d", "conv3d", "embedding"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("numerical_inputs_v1", "model_inputs_v1"), + outputs=FORWARD_AND_BACKWARD, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="nn.normalisation", + level="level_3_autograd_and_learning", + category="Normalisation", + module="cases.level_3_autograd_and_learning.test_normalisation", + case_ids=("batch_norm_training", "batch_norm_evaluation", "layer_norm", "group_norm"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=( + *FORWARD_AND_BACKWARD, + output("module_state", "tensor_map", "required", "Named parameters and persistent normalisation state"), + ), + required_capabilities=("autograd",), + ), + TestSpec( + test_id="nn.attention", + level="level_3_autograd_and_learning", + category="Attention", + module="cases.level_3_autograd_and_learning.test_attention", + case_ids=("scaled_dot_product", "masked_scaled_dot_product", "multihead_attention"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=FORWARD_AND_BACKWARD, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="nn.losses", + level="level_3_autograd_and_learning", + category="Loss functions", + module="cases.level_3_autograd_and_learning.test_losses", + case_ids=("mse", "cross_entropy", "binary_cross_entropy_with_logits", "kl_divergence"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=( + output("losses", "tensor_map", "required", "Losses for each reduction mode"), + output("input_gradients", "tensor_map", "required", "Gradients with respect to loss inputs"), + ), + required_capabilities=("autograd",), + ), + TestSpec( + test_id="optimizers.sgd", + level="level_3_autograd_and_learning", + category="Optimisers", + module="cases.level_3_autograd_and_learning.test_optimizer_sgd", + case_ids=("plain_sgd", "momentum", "nesterov", "weight_decay"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=OPTIMISER_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="optimizers.adamw", + level="level_3_autograd_and_learning", + category="Optimisers", + module="cases.level_3_autograd_and_learning.test_optimizer_adamw", + case_ids=("default_betas", "custom_betas", "weight_decay", "amsgrad"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=OPTIMISER_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="precision.fp32_modes", + level="level_4_precision_and_execution", + category="Backend precision modes", + module="cases.level_4_precision_and_execution.test_fp32_precision_modes", + case_ids=("fp32_strict", "fp32_high", "fp32_medium"), + profile_ids=FP32_PROFILE, + dataset_ids=("numerical_inputs_v1",), + outputs=( + output("matrix_results", "tensor_map", "required", "Matrix results under each precision mode"), + output("convolution_results", "tensor_map", "required", "Convolution results under each precision mode"), + output("applied_settings", "exact_record", "required", "Precision settings applied for the case"), + ), + ), + TestSpec( + test_id="precision.amp_fp16", + level="level_4_precision_and_execution", + category="Mixed precision", + module="cases.level_4_precision_and_execution.test_amp_fp16", + case_ids=("forward", "backward", "optimizer_step", "loss_scaler_overflow"), + profile_ids=AMP_FP16_PROFILE, + dataset_ids=("model_inputs_v1",), + outputs=( + *FORWARD_AND_BACKWARD, + output("scaler_state", "exact_record", "required", "Gradient-scaler values and overflow decisions"), + output("updated_parameters", "tensor_map", "required", "Parameters after the case, including an unchanged state when no step is requested"), + ), + required_capabilities=("amp_fp16",), + ), + TestSpec( + test_id="precision.amp_bfloat16", + level="level_4_precision_and_execution", + category="Mixed precision", + module="cases.level_4_precision_and_execution.test_amp_bfloat16", + case_ids=("forward", "backward", "optimizer_step"), + profile_ids=AMP_BFLOAT16_PROFILE, + dataset_ids=("model_inputs_v1",), + outputs=( + *FORWARD_AND_BACKWARD, + output("updated_parameters", "tensor_map", "required", "Parameters after the case, including an unchanged state when no step is requested"), + ), + required_capabilities=("amp_bfloat16",), + ), + TestSpec( + test_id="execution.serialisation_roundtrip", + level="level_4_precision_and_execution", + category="Serialisation", + module="cases.level_4_precision_and_execution.test_serialisation_roundtrip", + case_ids=("tensor", "model_state", "optimizer_state", "complete_checkpoint"), + profile_ids=FP32_FP64_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=( + output("structure", "exact_record", "required", "Keys, dtypes and shapes after loading"), + output("loaded_values", "tensor_map", "required", "Loaded tensor values"), + output("post_load_forward", "tensor_map", "required", "Model outputs after loading"), + ), + required_capabilities=("serialisation",), + ), + TestSpec( + test_id="blocks.mlp", + level="level_5_composite_models", + category="MLP models", + module="cases.level_5_composite_models.test_mlp_block", + case_ids=("forward_backward_and_updates",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=BLOCK_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="blocks.cnn", + level="level_5_composite_models", + category="CNN models", + module="cases.level_5_composite_models.test_cnn_block", + case_ids=("forward_backward_and_updates",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=BLOCK_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="blocks.attention", + level="level_5_composite_models", + category="Attention models", + module="cases.level_5_composite_models.test_attention_block", + case_ids=("forward_backward_and_updates",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("model_inputs_v1",), + outputs=BLOCK_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="workloads.tabular_classification", + level="level_6_real_workloads", + category="Tabular classification", + module="cases.level_6_real_workloads.test_tabular_training_workload", + case_ids=("breast_cancer_mlp",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("breast_cancer_wisconsin_v1", "model_inputs_v1"), + outputs=WORKLOAD_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="workloads.image_classification", + level="level_6_real_workloads", + category="Image classification", + module="cases.level_6_real_workloads.test_cnn_training_workload", + case_ids=("fashion_mnist_cnn",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("fashion_mnist_v1", "model_inputs_v1"), + outputs=WORKLOAD_OUTPUTS, + required_capabilities=("autograd",), + ), + TestSpec( + test_id="workloads.transformer_sequence_classification", + level="level_6_real_workloads", + category="Transformer sequence modelling", + module="cases.level_6_real_workloads.test_transformer_training_workload", + case_ids=("sms_spam_transformer",), + profile_ids=TRAINING_PROFILES, + dataset_ids=("sms_spam_v1", "model_inputs_v1"), + outputs=WORKLOAD_OUTPUTS, + required_capabilities=("autograd",), + ), +) + + +def validate_test_catalogue() -> None: + """Fail early when catalogue entries disagree with the central configuration.""" + + test_ids: set[str] = set() + modules: set[str] = set() + + for spec in TEST_CATALOGUE: + if spec.test_id in test_ids: + raise ValueError(f"Duplicate test ID: {spec.test_id}") + test_ids.add(spec.test_id) + + if spec.module in modules: + raise ValueError(f"Duplicate test module: {spec.module}") + modules.add(spec.module) + + if spec.level not in LEVELS: + raise ValueError(f"Unknown level for {spec.test_id}: {spec.level}") + if not spec.module.startswith("cases."): + raise ValueError(f"Test module must be in the cases package: {spec.module}") + if not spec.case_ids or len(spec.case_ids) != len(set(spec.case_ids)): + raise ValueError(f"Case IDs must be non-empty and unique for {spec.test_id}") + if not spec.profile_ids: + raise ValueError(f"No profiles configured for {spec.test_id}") + + unknown_profiles = set(spec.profile_ids) - set(EXECUTION_PROFILES) + if unknown_profiles: + raise ValueError(f"Unknown profiles for {spec.test_id}: {sorted(unknown_profiles)}") + + unknown_datasets = set(spec.dataset_ids) - set(DATASET_PATHS) + if unknown_datasets: + raise ValueError(f"Unknown datasets for {spec.test_id}: {sorted(unknown_datasets)}") + + output_ids: set[str] = set() + for output_spec in spec.outputs: + if output_spec.output_id in output_ids: + raise ValueError( + f"Duplicate output ID {output_spec.output_id!r} for {spec.test_id}" + ) + output_ids.add(output_spec.output_id) + if output_spec.kind not in OUTPUT_KINDS: + raise ValueError( + f"Unknown output kind {output_spec.kind!r} for {spec.test_id}" + ) + if output_spec.importance not in OUTPUT_IMPORTANCE: + raise ValueError( + f"Unknown output importance {output_spec.importance!r} for {spec.test_id}" + ) + + if tuple(DEFAULT_PROFILE_ORDER) != tuple(EXECUTION_PROFILES): + raise ValueError("Execution profile dictionary order must match DEFAULT_PROFILE_ORDER") + + +def catalogue_as_dict() -> dict[str, object]: + """Return a JSON-serialisable catalogue snapshot for result manifests.""" + + return { + "catalogue_version": TEST_CATALOGUE_VERSION, + "tests": [asdict(spec) for spec in TEST_CATALOGUE], + } + + +def get_test_spec(test_id: str) -> TestSpec: + """Return one catalogue entry by its stable test ID.""" + + try: + return TESTS_BY_ID[test_id] + except KeyError as exc: + raise KeyError(f"Unknown test ID: {test_id}") from exc + + +def tests_for_level(level: str) -> tuple[TestSpec, ...]: + """Return catalogue entries for one level in their declared order.""" + + if level not in LEVELS: + raise KeyError(f"Unknown test level: {level}") + return tuple(spec for spec in TEST_CATALOGUE if spec.level == level) + + +validate_test_catalogue() + +TESTS_BY_ID: Final = {spec.test_id: spec for spec in TEST_CATALOGUE} diff --git a/pytorch/pytorch_extended_tests/datasets/FASHION_MNIST_LICENSE.txt b/pytorch/pytorch_extended_tests/datasets/FASHION_MNIST_LICENSE.txt new file mode 100644 index 0000000..6bc221f --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/FASHION_MNIST_LICENSE.txt @@ -0,0 +1,7 @@ +The MIT License (MIT) Copyright © 2017 Zalando SE, https://tech.zalando.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pytorch/pytorch_extended_tests/datasets/README.md b/pytorch/pytorch_extended_tests/datasets/README.md new file mode 100644 index 0000000..f9ef045 --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/README.md @@ -0,0 +1,216 @@ +# Datasets for `pytorch_extended_tests` + +This directory contains the fixed inputs used by the extended tests. + +CI and normal test runs use only `datasets/prepared/` and `dataset_manifest.json`. The source archives under `datasets/downloaded/` are needed only while creating or deliberately regenerating the Level 6 prepared data. After a successful full preparation, the downloaded archives can be deleted. + +The CI jobs shouldn't download or regenerate data. (though we should move the prepared data out of this repo and to some CI-readable folder) + +## Directory layout + +```text +datasets/ +├── generate_datasets.py +├── dataset_manifest.json +├── THIRD_PARTY_DATASETS.md +├── licenses/ +│ └── FASHION_MNIST_LICENSE.txt +├── downloaded/ # temporary source files, not required by CI +│ ├── breast_cancer_wisconsin/ +│ ├── fashion_mnist/ +│ └── sms_spam_collection/ +└── prepared/ + ├── numerical_inputs_v1/ + ├── model_inputs_v1/ + ├── breast_cancer_wisconsin_v1/ + ├── fashion_mnist_v1/ + └── sms_spam_v1/ +``` + +`prepared/` contains deterministic NumPy files used directly by the tests. The generator writes deterministic `.npz` archives, so running it again with the same source files, configuration and NumPy behaviour should produce the same file hashes + +`model_inputs_v1/` includes the fixed batches and initial states for the Level 0 linear, MLP, CNN and attention examples as well as the Level 6 Transformer state + +## Required suite configuration + +The generator reads the seed and generation choices from the root-relative `config/suite_config.py` file. It expects at least the following values: + +```python +SUITE_VERSION = "v1" +ROOT_SEED = 42 + +DATASET_GENERATION = { + "breast_cancer_wisconsin": { + "evaluation_fraction": 0.2, + }, + "fashion_mnist": { + "training_samples": 4096, + "evaluation_samples": 1024, + }, + "sms_spam": { + "evaluation_fraction": 0.2, + "max_sequence_length": 64, + "max_vocabulary_size": 4096, + "minimum_token_frequency": 1, + }, + "numerical_inputs": { + "vector_length": 257, + "reduction_rows": 127, + "reduction_columns": 61, + "matrix_m": 127, + "matrix_k": 61, + "matrix_n": 89, + "matrix_batch_size": 3, + }, + "model_inputs": { + "batch_size": 32, + "linear_input_features": 30, + "linear_output_features": 2, + "mlp_input_features": 30, + "mlp_hidden_features": [32, 16], + "mlp_output_features": 2, + "cnn_channels": [1, 8, 16], + "cnn_classes": 10, + "attention_sequence_length": 16, + "attention_embedding_size": 32, + "attention_heads": 4, + "transformer_feedforward_size": 64, + "transformer_layers": 2, + }, +} +``` + +These values live in `suite_config.py`. Do not add a separate seed to the generator + +## Downloaded datasets + +### Breast Cancer Wisconsin (Diagnostic) + +This is used for the tabular classification workload + +- Dataset page: +- Direct download: +- DOI: +- Licence: Creative Commons Attribution 4.0 + +Save the downloaded archive as: + +```text +datasets/downloaded/breast_cancer_wisconsin/breast_cancer_wisconsin_diagnostic.zip +``` + +### Fashion-MNIST + +This is used for the image classification workload + +- Project page: +- Licence: MIT + +Download these four official files: + +- +- +- +- + +Save them without renaming under: + +```text +datasets/downloaded/fashion_mnist/ +``` + +### SMS Spam Collection + +This is used for the small Transformer workload + +- Dataset page: +- Direct download: +- DOI: +- Licence: Creative Commons Attribution 4.0 + +Save the downloaded archive as: + +```text +datasets/downloaded/sms_spam_collection/sms_spam_collection.zip +``` + +## Preparing Levels 0–5 only + +No external downloads are needed: + +```bash +python datasets/generate_datasets.py --only generated --force +``` + +This creates the final prepared numerical/model inputs used directly by Levels 0–5 + +## Preparing Level 6 + +1. Download the three sources into the paths above +2. Run the complete generator while those files are present: + +```bash +python datasets/generate_datasets.py --force +``` + +3. Check that these directories and the manifest were updated: + +```text +datasets/prepared/breast_cancer_wisconsin_v1/ +datasets/prepared/fashion_mnist_v1/ +datasets/prepared/sms_spam_v1/ +datasets/dataset_manifest.json +``` + +4. Commit the prepared directories, manifest and third-party notices +5. Delete `datasets/downloaded/` contents if they should not be committed + +Normal Level 6 execution validates the prepared files against the manifest and does not require the downloaded archives + +To deliberately check the source archives as well, run: + +```bash +python tools/validate_setup.py \ + --levels level_6_real_workloads \ + --profiles controlled_fp32 +``` + +with `EXECUTION["validate_downloaded_sources"]` temporarily enabled, or call the validation API with source checking enabled + +## Regenerating generated inputs after deleting downloads + +This remains safe: + +```bash +python datasets/generate_datasets.py --only generated --force +``` + +The generator preserves the recorded Level 6 source provenance in the manifest when those source archives are absent and were not selected for regeneration + +Do not run the full generator after deleting the downloads. Full Level 6 regeneration needs the source files again + +## Manifest behaviour + +`dataset_manifest.json` records: + +- the configured root seed and suite version +- source URLs, licences and source hashes recorded during preparation +- SHA-256 hashes and sizes for every prepared file +- the generation timestamp + +The timestamp is informational and is not used to generate values + +## Dependencies + +The generator deliberately has a small dependency surface: + +- Python 3.10 or newer +- NumPy + +It does not require PyTorch, pandas, scikit-learn, torchvision or a Kaggle client + +## Attribution and repository use + +See [`THIRD_PARTY_DATASETS.md`](THIRD_PARTY_DATASETS.md) for the attribution, licence links, transformation notes and the SMS privacy warning + +The UCI datasets are listed as CC BY 4.0 and Fashion-MNIST is MIT licensed. Keep the notices with redistributed prepared data and check the organisation's policies before publishing third-party data diff --git a/pytorch/pytorch_extended_tests/datasets/THIRD_PARTY_DATASETS.md b/pytorch/pytorch_extended_tests/datasets/THIRD_PARTY_DATASETS.md new file mode 100644 index 0000000..1d3c39b --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/THIRD_PARTY_DATASETS.md @@ -0,0 +1,50 @@ +# Third-party datasets + +The prepared Level 6 files are transformed copies of the datasets below + +Keep this file, `dataset_manifest.json` and the Fashion-MNIST licence notice when committing or redistributing the prepared data + +This is a record of the licences and transformations used by this repository, not legal advice + +## Breast Cancer Wisconsin (Diagnostic) + +- **Creators:** William Wolberg, Olvi Mangasarian, Nick Street and W. Street +- **Publisher:** UCI Machine Learning Repository +- **Dataset page:** https://archive.ics.uci.edu/dataset/17/breast%2Bcancer%2Bwisconsin%2Bdiagnostic +- **DOI:** https://doi.org/10.24432/C5DW2B +- **Licence:** Creative Commons Attribution 4.0 International +- **Licence text:** https://creativecommons.org/licenses/by/4.0/ + +The prepared version removes the identifier column, maps the diagnosis to integer labels, creates a fixed stratified train/evaluation split, and standardises features using the training split statistics + +Suggested citation: + +> Wolberg, W., Mangasarian, O., Street, N., & Street, W. (1993). Breast Cancer Wisconsin (Diagnostic) [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5DW2B + +## Fashion-MNIST + +- **Creator:** Zalando Research / Zalando SE +- **Project page:** https://github.com/zalandoresearch/fashion-mnist +- **Licence:** MIT +- **Licence notice:** `datasets/licenses/FASHION_MNIST_LICENSE.txt` + +The prepared version parses the original IDX files, selects fixed class-balanced train/evaluation subsets, converts images to `float32` values in `[0, 1]`, and applies no data augmentation + +The original copyright and MIT permission notice must remain with redistributed copies or substantial portions + +## SMS Spam Collection + +- **Creators:** Tiago Almeida and Jos Hidalgo +- **Publisher:** UCI Machine Learning Repository +- **Dataset page:** https://archive.ics.uci.edu/dataset/228/sms%2Bspam%2Bcollection +- **DOI:** https://doi.org/10.24432/C5CC84 +- **Licence:** Creative Commons Attribution 4.0 International +- **Licence text:** https://creativecommons.org/licenses/by/4.0/ + +The prepared version creates a fixed stratified train/evaluation split, normalises and tokenises the messages, builds the vocabulary from the training split only, and stores padded token IDs, masks and labels + +Suggested citation: + +> Almeida, T. & Hidalgo, J. (2011). SMS Spam Collection [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5CC84 + +The source contains real message text. The prepared repository files use token IDs and a generated vocabulary, but they are still derived from that text. Check the organisation's privacy and repository rules as well as the dataset licence before publishing them diff --git a/pytorch/pytorch_extended_tests/datasets/dataset_manifest.json b/pytorch/pytorch_extended_tests/datasets/dataset_manifest.json new file mode 100644 index 0000000..990788e --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/dataset_manifest.json @@ -0,0 +1,261 @@ +{ + "generated_at_utc": "2026-07-17T04:46:33.100769+00:00", + "generated_datasets": { + "model_inputs_v1": { + "files": [ + { + "relative_path": "prepared/model_inputs_v1/attention_initial_state.npz", + "sha256": "d5ca1825a3a1f74f31ce2a6a054444febfb6707ce48b6afb16796d4e1778ecf5", + "size_bytes": 17716 + }, + { + "relative_path": "prepared/model_inputs_v1/block_inputs.npz", + "sha256": "d2bf4134c09010c8269140a8c2d8b5eeee5f4c465ae06286fcc0cf680bbc7a01", + "size_bytes": 158808 + }, + { + "relative_path": "prepared/model_inputs_v1/cnn_initial_state.npz", + "sha256": "8a73674248c4e9f9ed90eb3c1a6365367adaae0bfec9c27f42695670b2083c80", + "size_bytes": 193106 + }, + { + "relative_path": "prepared/model_inputs_v1/linear_initial_state.npz", + "sha256": "6d2dfed49c62462991af3f15a54545cfd9e3d2e6b0a57dc7001b46f16ac62415", + "size_bytes": 636 + }, + { + "relative_path": "prepared/model_inputs_v1/metadata.json", + "sha256": "0a289cbbd57c9963878bff1e85da45c3e87af0363afa3cf04ba29f1e784e3ec0", + "size_bytes": 168 + }, + { + "relative_path": "prepared/model_inputs_v1/mlp_initial_state.npz", + "sha256": "0d3bb1e93838e9cb10520bdf0a8fec1737759effd7a445594a52d1c3901d7dc8", + "size_bytes": 6764 + }, + { + "relative_path": "prepared/model_inputs_v1/sms_transformer_initial_state.npz", + "sha256": "994143d842ede80409748ec6fe787fcaaaadedcb76277cf86a62035266f5c8df", + "size_bytes": 560915 + } + ], + "kind": "generated", + "prepared_directory": "prepared/model_inputs_v1" + }, + "numerical_inputs_v1": { + "files": [ + { + "relative_path": "prepared/numerical_inputs_v1/convolutions.npz", + "sha256": "8d35185950d3cbaef794a0a56c6917e6ecd93fc79a13610572f9c9916cdb4db1", + "size_bytes": 60173 + }, + { + "relative_path": "prepared/numerical_inputs_v1/elementwise.npz", + "sha256": "d45268592e4fa6421388f83c4436c2687d88aaa23cd951c5a1e56a5ef0fc462d", + "size_bytes": 14697 + }, + { + "relative_path": "prepared/numerical_inputs_v1/fft.npz", + "sha256": "d5781938da24a05958d8a7ee309e457391b309d9e7a6e2092372c0071e93f95a", + "size_bytes": 18671 + }, + { + "relative_path": "prepared/numerical_inputs_v1/indexing.npz", + "sha256": "aea6e648c9432dcbc4b066a0025260569c6035de849db1798b703626daec22fd", + "size_bytes": 12446 + }, + { + "relative_path": "prepared/numerical_inputs_v1/linear_algebra.npz", + "sha256": "155857456b3e989ab3903e209ef8099f681f952feebcdf119d0f47f56dc8e530", + "size_bytes": 12561 + }, + { + "relative_path": "prepared/numerical_inputs_v1/matrix_operations.npz", + "sha256": "c7d13c24e9d75aa56027bc53215d66be830076a627977d4e5f76c52b29800635", + "size_bytes": 411050 + }, + { + "relative_path": "prepared/numerical_inputs_v1/metadata.json", + "sha256": "8cb57df36e45288637ce32e8698c78f0f37fc455430379c94eac3a9d472720a7", + "size_bytes": 141 + }, + { + "relative_path": "prepared/numerical_inputs_v1/reductions.npz", + "sha256": "74e2b7e78ff7694826dc8d2da313d34fbe63808ad4df636fefd4a960e84ed5b1", + "size_bytes": 146623 + }, + { + "relative_path": "prepared/numerical_inputs_v1/special_functions.npz", + "sha256": "649c985f4a5a56d6506c7f23c679328311e832b5c6d7272070aa04717f8b9181", + "size_bytes": 13036 + } + ], + "kind": "generated", + "prepared_directory": "prepared/numerical_inputs_v1" + } + }, + "manifest_version": "1", + "prepared_datasets": { + "breast_cancer_wisconsin_v1": { + "files": [ + { + "relative_path": "prepared/breast_cancer_wisconsin_v1/evaluation.npz", + "sha256": "172185a65b71599868dbcd3d7d6b5d8c88cc2a7af4f8bb3b80f8b43c8c5e64c2", + "size_bytes": 14017 + }, + { + "relative_path": "prepared/breast_cancer_wisconsin_v1/metadata.json", + "sha256": "3d949aba5541defcb2559c30393c22ace1b3c43b9e8aa666d2c467bad22218e2", + "size_bytes": 333 + }, + { + "relative_path": "prepared/breast_cancer_wisconsin_v1/preprocessing.npz", + "sha256": "aaf0f28e0bf4afbc7200bedc82578dbbc98523aef179cf69a26aece78e961815", + "size_bytes": 911 + }, + { + "relative_path": "prepared/breast_cancer_wisconsin_v1/train.npz", + "sha256": "57be34874be41c104e76047ca83edf6a85f1174e1a4427e5eeb6cfdc45654be7", + "size_bytes": 53119 + } + ], + "prepared_directory": "prepared/breast_cancer_wisconsin_v1", + "source_id": "breast_cancer_wisconsin_diagnostic" + }, + "fashion_mnist_v1": { + "files": [ + { + "relative_path": "prepared/fashion_mnist_v1/evaluation.npz", + "sha256": "4a2ebf79dec08cd641924334ae412a497a57c3878657ea4727bc7d0c1517b3dc", + "size_bytes": 662950 + }, + { + "relative_path": "prepared/fashion_mnist_v1/metadata.json", + "sha256": "f89d0169db6ccde151c4bce9fb8aa4598605401f737d67abdfdd66c32713eaa5", + "size_bytes": 252 + }, + { + "relative_path": "prepared/fashion_mnist_v1/train.npz", + "sha256": "e5977b7f09fbd25f081305ef0ae6f3c4b963edbb650195d05633ba484d71fb20", + "size_bytes": 2661946 + } + ], + "prepared_directory": "prepared/fashion_mnist_v1", + "source_id": "fashion_mnist" + }, + "sms_spam_v1": { + "files": [ + { + "relative_path": "prepared/sms_spam_v1/evaluation.npz", + "sha256": "7c812afec9f614f04d67e237589de2083fa45b35dd725c289c284595109d23d2", + "size_bytes": 49816 + }, + { + "relative_path": "prepared/sms_spam_v1/metadata.json", + "sha256": "5d00488342a0938519c82269b0c4f607c3b83f95bde546c735b7ad4ba61f74d4", + "size_bytes": 423 + }, + { + "relative_path": "prepared/sms_spam_v1/train.npz", + "sha256": "014212e58db81ede5bdbd725d98b8a0125f2020c5bc6d9f284a8c675ac73cdcd", + "size_bytes": 199241 + }, + { + "relative_path": "prepared/sms_spam_v1/vocabulary.json", + "sha256": "4a1990a6be15b48c09be49c709793403e9d9bc205ca68f1d061a0391a649b1e9", + "size_bytes": 71132 + } + ], + "prepared_directory": "prepared/sms_spam_v1", + "source_id": "sms_spam_collection" + } + }, + "root_seed": 42, + "sources": { + "breast_cancer_wisconsin_diagnostic": { + "doi": "10.24432/C5DW2B", + "download_urls": [ + "https://archive.ics.uci.edu/static/public/17/breast%2Bcancer%2Bwisconsin%2Bdiagnostic.zip" + ], + "files": [ + { + "expected_md5": null, + "md5": "97da86fb8aa67b905c88ad6c499f6bd4", + "relative_path": "downloaded/breast_cancer_wisconsin/breast_cancer_wisconsin_diagnostic.zip", + "required": true, + "sha256": "bc154869ef13f753f9e2b5a17e248cfe1ba4b6721db7c4da9f4880e40b05d3af", + "size_bytes": 51284 + } + ], + "homepage_url": "https://archive.ics.uci.edu/dataset/17/breast%2Bcancer%2Bwisconsin%2Bdiagnostic", + "kind": "download", + "licence": "CC BY 4.0" + }, + "fashion_mnist": { + "download_urls": [ + "https://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz", + "https://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz", + "https://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz", + "https://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz" + ], + "files": [ + { + "expected_md5": "8d4fb7e6c68d591d4c3dfef9ec88bf0d", + "md5": "8d4fb7e6c68d591d4c3dfef9ec88bf0d", + "relative_path": "downloaded/fashion_mnist/train-images-idx3-ubyte.gz", + "required": true, + "sha256": "3aede38d61863908ad78613f6a32ed271626dd12800ba2636569512369268a84", + "size_bytes": 26421880 + }, + { + "expected_md5": "25c81989df183df01b3e8a0aad5dffbe", + "md5": "25c81989df183df01b3e8a0aad5dffbe", + "relative_path": "downloaded/fashion_mnist/train-labels-idx1-ubyte.gz", + "required": true, + "sha256": "a04f17134ac03560a47e3764e11b92fc97de4d1bfaf8ba1a3aa29af54cc90845", + "size_bytes": 29515 + }, + { + "expected_md5": "bef4ecab320f06d8554ea6380940ec79", + "md5": "bef4ecab320f06d8554ea6380940ec79", + "relative_path": "downloaded/fashion_mnist/t10k-images-idx3-ubyte.gz", + "required": true, + "sha256": "346e55b948d973a97e58d2351dde16a484bd415d4595297633bb08f03db6a073", + "size_bytes": 4422102 + }, + { + "expected_md5": "bb300cfdad3c16e7a12a480ee83cd310", + "md5": "bb300cfdad3c16e7a12a480ee83cd310", + "relative_path": "downloaded/fashion_mnist/t10k-labels-idx1-ubyte.gz", + "required": true, + "sha256": "67da17c76eaffca5446c3361aaab5c3cd6d1c2608764d35dfb1850b086bf8dd5", + "size_bytes": 5148 + } + ], + "homepage_url": "https://github.com/zalandoresearch/fashion-mnist", + "kind": "download", + "licence": "MIT" + }, + "sms_spam_collection": { + "doi": "10.24432/C5CC84", + "download_urls": [ + "https://archive.ics.uci.edu/static/public/228/sms%2Bspam%2Bcollection.zip" + ], + "files": [ + { + "expected_md5": null, + "md5": "ab53f9571d479ee677e7b283a06a661a", + "relative_path": "downloaded/sms_spam_collection/sms_spam_collection.zip", + "required": true, + "sha256": "1587ea43e58e82b14ff1f5425c88e17f8496bfcdb67a583dbff9eefaf9963ce3", + "size_bytes": 203415 + } + ], + "homepage_url": "https://archive.ics.uci.edu/dataset/228/sms%2Bspam%2Bcollection", + "kind": "download", + "licence": "CC BY 4.0" + } + }, + "suite_name": "pytorch_extended_tests", + "suite_version": "v1" +} diff --git a/pytorch/pytorch_extended_tests/datasets/generate_datasets.py b/pytorch/pytorch_extended_tests/datasets/generate_datasets.py new file mode 100644 index 0000000..36ca0aa --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/generate_datasets.py @@ -0,0 +1,1158 @@ +#!/usr/bin/env python3 +"""Generate and preprocess all datasets used by pytorch_extended_tests.""" + +from __future__ import annotations + +import argparse +import csv +import gzip +import hashlib +import io +import json +import math +import re +import shutil +import struct +import sys +import tempfile +import unicodedata +import zipfile +from collections import Counter +from collections.abc import Iterable, Mapping, Sequence +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +import numpy as np + + +DATASETS_DIR = Path(__file__).resolve().parent +REPOSITORY_ROOT = DATASETS_DIR.parent +MANIFEST_PATH = DATASETS_DIR / "dataset_manifest.json" +DOWNLOADED_DIR = DATASETS_DIR / "downloaded" +PREPARED_DIR = DATASETS_DIR / "prepared" + +SPECIAL_TOKENS = ("[PAD]", "[UNK]", "[BOS]", "[EOS]") +TOKEN_PATTERN = re.compile(r"\w+(?:['’]\w+)*|[^\w\s]", flags=re.UNICODE) + + +class DatasetGenerationError(RuntimeError): + """Raised when source data or generation configuration is invalid.""" + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Generate deterministic inputs and preprocess downloaded datasets", + ) + parser.add_argument( + "--force", + action="store_true", + help="Replace prepared directories that already exist", + ) + parser.add_argument( + "--only", + choices=("all", "generated", "breast-cancer", "fashion-mnist", "sms-spam"), + default="all", + help="Prepare one part of the dataset tree", + ) + return parser.parse_args() + + +def load_suite_configuration() -> tuple[str, int, dict[str, Any]]: + sys.path.insert(0, str(REPOSITORY_ROOT)) + try: + from config.suite_config import DATASET_GENERATION, ROOT_SEED, SUITE_VERSION + except (ImportError, AttributeError) as exc: + raise DatasetGenerationError( + "Could not load SUITE_VERSION, ROOT_SEED and DATASET_GENERATION " + "from config/suite_config.py" + ) from exc + + if not isinstance(SUITE_VERSION, str) or not SUITE_VERSION: + raise DatasetGenerationError("SUITE_VERSION must be a non-empty string") + if not isinstance(ROOT_SEED, int) or isinstance(ROOT_SEED, bool): + raise DatasetGenerationError("ROOT_SEED must be an integer") + if not isinstance(DATASET_GENERATION, dict): + raise DatasetGenerationError("DATASET_GENERATION must be a dictionary") + + return SUITE_VERSION, ROOT_SEED, DATASET_GENERATION + + +def require_mapping(config: Mapping[str, Any], key: str) -> Mapping[str, Any]: + value = config.get(key) + if not isinstance(value, Mapping): + raise DatasetGenerationError(f"DATASET_GENERATION[{key!r}] must be a mapping") + return value + + +def require_int(config: Mapping[str, Any], key: str, minimum: int = 1) -> int: + value = config.get(key) + if not isinstance(value, int) or isinstance(value, bool) or value < minimum: + raise DatasetGenerationError(f"{key!r} must be an integer >= {minimum}") + return value + + +def require_float( + config: Mapping[str, Any], + key: str, + minimum: float, + maximum: float, +) -> float: + value = config.get(key) + if not isinstance(value, (int, float)) or isinstance(value, bool): + raise DatasetGenerationError(f"{key!r} must be numeric") + result = float(value) + if not minimum < result < maximum: + raise DatasetGenerationError(f"{key!r} must be between {minimum} and {maximum}") + return result + + +def require_int_sequence( + config: Mapping[str, Any], + key: str, + expected_length: int | None = None, +) -> tuple[int, ...]: + value = config.get(key) + if not isinstance(value, Sequence) or isinstance(value, (str, bytes)): + raise DatasetGenerationError(f"{key!r} must be a sequence of integers") + result = tuple(value) + if not result or any(not isinstance(item, int) or item < 1 for item in result): + raise DatasetGenerationError(f"{key!r} must contain positive integers") + if expected_length is not None and len(result) != expected_length: + raise DatasetGenerationError(f"{key!r} must contain {expected_length} values") + return result + + +def stable_seed(root_seed: int, *parts: str) -> int: + digest = hashlib.sha256() + digest.update(str(root_seed).encode("ascii")) + for part in parts: + digest.update(b"\0") + digest.update(part.encode("utf-8")) + return int.from_bytes(digest.digest()[:8], "big", signed=False) + + +def make_rng(root_seed: int, *parts: str) -> np.random.Generator: + return np.random.default_rng(stable_seed(root_seed, *parts)) + + +def hash_file(path: Path, algorithm: str) -> str: + digest = hashlib.new(algorithm) + with path.open("rb") as handle: + for chunk in iter(lambda: handle.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def write_json(path: Path, value: Any) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + serialised = json.dumps(value, indent=2, sort_keys=True, ensure_ascii=False) + path.write_text(serialised + "\n", encoding="utf-8", newline="\n") + + +def write_deterministic_npz(path: Path, arrays: Mapping[str, np.ndarray]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with zipfile.ZipFile(path, mode="w") as archive: + for name in sorted(arrays): + array = np.asarray(arrays[name]) + if array.dtype.hasobject: + raise DatasetGenerationError(f"Object array {name!r} cannot be stored safely") + + buffer = io.BytesIO() + np.lib.format.write_array(buffer, array, allow_pickle=False) + member = zipfile.ZipInfo(f"{name}.npy", date_time=(1980, 1, 1, 0, 0, 0)) + member.compress_type = zipfile.ZIP_DEFLATED + member.external_attr = 0o644 << 16 + archive.writestr( + member, + buffer.getvalue(), + compress_type=zipfile.ZIP_DEFLATED, + compresslevel=9, + ) + + +def replace_directory(source: Path, target: Path, force: bool) -> None: + if target.exists(): + if not force: + raise DatasetGenerationError( + f"{target} already exists. Use --force to replace prepared data" + ) + shutil.rmtree(target) + target.parent.mkdir(parents=True, exist_ok=True) + source.replace(target) + + +def source_file(manifest: Mapping[str, Any], source_id: str, index: int = 0) -> Path: + try: + relative_path = manifest["sources"][source_id]["files"][index]["relative_path"] + except (KeyError, IndexError, TypeError) as exc: + raise DatasetGenerationError(f"Manifest source {source_id!r} is invalid") from exc + return DATASETS_DIR / relative_path + + +def require_source(path: Path, urls: Sequence[str]) -> None: + if path.is_file(): + return + links = "\n".join(f" {url}" for url in urls) + raise DatasetGenerationError( + f"Required source file is missing: {path}\nDownload it from:\n{links}" + ) + + +def verify_manifest_sources(manifest: Mapping[str, Any], selected_ids: set[str]) -> None: + for source_id in selected_ids: + source = manifest["sources"][source_id] + urls = source["download_urls"] + for file_spec in source["files"]: + path = DATASETS_DIR / file_spec["relative_path"] + require_source(path, urls) + expected_md5 = file_spec.get("expected_md5") + if expected_md5 is not None: + actual_md5 = hash_file(path, "md5") + if actual_md5.lower() != expected_md5.lower(): + raise DatasetGenerationError( + f"MD5 mismatch for {path}\n" + f"Expected {expected_md5}\n" + f"Actual {actual_md5}" + ) + + +def stratified_split_indices( + labels: np.ndarray, + evaluation_fraction: float, + rng: np.random.Generator, +) -> tuple[np.ndarray, np.ndarray]: + train_parts: list[np.ndarray] = [] + evaluation_parts: list[np.ndarray] = [] + + for label in np.unique(labels): + indices = np.flatnonzero(labels == label) + shuffled = rng.permutation(indices) + evaluation_count = max(1, int(round(len(indices) * evaluation_fraction))) + evaluation_count = min(evaluation_count, len(indices) - 1) + evaluation_parts.append(shuffled[:evaluation_count]) + train_parts.append(shuffled[evaluation_count:]) + + train = rng.permutation(np.concatenate(train_parts)).astype(np.int64) + evaluation = rng.permutation(np.concatenate(evaluation_parts)).astype(np.int64) + return train, evaluation + + +def balanced_subset_indices( + labels: np.ndarray, + total_count: int, + rng: np.random.Generator, +) -> np.ndarray: + classes = np.unique(labels) + if total_count > len(labels): + raise DatasetGenerationError( + f"Requested {total_count} samples from a dataset with {len(labels)} rows" + ) + + base_count, remainder = divmod(total_count, len(classes)) + selected: list[np.ndarray] = [] + for position, label in enumerate(classes): + class_count = base_count + int(position < remainder) + candidates = np.flatnonzero(labels == label) + if class_count > len(candidates): + raise DatasetGenerationError( + f"Not enough rows for class {label}: requested {class_count}, found {len(candidates)}" + ) + selected.append(rng.permutation(candidates)[:class_count]) + + return rng.permutation(np.concatenate(selected)).astype(np.int64) + + +def xavier_uniform( + rng: np.random.Generator, + shape: Sequence[int], + fan_in: int, + fan_out: int, +) -> np.ndarray: + limit = math.sqrt(6.0 / float(fan_in + fan_out)) + return rng.uniform(-limit, limit, size=shape).astype(np.float32) + + +def linear_state( + rng: np.random.Generator, + prefix: str, + input_features: int, + output_features: int, +) -> dict[str, np.ndarray]: + return { + f"{prefix}.weight": xavier_uniform( + rng, + (output_features, input_features), + input_features, + output_features, + ), + f"{prefix}.bias": np.zeros(output_features, dtype=np.float32), + } + + +def conv2d_state( + rng: np.random.Generator, + prefix: str, + input_channels: int, + output_channels: int, + kernel_size: int, +) -> dict[str, np.ndarray]: + fan_in = input_channels * kernel_size * kernel_size + fan_out = output_channels * kernel_size * kernel_size + return { + f"{prefix}.weight": xavier_uniform( + rng, + (output_channels, input_channels, kernel_size, kernel_size), + fan_in, + fan_out, + ), + f"{prefix}.bias": np.zeros(output_channels, dtype=np.float32), + } + + +def generate_numerical_inputs( + target: Path, + root_seed: int, + config: Mapping[str, Any], +) -> None: + vector_length = require_int(config, "vector_length", minimum=16) + reduction_rows = require_int(config, "reduction_rows", minimum=3) + reduction_columns = require_int(config, "reduction_columns", minimum=3) + matrix_m = require_int(config, "matrix_m", minimum=3) + matrix_k = require_int(config, "matrix_k", minimum=3) + matrix_n = require_int(config, "matrix_n", minimum=3) + matrix_batch_size = require_int(config, "matrix_batch_size", minimum=2) + + target.mkdir(parents=True, exist_ok=True) + + rng = make_rng(root_seed, "numerical_inputs", "elementwise") + signs = np.where(np.arange(vector_length) % 2 == 0, 1.0, -1.0) + elementwise = { + "ordinary": rng.normal(0.0, 2.0, size=vector_length).astype(np.float64), + "near_zero": ( + signs * np.logspace(-16, -2, num=vector_length, dtype=np.float64) + ), + "large_magnitude": ( + signs * np.logspace(2, 12, num=vector_length, dtype=np.float64) + ), + "mixed_sign": rng.uniform(-10.0, 10.0, size=vector_length).astype(np.float64), + "positive": rng.uniform(1e-6, 20.0, size=vector_length).astype(np.float64), + "unit_interval": rng.uniform(-0.999, 0.999, size=vector_length).astype(np.float64), + "broadcast_left": rng.normal(size=(7, 1, 13)).astype(np.float64), + "broadcast_right": rng.normal(size=(1, 11, 1)).astype(np.float64), + "special_values": np.array( + [0.0, -0.0, np.inf, -np.inf, np.nan, np.finfo(np.float64).tiny], + dtype=np.float64, + ), + } + write_deterministic_npz(target / "elementwise.npz", elementwise) + + rng = make_rng(root_seed, "numerical_inputs", "indexing") + indexing = { + "source": rng.normal(size=(7, 11, 13)).astype(np.float64), + "row_indices": np.array([6, 0, 3, 3, 1], dtype=np.int64), + "column_indices": np.array([10, 2, 8, 1, 1], dtype=np.int64), + "gather_indices": rng.integers(0, 13, size=(7, 11, 5), dtype=np.int64), + "boolean_mask": (rng.random((7, 11, 13)) > 0.7), + "scatter_values": rng.normal(size=(7, 11, 5)).astype(np.float64), + } + write_deterministic_npz(target / "indexing.npz", indexing) + + rng = make_rng(root_seed, "numerical_inputs", "reductions") + cancellation_pattern = np.array([1e8, 1.0, -1e8, 3.0, -3.0], dtype=np.float64) + cancellation = np.resize(cancellation_pattern, reduction_rows * reduction_columns) + cancellation = cancellation.reshape(reduction_rows, reduction_columns) + reductions = { + "positive": rng.uniform( + 0.0, + 10.0, + size=(reduction_rows, reduction_columns), + ).astype(np.float64), + "mixed_sign": rng.normal( + size=(reduction_rows, reduction_columns), + ).astype(np.float64), + "cancellation": cancellation, + "cube": rng.normal(size=(5, 17, 23)).astype(np.float64), + "integer_values": rng.integers( + -100, + 101, + size=(reduction_rows, reduction_columns), + dtype=np.int64, + ), + } + write_deterministic_npz(target / "reductions.npz", reductions) + + rng = make_rng(root_seed, "numerical_inputs", "matrix_operations") + matrix_operations = { + "left": rng.normal(size=(matrix_m, matrix_k)).astype(np.float64), + "right": rng.normal(size=(matrix_k, matrix_n)).astype(np.float64), + "vector": rng.normal(size=(matrix_k,)).astype(np.float64), + "batch_left": rng.normal( + size=(matrix_batch_size, matrix_m, matrix_k), + ).astype(np.float64), + "batch_right": rng.normal( + size=(matrix_batch_size, matrix_k, matrix_n), + ).astype(np.float64), + "einsum_left": rng.normal(size=(5, 7, 11)).astype(np.float64), + "einsum_right": rng.normal(size=(11, 13)).astype(np.float64), + } + write_deterministic_npz(target / "matrix_operations.npz", matrix_operations) + + rng = make_rng(root_seed, "numerical_inputs", "convolutions") + convolutions = { + "conv1d_input": rng.normal(size=(2, 3, 31)).astype(np.float64), + "conv1d_weight": rng.normal(size=(4, 3, 5)).astype(np.float64), + "conv1d_bias": rng.normal(size=(4,)).astype(np.float64), + "conv2d_input": rng.normal(size=(2, 3, 17, 19)).astype(np.float64), + "conv2d_weight": rng.normal(size=(5, 3, 3, 3)).astype(np.float64), + "conv2d_bias": rng.normal(size=(5,)).astype(np.float64), + "grouped_conv2d_input": rng.normal(size=(2, 4, 16, 18)).astype(np.float64), + "grouped_conv2d_weight": rng.normal(size=(6, 2, 3, 3)).astype(np.float64), + "grouped_conv2d_bias": rng.normal(size=(6,)).astype(np.float64), + "conv3d_input": rng.normal(size=(1, 2, 9, 11, 13)).astype(np.float64), + "conv3d_weight": rng.normal(size=(3, 2, 3, 3, 3)).astype(np.float64), + "conv3d_bias": rng.normal(size=(3,)).astype(np.float64), + } + write_deterministic_npz(target / "convolutions.npz", convolutions) + + rng = make_rng(root_seed, "numerical_inputs", "linear_algebra") + dimension = 17 + orthogonal, _ = np.linalg.qr(rng.normal(size=(dimension, dimension))) + well_values = np.logspace(0.0, 2.0, dimension) + ill_values = np.logspace(0.0, 10.0, dimension) + well_conditioned = orthogonal @ np.diag(well_values) @ orthogonal.T + ill_conditioned = orthogonal @ np.diag(ill_values) @ orthogonal.T + spd = well_conditioned.T @ well_conditioned + np.eye(dimension) + eigenvalues = np.concatenate((np.array([1.0, 1.0, 1.0]), np.arange(2, dimension - 1))) + degenerate_symmetric = orthogonal @ np.diag(eigenvalues) @ orthogonal.T + linear_algebra = { + "well_conditioned_matrix": well_conditioned.astype(np.float64), + "well_conditioned_rhs": rng.normal(size=(dimension, 3)).astype(np.float64), + "ill_conditioned_matrix": ill_conditioned.astype(np.float64), + "ill_conditioned_rhs": rng.normal(size=(dimension, 2)).astype(np.float64), + "positive_definite_matrix": spd.astype(np.float64), + "rectangular_matrix": rng.normal(size=(23, 11)).astype(np.float64), + "svd_matrix": rng.normal(size=(19, 13)).astype(np.float64), + "degenerate_symmetric_matrix": degenerate_symmetric.astype(np.float64), + } + write_deterministic_npz(target / "linear_algebra.npz", linear_algebra) + + rng = make_rng(root_seed, "numerical_inputs", "fft") + fft_inputs = { + "real_1d": rng.normal(size=(257,)).astype(np.float64), + "real_2d": rng.normal(size=(31, 29)).astype(np.float64), + "complex_1d": ( + rng.normal(size=(257,)) + 1j * rng.normal(size=(257,)) + ).astype(np.complex128), + "complex_2d": ( + rng.normal(size=(17, 19)) + 1j * rng.normal(size=(17, 19)) + ).astype(np.complex128), + } + write_deterministic_npz(target / "fft.npz", fft_inputs) + + rng = make_rng(root_seed, "numerical_inputs", "special_functions") + special_functions = { + "positive": np.logspace(-6, 3, num=vector_length, dtype=np.float64), + "signed": rng.uniform(-8.0, 8.0, size=vector_length).astype(np.float64), + "probabilities": rng.uniform(1e-6, 1.0 - 1e-6, size=vector_length).astype( + np.float64 + ), + "gamma_inputs": rng.uniform(0.05, 20.0, size=vector_length).astype(np.float64), + "softmax_matrix": rng.normal(size=(31, 17)).astype(np.float64), + } + write_deterministic_npz(target / "special_functions.npz", special_functions) + + write_json( + target / "metadata.json", + { + "dataset_id": "numerical_inputs_v1", + "root_seed": root_seed, + "description": "Canonical inputs for core tensor and numerical kernel tests", + }, + ) + + +def generate_model_inputs( + target: Path, + root_seed: int, + config: Mapping[str, Any], + sms_config: Mapping[str, Any], +) -> None: + batch_size = require_int(config, "batch_size", minimum=2) + linear_input = require_int(config, "linear_input_features", minimum=2) + linear_output = require_int(config, "linear_output_features", minimum=2) + mlp_input = require_int(config, "mlp_input_features", minimum=2) + mlp_hidden = require_int_sequence(config, "mlp_hidden_features") + mlp_output = require_int(config, "mlp_output_features", minimum=2) + cnn_channels = require_int_sequence(config, "cnn_channels", expected_length=3) + cnn_classes = require_int(config, "cnn_classes", minimum=2) + attention_length = require_int(config, "attention_sequence_length", minimum=2) + embedding_size = require_int(config, "attention_embedding_size", minimum=4) + attention_heads = require_int(config, "attention_heads", minimum=1) + feedforward_size = require_int(config, "transformer_feedforward_size", minimum=4) + transformer_layers = require_int(config, "transformer_layers", minimum=1) + sms_sequence_length = require_int(sms_config, "max_sequence_length", minimum=4) + vocabulary_size = require_int(sms_config, "max_vocabulary_size", minimum=8) + + if embedding_size % attention_heads != 0: + raise DatasetGenerationError( + "attention_embedding_size must be divisible by attention_heads" + ) + + target.mkdir(parents=True, exist_ok=True) + rng = make_rng(root_seed, "model_inputs", "blocks") + block_inputs = { + "mlp_input": rng.normal(size=(batch_size, mlp_input)).astype(np.float32), + "mlp_labels": rng.integers(0, mlp_output, size=batch_size, dtype=np.int64), + "cnn_input": rng.normal(size=(batch_size, cnn_channels[0], 28, 28)).astype( + np.float32 + ), + "cnn_labels": rng.integers(0, cnn_classes, size=batch_size, dtype=np.int64), + "attention_input": rng.normal( + size=(batch_size, attention_length, embedding_size), + ).astype(np.float32), + "attention_padding_mask": ( + rng.random((batch_size, attention_length)) < 0.15 + ), + "attention_labels": rng.integers(0, 2, size=batch_size, dtype=np.int64), + } + block_inputs["attention_padding_mask"][:, 0] = False + write_deterministic_npz(target / "block_inputs.npz", block_inputs) + + rng = make_rng(root_seed, "model_inputs", "linear_state") + linear_model_state = linear_state( + rng, + "linear", + linear_input, + linear_output, + ) + write_deterministic_npz( + target / "linear_initial_state.npz", + linear_model_state, + ) + + rng = make_rng(root_seed, "model_inputs", "mlp_state") + mlp_state: dict[str, np.ndarray] = {} + layer_sizes = (mlp_input, *mlp_hidden, mlp_output) + for index, (input_size, output_size) in enumerate(zip(layer_sizes, layer_sizes[1:])): + mlp_state.update(linear_state(rng, f"layers.{index}", input_size, output_size)) + write_deterministic_npz(target / "mlp_initial_state.npz", mlp_state) + + rng = make_rng(root_seed, "model_inputs", "cnn_state") + cnn_state: dict[str, np.ndarray] = {} + cnn_state.update(conv2d_state(rng, "features.0", cnn_channels[0], cnn_channels[1], 3)) + cnn_state.update(conv2d_state(rng, "features.3", cnn_channels[1], cnn_channels[2], 3)) + flattened_features = cnn_channels[2] * 7 * 7 + cnn_state.update(linear_state(rng, "classifier.0", flattened_features, 64)) + cnn_state.update(linear_state(rng, "classifier.2", 64, cnn_classes)) + write_deterministic_npz(target / "cnn_initial_state.npz", cnn_state) + + rng = make_rng(root_seed, "model_inputs", "attention_state") + attention_state: dict[str, np.ndarray] = {} + attention_state.update(linear_state(rng, "q_proj", embedding_size, embedding_size)) + attention_state.update(linear_state(rng, "k_proj", embedding_size, embedding_size)) + attention_state.update(linear_state(rng, "v_proj", embedding_size, embedding_size)) + attention_state.update(linear_state(rng, "out_proj", embedding_size, embedding_size)) + attention_state["norm.weight"] = np.ones(embedding_size, dtype=np.float32) + attention_state["norm.bias"] = np.zeros(embedding_size, dtype=np.float32) + attention_state.update(linear_state(rng, "classifier", embedding_size, 2)) + write_deterministic_npz(target / "attention_initial_state.npz", attention_state) + + rng = make_rng(root_seed, "model_inputs", "sms_transformer_state") + transformer_state: dict[str, np.ndarray] = { + "token_embedding.weight": rng.normal( + 0.0, + embedding_size ** -0.5, + size=(vocabulary_size, embedding_size), + ).astype(np.float32), + "position_embedding.weight": rng.normal( + 0.0, + embedding_size ** -0.5, + size=(sms_sequence_length, embedding_size), + ).astype(np.float32), + } + transformer_state["token_embedding.weight"][0] = 0.0 + + for layer_index in range(transformer_layers): + prefix = f"encoder.layers.{layer_index}" + transformer_state[f"{prefix}.self_attn.in_proj_weight"] = xavier_uniform( + rng, + (3 * embedding_size, embedding_size), + embedding_size, + 3 * embedding_size, + ) + transformer_state[f"{prefix}.self_attn.in_proj_bias"] = np.zeros( + 3 * embedding_size, + dtype=np.float32, + ) + transformer_state.update( + linear_state( + rng, + f"{prefix}.self_attn.out_proj", + embedding_size, + embedding_size, + ) + ) + transformer_state.update( + linear_state(rng, f"{prefix}.linear1", embedding_size, feedforward_size) + ) + transformer_state.update( + linear_state(rng, f"{prefix}.linear2", feedforward_size, embedding_size) + ) + for norm_name in ("norm1", "norm2"): + transformer_state[f"{prefix}.{norm_name}.weight"] = np.ones( + embedding_size, + dtype=np.float32, + ) + transformer_state[f"{prefix}.{norm_name}.bias"] = np.zeros( + embedding_size, + dtype=np.float32, + ) + + transformer_state["final_norm.weight"] = np.ones(embedding_size, dtype=np.float32) + transformer_state["final_norm.bias"] = np.zeros(embedding_size, dtype=np.float32) + transformer_state.update(linear_state(rng, "classifier", embedding_size, 2)) + write_deterministic_npz( + target / "sms_transformer_initial_state.npz", + transformer_state, + ) + + write_json( + target / "metadata.json", + { + "dataset_id": "model_inputs_v1", + "root_seed": root_seed, + "attention_heads": attention_heads, + "description": "Fixed model inputs and initial states for block and workload tests", + }, + ) + + +def find_zip_member(archive: zipfile.ZipFile, expected_name: str) -> str: + matches = [name for name in archive.namelist() if Path(name).name == expected_name] + if len(matches) != 1: + raise DatasetGenerationError( + f"Expected one {expected_name!r} file in archive, found {len(matches)}" + ) + return matches[0] + + +def prepare_breast_cancer( + target: Path, + archive_path: Path, + root_seed: int, + config: Mapping[str, Any], +) -> None: + evaluation_fraction = require_float(config, "evaluation_fraction", 0.0, 1.0) + + with zipfile.ZipFile(archive_path) as archive: + member = find_zip_member(archive, "wdbc.data") + raw_text = archive.read(member).decode("utf-8") + + rows = list(csv.reader(io.StringIO(raw_text))) + if len(rows) != 569: + raise DatasetGenerationError(f"Expected 569 breast cancer rows, found {len(rows)}") + + features = np.empty((len(rows), 30), dtype=np.float64) + labels = np.empty(len(rows), dtype=np.int64) + identifiers = np.empty(len(rows), dtype=np.int64) + label_map = {"B": 0, "M": 1} + + for index, row in enumerate(rows): + if len(row) != 32: + raise DatasetGenerationError( + f"Breast cancer row {index} has {len(row)} columns instead of 32" + ) + identifiers[index] = int(row[0]) + try: + labels[index] = label_map[row[1]] + except KeyError as exc: + raise DatasetGenerationError(f"Unknown diagnosis label {row[1]!r}") from exc + features[index] = np.asarray(row[2:], dtype=np.float64) + + rng = make_rng(root_seed, "breast_cancer_wisconsin", "split") + train_indices, evaluation_indices = stratified_split_indices( + labels, + evaluation_fraction, + rng, + ) + + training_features = features[train_indices] + mean = training_features.mean(axis=0, dtype=np.float64) + standard_deviation = training_features.std(axis=0, dtype=np.float64) + if np.any(standard_deviation == 0.0): + raise DatasetGenerationError("A breast cancer feature has zero training variance") + + standardised = ((features - mean) / standard_deviation).astype(np.float32) + write_deterministic_npz( + target / "train.npz", + { + "features": standardised[train_indices], + "labels": labels[train_indices], + "source_indices": train_indices, + "source_identifiers": identifiers[train_indices], + }, + ) + write_deterministic_npz( + target / "evaluation.npz", + { + "features": standardised[evaluation_indices], + "labels": labels[evaluation_indices], + "source_indices": evaluation_indices, + "source_identifiers": identifiers[evaluation_indices], + }, + ) + write_deterministic_npz( + target / "preprocessing.npz", + { + "training_mean": mean, + "training_standard_deviation": standard_deviation, + }, + ) + write_json( + target / "metadata.json", + { + "dataset_id": "breast_cancer_wisconsin_v1", + "root_seed": root_seed, + "source_rows": len(rows), + "training_rows": len(train_indices), + "evaluation_rows": len(evaluation_indices), + "feature_count": features.shape[1], + "label_mapping": {"benign": 0, "malignant": 1}, + "evaluation_fraction": evaluation_fraction, + "standardisation": "Training split mean and population standard deviation", + }, + ) + + +def read_idx_images(path: Path) -> np.ndarray: + with gzip.open(path, "rb") as handle: + header = handle.read(16) + if len(header) != 16: + raise DatasetGenerationError(f"Invalid IDX image header in {path}") + magic, count, rows, columns = struct.unpack(">IIII", header) + if magic != 2051: + raise DatasetGenerationError(f"Unexpected IDX image magic {magic} in {path}") + raw = handle.read() + + expected_size = count * rows * columns + if len(raw) != expected_size: + raise DatasetGenerationError( + f"Expected {expected_size} image bytes in {path}, found {len(raw)}" + ) + return np.frombuffer(raw, dtype=np.uint8).reshape(count, rows, columns).copy() + + +def read_idx_labels(path: Path) -> np.ndarray: + with gzip.open(path, "rb") as handle: + header = handle.read(8) + if len(header) != 8: + raise DatasetGenerationError(f"Invalid IDX label header in {path}") + magic, count = struct.unpack(">II", header) + if magic != 2049: + raise DatasetGenerationError(f"Unexpected IDX label magic {magic} in {path}") + raw = handle.read() + + if len(raw) != count: + raise DatasetGenerationError( + f"Expected {count} label bytes in {path}, found {len(raw)}" + ) + return np.frombuffer(raw, dtype=np.uint8).copy() + + +def prepare_fashion_mnist( + target: Path, + source_paths: Sequence[Path], + root_seed: int, + config: Mapping[str, Any], +) -> None: + training_samples = require_int(config, "training_samples", minimum=10) + evaluation_samples = require_int(config, "evaluation_samples", minimum=10) + + train_images = read_idx_images(source_paths[0]) + train_labels = read_idx_labels(source_paths[1]) + evaluation_images = read_idx_images(source_paths[2]) + evaluation_labels = read_idx_labels(source_paths[3]) + + if train_images.shape != (60000, 28, 28) or train_labels.shape != (60000,): + raise DatasetGenerationError("Fashion-MNIST training files have unexpected shapes") + if evaluation_images.shape != (10000, 28, 28) or evaluation_labels.shape != (10000,): + raise DatasetGenerationError("Fashion-MNIST test files have unexpected shapes") + + training_indices = balanced_subset_indices( + train_labels, + training_samples, + make_rng(root_seed, "fashion_mnist", "training_subset"), + ) + evaluation_indices = balanced_subset_indices( + evaluation_labels, + evaluation_samples, + make_rng(root_seed, "fashion_mnist", "evaluation_subset"), + ) + + prepared_training = ( + train_images[training_indices, np.newaxis, :, :].astype(np.float32) / 255.0 + ) + prepared_evaluation = ( + evaluation_images[evaluation_indices, np.newaxis, :, :].astype(np.float32) / 255.0 + ) + + write_deterministic_npz( + target / "train.npz", + { + "images": prepared_training, + "labels": train_labels[training_indices].astype(np.int64), + "source_indices": training_indices, + }, + ) + write_deterministic_npz( + target / "evaluation.npz", + { + "images": prepared_evaluation, + "labels": evaluation_labels[evaluation_indices].astype(np.int64), + "source_indices": evaluation_indices, + }, + ) + write_json( + target / "metadata.json", + { + "dataset_id": "fashion_mnist_v1", + "root_seed": root_seed, + "training_rows": len(training_indices), + "evaluation_rows": len(evaluation_indices), + "image_shape": [1, 28, 28], + "classes": 10, + "normalisation": "uint8 pixel value divided by 255", + "augmentation": None, + }, + ) + + +def decode_text_file(raw: bytes) -> tuple[str, str]: + for encoding in ("utf-8", "utf-8-sig", "latin-1"): + try: + return raw.decode(encoding), encoding + except UnicodeDecodeError: + continue + raise DatasetGenerationError("Could not decode the SMS source file") + + +def tokenise_message(message: str) -> list[str]: + normalised = unicodedata.normalize("NFKC", message).casefold() + return TOKEN_PATTERN.findall(normalised) + + +def build_vocabulary( + messages: Sequence[str], + maximum_size: int, + minimum_frequency: int, +) -> dict[str, int]: + if maximum_size < len(SPECIAL_TOKENS): + raise DatasetGenerationError("max_vocabulary_size is smaller than the special tokens") + + counts: Counter[str] = Counter() + for message in messages: + counts.update(tokenise_message(message)) + + candidates = [ + (token, count) + for token, count in counts.items() + if count >= minimum_frequency and token not in SPECIAL_TOKENS + ] + candidates.sort(key=lambda item: (-item[1], item[0])) + kept = candidates[: maximum_size - len(SPECIAL_TOKENS)] + + vocabulary = {token: index for index, token in enumerate(SPECIAL_TOKENS)} + for token, _ in kept: + vocabulary[token] = len(vocabulary) + return vocabulary + + +def encode_messages( + messages: Sequence[str], + vocabulary: Mapping[str, int], + maximum_length: int, +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + input_ids = np.zeros((len(messages), maximum_length), dtype=np.int64) + attention_mask = np.zeros((len(messages), maximum_length), dtype=np.bool_) + lengths = np.empty(len(messages), dtype=np.int64) + + unknown_id = vocabulary["[UNK]"] + beginning_id = vocabulary["[BOS]"] + end_id = vocabulary["[EOS]"] + + for row_index, message in enumerate(messages): + token_ids = [vocabulary.get(token, unknown_id) for token in tokenise_message(message)] + token_ids = [beginning_id, *token_ids[: maximum_length - 2], end_id] + length = len(token_ids) + input_ids[row_index, :length] = token_ids + attention_mask[row_index, :length] = True + lengths[row_index] = length + + return input_ids, attention_mask, lengths + + +def prepare_sms_spam( + target: Path, + archive_path: Path, + root_seed: int, + config: Mapping[str, Any], +) -> None: + evaluation_fraction = require_float(config, "evaluation_fraction", 0.0, 1.0) + maximum_length = require_int(config, "max_sequence_length", minimum=4) + maximum_vocabulary_size = require_int(config, "max_vocabulary_size", minimum=8) + minimum_frequency = require_int(config, "minimum_token_frequency", minimum=1) + + with zipfile.ZipFile(archive_path) as archive: + member = find_zip_member(archive, "SMSSpamCollection") + text, encoding = decode_text_file(archive.read(member)) + + messages: list[str] = [] + labels: list[int] = [] + label_map = {"ham": 0, "spam": 1} + for line_number, line in enumerate(text.splitlines(), start=1): + if not line: + continue + try: + raw_label, message = line.split("\t", 1) + label = label_map[raw_label] + except (ValueError, KeyError) as exc: + raise DatasetGenerationError(f"Invalid SMS row at line {line_number}") from exc + labels.append(label) + messages.append(message) + + label_array = np.asarray(labels, dtype=np.int64) + if len(messages) != 5574: + raise DatasetGenerationError(f"Expected 5574 SMS rows, found {len(messages)}") + + train_indices, evaluation_indices = stratified_split_indices( + label_array, + evaluation_fraction, + make_rng(root_seed, "sms_spam", "split"), + ) + training_messages = [messages[index] for index in train_indices] + evaluation_messages = [messages[index] for index in evaluation_indices] + vocabulary = build_vocabulary( + training_messages, + maximum_vocabulary_size, + minimum_frequency, + ) + + train_ids, train_mask, train_lengths = encode_messages( + training_messages, + vocabulary, + maximum_length, + ) + evaluation_ids, evaluation_mask, evaluation_lengths = encode_messages( + evaluation_messages, + vocabulary, + maximum_length, + ) + + write_deterministic_npz( + target / "train.npz", + { + "input_ids": train_ids, + "attention_mask": train_mask, + "lengths": train_lengths, + "labels": label_array[train_indices], + "source_indices": train_indices, + }, + ) + write_deterministic_npz( + target / "evaluation.npz", + { + "input_ids": evaluation_ids, + "attention_mask": evaluation_mask, + "lengths": evaluation_lengths, + "labels": label_array[evaluation_indices], + "source_indices": evaluation_indices, + }, + ) + write_json(target / "vocabulary.json", vocabulary) + write_json( + target / "metadata.json", + { + "dataset_id": "sms_spam_v1", + "root_seed": root_seed, + "source_rows": len(messages), + "training_rows": len(train_indices), + "evaluation_rows": len(evaluation_indices), + "vocabulary_size": len(vocabulary), + "configured_maximum_vocabulary_size": maximum_vocabulary_size, + "maximum_sequence_length": maximum_length, + "minimum_token_frequency": minimum_frequency, + "source_encoding": encoding, + "label_mapping": {"ham": 0, "spam": 1}, + "tokenisation": "Unicode NFKC, casefold, regex words and punctuation", + }, + ) + + +def collect_file_records(directory: Path) -> list[dict[str, Any]]: + if not directory.is_dir(): + return [] + records = [] + for path in sorted(candidate for candidate in directory.rglob("*") if candidate.is_file()): + records.append( + { + "relative_path": path.relative_to(DATASETS_DIR).as_posix(), + "sha256": hash_file(path, "sha256"), + "size_bytes": path.stat().st_size, + } + ) + return records + + +def update_manifest( + manifest: dict[str, Any], + suite_version: str, + root_seed: int, + selected_source_ids: set[str], +) -> None: + manifest["suite_name"] = "pytorch_extended_tests" + manifest["suite_version"] = suite_version + manifest["root_seed"] = root_seed + manifest["generated_at_utc"] = datetime.now(timezone.utc).isoformat() + + for source_id, source in manifest["sources"].items(): + for file_spec in source["files"]: + path = DATASETS_DIR / file_spec["relative_path"] + if not path.is_file(): + # Keep the recorded provenance when only generated inputs are refreshed + # The source archives do not need to stay in the repository after Level 6 preparation + if source_id in selected_source_ids: + file_spec["md5"] = None + file_spec["sha256"] = None + file_spec["size_bytes"] = None + continue + file_spec["md5"] = hash_file(path, "md5") + file_spec["sha256"] = hash_file(path, "sha256") + file_spec["size_bytes"] = path.stat().st_size + + for entry in manifest["generated_datasets"].values(): + entry["files"] = collect_file_records(DATASETS_DIR / entry["prepared_directory"]) + for entry in manifest["prepared_datasets"].values(): + entry["files"] = collect_file_records(DATASETS_DIR / entry["prepared_directory"]) + + write_json(MANIFEST_PATH, manifest) + + +def run_in_temporary_directory( + name: str, + target: Path, + force: bool, + action: Any, +) -> None: + PREPARED_DIR.mkdir(parents=True, exist_ok=True) + temporary_parent = Path(tempfile.mkdtemp(prefix=f".{name}-", dir=PREPARED_DIR)) + temporary_target = temporary_parent / name + temporary_target.mkdir() + try: + action(temporary_target) + replace_directory(temporary_target, target, force) + finally: + shutil.rmtree(temporary_parent, ignore_errors=True) + + +def load_manifest() -> dict[str, Any]: + try: + value = json.loads(MANIFEST_PATH.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as exc: + raise DatasetGenerationError(f"Could not read {MANIFEST_PATH}") from exc + if not isinstance(value, dict): + raise DatasetGenerationError("dataset_manifest.json must contain an object") + return value + + +def main() -> int: + args = parse_args() + suite_version, root_seed, generation_config = load_suite_configuration() + manifest = load_manifest() + + selected_source_ids: set[str] = set() + if args.only in ("all", "breast-cancer"): + selected_source_ids.add("breast_cancer_wisconsin_diagnostic") + if args.only in ("all", "fashion-mnist"): + selected_source_ids.add("fashion_mnist") + if args.only in ("all", "sms-spam"): + selected_source_ids.add("sms_spam_collection") + verify_manifest_sources(manifest, selected_source_ids) + + numerical_config = require_mapping(generation_config, "numerical_inputs") + model_config = require_mapping(generation_config, "model_inputs") + breast_config = require_mapping(generation_config, "breast_cancer_wisconsin") + fashion_config = require_mapping(generation_config, "fashion_mnist") + sms_config = require_mapping(generation_config, "sms_spam") + + if args.only in ("all", "generated"): + run_in_temporary_directory( + "numerical_inputs_v1", + PREPARED_DIR / "numerical_inputs_v1", + args.force, + lambda target: generate_numerical_inputs(target, root_seed, numerical_config), + ) + run_in_temporary_directory( + "model_inputs_v1", + PREPARED_DIR / "model_inputs_v1", + args.force, + lambda target: generate_model_inputs(target, root_seed, model_config, sms_config), + ) + + if args.only in ("all", "breast-cancer"): + breast_archive = source_file(manifest, "breast_cancer_wisconsin_diagnostic") + run_in_temporary_directory( + "breast_cancer_wisconsin_v1", + PREPARED_DIR / "breast_cancer_wisconsin_v1", + args.force, + lambda target: prepare_breast_cancer( + target, + breast_archive, + root_seed, + breast_config, + ), + ) + + if args.only in ("all", "fashion-mnist"): + fashion_paths = [ + source_file(manifest, "fashion_mnist", index) + for index in range(len(manifest["sources"]["fashion_mnist"]["files"])) + ] + run_in_temporary_directory( + "fashion_mnist_v1", + PREPARED_DIR / "fashion_mnist_v1", + args.force, + lambda target: prepare_fashion_mnist( + target, + fashion_paths, + root_seed, + fashion_config, + ), + ) + + if args.only in ("all", "sms-spam"): + sms_archive = source_file(manifest, "sms_spam_collection") + run_in_temporary_directory( + "sms_spam_v1", + PREPARED_DIR / "sms_spam_v1", + args.force, + lambda target: prepare_sms_spam( + target, + sms_archive, + root_seed, + sms_config, + ), + ) + + update_manifest(manifest, suite_version, root_seed, selected_source_ids) + print(f"Prepared datasets under {PREPARED_DIR}") + print(f"Updated {MANIFEST_PATH}") + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except DatasetGenerationError as exc: + print(f"Error: {exc}", file=sys.stderr) + raise SystemExit(2) from exc diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/evaluation.npz b/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/evaluation.npz new file mode 100644 index 0000000000000000000000000000000000000000..8b3fe21b10876c96197c4972c2d27d9244e038a1 GIT binary patch literal 14017 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 BLHYmy literal 0 HcmV?d00001 diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/metadata.json b/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/metadata.json new file mode 100644 index 0000000..a93cb79 --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/metadata.json @@ -0,0 +1,14 @@ +{ + "dataset_id": "breast_cancer_wisconsin_v1", + "evaluation_fraction": 0.2, + "evaluation_rows": 113, + "feature_count": 30, + "label_mapping": { + "benign": 0, + "malignant": 1 + }, + "root_seed": 42, + "source_rows": 569, + "standardisation": "Training split mean and population standard deviation", + "training_rows": 456 +} diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/preprocessing.npz b/pytorch/pytorch_extended_tests/datasets/prepared/breast_cancer_wisconsin_v1/preprocessing.npz new file mode 100644 index 0000000000000000000000000000000000000000..13dea647cca9ac89bfbf986abfe37db0d2eb7677 GIT binary patch literal 911 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 literal 0 HcmV?d00001 diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/evaluation.npz b/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/evaluation.npz new file mode 100644 index 0000000000000000000000000000000000000000..574af01344e88c235f930d42f08f1c0b587d9bb4 GIT binary patch literal 662950 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

-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

kRid*}gb25D3ANOHz^LqVA=CTv? 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

>63L0C=rWRs{AYZ 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 z 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

0LHXzu~o8rUhy({rG;TWt&W`(J3SI?(}bPonJ*7 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∾C`)|kSec?_JF&a9QJ#}{&@VNk*1TesIL zi>won-Y3ZbqV{f=n>GN70)-Pgb~`QhnQjgFs9zLk^xe%$Z!CBemNVAx%q{W;&W+!z zb)wM|PA9P4(g?~lL{7^s`(I6)Y+IyjszFtit{&B91jA{fo`el2IpfWhlz8ngr@L?R z=Co~YBmTr+m)7dnEQJgxtwVq5#2>;VNK@B5N11|S2^x^g!cFu-i8|^Mh_)q23hWm! zCB4aP6l`nhwL%pLF-CL!&LksGxkL+rm|D%(2G}t~w5s3o+k1uBb5sZ9Aw?-L5Io@0 zRE7(x7N$|D1CQ>)6w}Y-yWSI#ZhejOg`kxNev(RjcF7(xjX zu4MDp6a$1UD~ZN5O?Ng+@wd}^EeL)jWu-a4xH!b6e(4WMvVF1EdZg1UH5&ja=3k_M z4B9k(Sht(S=M)rW-IjE#DxHpm)5lmXnWqw=SaO&+Vx2$n25@6|zQ8a}2w+?Q)E+>G zIBlNe0EMunC#HRoBd?27=PKa>6sm-V?X{kczXGd`3EL`xUx$Bp$f-T~rYubX6yuk? z1C}i%uj>jw6w_%cHIH1uVXz6ziT+Sl_dP+g4gEXT(3Uin-yAZ zi`V$NdtMrWEtI`j$hghdv44ukZ<67*Ty5^JraKKh-b<$+dEY7LcqL2rYe6yl!{2>S z#B26PLkq~Ts*6QOC>8d}`Ek`m=0afX-1ywk-pdr-fLCfs7Dep&lgQB@?v=irbTxy0 zPbubPM|J#=j3cIk_s_$Rrk+iy|NKClwgT?$OaF7jgo16uW~nas_r+wYoT z(74N{f;9dS%)ZPfVYB|I;J}$)P=^9F=XKjHs?pTpKq%wC21`+9$ zSNc_qL4Skjqt*>{1aB2{S2(}26REJPufWZjWjSA5g8Kf0j#Pf64i^@Ddf(ogbZg@a zVQC$=*#(S+zJd!lzB8TQ88#(fUB-v?$NWzDpWubeFEyv(%SS`ss^0OJxC2`6^w8De zl(*Xj>QtM6IOWo@1kTa}pf2+@EqGIciM`p*eGYfS2A*p$@|AXj)_g8Y#|b#Lze%C) zdhD4(bifzh>hzEhj~IxL!kkH2(pgHz-n*BB3u6z6+m=#l3JiV4i~k~((_0nKjh{vO zE;0UNnOJ_m?dJ8+4a8PpM&I!LL@aNG%v6$JW?0s&JO776TmDm&qDUS~!*e&ml0PeJ zbT`BKbny~vlPcRz(0jQLHO-p(!tpr7!o4$q>QwvIgjxAPFreiRI)pV)BOeaT$Yw^I zO;V%Y3Y;M(EuJNZ$=I^tkFog$n={Cbwp17SMYefOp#@tfx?R+f&wA?@s7H8h2}gr~*&%T%{+2sk(Ugs<-Mecky?6|NXG`&W48B?WJ$$1HWjP_YaPQLRb z6IA%csAey`4N@OEHP-Ftai+KEu>^Jo_Y5;jrr^}?2I;75z|FK2g98}+IYl`i2!96Y$5jZuxGx1g#U6^|D|owD{3v1rCbveD4tUtveYhpa_}dOs=uZm zz@;ombhIr*F5usAvd02J|lB4Tc}I9!5A46b?Dw5L(xD5@eW7qJ3D&5+1o53n0=49 zGa+a8YcU1Bw%zGQ1Wa9Qk)$<1Ka?Lb`cWFGRT%PLDc=o6=wBaMGw#WOZKGIPOsnfv_Q^* z*-sif6yM6B7c}oH|075;?5kHVe{%RX@`?~Dq8b8^luijxv0sh94s_sF%Jm!U!*{5_ zkUH-!QH9bs5ZI1u-VK4y0ZQ9P47HCub;CGhvb+BFmn-#|@H34*i#_(7vWRH5@n&Bi zT9+fDEjfe|87SN9Jx@@r`B5k^JzgY=Y|)|&Yb`7jCztB{N5~i5&KO3t7RGuLB7`aa zmbJHd)rFSlZ2#atZ#d5V0wN^M&9OZFX6C}>+^mGC;<9D1&}KBYV(HMRMrcGV*z!{f zV&zuq;K%JJjQO>%Koe+=9&E=Z+ImKv(N6@?JBDc9Eol?D1X?EU?o40c*tZ>mD((RX z4Z~k>4(E&)St63`SM8cK%0Vn00@?Ox#0$&F7OO5ym3Du^44BU69s|fRIj@7^nobR1 z7^CPUyn7W@ei%t5T}IxA_;^p_b4|cNJfTzaj4@)=zHzc~d*d#TemYbVCJ3yn$v?WU)G1|Ho5}HCqZljO1+j z!{SOneX!t3It57Un^=oeerDOC*OD$^1!FXSkrc?;2>aaVBVf4hF7TK+?skwRiqq}2 zJJ!&}l=ji3wf?+d=kMyAz6z7^Cd|UUTg;%F z4I`D>yAGCwTebAHt$=vE#OELMMEZ${>oX78xAtCiRP zP>=9W1PKRQdrmOoHGKz98ky(U(P;rruH4pkGLSreecfXsm^gLMmd4V7Jc54fKIbBR zcb)#m^Rkky{$i~Q7udY&91|K zJ2-1fUWP;upUEnb{C`djfy-qsR#zzNJZsqw{HkP8y3tKZC;Dr0oUDK4wmB?wzVEBI zSNx9?E=0tdix9UMWn$KIEt=uYJRY@+CPKJt)~PC6-kOym-^K1O`RbSA>om))D#^$b z#sFO#2Uw$6B2vaYQI))5(n;Kw`LoNI>yU~gJ`xDT2q5lC+};%(w1@f=dM zAS6pdZrqSsIK43!oTrZZS9FBm#j%SN1GA9d5KpcDt{_H@V14B7OUF{8zd)eNdXj~i zd+V1Ok?7*3Q5jO@!+N=L*jiND~cuGnlg4F5?|9r=N`WMYfZglI|5!{)e*>xHcYlD%fVhcGGABHR;Lh=b$B%#ITa z6TOU}fmLYY&)V=XnRB1zUtz{G{S)1v8eI4>a#}Z#-MkVT-ek9S8f`Af1%GCaqnGK! z6sN#97Q`W+i~;0F^vmE7Tu@WLmZXl4r92V^+M7-+!xbmpV48AE4Um!pwhQ#2T18_G z06g*Cmuev;hvWXCEJ)hNhNL1pfC>76{lLksCUoIQT`Ls*vv7Scn0Q1so|N)R4AS$I zQe^hMW8Rl5yqbwjomTjXRJm6wo~9kXv=WqmIpc;cyorR zYNG@y6LGO*OJ&>RnRm7auCy*j`cU-XL&ckX1IBMx*JYdevRk-%$?Dc%v*S?06n7t9=A0Om0{dWH*9+Xs;nEFNMj&(*p$|=8- z(7uxMni3OkOuR))|3_dp+8mYk3Zh9K0PjdWTl<2p)a60Oft8U^$dpz+X5Qe`Wmjm(6K)WB>aq%#M(! zub_J1ubd@|od>WhHJngFki}~i)>~7f4ZM>p?p5}qHLvgoF~PiX|1rZib^h#ptDha$ z0{foy9s4t*Qtzu8cR$_m4%`O2^fZobhYZTBbT+N)XwZTFiaN++J%|&YR6dI_v%N@J zd)~dN~ zCIyuKku`h8>MwR{|Nmp@&L5IY+ko#+SyJOR=H#B-la)1^Waf@gSz2T1G)<}DmYP`Z z;?9;@S-Fr?X>L$iS-J1I0GfM>Xy$?oxTA>zA_%fQzVGw=59bfpbsp#O`401H;!@$* zpQzj0(-MZE_ghIYbKzX$*K+!8#gTMw>j)@&~sHd=q!R)-3g5}k4r5^ z`=>sd`#S>&;ljifNbiCA+N*&RVjHbplQLO$UcA%j6d*JOZvVUCHy_%z*p!1HcEm`y zkI@yelxExR2=AK^2c~Jj%KJt|P~*5;>E5}1R$b{e0gF9{>MgeDp}C7M!+oO%g9YcA ztu@E)=YVYD7r{-%&_GV0Oy;8_FvJ$YF<-ZK9FK9x_dFvEE%yx@gzQ7kSxp|k&T9W$ z)!2E2e(3*SI=e{9?ERD5%&G`37$Ldu?CsVezt`c@rDvKSpar{#Gm)d@?FL-V_~o10 zi+lVu;Lw_|-yK5KI>R3f^Z+^xMi_pS@~r*Fh0DYcAge|2Xz>qI$KLHA`3vc~rpHg^ zr)BT7#rFV1pwADpO~q3-U$x71~{jZu1<4DR-U zaC1K8sscDZQT61v=YN-5!@W0w@(S!s<*w?>&khQ_S(QuHQ_JsYKBCr(%sGGQ2VyQ^ zi>wFPEvq+zLt{1JSSLlUp|6%gYD+}@T#J5)^tdXq>CQ}zUiI*HA+-=QYsAzLM58)s zZTA9AqM#Dz)Oo5l)#Hgylo=NcWifAjlTJ9dQBuzNzp)PvI82Pu)h2^Ma zg*wMP4YV@mHGUYt0dt&u3y z76(kmhzD*m@d@r*Ov`D$xjR2_bvqmATe5hXtrI845#*-DFPX9EUbtj-m=g+qsFtse z&JKV4CBk;DUu^?sXyhZxF9dL$A_vZezjNc}k|Y5vya`wGOf20`2RBa57u zpOZxm(KRXG^_J~JJVR0?ZJTMN1suTYii2nVuNYDkm&F&nAH8NJ{}ei{ zy+O29WI;k6E_{iL4MiAjzO>3WF)Zq`?NjVf{aSG!-M&rz(B^ZYK#zPzoUpc<6CV@d z+O{fRIBEC0wX___Ivt|z%X|MCRJp&>_}SR-x?u4S>dODtw$wz0f@awYIj%H?m4s>Cv?XK^1?srS3N+{iy-ykUh=J$~=NlHesKR*#roWC=L_W)HjuL08!)&{l1Ei;A) z2;qZ_o#deOEPTUiV!0Ue7;TX~04z%giQj0uLcG(_r;<2e23~82P4DImnnOBrcw%Ju z_~c61wnLofN^&N?B(wK~>_<4Y+I-duzP21#FsMzsp1NJv)*$nd9gR=ymM@st-hdvk zuYE!u>KAXnCNC?h;-`YZ(YFMDS=uM+cyg8WGwf^&=brDMCj!>q8W!$yy;Ar-?{}!B zq-m&cXNoDjk|^Q7nG~YkwkF|BMnI1qBKOem-jG>`Vk;)?uc2?kH-%g2R@wu%B-t(~ zKS@`!aFV8+7sL=lvFu8Fl8qOojI+#TrL$@P0}`dBKO6GwyCL5l;q}1^!%7V<?gqfKEq@PktuZig{uu|jdZEGvdKPn#Fh0aJ2HPt1>^#*Um zz~Ba|GXmd}t+1d>&80?&ZSZh?T$%k$JC)H1Gy=7QY%nI+UuhkJb(CUAgq>Qh#U+Sc zmkOl}aQ!Ame!Kj}^$*Xi1Qnx5EOnw?%m=I$y{u2S`XW3SCbOFVNNyQ9FN)ad{+ZP; zWHP?-53RwVTeMN$P&XiG>B>ISu6^=OJp@to^S%~lq6|2CTbQslC^7fp7S{maF3XMv zVF{_g$@!$vbZ!<~IHG@cYiWLAq_~ZoI@id_;qNtoz|=M;$3@V*A_YnRjcCVk>m=t7 zvo~5+vNN?3hpbo6Rx!9Zhf(AGH}gpRg9b5!%1#AUPds0ySUuIAnfmP>B$f;=S5%cUY&I zbu~0G@cW3TYB`jeRJ2 zOjK!;BwG#VnTR?WyD{Q>am?ls&&272QfAF+dA&zVTF$s7caA7+c5|OASiuVYYmoLw z#@K-1ZRcmW#XaJ8;Ozl_Q~#&_Ee@ri2pJ+@QY-wVJzut0Q-hHd>8YPOtoH@(O%@^OWE+ zb2a!1Hx0-H0D`~T5kSCFS1atU(+qH{AZY;QHtaRR;`Y5aIcl|~`@rypwaid{_XlnEu*3$MA@YBFE;X6*vkem20db*SPD!2xG zaPIcE_Qfj?AjvnwFlV;CrUD{AliW0t*~;XDQg{AT#KPo11^G26N%1pn6<}#+%gwF5 zKHC19oG^^9y&LN|X8NUD*ICBrqtxOwyk}`ZW4`d`zfLW;lxE^TOw3`73BONSPD^fg z;#?le`=q6Wfw6)(a*J?DiaeD(QwfKNqdw{L*o3pU?N zR(ucodz}1jd-_j?m!M)h9lQ2s(aRS!BktJhLGkX&W@EtV0^jz&xCXYb9m6<|)?X<7 z$7d*R`wsu?#`KwE^f9N<`$^f$DlU-?oQ=j2BoOhK@kx|;T=iGER-eo0uz&Bb5Kr@p zF)TDd)5EW2P`M>u8+EEK3;2dTl5FTY3O*HmM_OJkx)t}aSX+^ z9y7KgkNsmmS9Q84@j=&U9CK;ph&Ji z2+L@^wDh95r%A2e=Cak{VOLrgmAH^!;ho8+31{;I3S8yQZW&6Jif8tuc^)SBn4!l|>dqt9RLcgAfhWpL74F$+-V;A5O~HNm2nn=mRQXG{!1*zF*nLt?nh zb~u*L4H~naaN}I9l81&8`MZ^_oTgjf8Gb`{pJ%1*+#NRpzyd>=O^Ef<1+zz8%3vF} zjCo?nzM2n$cX}SzO`!BzD;`$*#cc{C{vTWQBRvO@G+gh zeh$>;9^;s52;PovP(vZX8QF4f8ZnwBGO$I^BrgrZKQ%9~GEDHIUzbD>{j!xHTeKPp zk6mWcyjLC!Yi&(xwH=&?uYIU-ODja@PSuYc3%6wOX2b7=cbO_V)q5jfT_;(VkiI9J zps`9*T=slGXT^Ygf+6i3gkxLmdno-}DuQp+5(HeA9H2fo^ra!HF19IziU29QfK4wL zouNPT%^yUaC}`po*1g0$aG}=$-}J%UC{XT87?|OJXulQG(stYK8Ekgvc~|(_tVZ-h zr`VwRpZePNOpn#>Nzr$#jS!&1eJ(GAZ9OpwP?E`M&4jw3`j*f-h#g5PSQBOcqK;{{l8>8%?j zH_L9_sQX-M#d1OY2gJ-D1isBcY4jXY%_}7oNV$ zV?eby+$uzYUHylyTI_FP;@qTNzVAToQq6qTq5KlTht5khAIA5j5{nM@-fSYhr*Dfm z;<#O-pG#o8W}#489PtyfjvX7%zPps*VC6R zuv*P2X!GX76L)J6dJ?IjDodPQFjpwQM0dw>mB%N(A{qqeqZQ|IvA$V-OaDV=+H2vt z_gv=l>jFCyAMwT6kxqs@VYc$fBhuW--~rwI&GH)K?PmP6`_2^JtW}435)v8aSM{k3 z?oX(waPaYx0hW4T{6hXzI}Tc5-LmSrUuTf^n17}FI>falUCXhsx&b5wslJaH*4AxM z=Lr}0x>`-8U1PDHSoZuPc@J9LZmf^Xl&9wi9KoYoCqw5|{6CjfLDKotTU~Tx+ifiO zh?Qi;%aA!UF-xC4A;Ky&sK8Nqs}D#2mUKv-V%4>PWPj#IV)Tan z`qE>nEHS|*<((MCaEdxt@)+F?KFfr~WDNCL555#EC=jIAO6XM_Zdn1ym_RmXcjpm7 zszvbU8V$=LrYNxt#v9TgRMn-@|6%P|&bn-#IzOE$&5kJmJ@a{m@h@ZoUJQS*Eur9? zSohf7RjAEO16RQ7Em(U&u3m6Q1K|;YBO52!%gYRo=d*Ur$3H!2ObX~37@P1$O$Qm@ z{A!JLk!%({$5#ryMFpKEFYFe0_pJs(Bnxv5^Ql!%^G-s^QeWQz!v8QS>y$AtZy?F? z`E@+1Heh&3%*+Q+bC;_ zt;r1Ge%W;aH2N)K4p0&D)Twjw%)m&Zk}O4#pe{(aiC7Kg-t8AM0&6HU+iQ1-&%_1o^ViRuLbD%)GHbqDj%ee&A=78 zDE6JOtjMljQp~uc{O1YMFjBAtt8XpK5nZi+y4sn_Io(heEZE0t!`S_4u$RCCwpFxz zAQb~;Eok7KYCEh_1gQTu4o{#F%rev;)M0WfP|ji&T_6#WN^Fz+dxrtFVmW*>^9 zc53Z`exXD1P<+lgU$Y8b7q$Q`W$fRlC!R0z9^lN(TRH!Owcc zt(={FnG7#J9*9(QXYy-iW}i*Yui!ER5j^2 zCEzcHII{q03~e*iI&{T!(dI+Gq~4NL$CM0*%drf|Il>*KdE?@mjDp9E#8`vCfls`T z8BYtp(%&Hb5tsxvMTwkcvGwC+-ffTIm5U>Fvl@t`*>vMV|9VKnlFNyyZJ(hsrhoBgC{#~YnG#}v*!7lBI>++eo>!n(YCwL}_ zbNP{Uo|Pq68T}pnSgWF* z_JQj!M0M$^OTU6{#ojEC1$dtU4gt}9PY~zAeSWsJCSg|7?T|+Dcf|du{^vSj!nWxG z{}h*F|N4u{5SJxE6uTC`E5f~_qN*Mf$;atYLWD)^LI@lsdNOnw7EW=9^=wIp7}jqP zOe2d?Mj?}%hH&1@J>vZe_)tFGakTQ&d*e9|G^%7tFVT%~7+WIj2q=y}$7OYOc%~Sl z2JJk?bYS36?{}%5$*C?Qbrh!g=IflJYPZB^sW;Rf4hVxKTkhXUdZphKJ&p@ z=(*P3s97vpfYOQvSi`QpN2;sAMKjj3o6!HI&%Fsq8S2z}oe{ln)rgkzXjD8vMyi>jKYwXKn%4X8 zxHp3bdt5g<;=0mI*vbu%^qQ5e?#9>Z_8QoUcARH8@Z_qx!D;g6$Z&lM7wJFUVfh_4 z_-#84#C@P0*HmY(<&pVlC3QxJiJWmCwKTwNAmBS0BAVpgRlZ)W>XzC(3snL!8F=CVc>SqeqB)qN2 z@-pI&>0J8Xg{4A<=LJ{N7sG`Q{L4sIGVLbvq^r8YhS&^426|3d6hD92s~&yPRpJl^ z+(pG703#FP?@cm&lW`wPu5R4z^A=3pu}?|m8rs$QtiQka<;^E{8Y2Ek_RBJDgJqg6 zK-F{pI`2F-^P||;U=LOME`vFv1KoTmR-aF05AK*HWqYZ}dB^fYcNilE1+6uLS4wRh z(wE$_grRV+_%{+i8WjaMnSG4s1d0=0xP4Uv>2|a55l81+9|5P&qXyJDg9pG8EifXB zj&r)@V^_3s9K4ocj*+kTYTnLtAFkP(4(?^d+n)D^r7af(IX1k9-f!1bAaREYs7M?h zq{(gzyWrN~W{QQ{<(hTc1&Oom!g{;b${`77|_{6+cAnu3!TJh{y4s{f}`oeN$eqE=lXQ#`B&G@kV z5n9yMA+Ozx`B5Q!xYtU~|Fiy!{>H>+E{-IRUmP~2Qu~ppKe`NvgD`Tb13t#v9h*v& z-f4T{r3~5LqxwpgvM!q+b@5jR$InnU^M?P#8KX^)zt?#>x+k?Qu+i7o|#08DOz6!h`#qZMFma# zsX_V-oG7V)G)u7qT$_PbDKQ2F6?O!N78#<(Tb<}hWYpVYvqNCcv_^P0T$W}eS+bFP ztu~i3(S=g^#`)(WWewk^1Ho|)!Mq%9}30;jx+Z7%zShZS9fV2(n`I@UMT?Tfw1Qy zuP(YR;SSGdCU;vg5>}%8+Fuqnm}fXGEQd&T7+>4aN&iUzGCV^U-sKI!Q*Ec!!dd<_ zO2$F?{kkFduWMVFEvU_68uSqq0B$-DxmX(_;bfS<3_>0On_16rGZvY=UqR7<4C^TG zN<-e*hO@Sn#D^3fdCIB#?$aB$38_GmuiD$O`^7*eWW@<2(Aw5682m5Ok?<8X59Wdl z@|2RV9x$MgH>Oj%i_x{7#^t^GzFTIQGb`I;yKZ=o$-1!{*UaftAGrryvj8ZtJ>ti?8w54nI&CvT&^Q>d6)!53H?y@RSAK2Hb zHnoe;rBoiEL*n*(GlcIEKicKs4fk|UO%PBE>L<%$MAWT&f3~Z+;nQj~^13@^ZcjTv ziUNQ(_M$0IkSMO8WxjL?cQO(@;m@$p;t;u~jas+7ViY;cH=&PX0x8cMga_8lS5*Bj zaUYPL|AAKQUbB-%ri6!uyz+6~PLs)sRH94hk7D`u`o!cF4+aw7!j+%2G2IbEoq-t{ z?tiz0lG*@a6M~5yQ%NAUUWG&jPkp9&H%6{;X2pz~J9Nofj1smc3P&y}Esje$a~?51>|bm1^C9kwB4KERo@BanQ589? zm^)XOXI}VZer%5xSh{Ri&7||rjokZYm4WenVV)*uY_0pnr>=`qn`f(@WIODint156 zxoJRWMGXyGZ(~5##R5AI)d2x+HSmnK{|mI0HF5)XWN zLOlrIrPC0ax zCC8du?|E15*LGcfAaY9Ok?qZP^4$L3Xp5F1(d)SuVpGPQrr+sRj^9@c>*&9_k}%@i zoOFV`L3L(-DE#{8NBUFXdF--1f!7k_0p*)}Rpdplj}jYidTqR5wcE)Wj1&iQ4@#{9 zyD+2nl#01W=rNmjqh~jE6*3Xi4W_Y%hzjYx?fW#3y%B@f5Hq~*8z_d`7%vZ99Sk>- zc(9OyfBl)6KDLM)4f;ZV5p#yZ8+iQ{fT3&+ zTx=U-CQbV1h|*ncQv&;^e3P$|M4p*!Cw^$PhQS2T^79`|$IOzPhpu@zC%guM@3zxp z^gdBhDO}j{kC(?w_o|J1x>&?ejDm6eN@CRM7gOb<-^+N!2EoRPCM`bwO@c382xi>} z6;~mTbd{67<$Mg4T!#FYv!t7loFfSY@{hM{b;}oPT^rUXCfi>sb8N?aX!#8Ge_s0f zO&VS}*#)|L$+B^TW&NTCS*tiQc4aZ3{jI~0YrjSHR9snEyzdsW^>y5L#E>Q? z{x~#Aa!m9>F+(5{jGtL!*XC5{nF`zEwx1p9+8Qu^!r(FN;kRt%Vbc!`3%*@kS8Qjp z?sVbwUuyXOsKwF_!dj29u+qIsK)BmpgyGJTwr22)VS-vwGJ$(FbA``gFhFTOBSbNukc2utUqV}{AjeX^2wze z#y@Q^gzU7uWiC`0>Mf`*w&><$i>jO;K0Lq+=un=6lP~f>aqqDsmY;0Vi%%PeQ)`#X zWupjYa2X@QA7<_-c`(3AYd99(-=I#dBriD#hp4kJDG17B&5w|%uHME!ZIwl5H7kRm zU-f(dqSbQ;hC|G6yylhG7IuAYiQwQ8V= zR-l#3TS9s3%p!#SxM!R7Ua+I$B56QCi8%$JnKmKpc7t*ZQ=l0e%PFT z6oE)v(@a?tmvIK4m?np9E4x}6SZCTgFx;0*t}>D`1d?UW?*vlus6t~BwARV>L;n2b zQ=_(5`t&2+@>LI&H3U!hFzu^ALVbuZMc>h=I-}(s&m%bfDCDaV-rTM9q3^6~OS8Wu zTbM9^9(ooS{HDrdRrjRz>muUeaZb(Xe+n4(6=t@QEAM?#aowAO#d%4)R<@u=SL(5P z_9WB#$3Xz_kgW!JF>1izYMpEMuqCQj2i;o2F~iS1yS?pHpJ{Fktq&e3A|zZPy;g@< z82r3B+W1&Wl2#j^?x|fr7!Ib16WCUQj-R_i z8XYsJ6({|Vfo#0ZfVEEepguO|h%@oOa|_Av&G))FF!U#(b4ZfK-Lj%DJ-VFQCnVo{ zV>S3)lW<;~E2Q`5Yg_2}R713FJ<~rx=llHr9T=kKVMn9qH{-9O`hcL;*MU(89 z{3{4Is{?GyuC7|$vgLDXW^N5VA#20D4vsZE%%Dw+5!`3}<|TXl?ueN6&x#fo##j8WZud+ksTNN;$Ay+F7*_FdngxixnYiN{bvqY z)HRADbAfbwC^HO<`)Ku!A;2$ug1JQVlBO;fziG(VaOyaal`FW=rRMr-vMi(M5&NUg zRp!T=)FRR^%t@i%V9f+=;mAZ{xF;VVa}s3@j%a61M>xCOQd+*zr4>&9T=<1~m@wn# z4U41nZv0#YU~~j+{-$5FL0|`Zt2)R=ZNFxofrkPle)(~Dj|D;jBftnISDPX(O&unN z7j%oH56gXvjB|UL_vFE3noKa1Mo(tXrouTv@C5FO0xs)X!f@T){^h{Jw7q&b?P0?u zWDfD9JLfcG_C=}LqmjIF%Z(!0T=e7kyc=_;c$vUZ9 z7K0f&_nkj8tOKuouY}VbQh+n;|MXvujrV~q!pyZOd*OJB271?U{7ozm!&sx5L|+-} zDkhmzDOTX!R-B%kflCZzme;o0hr0b>)Vb`c+n-bv@i4;jzqnR&1}B-X1}0E!wx3$- z3Di-$p^0+|CrLy%@r}wJEe}grEfk7<^)b? znU=@n4tvY$s&* z4Z_PVHdk3;J)#q8uZEisNcJsilX5;R2ZW}AM33-Gir(Mwd$Jqv*Ewybv9Mwq|tCE&% z3o|_9cv-E(O(FfX`;X+p8Vm%H1|lMgM|RKQ=EY~Pv-#c3urr%P3$Pi6=?IvXa{!Yl)RyU9(GDhStGK+V>OHMCo3A=$x&Ik1j@zDg2`c$eC#G? z$*qCG@$gr4Ou!8t@VVnt;}nvi$9I->?eE@Rby3~ZfLwR2{02~_Tl;UMQWr@xZjbSc z4mdo$=yKy5;v=VsKuL1*5pZ8%ZTyRxg zFyA3cM}d$&Wd-PWKui}9n6?vpoPl+rS93#y7sGo8T&cA_f?r9n^vAC>kOwW>{3_54 zox*{nXu&l?X9nd97q>umfeCyCX!~le=4lCqWwpa*OzT{w!&Z_gxPbj>BC)lSS74IWzx9}U7 zKVv)dk<$E~c;m`Z5Fcm~s@ohty!~*;@3LpQ1;(RlMt99${BS>%kVKlfrNK2bK-;Gv zq2QhM*p_>fJHw6*SboarFQv#U%L?;NdUUuRIdjBUxfm|5n98;oGL0DACe= zw3hV2RJEcWW1}7C&J}~iM>fA>ky9IO$pENzoOib^A9H0*#^qsKZo7=P3uq{#NtPU? zsD|Rb2;=tbyx5OMpY8&`L*!~L6-{m}*~!kR`2+_~r4j@y8oWl;r~@XerNY>102oz3 zlo-S>I9uqJ*(_+u{&wzo_1~_U*GXH^6x1b{{|jb9iWBFMws05r6^?_*?r3txrQ${|W9n{a4fY&VQyfhS%lMieKJn+1ZSDy|_|G{v4)& zFGRFXY4EP*oErO_2FE^2ZwD>yw@+3LCoMmJB_nQ_#78r`GDFTe_& zdY0U70u3;8v>3lln)&<+d>qqOQkSA?KA-{#D;k4K!tMRw{)P%UtaAF2p+)1s+S_PI zR9e}U$$mrB_3egjXAvTm|r7-HPrAQgTUbnI4h z#TOLgE0hkKms(O&#auDcIShgXhJL#d=AF-AE$^h1n%1A(CI`kfgauO}n(}D;3$TI` zg}=B@7VV)isLYBjZ!puv|ad4_nGb zt8dT2qL|0y7Zmd!Tl7r4kmhCvls^v73r+&7Qgg|`Tk#BtCBdxm-bn#Eb}MCBll`%EX5M_E&zPYGWRY3QwA(g0r7>afpmE#YVU$$TzffrZp(Y7s+1pG+-WBtH+EpSd z4^=V8gC~Y3;S)Y{dPoP$;{wwJfUTQX>Cj1cL7xm(elt|hm`4%+G*}utiKlxHZH;&y zVrGH}=)YXvs5hrtw)q2k)m8;Wd;6(AYH#Km5*b>-N(iC*l5a3bN|e&~zIU}kljqSf zOGGANHBKBR-=&A?O6f1sBdmTk$I^_8&=!mg9A>pxuBbsLRcOXqu=!O@jRJC1em@Fr z5d4l19m}Z&;04ty3#);4XToNCvkP2zhe$4((zYg@@D(-=4bskHiP=P@(^wd(JEWxT zjzSW^T_h=yt`gxZHv|$k@0)v#QwyH~S;XEke_Q-Q$x3!^hgv&9_>aMB+`%GQp-c2^PSPJvEfD5}3Z}MPGYp|Y_!s-TJ$1E_xb$0mgYZB5;?TAD!i2w(+p0Gk zBX~#KDK$&);X~aBCbE4AA9GZEO#d?)f3*(PRl{gv_S;ByV-RsdF$3+$c*RtZ3>JWP z6-d^6|JAF{<8gmWd_n#mZ1JV!5IcPa#`6NMWD8(R4hf2V7bj65wQz8e7nx#%C^?C| zO0L59rnSfJc*trGfiJ;F-1wbL6nEK7kRqRXVWeER{Ksk;a8)y|p4l=F+4s}O)1C*32DCamFO`WUVrUnDLFI+}Y-|4WO z4~D%)9#2e})lmfpg;||0KKhxmg`7?DlK+M@@8qYQgEQ*g^2xsT(?Cn)6}Qhfo7icq zrPQ&3SK4-KkKC%iPEY(ziQ@fQ)_M}aE?~y@R54HvTKcQa_30E2A_JVtvK=uqZqPt= zL|1;|Hb!e^5o@P_V-jQLHrXCu=XNEANm*=+sK3YdAQO>F21iTG7lKH0r`1pGk0?JM$Cf3 zp&O(2s;*%f*H(i%-f!UMJ*w*qjs)4yZ#}MfigKW4Q87a3H?!l8RQDSSS3K!O!Yt5; zsCwyH+6c7`N*C`S0=+izxo)yKKaEsaqx0--O6ARXpOaRnoXT6AmcCNKcd532H;<&{ zLG#swo!gvciDCOU^N*B!5ee)%)VpQ-Nk2BR=Pp-arEq4C@py*MYOA5-iQ_08QPBF+ z(d~?ueB(Iwdm*P+f9zMSxSbB_j8L}^4aKk|@!rkmEgSS4pLV9-1~94HB}8I63-A_- zrVOO&@vAypTO6f8-aFAVibOqL5;7XMHqfF2ZVRhx5alNMfTKub`i z;(yq;_u+5rZ;k%Ujjnk=onYFJsHA2b@_6dAwXkI86TFjkosRGIK2Kl!sisRt&i~`+ zolhpQj5;IZK9o+9ZnBIg-)P&3zXnVgik0f0&n1rgrx{k3m)FfNzoUlJwi~`yJE_MV zwe0o2+mS1+pc(@DT}>Io9zD@W^ZK7#{SujsPz5knGp6F5EoTkr3HRhaYbGv!LWJ3u~3|??yYi*h(5P%~FVL7~QCs!=E2PmSF{#1icZp^7%e} zn}0~v1=1}d`Y`%gW(Gb!Hcf25WFZFgxxsY`+|U5ivp&CY*b)=gqy z@YEpZ0Wd1afCk6{2`Xk@bf-|&rX{KdkYo_#cFF&SIVW_(Ki$5AN-s?CRl5+_O7Zx( z;h)`H=c&FnOFKKRLyM4vdDH7vOl|@3b`2iEOguGd_{apVqx4P?$*JNT^>d=JsV>`cj2R)f#aQ8>ADyd)U{fZbp=*(F3 zLH5u^4JpCbNs|G zXa=5+D#jW@Ru}*E-@@A~K`!*MY(`A`vvF9CiWq0VNBY(ixYbeZ7Tl))!?YO`Pjljw znZ2(`a;;~5DzV&3BPy?b#=;@mQ23sn%l=Pu26fSGPV?8=1DXpfEyhr%an;y%YJsoa z$G~0FCI-pCaT-yOd7C*@>qh*uB?<4{-T1)_ln>LH$9cEH33Zv>{(SRDb!TFbxBGmUGjqvT*266PW(D~z!-z4>bZX>4P zeegypztHor@!&V_@AwH%t9rvRTChsphOf5s{3$fOg;bL?!>c>i{*RSH;kSm9GQWj% z$?Q>|Zg(vR+G?W$B}xE+#gX%2jE^T#x5KJRddwb>7Cy?fyGIWqcIG1X9F|s!RmgLO zm+(ONbFESCKxt+1o$KamKa3jz^m`4KYWQ*J_`l2QLId1{-q*cSNtcVCvNunLsnyvL zx^U;!&cx2VJ=*y7rZ4-dnm<_q7N)taXy6Z=_>~QQ6i4Y4fd%pMg+~3~MvDfD^NTmS z2Mc@3=kx^2&D){!*3lw1<&V>O8NaOc<7i!eE}1gPco@daGJw$N2!RFny6`5pnFTKy zrB7Ifi(r^^DXy*0z)z*m~`|i%_pqt;@E*ga7<>Jz9F$rw(J}}u^n1F_$tdH`kgCQz>pY~uU_i62&3V9~x((UnUdzcA zD$=(~qqR-25* z(H&(R;hA&*WA!kCy8K2`_Jco*d3H3y23Tv zeIG)BL_x%-kVkD{GeeOXpQQF=9a+Ct8Op-w$6&c1CLNBPv?+kBv z5b6t7I&!+8`Q`G~nDn6v)7p#vUyhMm9~tGvmg{9q06cLFadbtBMx({*fK7DO9Chs<>=EEKZ2hvDf8q{#zu^Ex~udWZkaN}TXtz=>M| z>HlHry~CQm-v9q93R)CY1Z1Wbm9_{GksT5(3T+X1TdK%PRKy@*4+&(6D9B7*3<*J` zg38`I0g(*}h-}DUBw;3ykO3k2@%diAzhD2Ib6u}<&VAp{$K&$|XwrVEBg1UIAmJMw z7N{yixM=CDqI6V!@XQe>+GMU@Z)t?BKddX+)R|GB;`-b`bDFZ&k;$JyR8~&f zBzK(B9oT9!??rrIVQg`{$xHIuw!T-9(x zH}u#9w)*+{D2(`otka%X6LNI0{1kYxAf2+Hu*)9?U08KwyqRw$(AkZoey@kSr~|~9 zqTJ1p=*&HC(}#8I*d7Dkz+G_WUhOqJlii$?hM>&isGW+>9d(++pJ%$GDGKE<{2ZMA zXIG?R-OM4@bMQdSRQvQwv=w=k{Q$`vkqkt{(%kxYFuQX~8jXkYSb5E+x$Hwo{8v;n z=i#dHU%A_`2z z4+c^(3*Ip1Hyps)AQPBx!TW-sh=zs7YrAQitrLI;bSa2|ZUB1&${>;zba3_BfJ`*^ z1C@U>hU`unG=0_~+rjjE_PAn8UGd_BlBXQ%SibQ3*tjEK3VoRr_*-XDT)X8B(yyes zddj}%@VnKgVyLi(cKvcu)DRGy8IdA88$3)r)-pF;(tXdktq7lTRL$&f$|UFLN@r4lJNm=f1PcyKRm5%ry@*inmy-+fNq}v-z!lat~@`Zooeq zLC<%Yz8~$zsgA>f^|Q|U-fBO z;G27~si$e(Kt$l|CM2k`R7^}uRsD0I&q}m4+i9{a#Fb;XTJpPQ&-$M=BpF6@5d+e! zz5Fk8)!=J0xzy#=Z>Ga>WqlN9QcTqRao@8Rsr0^`f`DP%|Jxy|e2&jBVDz7|{^lU- zHi%4g(#$^NVogWZ-V}X(5;!3;mg$*7=b)<(JL^4D`hNYhtQ7u{n{K#2UjF9}lzCzK z#V!!xvXR+YUr7u(r{fC#vYa1S---^2Ge^7FTXf*%e>RUo0T*{h7LOb~6-?z@t9PJQ zsw}K<@v1#2t2j3b{kXeqsR~;H&&ou4Ar3dl6f$IiaUOChJ*(|T&Qx5z1@lLJ)U(?^ zP~$#96lku-z7-$VLE!o>b=*N(&#YX@HP?85zmexvN5N&-Je%B!3}nVwZL3bF)y@)9 z$|9937Oz|>zq1qk_0q0wzefnBmI6zOW1_AB=Hb}kR!-#Vwb18vQ;G^Mp(2oW^2T0U zGm~2rW$bVOkb3)5`T1QPQ_BvyYh9a;H!n4tYYRyWkwiM8d)+fh!>`IlCr*)8VP3@X zI#PEtD#E{(<2wUMxPW|f3?E>;r858czgUn}qGIKP6IGY_v>st%n97WbfkQK}J%2T#FX<#W;;2B%3K z_P)Ta*&?33>u$IsUOa*dP2Dh;o5s#ZTmn8o5sV~*9|l=g6SNg_r64C}Ov}{w%UBt1 zWA;M|XgnPQuhd(3i+zRgKMaU`+F=9CtnBdZIzQc1Ia1yTmPi&M26$OCae5l1e?D?F zB>dv;7pu4&6Vtr>tC`z;4G_G42);P)S3WiqZ{KJ?^gRMG``8bfo>hbsdYhby*sn+7 z|3?mC%NN=AJ(?CK=CM%^BfjpSH)@C-&M5yQvgeqc`dd0*%S|wikAhDQzHP>6hPVh*H_@f* zCNmpt=i_;v7cb{5{g1O^mepBuGx2ArrG?|D&rYbGpBr{ILW?X2j<`5!7P-a+>4l}A z%^CbRP2RqA6Z<*Z06`JdHtpV9QVC2jbi8$CnROKpspx)Nl4BKf6G0Z?!CY zSf)PcqN4fe+wwyz{>@eUS|tW1r1ibK6de1TAxK))oe`h2`=(VLRL9_h6j1E=+FsgK z&~@_@eY5-Zb4*%3mrDJ0)o0_RN0LYH*#2Q4`ma@%r^nF zxoG}%?<6H(B;aOEN*{Z*?aul^`U}T(@uw*`2Cc{E=!lr;HE*H@M)vGf7Wc3A6xLcT+u$Gjvw_E zK%d`?OvEkWux5Z1STY;~Ec_SpN!oJ9+BUVm`0PJ=@25;CW|KEcLd}o1{hIhkV}FSj ziwL&%>ZgB0U&Kj7oE)L{f~q`=gqTjdb?4?QL#u5MO2t^xa^~wi1q$a+%?guD_}A)A z4-K{!@MI3hGL*RoVpaM;Wfhu#oKo!#lv#n6XOw8KGYud=6N}V%^KV8J)>n%c12b~I zM64b|2P~fW=-?1j2vSy+x&`G#G#koa+vRwxc8!WlBqo}%6V&Mq0w=Ys>T5@>DZZyk-h*kj0p_|9X%Sa}{pd2GJzG-xEb^l1 z%aGB?Nz_r>nf_mac!?qPYNKkqV25Z{VJXO5oFQ2wRN}AczpkDnXh6aSEh^aWQ$~VH zZSNnE7(yTGJ~3!nyHPgjDfEuioA+J&!-aX{(#ej?>0cyMPz?2&dF`toi9O;OEuDE)gSaho;lF-%PZFbyk(|Ia%d+qv0AKT5$8ZQE zBx9R2L+9y7%r*3Hr=_!+qP|D7PPcgWe+AdVPSvr< z&FDnp*r)-svUB)ov7Loj*sXzy*Uu!+eMHpSlA^of=o8WcouJ+~E$sJ(o`6*5^Iir!(oj{+`Bb#i7>r5^)O)r%UgE!lT}D-dunuf#T1Hmp^3b1^gABa^ZFhtE@| z%myRj1^CYokjPuupUWM;yi#&*URd-tdX2r3ersjvW6IibyWR?kE)aVVNVGEvo*yx6 zxwkjz1uDtV4bYxG(t?pyY_Nm8E{qz9VGAII)9$^3k06g%mi0`91l3%ui zzemQN?p94q1m;3O>;gVFotb$T|H8FB_8(^&x{m$mBkC?;x?xaBQe1*s_|Z-Pil*3w z{hK*gw?-X|u0oV1HSvna`QF+hLMBt;zYfp&0b68kNQKJqVtaSB;9BH^S0&hO{q0Tr z;a^|f9R*x*<@PQ$nkY|@6ru;!$VQ3bTUdsoCbxFH@wYtY+u1K7@JJrWa?>|t{AQ~1 zbn>ImqiO_eS+;(lEWaM}65cM7m%^Jk;I3rpw+FJfjVAvSS48nLQ|vWThU7z0E7&9x zkKp=cZJ*CktY%7TvNAmSvxT;P(@j8r3TZLMYDn$#S?~1G<;U$Ex0%20ngQ(CI8Ngz z{Jw5#V%_JYQJ?h~ZmUKfw^iQhCU{(Gfxz$~X#4|YZPSgZQm{|Mvb`jvz1K3j)MZ6t zGwyBgzOyI>OW(sU^k=7+At!K-dP&oogwMY+69C9j`LfC$(WEzY2ihLmY~1PAj{HSOMbUsMVyJ${FAlsEA&vp6^W zbpd@~4{F*h=PB_Lv-t}Srq9L$BeoBAJ@42a^(zG?21x1KC$U(^jyZ8pq49jTO0ZOL zbD)UbZW1kv8MNVUsXBv{EGwO89o%nP??j9J^%;^x**#$@z&g;_w_cmHR;l{E{055i zs?+7~;G-Bts&3;4wW=#C^`xL)h$w;9wA$KD6P>nYHjm;&mlk?VcM`n7VW^X_9x)vd ze1uzVZ$dx7>w3qB)~*-4o_J|M;OoWzflhQc$|Kf~pq2u*!GG^8R0~(Qx#6kQN0&`6 zRZ~R%lqWGT*3I-aKIr|zU-Ye+<2#%veKfk4(o)~`&0H3;>QL4L#1_^amw;C8I&OTn zfFU%nk;%0T_!&gMB-}grdHu?3Ppatah<8(8f8cI)xv$szmHbcQGZ!7!?_)zY(O*BJ zw^w!7?CPL0;HDmAV%~#X%)V<};ljb!daquoyt^HxD*rca?D^D(f+U0&pJfczsF3VW zcJ8q}?f88Uo9s7O$iJ;ry4I|@y-Sr3U zkr?N_h0vv_Iazn(lT5cGw?e-d%^sdX`KnDPKCeC2ai4foow;ZZXaZ3E_IMc46j8LlPq4zCAPz1LuH6(tT?WsVmQ;-8%@^o4Pek1A0jW z|HEV6joxcZ)i$E}jeou4*u1WOX=0!F-ga2cHj#Nwt?FUWtP(XWP+E9jS$AvJ^C!hOX?Mk8 zq~?YDXCfE_bq$u5jKQz7`|SncK-Uz=Ix8rVB=ShzG0dZRwY4{@SuGB3 zp_8%g0xYnl@!UDPrYuC{HGBTMrUsG`%uovTZ4|cYpib{RiZo*XjP)=5qKO^BMxEM7 ziy6u8Xcg3G4y)MQWV`0vc|$D{2MN9deKAmaXutPk9Z;X%Qz*+u|C;NC*{)jemx3R; zBEmJ!T=O*u>Zh=N)-!CkM(cJob*3Ck-V#1SWZ~mxV$NVYIw-S)qJ&Fw*Yz&(!&)*p^%M?ya&u^Co zRsN6i^{ww}$3kN30rc=m;$B)(hp<`xK9OrOX)z(IbxN49jQ0)ss_|3ai(NCHLusoy z4rR5O*W7=1w9E=!K%ANG?QApU(O<89L;qW8>(DQAUE0dn@8)$uc9tJ z4MF?TQZXY`P+C?Q9U5?TqW-2@ipl{nbT#nMDHar!5h-2ea~{b52mM?8B2-|FU%_0De6{T^{POPv`zUdrSpIE@@BJ~TLC8|JO!W2c`Z- zJf+=wC+ZAn#lc*Q`T|` z=PnANLU!aE>v1eQXzfK`LD*Mx{kf4p842mUegLE8ENv_HWU#=}<|l8?3ux!zf={Lg z`oZP8AUrhkMw6D+RJmdqmGulwqD#h{h5Blg~_s; zxbv3pNQi3-5uY#-f7tjDifY;H)Mw;C7pm$?k21$kJ%IxsoQKUv=x?g$Fqq^mC*9GaLm(k(^M77=n-B=w=@5ikNrg0(Rgbd_t2Gu<9LAZ=9u&y=O1DiEXg?L4 z+In)9y2@Ic zF->BNi>+_3-U<1%HL0E|Cdb;}V^7=}z(iiUMS1fE^#pCuoC3U_IQ1U!vNiD6#rO)^ z_5gIBqYSyCr_DIM*A@J=J8j3atWWa9KITjxOyyj&4$aZ*QFwSaA=P#9Zf~73)fzXx zwI!V{;1;uGtCF@^(dXzydn@9!$j_owstv*?82em~s_EjH4LY4GoyFM#r4I#W_yi)oU{H~I6dgtE5-DrIjPF?b?%@wYnB^*75I@o;=PNgnKVhz39$H zzUSPVMq)PRVO{w&Lfv+*`w zQDEp`v^YtPv|u*5mvOLkq{gJ1kGFG5yen3yP~)1{= z^&|OTcsZQwzIh~eNKdr+OD^8^bMkRrfg_-DFfPn@Ct3hY)Q!` z%PiNgnzS-P<4;RnyF$fOScaKu>9YtGRhuJrLozDyT+XV2=`}$~6o4$I)SQJs!5o}^ zbxKyN-(P0#bHvzln9cc963aKp7#WE6UomTaRCe?q6?5!uc~M0Eh>lHvcwK?`w(nJ- zV9J^>x0dQwnI!>Y95uhQw>dG=NDnABqTLlxo6nUDZH*$LuBTix3C;%*B%vLnxGt^P z{*52E4>_2cj5e6KOroSe;{CmjxP&P!?n^6bb4nm{^JL4v0<~keaZ#QrzHO+%qigE; zHS-)hj4nnn9DV;c*qk+}rOa5~zQa@k%&R1BT_5hXEP-`hp2qUETEwN>1(^Y}^KUkf z%qgI6=)UAWh-JpzyRlmYN;HUG#>v7O?+taZmxHOAS~u5>f|hU_he>%6@^)LgeT_-9 z-->T-VZtf~$L%HmrT^YCb_wuyph4Z9p=EWG+y^i3bp998F7$Cd^n1h2G?X5L+e3~L19?ume^iP#9D{1vsle7)jn!qwEltg!0i$pQ z&@LF?t5K9d8LcZ_FMU)qD?aHMe+$F4#rVU11Xdk#&3{$fheakhb~EiIvvf)BSy#KJ z$6kR6bpZeu=4do=+!AAI!bn2B>!?!jd8^767(>D;z5pjRxJdd;{kfNJUSk5jcByc2 zkvrJ+H?i+t|K7W~YumDWti;rwTgM4t`9>;qgK~UZ(e7A|*b%}KfAk7X-l_nctNxr_ zI-5=0!}n;$mqP9Yk1oX!(bkU=xvDM!7IOo5+WOeMO$& zJ**NKb;~!UoKKxiRz8f|;xO3q-qIN3K>fP)1TWKPi!QTG@YAXTF>C&ojWbAfpcO7S zwKvrrw_azLB0d;#C9j`+gp7P&YbzbPjRUz_R#?&sieHQ@z~}$T-CXdrF7MAdLXy8O z55!~F{(@yMI)=5ia_hy09*8vpe|2WcQ8gDkA*yvE&9~191Rp%p(|lXrt1^PDN6b5n zfYC_*SMmhCZw+q^CE!h5hT9~Xqr07EGso@Gzi!!IQ?#GGHw;8E~HF8zUcp_`S;KEwD08{E( z^R@qro36IUX_JwN0@n8;s$-Y$H@!}GRO?B{o}!(PfN%wwp>+q5Nt<_V+Itw@BBG-y z_4NEiI(myIhBxTNXoi3eywX{|qlj(wbQdC>_ z{fps3znARt+Rh*jG(Jhq?lQuiuefE~&fgK^!s6g6kKy3wqc~+^%;9s^PTc-7>++*_ z(i%qE=grbqjI=UaBQq2>s@Y=^XZmM!&1Kl_#))qKQtq73vSY+qGHVq8%xb$&<#W4?m1OcTReEciZ~9m4Z#)StJRku`lOf(TB@rfb>YN? ziDOE;vc|qEMP3cbdZjKxhuLYZu4knB%?l-%+mwi9;I!tH7{@l;NU@^aaNlw2pL8Mf z{d7idnC-e}HqCD)iz(HcRkt+9t&f0XckjNMpElLMSG%iNi28m)zPKnY7W>RE3S+)M z+FgHHbT#PETGHLHa`SoDyj|96iA>uO%>YdRw*0K+4_5_VfQ^J^&wvkljUY z_;{VW#C&!%qFV=WX5jzUg}MET#&! z|I*tF_?=_=HtADQ^KX4U!KzJt$4%$=lQ-1?FQx?pV;lb*otr8wN-DS2pdn0hkH>Gn zg=EY=C{vGoZH&h39$9OtS{%ZppX%_)^No%jT-%u{GcBbs3czVoA8?g9ts!2q){|vb z>X5l^!U|VKZ$$}A`VXShFVQWLgOUxsX3cRnfX%ULhY%kbZ1yzvZcH#OBMf&lE%Pkw z!1PSd5{Y}l{%c)7og!L9tKyn(pRNnDMBy5>z9*}zwE@by2B1hWA#YG(3-@V#GDt2r z0X9%ds^qpxbA)%Y=Lb*K>WRuAc_xijHO7h!6RI*Nf$vVaVimo()X3t$+c~*n;|+_c z%SK`E?v3>+w>IX^Vivb1BQ!!hVR;U-LVyPa_@y@{(2}sFP!e!G6Yu|>(8T>6 zV&PBH3hLN*wEY`?IdR^2L$CAXtg`Ct*LxgWEA$VX2}$!@V9Js`-jVV@1k5|gn!s?o zek1Hor`i+Mu^8_;VzJo->-Ftd;o48!t|KdZ7K>5;rR!qVG!ZUIfBsmA1aNH?w7hGO z3sPh7u?T~*a&%$mOHre4(H&dB#vikPpijFr&ZI_^rU!uk8SgNgdo1jV%jG-qSh_y` zGg?LA3)@id%`t7KOp~C0jD{zVvn?j-zm~^REzcA-zP*2s@YQ+G=@ViXO)@1V)h%9f zaBFx}xG>eoF4Y8_ZN)o3Wyr zK#erw$b9i8@TMR-=&kaYQPqK<&P&zJ9`KPQZfl7X??hg25nN9r$3&jbCH#33wKQX) z$9PMtT)ZbzaFv00ZEbuS>Vs2Hm?2aT%K-1k8>fQzl~0X62xSJ?B^1$xU3ZBv@D&S3cFF7LZa~LlTB2U?zlnzzSJdX&PK{4}- zgl!kuorhkSjj8U<{UZC*cKy>Lg?=`rW=Dc6YJ%{GArU5o#ns=aYy}>1&b7X-_c&H{ z#njpt)Xv}4hkfzVocuf8DJcGh_cJxpe~wv+qOl8af%6K)N4>1@T&9-v-jR)S))7w! zFCV?+`vA<4hmSH1_ClnX*njFGJw_M@RLhx(?yIlbOds95lK!|m`mUUq`s*XzJ)Su| zE_aPRoPs+D%u*ej4fkk^{!Wp~GiozhmwuXNo5kqTFS+o{m6(>oK)Lh+l6BQOusH7O zttW|i-cmu+*CVRs@rmwF9P3_`mXgO_8ZatTvgS*#47;J#T1&8m@q115v6_W2A4WbL zbwc*Lc#pML1<=3q3jHL{g6a4`b!U^B(&{<(+pcxhxf*j#6LHPV`}-D1fesQ7v)-nA z#&&6=GXy?=5R$VnJg%MCysGy=F8wewiJ$Ume>?7m-uWow)p42ZJd@G71AKGrCKhsa zW1m@YNN%m9T)qJTU(z&z9k<=G(afU+iMlpM-9vHC^{Zc2F`WaHy18r!Z|#OJ(pd9~ z__@{~R(>e&DqW$apGOU0=B`@D^!nA*qCNfDqK}=2f2KlxKqW0W@M+bFG&4iaA6`G3L^hbHG zJ*4Y00q+d7Z21S#bqlpDX|U|Syi*YA6(B#LJh2e@yNL=aY5BEyRy=pNG8Dy}^kN3B z6@0KIzqUJ-V`6phX#0D$ZQ7|BU$dW3X&9_7T1!>C0PPWhYXLL{$V9U|p1#KmIj~iO z`;Y1|6YA+yz#5vLxPN`*0P z-+O>UIjgYsz|`JdrT{p#H-6+eCjS2q`4tfbGe7AXr2Jtx!gcJdMy|IV-q?md zlB{}~&e0ESThjEJ@BI4fx89P2f+H&(AMAdi>v=d)_a*9WXOvlp;$}X$_slcNd&Nus zum_?&*!6zip#*TymR4R~{4eYpnWxf3QD=%cS1%1hdwVCShE~O=)D>M>aitG#J)*3< zg9FChA355bqQBnq27&bs+T~`~=%?JZp?2PEq3ae2$0pKjZpp(xWe3=e>$mXsQs=vx zfQx7&`D{cK$Yhu^w*5AZjI9p&hX0z)c({VDm4fW^=I~cnO1ErzC#PRTeB#_WGSR-9 zhw&AN{3^}2ue0@0lX+PE7!{nA}=MF zQCP_#?>gGjRGw!*2hC!i%2Vvj+<8A_(c+6?lu2wxS)NH0sb$k{vbc)-HlAk7O?97W zm{23!^gw(9vcVwtqo!-fuB>K!x{)jt^Z({m{%`TA+t=`=g-c^LdLnOujfL_fL=(Xb zAV{be{;>K{v`{#v0^%eK6hk@JBJWxV>IIK39g|nEOMaOh)N+>}RMWL7f5dsR`q!$d zAitJ0_V>u^^=BH9rN&{9?Np6B*3{(Sc|v#p9Dt*1lB21o?oGmB?x^kW=Stu2iTfPS zpM)d{H{z#p%n#*}mrajMeE_5&cr-J?6<;q|NWGlXz0>%Lw4tIhrPwWBhUj*hi1FBM zA6pVXl|HOZ2=uwbNp!btj+B%PdC|9kgs&3^Ty?g~sq1&1n9aY3+|x&E=**jpl~0tu zP+c!h!6tM2o~fkQG2ZRoY4;+xbgMER=R-n&5q^&rS}{(h{HV010}uM59Ei+6jGP)i z7n>hPZws5Y_jgAz9PNY5Noo0{wh)FqI-}Jf@0d;_eYihFh?;sx5L|)Pl*@$=It9sZ zy6V9xNyZS;c;I^kX09`RnH7H`B9*(>LKBWKw()j9#%3w3Hpo`$k4K0w{m=$F&t&_( zyp6dlg|l*G9o<%1wp0r&pYXd;M3*j}xZyDGzIq#!3;~yb{_jp~tkVks-E{gwxDW7( zC^u#oPAU;p?`!gwZ66)j3r^E}GHep1?^vH>2C=5$LzssfN3)ANf;W2itFA7$#yjb6 z1igq4G?I=5J{xDm&Eo_=fiXd^UIb=i)fA4U8&Fw>PQe*dA{b_0wH#^-=}=XMAd`&7 zaTPu1g2d3gl!qb`Ry@G!Qt_R=>(!5!Cdjt_gKY01F4xGMYfx>qmE$>vIj@8>tN&m} zlrD_}sT|uFXDsYV_k#mOFu&s^*`GbOhe2D>o8T>th6Mh{xvTp=-qbPE{Fc7A*_ zcKdNLx$B+oS*DM?wJGJpsAh~4LnWauncMnWG!nDQ$j65z6mWiLif4X}#n5YN; z3oC5&f{72+9(UdtvIeci6*)_99T9Q3z!Dxw2Abz+UAmOcS=N$;U0|d+j6pE65|!P- zS29K5{2_fb?T(Z zKGD%G+NrBs(Sce~BWjkv_eU@+T%hr@;#3d_sI1!V1VJb2=Z+6+a(jPifPN11T>EoZ zpp-54Q#2YYt5F30^(YRfq-z@a{dgE56_hH#tE&H(q&6vBoUPcbBgIp6{ zO-dQ9W0o)O72WCReS1bFpU}sy<&=ip|2=41uWZe(W=p2Mu~MY#)HQ9!GZA`|J9V<^ zX(N+V5o*CjoW{qJTT1G;*@_|Glk|8F=&5q!U4Cm_+TkqZtGwUkTVV@*xIx#ucKj0g zdqh*qZ4Kn(H%Eq)8g^(XvQ`A>Y0>Jnv~po;4t=xO8Ju@8UH-+5%md{erUjRZFv!f5 zOZv*BQ@Wu%H5=x>Fr#V{$O4^rc8Xe4mzvck4`bqammbW{OSlA~H>tY5+fsVAYX~)O zIeopQ+g*l$S%}(Cb#m`y^c!W#6mUFg@M_OKRMh-Fh^#sSxrVa^;$6A|hx~cX>^`=} zb?U(pKI?BAW$?qnT@aWHXMf-Q)C5i+1`aIqOGqt@vu)e%XDC6g%tMa-UUK|C<=%3&4V3B~F~qCFBWT z+~)AJl!ZryiCr!&?{^P-GZR%yJ0070$k>&7q9AWjDL8lZeo9!`by7xH#%dP-@`77c zO?5t!=%Ylg9_2Z@qnN`f&VwGtraFxL+%SPYEV^n6)BSbbXl@`dV%457>{^Nutg%h8kjD_7Q!W-I&AX*2pOvQ80ba6}XRP zXN?M$fOx1z_L5~JWb>JB!^xeEkEy4}7c|T@Cyw`6#bz}|yQaTGXiidTL6i|wjDzbX zXwZ7%7c)a%LJTwTapMD*Jx%ePsDSyxOAIBP+P$os74f`F!14Yx)vdG2yU(6rOF#HQ zQ>$~kyUutSq-JgvO+6Git?)iO>i^{`HF;3ZpClR7_l978Nt_MCe$TuHucQRvIK7Z6 z&d0fxbgOX)40#ap1y4G$7Zmrg`RmamrhRPHM0FPxs!*;y?zHs);H5y`z3*eGR1!z3 zHazQ8`pgjzv$3SBXMy8kD#_H2bQS$mp_^K(T|E9{I3_9s@qI{--##m~+OD$5QWj*i zSL6I95qj6Cd;(+46DtgVx)HPq*Uxv)>%J%(Mq^L7A@(wUCowc@y$irx(-upOZ`x0x zQ;%FabuTEbkr&I%u%VB@p`%OOx0;<-s{KA1|H1waZa^jscJ2gh+)|xtytrB9onPOD zNHa&?Q`@gVM!;w`K{s{kwmV5m{UPF8>DTD|82ab#n*$eQkAg2)MYN7Br`_7A%ON(-mE^kcl7FaP~eoUn*PJ5R*A*>LJj10xsNzXrRMF(;-!;h-4=dqA0x%* zmi?y2dG@cORCz?XwZKW})f&4pjw9whE)kiRK^J`JON4M1BsFmC#iY`*h0 zmK!OQxagJD)0h+G|ESfz{m}YFmC)!?3NKDsvGX|A;)M!q@`11Q90fsVZ$V~5@o4qN>e-=S4JsaX908+QhZP0Xn{}8aP9UNXsIT&-}w+J;sj~jW$PQQsfRolCBV;)Hrwx<=E8il?g_S$95%NwtRw! zYN-PE@_lSd|jEtazJz*gZ8;uG8)+tt6iTDLogFHP=2 ziroM;^ek&?P%vTVGppaaX8Y+l=Rg;>Y}zLX#ckgQjEx;t@^$IDlvg$pmX}ryW>W9Y zBdteQ%TyvQZ;zTODwCi46p$Y)krC3Li6z>LoR7CIn}5t*yH>PJQX;<{WMy-nNWgKu7nkQ_A2jjDtLSfa9vScqm$b68>*%{ib}58qi)*?7exq zBnD4erxKlN%IoRBko)X3r{73AWxrCjC;e~_uqBdeeH-e1!bFIYGnCf6_$5kz7mq|H zeOg6Hmvtr39aZ^Bt<%8sGz;S5j=2SS#}}zM>bPZT~B8Ud}YGzcu^7Gzr*G@^uBitW^j=;k=ktAz!)F5KdZkiPjm6ZZS`;t8&Bny@q7^w1>EiQVwC z6S4H>-gE0bsY4F8V$Ri0i_%W(o4ZOw7GDkWF$;g`f=8x;RR%7=k)h83xiQ5UxG?_- z{0K`3WNOl1<}xZ>gFB6K_Q@TrzmC9wOeMn>Rj61UQrW2lp3e&WeIy$)|AuFTZxjiC zTg;qM}J}Y;s{0YVMQ%H4$OSCYr-n5T&hu;aQJWk}NRJOCLOIi+4BZjMWS*Q&s z$3tXeUaCZ2MgYcY#!gN96u=`-N%n4RCtYhSf$w(zeblyREnm0gdAjxd7kB`*5pheg zrBT)aGJJ1}92*oCNWw)^uh+Kr6m28=*QfcSNMfVOuw9tl>UZ&=c0?JMBI=3T*bJ*J zp-~?;;tPd@$Um^1;geiuP&$T2kz>-25+GE%CJ;Z)J3$xO$%8qNt*>tV=Rr=i?v5R;Y;t3jjyR+$6seWYA zTyS?!Oce0gCk4~1!Kme5T50jR|HCxxMFccw&|IJ!WdPG4ZcT5H=E#i$(JRj|OB2;9 z*=F~rDmC@bx(@8)I?`B~ek!yo2|c10alP`x7H(%AL)QM?($u6CKvo7=gyu`HD?Sthb*Xp_3`%Gu0n*@Q$4rB23~lRvq3i-2t&;$Fs(PPN1IW9suD} zsxs~QiWZo0TvZZ2TFC!HcOZ+8dl=WP2o8uK1=iKBHnIrZI~7W)gnD4n#0P_wodf`( z=YOVsXhp&Eu`S2VWqFuS$nez}D}XBCB@$2>IR|7qjq!f{62X<-#}aYRuvhCNM>@o( zIlu9t1F}i*3;n+`MpQ*ziNnuQ({}HN9f-Ulo>U$V>bAxMyn|)evDKT-kL?&TL7}(g z&XC?F>`T8htO`;|WsR#_UN7neEa7OVPIs@>ysl@I54q^6&SMMiqb}w*`Msz;j-+fB zH*28C+VL4oyMCLfvt%#zg0gy@k)Hu1ind!)N!Zp($ zNJ=SzBYBg!3uCYAeQ&JdsytQVBb|aWBBwWk=7@&+Z;vvP3{b( zY~E;Me&TjM9l-ip#%?Aq0dOaB66^?Idh+4a6LPMkQ_eU4MMzeW`Q{l;#jgRRo7VN$0&~~G`UnEhkyK~vFs?&p)a+b7O zR;LXtcfr$ag7O6VdGP3Y6Yy^n;2mO#x33OSIPnVQGH_V`2wv*YWdwGvJ5w+_XD;Lf z+OY?sWN#)_Cv;bLmPv3+>aB*Gxa4)=nbC2I#rha_(^z(WyaM-$#iq@4&0$LZ?7d&} zM0LAe=ZL^$OucoD&CcpEz5w6NwR_+2M4H9e#*Xcqp?Qfoh#jG_!T1k4rjkh;L{K@@ zN;;q*b-P~49`XgYWGhm_Px}5&)~hSdUrE26n(5{ofN67*D6OYWMrSzb2$zE4V++x0 z5LQOWorQDKZRSn@79spI?B=Qv|9xTVcVFvI8_k3tSsq&i{nDGFF?p$_0Es#gJKhLr zlk2CA+|y|*7P#4zn%CMry?s7XZ)c_3B#2!QPV68hgbh?^ zGgnQz(`ucrujuR8czP&*Eqp1GtppOd8&6CZ?KkzZNQTivGoGFDC-sXJ6Z@&if2w<% z?qK3HtwM8FqT_F*TUkIN{U>q&I!S3+nPrGT< zDMxF5V;Uq+b7tV+qs!cOUxj_Hbhz%|QQ!3=>plJa(P#Sg6#U@4WA_uyY29WeEC0jM zz8`11REYP9=KIScueH>TIwoeOm=+Z;g)|c0D*1bs-L}+aCYA}HzNAs^6OH>$b@%2E zjrBa-Q84s|>-Op*{?k6*fK=& zzH{->b{738hT&!m-t0g`9Jo%sHH|IZ*AOGEQ6g{NA1NQM+{R(KGmp%F=;v}Il>Y)Z ze3_2Ej<7=C?Q~-`6EjfgmwJNJ;6`AwSH#~XEug`?;|k9l{GExhTl7;;e7?sBEiiK@ee^z-YWmch z!5I&1Z6SaQxDa#-pRN-hKfVFZLZfq?KklxBbBcIonnU-#w@j_0+SL4$z>`_Y^+cw6 zit~6J!1lW7v&_xD)+lv_hpWJL+ajQJ&&hPkS{nwYRTn80@zw57;U@24R_|f#f+2mN z4%u#VYNmrOJ-m9)-)kDWf#NX~NbnMJFF@E?%A4qt=B>9WX0LK)_MyL6N|U`VIkru^ z8D4GX*qg+S?h)GjTUf}DaJ7(cXE|U-T2_OzaLlkm;6-?c?FRO8{ikD2*jUkYxBenk z@%nG&?6W(Z_s+o1b>N$>J!D=JB)qX(1<{s-z{XDXO=m{w;;IV1s0Nh;@f({NQQ$u9 zB}kxl2X?p0TJdJt%_>hB&~$#!hz86W)@Zr6HK;?4%HWiG&t(P@7?YYD1L&a0mVaiV zbf;?sZ7A;ooeInGVyLh9x&BB6MI#N}^jsHqF0^#i0Zb`03>ea5TzuZT4c=)V29Z1a^gS@;5( zaNQzZIIxnvQ&d{lhyYs)fg}SyEO?*f=tSLQg@bg<$}Ge#Og2(YgMCg6^&v^$>w*J+ zRX!i9>ZO|{9GHWDr}0`_KY1g9efu4rYoK^<>TfhJXl3zg93HBnQOZFbogrOAAsFG2 z1~1V!X#mF}0EqEx4-+part{q9zeh73E4f%Dur)C5C|s;x%LE(VcTxtte)7iCdM_Iw)N5Fp>ai|clNa*A)V?KO9f6qPR4<~il$4}4tZmJV4f9*^nK)djlC*adhF!qIcBdds z*UFFw;om>)eEWUAOOfcm*lM~-!_E4xl1Md`-z2l@E3wjx{rwxo zyQ3jyJtmJ?RE_}Tl}Wa0S0H!9E`zBHf`2n%B_@4tmz-TX)WOIHJt<_gd3PnYgNjR$ zSn99(hboxqKXuzY2OWSWTJ%mMELv`au*;33>)fiIdKX(95#cNZ9af`PPZDH5MwJOVr&9%SY z9&F^?H|cB+X&(`OG?4Xf%1LJbA4z8#kW~8r?HVhm+@>te+?t$nnp9GA1)(x^8Z)Pw zG&d+W%w2H@C9|}0A+y|t%F1%X4R^&AH5D{d#0_`c5EMlakjLNud2?QzbKaf%+~+>` z_w&837<0=#o?dgr@BE2+-H6>CT(WvDE5&Tyv;GFV zF9>BeKRGUZYRS7h-V;{kzT+?a?g0+ueShq7Ab_h_vR#D5cPhPREg1zni6@Rud5Nv1 zZsA?83#WFgR{mzS=1Z*Z7zl-yiz&hzaoGKVW)!ph3HU&)ELNl>J-SLqX7 z0c)(Y%w;)jIg#1H`H30>&5?e-$*qO$s!>N=y9@3RWz^$zz4#A&DYsw2Kw zsahtc0j=idevzdSh6pM3*?X*w z-_%ZNEF(F}=ogjOhPA zvk$4-YUjO>xhC1jFyb8C>pZaw0AH6BMM+_sh2v9a_ak8pe84NwI(?GRE(E{Hr3zi~3)y?Wp`?t2EihFiMu@=1<(R#^c^cadS?4{t-Uifz&v9Ywm!gaNdX+*AL5>dio{s4B-z+zfzj(;0Z0zb9@QS z>qS97%e7@X$Nv$k+h&UcM8y~LXY~{Z7shz^H3wDjcHhMJt@r!#sVRG{LlHIUOGQED zw*}3o3v0MFi)ALy6;KAr7foeF%d5ThZf2qTx%wOVAfGE^HoREeC~fG5>{JC4H;Czl^J*#Rna zYf9;JM&8XSP2V$Yef+{M%srl(p)_kqWa}e0fb^Y3xCvccS@T+I@xz{O^?N*o*32^3yxAsOZyhV+X2&wZ(1LYMJHMbWgXb18qOpUPk zv>2_JztM|PM}=uMo1Zi8Jtn=R$VeOWinXsG7@An08@x$Q;K_ubc52XOiL#>cqW(wQ z0o{(uK_?WQ*5cZ_bhERKZLxW&lG11phDf>@Ln3GA%kQ!U?=HQi2bH=^8;O@yszq5z~+O5>Q`8hGIVz5e#J{Fa{1egIpS_h;nGfPo+Sq$;z~5ze=a z>BkMbe?Vu3vp%e3y(NC&IE%Y>ns@vGW*b(k2OKOff1*yRWKi+Ma*fwfA6(w#jpv>qThX zz9(3|NlH=M_!VszcMG{JANUC=D4j6u{LGJ@kDe%?plkPhVHqPo@O!~- z#~85Ss$mXt#eM|cY`JnqOxH6d(X?1*TVgdn9+ZE99HOIxH5@8gH)SN1-?Kfsp9Hxl4=UtleF8rat_ z)fl$kurF`sc8MX#9eKUUG*zz1CG%mDu6cJ`;=^Z0uO&Xb@tf=GDMprh>mlv<_ZGjA zGA}luCI0?m z`nlpD!w%iBx?Cez9-rJX(7y|-4cTF?n}*)bD>N0asO%okO;FpIOZ1nZI`Qu&Jrz+R zHawOZ!dg98Rdk@OKfcYn^%+rIvZ1Yxm_$9`9`jqeq%w23G{PQk&m>HLh#j>NylKiP zc~RWR6?)bGS^wliv>uFcadI()pWEt<>OU;1v?{m7wlk_yE{fVwVHaM?R3q4V$Hu{v-XOfx2nKyQ}d~wWn zYVfo&Ak4|HLcJHh)D%=W0s^;YMC{jjLyd=ivk9{CHmJXCV`gDPl|Q`T7_2i$={ zy|3|Q&cq$=GBGkl)`RccpHW+oIUp%b=i|9K@>4nE1(E7&M`Pr^h%+U9$?}lqX^&Od zTrz7=N-hNIh|ZZ?xDGOdJl|OYY}>-3!HV*WHQvvZYt~|S1Hh^HjR&Fr4AgF14N;g` zLfw5V`#v&sYIpCn69Q|+Z!Odf05y?y%^7zr)R|6*erq4m<2{=ScLJbCmd0Rk zit>hfFE~p>FY~YU%nXN+v5qz)n;l%GwK_Gpi5o*qHu0-W-85r8=6~lxMf?5=3F0UB!F|4AW6RD#kzuxiduZTlybk$I`lV#K z@#b{7+rY^Mr9Q=xNFuw)mJ@(luYp=6w@?0#dqMU7Z@Bk4T_Vc1x-2yN=Pl zn@g#c9O9w5lTZ^YjQK84*j5gi9B!o?9%He|USbg=4pW?u zK`*!W`h?mPF3Y2j;JJ+Q%$Zc>lH+970L^w^1Yrnn?WLGwZcvsC=M-Jwrupi%48F&zDS4dNq@(^iGjc1$p7?D- zg;bbb?9ZxP{%;3=rf~R9s33r~@phl~Fe)seh8#!KL>K6H%nVI<3BMn=rhmi@EH7(@ zT#72o^>S^WKUo2I%^bSd0@^hWQ@4U*0gzYPVZiq3cX{OS-DQCRLx81nqW(9aT$($~ z(*Zk(pVzaQz+oZ*P|hk>?KN^GK5BQvdO#w$2t*jSxPBe=R~LG;L-#PWwc<~Q&_oVX?Kd^mp6-J zf5$@iTzou(SPNV%!qvwucfa+&lX^cdfZ@Ww%OkI3=(+{WHnihnfDCy?!4qQGtJYXW z6z@9w3^6^2>BB;TdU0gQ_XpLU7x4_DE#y`;U<1Z@J@PFU=eNdO(ot}>En|PCU~Kbs zkkbmGr*x{A#r&K`N7N5~2~#-_0g&u9b`xY|Oc*U(tH^kXA4%U?U~hokggSf zC_f>Lj5*}0m~{D6V|)j>wceF!+Jy_A_)!K3?RM#VHIeeIxdq-ZRNa)a_U}agjz1-O z-T6s0#nBg{#mZsP_9jQx*Zx{~nzLFlYQ!rMN!pYMcB?4kjUbAl1VDfj9R(S;ls9D* z&(_7nD@WO3pgQ5mtR1hfkQkN`jrd)aK^QY%Gj*@@ZO^;Elw=wC%cR!{e+2fbC_zqK z8$BdWmf&^D~6_Q04(23Of#Ff(2VM`GwXaQYLF-?dsP4)?fnrO6g%!FG$ z)oJ;$frd?H& z!+^Qrm3n@jz4#yic)2Msi9Y^dUrz4_)nP!&v8rjKcvp65#Lm)kmjXl~sPGqM2 zZYjho9=khCd$ZP;_jwTGZi{#X7P}|6j&B|Ji@>pdM=J|Km%`LRbb{eh+76q8rW3Gb zE)<43-#Z?#iC=f~*sC-G*DuD!#KDWB3^lohQSFA5-#mQ0_?7dyIWTK+~^_0k*K zM5{jCQA2p`at zE&J2YXUtr3IxsdjJd!W`t)xBh3uB)8b#jZ2GFf11+kaQFvhP2JmC-_)+^<5x1 zCyuMno~D{&=^Dg;IbL8lgYm?l7f2do5{j$^K{w-G43cwgd=@@a5G{Hduy<@Lb8Z|{ zo@bRQ^ca5JYxFE&4H(f`R9*#tTyrLjKg)5OJ6HvPT@8HtPUgmxTEqeei)cpnOHS~g z1lNXphH(S>BbSsLju-J}=A#Saj>Fg4h*97msWQ|yAodF}H>9<7hl5g>I4AA%?&+Riy_HL?so4*-h zo5pF+tf=}Gl95le9@#!&)X^Of3#96Tsmhcee5QqK$+Sg0K{2(Yf>z;Iq3o9m53YJ0)KcisO!2PDZ%8= z`lWfI4y3z@h?(oT=@AuLr@57yi=xs$GI)?mrdXJY^e! z>9hEv1G(h%U~}l3>Ldt(d5{T!Kr1(v1i>uzXOtKJ>nq9HYf$%bZX029JeY- z<2tYAh$xpb1-v<%MZ<EFy+uf%iNT#HCg|8EY$l>ONM z&zE8TfzuLj(6Inq&jn0dW%yIcglT?XX#%{6p+74YkF~Qc!Nkey)<(_0Gx|a<%q1DW zgv3OErE!$?-^@WPRiZg_X_>KIGIHYprY%3?5bIBlD*pv)5=9~Lmz)RE4L8mrcctZG ztQysKlHUZBXb-OW#r&LX!_D)fL3{11@Ve%{1lye_lX`OP0f|{y*+jW6XJhC?B}grD zpI#<9(%+&SDuq!rYnl4*)}#V^$t~jPE!&+e;+&gabzsASa1WW0c@Fhhx)mjuq$*;c z3&zHfR2{=3ezL$0qp21R+a*cmj_k2+pHlB00xNejkpW#k>C_^hbA#%GVLJ1_e&8fZ zQ5<`zi)v1YL9>mH=CGw-0*c=?#05OGruC^j)0m=!!|CtSRwO2o))89{Aak`oyeGZP zNNJpwLF_z_x%7bKv!-Y*y|Ag2R~hQ-fv=>0P(|^&%;X^q+7rHrsy#Dv$LCY@d;L^j zDK5VW$ND0S@bSgY{?-v)A@g14U_r2!Z#iBw=cWELW&S0nMB|j>fHJ53ncq>0y@BMv zr#Dzmt$)b*BO}WPS~Bi6o_$Z|VPid2-#^}D#X>sE(TO*ZTV@yK4`WX;8&(tq>m_~V z>xIxiRUFg$^?h#E-AZHa2WYE2>>EyDo4;IIf;i6H6Ql?~M0|cQG9NH!v~q86mg=tx zTzwn#4Ot~SL14>Ubu*>`xGNVncQmhMIu@FXQEjUcPVxUBAOuQX9!I?`mmSRSYfCg*kNlw!* zuccrIkKIBXAa|N8)44J1HS57?=TfY7#%Z>Ds4iufsaE$CV>r2XvR|SOB`mG1^O=z` z^IvkDb#v_P_8tp@LbaNrQzwp=60SPmuWKzGj>^KP;sZ@sT3m(!s^cLL*qfpiP@Ac; z?|vW14mdYCgpEv0T7|f;rq-+(r|-gUS!{5Um7>DZdFd*N8isx~9XZm<(l$AV~z`$ zB_=@)yt(fl(Z>SfeYCH42}Jw*q5Hx7Se9}Pf<2}V7jK&dCL_b#%c@qv&+{gy??fyf zk20i=A#d-{7Tt9J-NCwCG$Or@4TH0UKjI3|Ym1Il&VAKO!42D_$Uk+<=l=kCkt03E zwc%@H*-mEc>F^Gt?dnkrHZw+KhmR#8Q6 zvAL;JjOHdW9KL3IN}fS40G=ltC3A8Ex9>=uBPnhn>^-Y zC}3G4&@JbNRE+Z`s+_jE^PcV$0(6Uo(7;va$z4!5xGi?i!tNsW1q!yW9cnhIeP$1j z0E!QlMs^t$16&cN33sF`1qu;s_lL!2i&l}0s_qkOCL_kowB$se6Nnp{ar;_vR=>-p zDpCn}%Oq&iWA?nLKw~s6`M&Ng1oJh4J(|!RwrABPf6vBhuAxoQpKFUJ4NU29r*+-~V3toTUAoZE2=0hViC>E%Ws+s4w0BeK3J8o9Fd^A<`iYayU(s4=|34u(plSsqstO`HjT)-qDDJJ0m|2CKWYWP)}j}d2Y4zsF>s)C zVWX?deURLjyIVcg(5J~xie#*}ZWnV*ABG$$+X_4LwWI2;XgHniwfdG9*AF^J9u_(%$)YiQoZ|0{0OMV;JHrg z5xW?P$a|%os?D1DwWAk{=jIK{%jZvqX^YN;DvI}UD!=L9+D$e1Z@<}DZq8U(*x(_v zy!H_hIbwRH?mYSI1L5w7U)a^Kzv`b>cL0$Dt0?@DvnDBdk~X6B+xo#rN*lH)rp2m$ zAC(-R9+h=*g-J!0*GAfZRvhF%FG;)77~4*@D>$mbhS3^kx`iShB@<*)Vn*AGYzoXo z@72pCa^$94j?19JlLJJg++TW;Zl9vBNGL>?BW680`CBwk2KB%EV_wX$9bN9+7W&^T}!5$qr$}V44tftQ_pfHk{-r= zu!YWeL_e5=*$_{--MXL$U>|P4@S)5Ql(+hSg1hu=-0m-UV92tf&v|TFMjTw`g6$LY z3*&;XihBp-%{ErqunAAh>q|%JaS7mvdxGJM@%pHJj4}JwRD>@WRvTufPo8%P(G$Z*n7gL87^u#rRH)VroUaOl)J-;Y#q|~ z+0kH+DkkFy${6x$c;xG+Oo!0w1k7q!#G-oCQ>qKrbVpi#>fy&uv9OnjG6L})w>Qfe z3JdYalea$*TyXxe;Z+bc@9*>j*5m$u{eZNgkqe6mbmbK@J8f#QRwkq z{!C!}*j_ruZhR^(qff!bX&jWWlZ%;;-(Jf%8_TxwXL|<}6r^cSuh;GDTBHZFIB^rI z6nEG;z<+6RGOzoz}8pF^wMbmvcjC! zMu1MF&(fWqww^DnVX>Q(61RvSTnta^*e-JxO}B_cM-xPF+}2wYzy+= zwPxyd53JN~Y}BkrPgXHZR`&nI)VAbat6P#ASUS7ZZ)!D%llZgx74)%$wb)IH%NzXq zbHC^^*&q2Oy`5DYr}BGm4!)|1JV3JYF=!gzyOH4Od zY<=ST-at*fNy3Q}_a36BHP!0YtZw^(&kIZ%`uE}eK03KVx|+Fc1>?z0J5J;P+diYI zi#5G&1l=CQ5*4t`v2c7>BH^%_b5A`uZZ3->1zR;-hIie3_M&-hMWE0}OEs**d1s zII(~Le3=TEA?bu_!)|V784g;h41GN%q+}RYefBfjZX#rck3jXA~;?&ZP zi%^|RIv&9f*nC;8K`fDv7Nh=zInPN#!E&trI3d=lrPAMBGQ53|LEA~dx>svYKb9oA zbHW*#KDaosv&7Qz2o!(BZ|+$b?-00B?l(w(b&1tcoHh}NNHJI7`lVYWMl(>y(2bo8t$y};yo1nm5K+jDc%Ql7Uv_k9g_d~jS&8RjWbH!7> z{IMd5`|GStKss!aRTUYfKy^Hy{sYYz`#!l)0lco>WSg zGh-!MK+7!?1sCCs4+b_v>?MEkL)peG(uXrvF7~<2-*+}a`qWR9@kL%?eHr`s9ws$7 z%T8ldK)Q$9Zg>0}JV5l0e^)fM<9c&hCFH!2g*qkpvksc{CvwwQ;A#FRB*sAYuGn>-C8uf-aL3?2li6)iqBan;s^ znkNXC?aS5ox*+~jP7=J?!RuOQfOwEb!PX&+jwGb|q~I}V7=@pjc-;6z6f@OJiyO5X zeZO%;Ifik?Giuh4i{2>jd?l&B7kvADC1<1nr9JOdd)lZG7#z=(-I!WP$(y0&_n5Z& zH19U;biQUGj%ZZ}5{Q_3b~r3C<6F90$ibp&wnWqq<(`iHB7qB0Y8{mU_*xl1a%1kF z+h^d6u--F|z*iWpf2l(vwv6@EB8Jm)1^1niAz7ll;O&$e_sGmJN|?O)xKrW!Uum>D@6}hnQm@e*iEd%Q2K^~Pli|)at<$; zEvwvx%jMesl>kM)rEj@J=Jd)1W!oNtImvf2?SO^)atJ2dd$=#OdPdUDz`pQOr`;9T zd2Eo;|MpjoG`S6Grx>__^WY(|sd4T|`VZj**jY4yY}SzL7xwwuwa>Hrd`bOGrhGwQeaE5#F}U=|DNu{NzCMSb?=s9RFcpZaf^7`I?154f-^bd?Q1iTyq- zd=~n&t8s^{osFXZBNAAZq1LzL_Xbn89mF%&x<3B#&K{JQ!?;QZKm-Dds`lrDHne27yR}bO5;|HlR$d+}|BZK`llD;e~KaSDqSS$>#z9W83!S&TK2l>{y5 zSnYhyJu4g?xyGSpCXWII-pdV02oEpm6i&IR$^?eXAmJjfT+ z#*}5)<*bcF)be-Sf3JTLs+To?kG3JOZcbnMmA(>JEFSsHJydbXB(70+)tMVzt!VP_ z3(6~e{KhCS?OMYA=U)*iRhOOHW2uqCzl)=;AS-XZD|yGv26+Ph0$6TG!TDkZl&N*l z{&MFNZHRZhC2tNz0t?Pnc~UO3|Lg}~)D+`@lKo8z`RVHSGloj^`&bsIUtkopToc}yg#=r~d|7#s*0XWPka|yLNu88K zS!~Ky+4{SFy^b|1RY*y)-;~K)LApYgKZhLhNr*)0Bs{B}AT9og7?PZ}cL@Vm4xKsX zJ`}PSY`Gc0zS+-(Qy40Hj4kM@iPM$la@n#tjuM&pA*b@_OVI&JKuH`bpa-+KmOHfm zhT?=992!dwA246BEwB6i!G*rQL#t*e4Zm-w@fA`t6Yo1d`C8Wk<+pltP}6M)bQ zUcLM$l5k|;mWGCJ7OQ5XEsn-Bom*~d(ueFR)P3{`hatG~bv@Zb4m~B5kn*nV#7fFc zy6LYq&c3np>UuWYSv@B1W~PgFfqkJ2-%k4h;F4sp(vRp4g)+CeeoD<@PzAv3Nu#Ca zLCU49R})L`e61`S&vz|-F4Ct7H6IQ(bbHUc24`$=rpz`ICSmx@k`Z2+`P;6y%^G`$ z{l~0)jO%C21PK48C42s(ZFTf(*hb>UF)WZ)YZ682RQ&ymB{4C}&He+hjavH(b`62+ z+0TaMho#o+t5tei9fYsJ1F3_`T9;>{*HH`Frgc0OJurA7EwL0zI|9l8$g^5@QuWn# zQ;c3w3#8nw|6-H|vfOyD$^&^QC&`u$-SAKq_TKfpZs)3SY@-UTBkZ^)9*JX%a^nIeTP) zSKq4YLvu4QW)eu!Nt=mIIVF=*b5^3u%}aF)k%|9Tf{|;)iqAn`;WDFH&bfX0dY6?? z5%nMtpfcJtM+H((Sr+Up=~XtCnnfPsz3HBuPC|V`2fSRUQP}i=nTin~Sdh>{Jn|Ia zmm_pg4xNx&!x(Fl4%oRMr$DCW+5@N*@0G@Jsq>4si2j4X&Vc0Ix2pi6qW%4n znH{uX*gQ9dBkk(Z{Q#l!M^y{N)uJOIOTrbABvZdpV?w;v{J!gTWg+}3W@DuxNS2eR z7-o!ugFhtm&g>b4M_%L~?gN(REdWNkQhfvrn3Zg806-T#??+T*EJ&w^wy@R-8Ib># zwf2}U!tWzdrWwY-)lUX(NF)hd(A|!3xHa`vQ0|1v(}1=3m%Ei)3`o$Bo2#6iar^aH z3*slnVCRxEng1Yz>Gx1E?H@%>6PTw>+$q`Mdlldb76BgU<3pV4_C@ZNVm(D~zg7-7@ z;}_q9lhK&5cAk%nmY!jUpbwj?Q{(U>v8_!Ak;E zOgQ-7F{<~UlK9Hk8Lpy5pN@NIM3(ttHJtRR4%8l(Lm6SNsNT;}OfJ;rPZ@Z-3n%o# z+=r(_Nd^yQ81MSCTqpq>N1Zorfk$_AHZMky)70EH!+K5cPL{3&bQ%Tr8G6BV(*wT@ zIWsaKQ5I;z$2AFFr5T>X$rH(bsXGBGcMSf1hG-D=LR7L#2B&fMCvKW^=1i+CjBD^c zBUi#J4(rOrw<0_r{Tw;N&ShOzuOMI-QGWvB==QK-B-<0hN3z+T`=)~hBQJ{IRF{4p z#xl+==9{i0_2#tG*dK^K_x>T1nb)SDB&^$ z(?58$oMM^$lmH_aR)u8d;_OvS;FINITc)hwucCicl@a zi`<&42)A~t+n7&X6vp%@r`746=HC;iBX+QLA*nZ8-B#oqlXTCs62>p}XDmwhmWVyYy`#XH0@^|HFlNe(ox=oC+9=a~9Pni=|>Je3vt_w^h z*aF8ci@(dHCB21}@gY>qJh5WrBqc^WK0hKhZG4RF&h)R+d-hm0oWr4Ob-gjozWpUOUrn z9nP;~CyG~bF+|P$`&62vgV~S)dsj_*^=zay&`TMEZ72*%PT{s}#=Ep@XQv~&$0jFm zt8ElTbw!h-;H6)ob73!ICe0+|RM?(*0u@k{R>WeN!4!{>p7#S0e?JAkcqD2ReODidH48HtXh{H}8k5V1j9oh-7ghVjeg*{-qts{GtyO+c$&vZdWV7?`#Ub+3$?(n$3nbM>N@8GR*s1T8jUALc_BSYcAH%_yqfc-tEIq`+hXTIJYSN zWA`w@A)i>O`(pb~MNr+B$_D=TsKdR@=8X8trg0|CKxi6nv;G;-e$<)89QOS^&?Bxa zAo2)Slp=G`ujE=@mZ1W5EiR(`G;QrT_hFTq?y7pLQ*ds2!syhicvQao;fPfVVa#xr z-qX;z;K})OZ&a;N-8FbXNAQGxT0#_8L|>1#X0;)vlJS4wE;c{hxe6G-30f z*o@>q_=CBPc1FL7)9&If9o%N6-t52x&h`Cl=%@J%< zirPM3OJ8~&wNo6^7uas=|HObjZ(UZvgVg`XnDAAY1P{e7y_jsb;`UqM+%!Lp7f*(F zp4b$b$h!x8&fi2wdO|+2I39LJNx2VP!pfh|o={88$=z;;a38G_x0B>ZdnrWrxjpne zi299w22c^lamqn6Q%6E5eHbgD9>)XxAgAY|dnSJ(HM(2rJS9n#U$%BJ;<%O`fGA6Q zH197QvByZZ{ixLK zfmE1-mhQNHNT>dyIBs{e$ZYtG1lHv8tbV+i8?FJVWZt;zWpj}mx_N95k)IW|17211 zxu{eaN#9`+{RyTse)jCg8&1mwU%(=0|YB2YiRpt@%Mg7I9z z{<+V+YJTd6e16u%0Er-dqk&)+67{QE^l$r8u%g5dJ@Hr3=j5Fj(>q`LCDCsZ29CS* zBGUbOq4rI8YQgo@FLKVt?W3V8ZXUvv^fWICw8?F0;-1na4{)UoCG6MT^z8!y*h*zO zVy1OO--PYikR*~diw?-6{emS(Xz^4L>=@(G3o}%;*<1gkwFaBIp&bkUyRE?fo?m65 zVyIkVB15eE;=rRNGL?Cc6B|Ehji0ZE7C$JxUWyK2JxKc(b>HY>L^aSabW!UEL3dua02(DFE6AziUknyf0EG@#qtW z+iSN=BQX>z-Inzl9vY4trRd z6Aw#CuWC8=#c+0X#6EIez`&9(mm|h@>I_=y^U>}HVxVqji|spht@`UED_keKBOvc{ zX^J!msL5>5O(9n0eo))K7!!F4w0dr$O51bXd7zZS9?+pXncRtnPi`Co2r7c0iMYsT z_G~k?vY5xp(1+P^V-qZ(R1Eos<4}_3#30r%hwL+TR`S~ajGtby!9a<;L_vg{uakQ8=&tSTMLlWVGqrB@}V4_~@wd!@Yr zJ5zA{9#;}iA`AA@4SytETh&!|Xr_&rfWF$W%p@dil9Y01YSJOJnWX_QVfSy-Vw|#wQMJ_txf9W{U0F11+=~wpq1N^erCN7uM zxbfI&T#bNv0OTEA>*t1Cj$YTgAgZanS-^kpKUfKeT+==5nln0jJBX8|&P%UkGeX=d zvca5>{Hn7+BKw=R|dnj(Ab)YNXQk+%;mu zN$bRd7Prc4_6%KHist4{`QfD9AhbBN!wtQXwjj|%4gY3$PFX8r_%wKUnby;7Ns5Q| za?Lh9nCX$+k=uLLcZ-8@&<=ODRxEIa?X z0U70P-|!{imGT1MuHqYYSrz_+W$QHycf5~o2KoI0K0Z-5Ua%Yi`v2+C|7}o8Q_thn z&?~<7X5Wj{WeK{YI_s%L7;XU`0Dn3$U)ZEAE-of5YJeA~Cd!3ZxY0qNHIs*xAM$`* zt#-ZKPmqv;dk$eg+ePa+!f!ot?p93M9N~HakKZFL)SCY<_=L-KU#;B~(>i>j%PZDy zM9Na5mMps5+KaN@ex!p+t|s|+22AjgT<;C*`A^Ze$mfs?i9a)j9;j?l)sUBS7+@S@ zbuV}DO+h6n%iWCm1KFY+WT~NUshbU@eeJH?j|FHoys=1zj4LTgscC>8%^!1>{3GD8 zWb`Z1NVwmo;(tEHwNabj_LdZpY7e#^)=Mgnzi1Fq6O+?btjQO~2VIhF3|nR&7imIP z48{HCzFy@4P}pPQxgy|)?t)M3B?o&5?Prr63$H1o>@DV^Nj zmv-bfZgWgO^Yd@16`uw4$Psih#dC-1m>qGXQx`-unS6Xej$r6hOYX0QSA zO?#U5%&^1v;DhfZBFM;N_Pjp+E#4c;^|heX{c@$2wayo#h?2bs`1Q0$K>SPcLWDcZ zO0M?wzTZgqZOmNs?yF2$Jp=w3wOu^gcXI9LyeqTJ&1VQ+%?;k1krVAW1vWl)n7kZq zE~N)XKUeX|L#I<)`JmZL~=W?T21BZG{{3_feQzP&nN zZ%(E@%Ww%<01vw@dbB@L{jaZK|1rSc`ltgC-L#Iq?>I78XB`LXQZw=nNT$rfI(F-6 z%cFxd@6KOF-SR9zibJI~<+}dCQYLYIx@0MJ=IcE5-uRUZEc11dyc1sqL)`-8c+DOMyLC-a9@OFL_gK7YqJ16_-1 zXa6A?mteU_c52%0Qcxl^{y^B|dOv$|R4od~`m;chuRhrpKn`82SseN*$r0e@(R21K zwhz^;}E_yD{+Z&-86wRmM?W$vvEccthw1cPa7te!0L8BJqw|sBYgb-NIK83rtbIuYf(@UsG=YJUCCz=bY&6lh)S$X;Dey@GLT?yww>ICqA~iL# zr>e6vvR$ED{Yt#2{dcMBt6a>(q1Npvp-Xg7hq%ePxoY0)nyL9n2H{>k^Jp`AhT&iE zqI+;p(>Br~eLznf6~*cSt_i6nBBlHm)aNdQ8D-wk>Udjtu##1Eee}@F8`lan&8(yW zo5VMBBmXPYeZ2V_^hXU2*;;kO+wV<=emM7VPICEq8UD;^TDQA&`mFqFhTS{c&P6ZD z57^Dy*Fc&gXkr?lob50Q+nRgh*m#|Bej{UgoaIp2Fum^p$cN*n^8}yZ+RH(+u{C&X zG4T?eWEdfEQ|FjPSj4w)Jh+jnH_eD!Op!+mhwLuI{f8tLzsc)-kdd?bHrCJ~o6Mpi zmhK~je!?YiHr$CGj%=(QIn&B$dJ;n_(Iu6W#gfeA&=02CkvSQC!S#bDC@`8a#JyQS zTA>s!iWI%y?NH(T*NYcy0Z*aiUmV;<=i9b(W-dpJNg0Y5{zceVHR;OA+jUyAu}KL3 z+k7?MOw3Zde0Gm2tjhd&$7{xC>t#66cnr_o=rP(C)#Du2j(kksP8&?mcOldb-gm>{i zsH|zq&14JctHMw2>UprA0CRs)Eawe~i;?!6f`;R@4|M~|a$hWvtjXo@dK_BEgi};} z)$HWUk!2$>5M?W^^SIF1ZuKp^U}KPRj_O}S!ra)g5$%$bQJy+eW?OF%LDtsj9*?V- zsPh?XpBE*%kc8UTGk@s+Lije`ug?By*L&`M>Q5!ffWKU!W$mkcD?W*gLw`*F$9W^@ zZ5J&Liaig>To@B9dcpHy{$-}kU!ObQz0{nNkFM7|w2%a?Kh&6;u>ElFm$`uE2{d0i z%ZBRy#9L0@ECdXpJFvvVg|(uPg2(B`rFRYi5%ild6|1zA1mKdR!+R+18v{G^fci-V zDtSmK0<<`SzUtqoKg-Be=%e*TUkx#wna1{)498xOD%dUQ20T^UEf~0h{c&HVG#!ku zR(>&Bn*B*7l|Tz{4!MGzbFxhUFh|e4OOUm7>wX`9u?1fo{+1qSAJ4Ko)4ATBq1{pp z2-&_C{%6-A+LyjP@WB5hY_!>FUT}X@-}H#~cFObvoC8BAB0LW^e?rzd8e}{El{H12 zEw&G-4>e-M?s(PV#rNgLowPd!% zy*!mghluWHTGNKM!($d|sWOts;I!$?j5uEac9`DH$o6ywAQO4F=;~h{uD*IORP5Gq zj~*g1}-8yDZ6lFA8?at_UZTDL^r9UB<*Nmbp)Oqbu zp6s3Hd;Z*skfD*a)smPft!;D`tY6{siM*G!+UYBqc0}{lbXVlTJWX-YlxyS_>*Lm> z@mAXsh9v;u=wz^U$nIH)Bk+p=H_Q7PEk!!oKC-KHo1qHFGyC@LO@H1<@yeC$t$JE* zCYOo4IGy~zY=dR*RdPTa(rycXiI|7FIjv~xt}LzHO|I)bG;g{kN9uq2=XN>-cxk_2A44J&xS%nbgHFzIG+OR=_;h_ZH+nFyW!2 zh*kolA2~!Fn<|K+pQxn24?~1Xdd9hOE_uv%`nykIRx2s_jN9xVoFuwRDSNr7MNEld zV*W7E}*bTO0&I>sws2n^!V&rSiwLPy9B*n z3QT#)9+EQ@a&7gs?%Gt;`X>4sv5P7J;A!T2{ECX^i(55HcOyzfoY#abV32VrX9*W6 z)sze(8LJMyo_2P;X{SW}vg7#Ck8meUPsokY!8&P6yR5xrN5in?ll{FbN$O{~TPw)R zJ1J@q$VW^?N`SES0D-HeJ$xRj!ut2T&y#*SCTU$ox8nWxI`HodgU zp*$>KMEn(&nn5npJX&C8F|_3svSOkVqloi)ZVmCJzC6tPaM$1fYMXPhVbZN=c>mmo zDF4lCbIVnyw%wjA;{ki)=dZxOp@>G2#Us` zL!O2xdS^B0;nDvI+BN3Eqw0#Qa(x#MX+7t!-Oq=_>yKfsC0@tw@$yJUS0LY>Y3*$- zoZ8P4st05{15tgAPhJ1hBdXbtZd;)S68#4>tq2s3_E_Uqu&^q5@bq@GaDW{=j!VYGVPo{-^D1)hj!?ymGPiXekVpcpqan|Me^i@YrAOOgW zKbnSlWE%KzZ~X^a&Jm$m!BSjBG4JzJX=5@Vx<`g>5Sq51aAGZ)HpCY1g@XlHcf@Jb z-o@;%$j?mB7EQAL()d)6ET1I``R*m=>{G7$qmRw85l8NEC&r|~V48#w%6EbH=N?u2 z!W1brH@bcva-Qr`Qpvbq!_sbfOQSV|(+-PD6bUafIoW#6YtL*RfP&V_?=v-4g`Ggl z0<`d4!S{K={zTBA5wcUwH~SX)--U0klK-;8G_CH+ zBHanxV>m5PjlICT6|s$58J|9$ZYbCM=zhOFY94ThRvzKE@<9Ju^nszuTpLe}On|qlS13P}RZa3n_ZCZg{k9aMwb3A{0 z=fRh?thI~dzmA`?#;>5Em1DxO)0?lo(nq_(E0gL4T81X?CoZi2jOsbQ9k^?ecf9dP z-jTdNq(5HCCPXNqQ&q+H%xsD9Z*$}AV}C47tsU9@rqQ=@ObmDfPoZAu2NK&09nDvR z{u~+j-?cA~(<>*a#jEw>_a%&txP>7$npx|TCi06-87^|6zA<3& zW+~0W8h>g!w}hF~PS+IwjpQQL$tH1kOlw7ljjRz_I>-X`rC7s~FwuXWknx3@Rw@K- z$B(Y(&)&S$=dxN$`n}#rEplL{FBED!u~Ay}7sbIrTq#{r#48un6u((Tl(;RxK6@a0 z6eos4fU^;^g#^pPl2r>o43YqhrIp+YE`e25woZ=zVfo#Pxc=={PYvQ-?yKE@bR0iR zy4h47BpI%xi=N7TJzc(EO!14apZ1W=nGyH-(BBgz*I_J;Q2007a~A4?gXbmvPBmRg zbnj{n-C>KGU+d6@wp-P8y?#Dw!$pE%!^AFUVgjzbN6W0 zWCOIkCxO{YgIE7b!aF}Uq8gPy_dil#>NLMJAA^#k&<6H7$rX!x?WZvnv{7#I4E6S# zIiZ}=@?T-RKn%-qV_CUN1w8~XLLjRPS@ln<-A1kkLH>I-Mjp-a>BX1-^8 z&hHkbv$c#Dt4JXg_0Hp-0|I&`|4@~3&{X|cw9Du>k!horcdNB?@i%ixzk1z|)igVk zwQM8A?AeBFx1b1LlE3g%$N4F(672a9iJt64ZkDHsPMhw!ozCpP$6M{7e=q&U&y!?# z4K&p|OoZWj1VxxU{h z+SCz4b-m$is?vLUWMn43VB)F1TURjd`n2K3z`%W)EOkKGiMf}4DZ1NK(s&(He>YEc zZ9l(EOk*jE4bgkgx{s}loR@a%PxE3g8M_n0zxH{3wKO5a(g;xT6u`Jq)tsYo@ z9!*S{O_4|VwM8U`M)|XUgM7u1!OT=sA4o`CNXwKKsWKhfGIU9+!EMTrmBH%0#v}Cv zz463d!-7FyvUkGxk3TPeBv|>JTj#+zXtMF*VXIVfvg9WDXK|lp%$1d#yleaoD*P28 z;`^`C-i6w@zxhXYpId#h|hUX?sIs2{$AAG2lF%gVI3&OHw8V@S8Cju9{`x?oJ-Cz zD@Fy6ZtERiv;~i@TB-c=_GkQgX`74V7)tk4Xs=a3xS-7THWxi1@u308nodzS?xxxYqFY;^8XG0#?%A3bcc zR%C%ff&+{Z1Iz2XhwwffwGSl{u&qR!a3{oDGU=`uKDMOMPrat@%5Yz{!auxnuwEug zs~kgxu?%RLrsIc(v~7b=Ic}iq>#Rd#k13?(cYj|8LcU+r(%#BQ)3#!`-Fu6arQ5F$ zn?o%r8zZSR6E})415oLsDbt@P*Rss5%PKbVt@7_v!y3h4>~ub9e{nrx3jc214ZO59 zk_y+Yz3)Uob0Qx^bzQLTuUWE<6TMw?EnxlSYww~~G!YBi4$!V)kR~T~fR;mbRohby zbocl3cO}ztt;&}oOl3o`P2TQc4uq{%4qC{6bd8%A(;9@Ud1xoEVzdyQsG_+$6W2?D z7(EZfzqPZZOAzL|Baj$)7czMD7F%aQ3gfKcYWTRh`$Yz>rjh|CxIJWGgxXkBX(q4< zEpiHe=VE1EdSVU~Rt?ct2+*S}UA(fJRicUQbQ~cK)klQAaNOFjBFti-D~kPqv#5}T z=?b(s9*qJU6pRjpqmw3F_EmZj)!_rstHvYU==nkgmQ#f8_(Q&G@W)XjGp}(#kGXKl zU6EI;eL;^RU_)G1Z%(hw9Y}zr1oadLrdLLs4mwm@EPY66J1Wr*0WZqKHNn>kCrKLBUa0uoD{w!a%qO$D4+JF2^QIPc%R zUx5?5l>`_k6OjV^h?SPmm~Zi>t^pqbGf3t0wk-b}$*Y~7FeVGesd723Rc^=O8OJL) zm`94wPjy6pmV4X{_>{i=%W9h$g8N8|^5d-ouH2R*AbjioYPrz3*~IQ5xU&Q$7-d!s zx4AUZGpPsOdR`d;a8n*u&8*=Ap6N;z%ryyv97xS4owz5Pp}>|C{b3^t&Fy(yEt3nf zr5$i{QY;ANAoF{urOjz22*P5DAXeLaB*Qb0v%nSE3yHB$3g{X< zSFunJF;gGiCNOLg(+cCE0|)e_#wFpt3g;06Jcs=;fb>Z+KQ%k5O0e#eUl*?c^8HSM zp+gv24YMG3rd^vc(U3|xWmsWIhr=|RT6q1tI28W~*2AEV_(qWqS}7M%fHg0 za3HD)s-we|?kIxa&~!W+`~Tu~K;hGZ5;Pf7DP!WMBI@$f+cgEyV55!RPZGT6>WM8F zaU>&Z`N3M@wr#`DVqKl+GQmPhn*)8=W^@qMa7$C%kQ( zFbtVP43?@=*+A}|95tXt z|MTk&wf>dmYQt*s=j;~s=C;)QXhp=D8q+`NP%_{LFLMH_bd(xVPF_Ne5H2euk~i8F ztc`4(&FZKN9t~_w*f_RoEW5+6Y6KZ_u`ekws6GX9xqJM1e>)ZSD&}?Yk>;sV2S~$G zsYG?ZHh30<4yD3> zq!mHJvqwe~8RXjYGYRUL1>6JVC*8@SsCZ`r{YT!<&6;PrXx3Sw(Pe$We+C*QUh`_a zbaG?`nwe!bDXCLmNIIOZG#wMrc&=&f>*D<=-Ey0)Q{x7SD*lbh!K9|je7*g34K#H; zj*@xvt63g+w*RQ?ky&M2wx{>($;@ld0i%o8sYb{*w z%seT*&#T^??NDU#;%bHA67B|ZU`8-$>{oRH%TM*6ajmbO@}AGFn0?BLLCuBr8RIrC zV3j_Ay)~2R&xh;k-A-lB%-Y+w(3QSC`XX61h-bn`TX_tq=eR#1wjq z|E)S+P-LJJX@KaA2*CDlK-}mLg9IyH%8vC1Bqi;aHhhRqzjx&gud zc*KQ`Ld!>i2}5$N1|{OGRejPyouS$$HeGxB5Ihae2sFM-*nF`2#;m-79^~QKrnQrV ziOztOzJ3b%wi^0r^vmMq>`h9zHGNTIN1kuep4Ub+Hy>s5e(zlS^x@07roek1*?q09 z+6o8(UA-ytotA_PWvBFf8Pt7!Y)`EQC^if$q2ZCv=kKrLTKpz-&8)%m$!^oLt>S~s$7DU zjHeHQiqnURI45`-xfMpp)Nsw6o^HxD>gUiNmdt8CcJ9iSTxuWi{y-gIV{`fybPQ=9 zwD6^4VoWX*j{OJT_J5YD_6RHWw&>pohnmkfpWAae9v=HYp+b*3I3J|B(@SaYX!$~B zL;TrBqtl*ex?=;Kj5hdQ=^q>SDy{GGi+qBXZ%9J{7w*=)aR)Bi0YPT$_eo4+#SAffDJ-&mF{SMkGT@AMA$w|B(v&biTSO>yC+jegx zO)woWdzu`VUKtVzPar@Rz`ubsbAGeRy77DBwhh{)ZbwEfj6^QJ-m4Xa@!TOp^`;s_ z)u!sqURHNEg+2VC_!Q}+G4)Dc)^~3ua@eOC9Pm)1_C{D9?J9ovri4z>BosHU)+2Rk zU53Cm_3?YHn;_pY;hpr$h=OcmXOK;HVTI68ii5MDE`*T3Yds{zJk{1emH+APiWzu% zFMlS#dD)zfafxo@`JBMnovFP{A+@wy@HFYx!=iV>T0UD-2@G|^v}5kCwf+`*Oe<(p zIEQNYL>Qq0Z{#|px@>Yfb7?WYM~io=qq3S?;Jh$?Qqya=Jr#qlKK~LrZryVo8E3fB zc?&V%;*?FGUX7_0GVSmNcw^vA*dw=l)^ecR$j+wFXYSFHTDGf1^kd^*Y`#sqh37&C z_Wu|kI|85!R*7tri(<9W-Mi2!Bik@Zt-WSVpRE^uw!N3!+-+io6*{+Gue4e1RdC@g;u0GN6 z3t)AfGlLthFrTii(lRM)JZB#`7*h{2kdR$P!k)B=4&%^OtWrZea_P6CRFR~|7O+3j z(NKiPY;PDqv>GPYfAswA`~=iGK&Hda>K>n`{vs}49JKOy8NR6yo3j?^H8_M_awy0k zIVepB2Ivs(hw5(Es2y@ytBD$NGZPG*xwxy0e(C%}sH|u>N;k{MTc>*KX>Hdc%&^W9 z5%?a*Q@tMJ`|spJnVdRj@QmzvFvuIQaDJ$s>9jKhoHZGY!l`!ZZRb;8;qySL0L<^ah;X;0y01>c|IfP6Ru!gI;1p>$%BtQq zXp>H%i%t?QBz6=`ld3gl9&#Sd5zjU{nRTm(f3tZDccs2aX?S~$f0B4S4dE}H9&XAp z#pz86cKo2+j#J<6*khiAlK)#E8fTvF$?&U(Tj@f{l2gi7FN5x-vl+iSzoGumJj^~V zI8)|rTO;u6J%QX-*v}f~&(4!g>-~P++rdKjgwso??8w{A3q>bke}MO1CHe+AcPmx& z+|vWJ7J?{greX*K?=Gz!HAPDU`Uk@RMRkAQeYZ+H{7n6l?lpal=+r=`lqP<6?w|~l=(7(jn;%0jI3J`X`!mEwS&WRn9n}#1+7-~(t3emH?=;oO z(r~{qVmV$t`}ENMi9Pj9N?}!&h;2iWLrOlz9oQkfvJC8hQ2G^Khumdet48 zxr4}dOmqCtv9PtX>pli!sLm|VNn!x)Gc7W0tc*W?vZ>nl^YE$mArgfDD)3!7dCZDq zBkAZo5ikn=3JH?kH@FyG{@NYNcyX?Y@_fb7vG!>xb5u?Es(8`&W~(+ zD(aVd%W-1V`&z%W(?1Z;5DizJa5$F=buEz}=t^);Z3(nimv9k%6|Coa59>8kMc91B}E6cXLOUHS0Tb zw&_TYx||wr@&4+n8nmNR=QPi)X}T$EU^9jewydt-990lAcTONtQJT7J};-oW6sdz?ck&Qe$;wHS7IR|87($IBn3uq=(67QSJKf zU7_oCav;Hgtx<^~;I$A;2m!v61cTYyHTA3*iJ_L9IHNWp|B2ViBB2yRa^;i88RTdQ zb&o1KZ*IcR9=0ahA!~ ze;dPe%~a4>dueicaQ#k~t$}{njt3hmQ~*@40Hkv*KVu&$WLZHf=L65VHox6Dj0@!M zQg|z)E7WJ7M(S5)X0Z{skRfc=c2dw2<7MZ0OWK|TXb+G&o>$pBx~LZG2xw(#nP-o? ziK2;Bo39IXCUqtK8G$E}&HzLD?zeLxZxJDvmQOC~B7KGXiNqA;Nay`t4kjA23xlSO z+*-PLV7wNg0}UCMwmh!i=Yxuf>Gz)HnRRtOLIP(KjYs3}k18s_UTs#V1z^9YimR?U zc@q%tcTzwN2&`{>45KV|>Bjq=V-O)eHtB9bYf)U=y}JpGx%B0>nYj-uaZRq-Dc-|~ z=N1|}cKb_ldNPE`ZeE)5YSr64V5GUCH*^2iCFP+-GV%Rd^Ei`iogUAw)kqtuqhk?| z2`-BYQhnmfzHtx6aPQdm5Y=`|c5^g#{_{bXN#WbvfvzJ37>l)j*+L;NgFyb~+LeVeJIe{l#Oz&0`=Ka>p|H+^2$><)><0_rFi>+6ZT# zdTUcQ?W0P_cV!b;?yo{>^ta5VumGm$!-Na>sxhpF#MZ!OLPwfL?CaURem0JQ&fXH$j{nR(IBjRMsm7{_u8L_cF2~(xTDk$X7ZSd{BhIL$;$-)r9jLR zXzdK^>xOC9;)W3|X=W2k23OyYn(6Ymf=UE6G8LW8n%KJwERVFtttanF*j@aWy6r{^ z>b%m4e7=Bt*?uGeU`C=?PBEk8dt{|YSH?ehfwxkw(`I9~P0#FpLq>+kRG@nu0O_d5 zJmt2*v=krgp#5sUd{{g|2P0aocDo$-pKtd0j4{8Bd?kcEpfs<+yqnTCB?L9kTTpsU z_%RpI%g5xxq*#Mc3!6*2UY_c%6vyqO1=55Ownm!kmFZzw)Q2@ucxV!Me*aYw=UlTx z)&QT5Lp_Tp)`ix>flJX1;xkQEHWE*Zl!Zg<7i_*;&#QRdWJve2jEqHYkKq_tvgX!s-cu(q$rVh+7;va zmgb7FAH_fKE$Z5B+(m4mT}?YDUZ>epOtMS$xkvha*A~=``MQE8=y~Y-`u?4(p-(Mj z1t~u$le&P1)tXT2uO$PESGx74Y(l8FJY8NQGwUmYd#&0N_f(T4Cj_%u)6drn$@5@t z%Gube-Dm+lSlPm=sp1^-+{XF5g_xd_Ih)mcvC@qXAI_YJM$Y*HA1OKnE12d`4M8rdDhoc%HnaqD;P(H~zB?F@OCNWXWAgaAFiYc~1KG zRGN+3xM%9EYIEFDewU?pOz?VrKyTOeP_y%X8>st0V&-SlK@-+XFDKydFj)Vx=q+rn zs~{09ObB^+V~s<1;5<%n{hD#W!u*=`i>SOxb8+A7RbMmlYUf=Jk7T%8La`t$6^{rH zC6ym?q4;biR=rP(bJnLdNB%{9k^b_A&))TG!4}TD8+P8Fo)`y;SzV+F^qn0|VeL-v zqk8`H4c*!8%|@#aI@^~OQdD(m=iR6W&7ZQ^vPGZK-y0>b^6$iSz18-VBt)Kxd~mCF zW)}Lnqv|wGUS8UgCuyMHY`7b{*kY0>45-{(%HbUy8NO;fry}pgeG;2jo<{+PDB7+! zop#S4%RBR|P~0|x2af7&$!IP3J?;I*yQA8vW;1Q=;NCoHZRXX@Ji$Gp<7d}bx86>q zEj0YfzGi0ADPSFKHkL26Rq4FZkD1+Sh01!GS7NW=!uties9PuKi0`Y1j1G>{QX>y7o_Fo{N)pccYDz@Q?3EwYjKze@uYz`ND{~+fu+(n@W@6 zrqz*7vKlek6&8*-gu3}s9>E-c6Vi3`1MZztd|4uY$tBC4xoN287~^R zigAMb!Vr;35vwmoxFAFr2AQ_+vO%2(?UM$1Md-8nJ}`ve)A=_yp_mq4P}=a=%B+Kt zOU91p9+8TpAIi#i7*lcMz7FIxSxoQheZWL_P|!N`tzz%Z2l&s;!x{ZZ z{*SbozL9WRr}OW!50l@DIHa|dg;ra;1i{ioZ^1R?>$eDe{TQ}g`8&_vOS3;Mak*!+ zA9v5F6hMQd0pyXUdSIcR_#|Q-SX9x3khtyErdEn*YPMV1@A9jzge-YtajeN7bRlNA z!2tvG^W&|>@&#-rjq=K2M*;P#^8ur|8`O|in(3a2LzgC3=pVvT-~=*I(E3LP*6F)A zP@Gv^Fz18LUN>M<9^64(`~eZrbQ)XzZcMf1n8nt=5+BT)jRpT$uPotg=k7P#`oz`` zRslgQY#*r@SRE!bLs0Q$mU^~VWEF==& zZmuNJ5E-j;D%BHrFMr$rOjj7C{V1bI4}QZ)}fh{xt>H`5GwUoB|L z{=w%w-Fa)iB_v-)qciX1;IOE_uj1GAvmVurTS(9LT0C%J?~}~m38)Z@Vx2cXY{+rk zHNN{umTugOWFPO48!TzzNhikVhBtq>=3LMUV7Lntl_7Mg zZkT#OZQ)fHx#K<6yj2*g1Up?*a-)sDyoB>@j zP?QxFg^MBB1y{9ZYcJ8+&Wmr&EV)$FfuNl-uv?xdYkvSSmGxX|X?qZW?uUzF|TcDl^ir5n>EY&v@~r$sok?A!BTFgB!d) z30Z8BdbPuN54JgzeGT{eQ^~mer4PY-Lxh4<+kcv?TZSqp3>S01oV=V#N%1%$TYHoz zRU3X}B!vyYf|yU!mJ|vETr>Q1Dw*GZ@bWve!y$`LMNWe63RfPObo7*w5KryCE?>yZ-6FmoirdS5U+__6+m14(48jCQYAd@byP;` z@-|6$Up!c}>3Xkv^qX<-(ICeKm6K&FYN{8(spyW-rnD(cDBJ>^;P1kRMEi2S-Ctgz z+XKr2L!TRNrzkH??SeqHs1UU?IL@8K{q_~9rA z9b+X=-Zk7GW$~ky%X1yQ40L}?Z^fi2bZk9QeKXO1jSNz7T}x+(n;GD(QPv5{Jzr-E zZw5Q-u%~l*>{+XM0UXkzYJ4n_(KX8NaN!)lhHmU3Kau)^oOB|5`)=zAQbW zWDj1awC~T1E){9F-IYoglQyr&T3#kRsr=u}d4)*xh4PLrAJ!$WZdE$Qy-kH!Dn46=|`-yelC}ZF= z^srZ(-r{8s>-L3tHV1QMIGCI?h~X^gN(0xaI9jiQhGUehSm_+N!54mDsfl_JR5gsBysbX z?g?>xAGi?IJBESTvY=BtjsR!at0)aqbD(8g1@6E^Si)n-aC(ZF<@l@lz=K-gTS-O0_=6V0!uwGTwFDKQSjVk^6P(!>I_NWh%x2Zm%MZ|WTwd2iVb9o8 zWqJZ?`RF>Br-Mt%XM!xpE^7|2^x@oXAc;X+!^wcs+=5+L`OI@O*S6Ah5t?|5C;h8UwVdXeBGc-CKH7#4N z4tZ^msq~fPCb^@WzEXHQn><$Js1Cw0+||F5^zECy5>d%vhQ{aI7O01Y&uGbni~puX zB40(R7`B+klpE94&_+pFJC6*tf@{+$%xu*G=v;~MzTzi73BrswTDZc)HYFOTDgo;- z?phtHcl3MW5-^C#+y|)(#0FjLX1+SiOnOM&s7qm}!T9SkKMSLDCrviAT^>jc3vXV)8}S@2`ADmgD#EVCZZobhqQiG!`op) zligE`D1i#L!G4*e#X`01An$eUR2!QZsL{Uee(a_bYt*e&wwnKbCm0=Yw=+TB~eFihdD@o>5dp|8PvWH+ejA;eFhq=vR~rcDOeQ6&Y;PFJJXK>7`TXcho24W=O1XLd zX&4W8(FfwUIy=|dxFOQ=-g17YgJ2GddVUpF)>fFtj=$igyDO}b?-izsA}SIe3s0g3 z)D_a)ep<~Ae`p5_hDm16@{$VlN-E&80h)k01Z~wTdYd!$6SO{;CYq}TbzLhM&+a)D zDaY-ZB<8bTrooi-vRS8rDiJ3U6NwJ15w?dykSDD_6L|+0*=QAA0M6==t{vUYEqgd) zOSDjbSWk2YC8iL|7EY1m({Vn*>LtHNpR%~m*=g=F#Pk;A0e%9#bUSysV1qC;EUDr5 z?)Yl=#4raiGP+ints-der-YXW7vKl-LioD-HD`+eyzw++W5~5p^dC=LOBmLeRl<0R zDtlkhQ8Y$^16v^!(&ulbCl7{sgewgVvn4YHnJ(kuE!7zCuq!v|%}wrin?njJ9mxZn z`QR&ujdA<<44Cs!TnnrEl|Hc#GGuT4v|w}89{F!fgfgyNBdmUXQnr8N4P%$Ho}S{L z3JgP9zU+{oT?f3^t_SJxkE~ACihc(q=s~W<8EYk*eKlRx^Zb?KWMKkb8sI0cwX8)K zIWO(NgYa}WaW_FPjXfE- zrFxTaJqz16EdF*~cPDYl#lwuanT*u<>Dq7;;}n0Mk~Z(>@d?R!EW(hs64$sT=(q^* zDJZRap`+mP*4Mnm=ePNS&2epq%v$K5n~4vFcnE{!eiElpy1vE%xk%Q7>j2QPRNFaPd_r zs492<#~DdLsH?ngtZ6vBdpjh{Gdz#=5O8tZ090n{5)c&P);z_0tvVZxaM1GH zxmz0ggFflMHP+0W6Qd|J_K)?a3N+?B$d2FqxgQ9crVF>68I9_?Kw=v6_12m8UUzN$ z&QsJKoyS2&^=*A2NzFrpLU-bSCtjEI2w#JmQ15#W2-@IAtUt>L#x>f}ucr?(f=(<= z=OSUsxr^zwN`{;9Qm8-$yc7AgHkT5HT<0E4H+nQ$3r$P)f`O{O->s%UN`ijPA)U97 zkVqCI{~{{Pk6L#Dx{MngcG3r#1-36uZTayMe^FB@&6g(7wOh?33w6a&Tp{6WUa+^p z;sAJ5BG;~c$P{}`DyrrF=l&ksg=bE{`{iOs*Lr(TEHsqp&G_b}LwZim>sF^&o|8I8 zEcKk-a?KL>xx^jL3CUU>?S_(jJEgnenX`L7MO7uBT>O!X;jXBee7v5;#+*Tx>Ghxw zk*BK*V^^j|?6yyt&g1?CM(w^vsMeik3_Wj4BEL$dPJMZh{-s<&%8I}w6Y?QnDe`Jf zOV{*bcJLQ#p{aR{H%Z88*@K2c4IKAS9?I^05b#y`Z#K)dwCgNhMeC4VB7Si9p-ux- z=>wdpQ1eb^v)WBhlf7)UH_R!b>C5JOMjNGt01-g9L&4`@xheM~?QvSrAwIxTnY1rW zk1{67)DZl)8G7@LfY#YimZBfyndl5H_RK1`69cOXeZv<1 zfUbZ94fAcnHaCF!tdr?KJKy^r=h;lROtuQN!B*k?->P`vD|*)uBS$Z(bBm(#TvVM{ zE7 zt|o>eCkUX4x8}&Cdp$AS!Qwh1;P9k)#VU)vogqo%bCxu0ecdXoegDgD>6_X5vp@@m zH9M)<9CE2_*mULH9<`k-j4WlGG)!>iG%y!Jo0AGQiF@yI^Cm*}frqLcYl*#}brlq3 zKJw-x6@t3FdYa;BjyzOg_1ew~Y?aSr#yVBT9@2GJ#7UY>?K~aJDqh{dFofg^(Q9CD znm_2*yJgl1@U$fd9_f@B?1x%n(@H;?0 zLGwHRLd|Pmgrgh%er!(Jo_l`sN;c1bt3Bj!`oQbGV@jJhcIq~tLnGq6O3&^qN}(?6 z@pzMjNw4B@p^Mr1!52!*-eX2CpS9hha=OA&Q)1hb}Fm;GUbeeVD%=BFRtcvde z{3E#+RX9;H_FG-K#nrUKw1%gZeiqT`vxpvCeNUbNzxaB{1Ek3)zxIy$czRG5{~C7U zm~P|2+zdN`RY&&NLmt&Mq7)%j+7v%y*A5tcw10o*ruh|QM-ORlp_t?{NJPy>UXB2I zZ7NFYsE7YFZjlugY(u8m0Lexc&<$A!CJY>etJt!CNPseg+T7B~V>F*fsQ}VpY={!g zwjS`vl?)Fnhan!q5d7P#XYjX0i~(L?MzB))v>xe0E@u&0d!atj!KJjzjc;P>x1qy} zm~<@v%WNX<0p`U8pu?UrFs23v%Xk)kg1tXW99I=y>DIO_FT*Pp>^Yzo-F(w9-dy_b zyHL_tUu)jnsWnF?T3PDX=#%g!7)u@dY%yRN`bEJg7WrUe56~>iBP<>wg{|&A)=8Xl z_qrwiOo}Pn+x-861!w;t0xFXJFF&Sk5$T(Fw+(e7y%jK`;T>m#o+ZnAt$s>F8ERuJ z>(u%7(jz9U$n(KtdP2@v026m{=Pp(<=}4&&_+W&m^A9E}+UTK#QNlD^frk?%BPOVR zp3HQag`U8dVi*3L%d}-D`DtmA0L^6FIdgD9y4U+g^$1n1BX1%-E?>yA25EYY=d|qH z0FAkD{3RI+NCS&i%Vz0lHt(y?+!)_ZKjFD!F+2m=P2z&wmP#QZn3!roPYh2*onbkt z`lhQ*)*1IKbjZkK=vqrFT$H$zqy7I#`VPOO6aW8fdgZFK+{)cqS~;!P5Y_^htJ!p)bZJWNM>GBhxD_)#>TJkVCbAlb{8}#fc=ZLqSZ$- zq@SB}nq3Rhok`qj_Ya9z(k_F`WJ$W9V8Iel4UZ2?*-d3DZmR(0&H#wm+Qk{w+B;Ff zn|}z%rSTf-kDUPKilE&51-sBxO#b!~HX>+8xnb*PJ#43qL$R(-k&|`=ePlr*H$G1d z=_D{&hNyJcVNm2(+YZXu^MSO=68ex)eRC6g;y{ehl~I z=}HcnMTk;&UJ?RRxmODwgI`E-fm+>tE!5akj4y%+<_@wj3Ua7QB!*BBt_W6rWl9rs z)IQ~O)x|94!GNjO4@*eHgqFgJ?7310<>oY?B{4#BKg3E8UX+g(TuRcazrtPYqF^ zSV;dv@%@-*po;l%CuQK?bXJpzIpAyQKd^%dg&=@FYPKeEH%Z#~psVIMc=f%k)YNwN zjuZQ(pu_JcmJ!tj4U^5Df7hy8ntMDoK(6}=b2yOjHdqE^L5)5FoD2Qolv>K4C%v@c zOhmu#dw(3STrf}Yt!Gb=6Ch zmB>X?7h2K12{z{+9^H2Z&b#Q;$r_gH;PW<@&yh2jwk&EIStb|V{ay$Tx?NgJ3qQ<#xt5F!b zkj$I#FRtX>;T1ABy_DT$zPN_#Gm5F(_sHyeu1mnI{`8EY$V_xsWV)g14H6Eoh4#4m z{}=He=+4H2+A=aLAYVhP^MLteEMo6K7v=3*x>mJ%N$zf}%1Qj~h-2~bG`pl9sg#0J zzfqxY^~M7H+|pt_S+~ACa&sE5)HQQFR&X8OMSSXr>J>D%#yp~k+qSQ#d^x&rTc44<@ZSPA z<2P1bX!HX~_en!`q^R{2sN>{BIjv1`+odQRnVr+5TJj)V8HJv67d?#pl>x6{K$nZO zs*Y9dhb#zjJPIAIW!l>iRoeUBW_G5`mgE^cI>{Zqn=0IhJ}vsSbiEZz7_?g_k8QWz z?ge;+87HaVq{VDUHZGt`Ad92n%Kw>AG(5%jqm46zKtO!?;SprXpn2<_9_~;Tp7SRY z?=EgqwHj(itCemo%K-d;*E(dd{ee3a+gTTKI^{v1PAD^M3W}|ZpqqA z4qrQ!O4L}Vqc0#h)tFaaKW(C-Rl5|Q^JW$lF`X`d<$YR+DY9@2jQLC~A+&3*}YGmV|%#wY}DB0FD~IqUzPPn0ks0)(5b% z?7udX=Nz+bh|cig_6zEl;{)`!vVG3Fp!q|`E5jj=ZJ_t`@8x?Vd~E(L)-DgeLtDAb z*nC78DMsK{q|-rFI%Q$>O)&_uXXiuX}C=ZnQHE8 z^wAX}QXH`;E(S81SDFKg10n;0m>pUpHqgr&4hj(|)-c!RL%XP#^_~@DQ%SJ|^3F$VT8O24|8SIGgz$7{XlgK)o6(){UHZ$YIAAFg66G@ao^HQ~CdtVz zWn47JT&AheZuSgm6A#lqxfR5T%<(l}Ob@ObYOn16FOtKsRgm<)?E! zz|uZHXA!#-%BUX()??r)?daL2=DKfzf!~MpG5upAHj?;_TFxIttVRhQD9M?lxVcvD zZTu0?J0l;2N29SzPFj3kJsYys$(8JY@8qu{1 zK+qw*z=hkTLa*g!xzwJc)v>aqH2f<2T=i6lcXgzhLSPf`Frk)F?aW;<^4zjuS3G^j zQ5EJG#N~y`5z6PcI2!z2jD0C$^Iy(jcz}44HTyWq-zYvUk;`uKC^;BDqpZ!&2h4Wb z+$n7LFHW;tXMb0jwXA1qKB3W{ZCJ)+vDjJE6ELK_XlE8bZ(49XXH?rFrS>+iAenb< z_cv~6Cg8bWxWW4H)>wfSNU$+JU8THJ3}_rG;xQ0Rc>np^Y^it!IF;@1vshw5>Ohc6 z!IS!|Y>SLGH>3FR(ePf=&C6P_Haoc#-cEXQ3rVKf_+T-jhIBtH!%8nlM|)|3bbx@hmY4@EKaojo@{xK0*#TQM2ed_dq((FY zSdRZr4-dGS<7OneXlfhW*)EJE@78ZPZS{R|Y|9Z6ntCugmCSxCkL7|v$rdF<_$Fbn zwLoU|c1E7F= zM8yR6$?UXB^El!pWXVa&l7_(sj`ZL>)pvcd6}_dn7`I1JZU1=sQEwoO4P3J(-BZj z|0-6-1-r3xM{%K65^tz{2>8GnkO;|ZR^NAiD22Ldm8(D1dQXL8LyRMC6gnE#so~Rx z_zXOaq2}QMOUT6<3l1`(299WCeA=eG=_VO)UyHMD`1@+BgeL4>mWb*LP_CwW&l}=+n=0f7amYw{~@u< z+c@mXp7sjwn_Pp!nj%EZyB(`tNqD)>+qOGn5rgvP=U}w<6(R3e$hqA-Brm9GNj!IZ5MefQqw;POxn@c_^tjM z*RcKrw->@8csvQnV* zefC8%Sy?;l(@qT~5$iV{nX5I`CG&hq%z-7xfw|nOI>4PaKypifs><1Z70sFzS@A%e z;Ze|bkD;l}a(O^rc*#+_bAImGPpsWv&}?CE=8A`k-IuiM&tm`5Op2U6e9)5`SoDFD zY2w#=cPkgrT08YnW;i(fUesm#5U>=6*R%N!nNC{vwA3ou@Cd zY@I@SEyWfMGI&pjHks~mf!%SvOb)b`tC7wAyF`2t7Sjl3Fa9#%TkD;i6`kPJZ#r3J zd0l~tUVc#2e1GYvd3Gc64U##MQ%u$)LT`_G*iqM#DPFHv>CjpksK|h=-XLhvcY`%K zv)a_?=#6s46Rzq&R`Ttw9@pf&u4tSSRu*sOui`11%FI_>qOGbmMnw(#G~zqUGEzEk zY@LL|sgh|K>b7suM>uHS)N(Cbkg&Nu?YZ?YKaz5q_NUcjd;_k}U9@J={J%1Q%P6iT zthzi4q;8j0mM+XFtk#t`&qo#&;$t7~T&o|jr1?bKHup+iQgHdC=+E?eKC_9A_^5){ zf1Y});JnCEnEe4ki(6aDDf?1Z+35tD* z<#9>xJE3>Py2IBD@QQV1FT(pq%e`5JRPhu8W1%4?WG9%y!k8s0ll2;aYU3yEcNh;W zCx4%LN!%k{-sdiv(j_P>8jmjW05$9@JrF&HT7LmX-|No4oYO}biYl?uHE}YmpMMVu z1s}!^EH4Hje&0%sqvJ&&}q0fGq*IB+P_-X?8J%<q!q`!Jsvur@PE_b{|$xP`C+%)Q|TnIN>+G|gD=K6 zH&zDT?~ znFriOHk)jSO<&wa0l_V82cC_s2E;I-=)5jd+!*HM9*0#XeFR7b9twXpnS`~>= zBcunwg}G-oTyS^gDi-16J7u-I>50$M`_AA^AT~}5PoK>;xzh&r;xyjOEkF!*2%(3} zt7$RX!8K^w7{N-zk81w#62^bUMnJX9v05O?e~)d|3S643sRi72-rOzH|Nl!SlE-eW zs4*b{zFRu19K(vBlGc*d{zEN{$i(UuGRY|5JV8k&;wQ*Rqm-NAd96={=U(eJrZS#g zu;bl0e!dV-QEKj~TD~P$j-dbC$a0mI+V&!{>HABK(gC*X$Ia?28~&X1jE?EDx$T(o zGsqQPFHQ&`5D;j67QLiU8=_@wqZ34;)prNNQ)1WdY4CHXUN!l|zVtl9Dln~7-k;bv zEc7wE9eed`*~e$H8YkS!cc$|ryA#*VQPD=|Xv@~2Q2H+~i(2LHBMtD_U5mNpIcEuX zCVr)MQ`DHe{%@71MW^Wk*d2&o$Tp{m+AeAYyq@@FR7;*Q$){i86C_VZn~o?w(sQNU z_I7H#*v%{#s(dq5^ev9nk8-3X=6jV@hhF5oa)0UtOsFC~5i)EDfbU5}9)o}z#jdMf|0Z)9}U^z8O@a5yt;HELXMTYjet zPeZlq(6fdeEuy(lR@0_C8)HNWO*bBYlYANuk@Syd*oGv@O!x?U`6dpzc^Ux?@#d*; zc30r4l&;rLsoJW<+MrN{K=&HIK|$HLO8z+(o?fvx4|}Ed;%sL28S|FNBwxq@6BHy% zaX6P4$XUD^n;H^^ch!mh2%OdML0Z?2PXTFx2$xy@Ty$PDl6(2v(O+zhYjYBYabZ&; z@t^e4!c=5qcBSUqt+q`gm{;;)*cW;dhK{bBs*K-7{e34C*cpF)J9BjYjZWr{mxC#$wQF?BoTDLXl z?GR@tIA}}w4@dqHO!-_i$2;Sq3z=wZNX`7KJ$miv=rNpsvIq4tsVFY>%iWrk?G7k; z@rp3^aR8*arTw9_a*JZ z_Wtos^=)0ZaEs7Z%n{z-)g8S^40zK>OIc&zu8Ss`ym`p;acPDR;=x}s2NShg5hBZq zll+bm=jcP!VSP)Np=XpUx>-mL;e@zS>vwXDyn9%>Fh>s4n+dhy2P9{I0dQUA;<_^W?IF}LSKa@*H zyd>||O#0qiw|g0|OQ#NxI8lqE`<36%Lvo5OTyt+i3ps608XPq+=ape9>lVgS_@_*; zG}S(cK+vk~RUpEwqz_4BVY7&7Mj{7{hKs%hnH}A+YoF~C6@!Hm=E7p^YQZ&1FLVF6 zRcqp$Vs#yf`Eoe9p{?P5a69}NFFf(6EPs?U(bt|v2SRwv8pK-=!smy%N+@1`)Xzk8R>5GhIWv7*OGKd^tmos2c z{a6ay%^*h#gY{6({(29cygj8g?cXwoN{uy4?kS!XvKRYv<&VR57p+$8%A%KAmv|34;9cHYp z$1sZXg|wHR*x^ErEtesfDo(Ri$2AJ(ac@%TzK3BnQGk2}adKZO=@GHkby{eNPcVzu zAi%Ij#8Z4I$S##Qd(MdB5?qr$hW=7+RyJHGV)|D1RWCH;2=(<^E$gocKI&&GuO`_B zi4)pj_3^SP(G%GQjJB`-ixOx7kK3HtAjy}#8u&;C$VzN7g3u6B8x@)mS8MI$8TK5p ztJU!eo-LQge#+I)3x^k`oc37`_w5^6;IWwQxo9cpxdZjcC$yf zaP0nCms$1CZdnlN7exzH&Rq?6HmE(;IK;{T`R&f(JpMYg3WVGnOsGE zSCp_rzeJCnk)e8Snhpl;&^Q5)>3_rfi6X56q#fhwq zWbjW_SwU^(0%4BsjNwjdrgMA7#Ypy;$7^gkhNCs^pp0S-uUW6@>U@I_bLO8@n|zQ> zqe8S@V3KR}vk{ZvNMF5Zvxl}_YTL5**5W;k4bdv`_0pcJ}zu+57SjgGJxkJ<4zx z|Fks;e(Lc;fcbl2$V_nAgUaCXRpeWJsJOys=Mr(^pkiO=`#xYjeKo`9SAOFgCtZ}p zCTOCe0zRUhmB;tePb11B24m%L4}GYb6%ChVrHuN$4W#*TcqXT_ zF3f8(?`C}RFT$?|OOXz_F&VlnXJJi~itqm}H8GuSk30xma%k_-* zu3i|+Jpb@+EN>C&73IjB`fT)^`_R~eP?MVdfod= zZw2d_Og%W`szlMccT>2Mt?lqyaJGd&xlU?4ieUN#>Is)^Yp_w6fg9zw8lWC!%HmnV6;+pK7jSQ+lQqlrRRd#a=~Fxp%fjq}NBb5&QMVb&fI$xGxB_gT-R)(=4fl~T^g$=T zA;aoN4AQoioDbcc(if;6lCoTDVEVR#9BgH?9$7KB1 ziC|6iUp&XEJ%O&)-Gm|77_2^fh9mq+KI=Jh!{0A5KY%cv`f^f##CJCFWh4oPcZKe7Oa_fA(7r6BtotYu~7G$#eJ?V<<`he)h zv@fEeoE1;UwaLgu|2wumCNKO=7(Z|kJ_~2MbFo{DY#2FZEv)T4^oNJjH2`}LR6$j6 zTEm%&4oWH4K>Y0l-*wYzEVR18t&K4ouj)ZkzG4hb45~LMEhgUY6aO02^&puO!igWV zc6wW({{rW0$0XLPjB)Yb+vw9U9q?Y7P^K@an3vTv0YW~0`GHxHN zlpnCRzWFusjWwCoFnn+e&RPpiX)2Em=P3uWFKoJ^bLh*OHyDLhscwa5Yt)?B9SzQu zTS)T;WCS=LuxCb7zX6=fKy!}lY&yF*4bRM}f`s`^HcF8XEw4Om_eZ!ak#02cv|==5 zkjk-s`?X^sr87q7dN{+UPBvJzj|;Oc5wMCDJ6;v)(p9k3&eY1O_1^2$-l0&4_>JC% zlSF0)^Xy-w;;=B};1hUMa+XJcxNs-$=hsdCoXVQYs{izg0fJFGpS5(6(}MQ@q&hot zv^a0`u)AIUJGUw4vQH)oIk-mWAnZUM=2snR%jj6Wvd50}W>9c=pWTzHW*6RYEB<;< zQ0a^1TRjiXO|b@Aw^?df+Q?rkuTy0WJ9QXh5y9w+ZfzmjyNFra>Qv@gvoWHXcpnNg zKnXSY%an3hk-YzYVtz#bL{zYNFk#~#0L;$@=#V|$9*9&22cAo@CQ5rAWS@;!e z{;ZT&EcxCY1>0pu_wzE{AZ4wB4-OGoTN)sgK#s!tq@zBovG5C&*G@J=u{$oUUPHZ= znMPZMp5GeRw;IBhA>wQC(w)4@0}lR^sK@kYyUulgL)77`<=m1wFZ8Tsu>FX;dxs8t z?Bzh`m>&)F1n&xZSR^1A@Zr?8Y0-=7ODgP+Ab%=Iv7;nJfua$+@;hO;ObxrPu`-TN2GJWm_571rvph z;9AT)UgEc>PqxdAf7UW4ZNF?7CF#i0;#tU=fp^cq^Cj$;67?*5c1yPgpzNsDibRqK zZQMg0`+k(d-h2t9r|}xX&NE+_`vQh^g~96^;{qTd0SGHzSHF`!nn8I|O`cb?SpWLq zSLj-Q`}o${=N_BD$MBrmHe)q=Gj`=$XVhYK*N#g@1=bK3DgskS}ZGlY<9Nu6RwHXy+(pXw05;@8PDEZ?O!lvM4#51HCGqv~nLO z@h%hZt~mJ(E1#e646>V{RrjCRE1ch_Y;7KMhyZ>P*^?l)7&(m8bjT+UX7dd+J7p;H z8+`wQJ|i(Rr{XRvfz}g+wKK8!UMz&={DryvWj4^~Z^Q@@EU?tc?cK~Ry(-SpvVOpE`}`GLzw!+6TO*WR*j5bGdsR@^@a#MJ#wC zTQH{*j!hMeqnB%ojyloLM-50jV-eREzvo$(pg%>_t|M-DDsHcJm~a1I8=B;HB=$Dn zHiQ^j>U5Z|vi~y|cY1eML56T0Fj0X$x=9$|Mk^)D)i(tja_y$>>1rj-=qdQLL}Eg_ z`~|IfX|C8T_jw!l?*aA$MWzTY-D9&CM6{OOiYZ$2v6i3wfc)O~u|G?Ai@tpd2#Zv< zx)6P%P*x{W)Y>546s2+ekYwIdp2>{&`vQ8-s8!&oC9}(?ZhBu3QZ~A%PKm)C1xUBt z)*C4%OKt6$S4Q7C(Qg5yA5VVCuf)S!`GRNQD@lsjcuG3uxzmcp@aGQ1UFd61HN{fB zIpnq;IWfq4OXRQU1?)CqVA$NzI9L*74 zw{tEy0ROeNEz;Cmv4Jlf%V29zU4ZNYt*rxQb`(OG2AiAK&0{ToiD)$8z*dz}BeuMn zu;ldB^E3~LE6rV}O|5vcc(=*ux;xe08(01&OGmH1jqo0`p@HFvS={#Rbge7yBW~!4 zqwXTUGT0Dag{>ujB?}@*=e!B*Cy`r|vFa)GsMSi3qPA{OQO z(r^`So3b`(6sgSlrcUzmt0#RQZq6NzKOjZ_e7h+79|SP@rk<2bkK$>@DEovKIBpT_ zv)K8uFw1ugO){+a#Y`%QES(qLsXfgqrS~AgWGgsIrprcRARP&b)yO!<|Ge(mzvcF})8yT_MHpVfwRWD#rm@{w&`kP?GTUb5kPKKDf z7soaRXEpDP#ms&O2%FS_Yc6_9z}KFr$ZT0D+TP%LrS6We=XMQjXYM5aDs9}xU&AQG z+qw<8oefumHRG%{+XwuYj~AwGzr{|dYIQd?rx@xExQ*>zs4hCKRcODH(Jts~n6P`f z3sWJ>#AEGD*@b{U6=iLkV$4kE15%vha3$wqP_O@#x_xP5H{asnebV-|)?$ri$c_%9ZQh9b+e@-z-5?UIGx$4IdUy)RfQ(=>HKh*DCg>mkaH{XMP z2nLaY1FU(IhOe9tz_wfN!;c@UY}ayVv(&}Q5T=jSBP?a(F)?x=EamPz!dqtOi&+w` zcK)S1gSMe%d1IP-#TL{n*gzJRTF4ULYlK*uk9LMdo-{>myfVvXghGD4%_cI^GS6VH z2YC4>Ek{k={++QnrZ-20bh`Wsjt<(%(`a@k)B<^B&WIEkhu?~T!hq=YYm zr@du0#x(c(s!-hM@>8SLi|B{!g6@sH+E-dGI5xwy_ER;Un_=Xz^oGWMq!jbLeHXDk z3*bI*GUz!yHI~zR*XJIoBN(#}TD^mZoTrU~Hk@2HyG2`an*^E;AW`CuZ1Of=a(Bf0 z!`+Hf0u9TZBQw~!vd`Nai6M=$t+cqfwqfv+PIYYD73C>!eq1V-qMAH^p!3LT9=4_9 z#X1%31i}~FxX=ZJW7fi=PHmvk>p;Kcl#t`2Q|fRMCq2bq@|{0v0$;V< zxKI5U^pwXw?3SZ3u=F2tqw^xve=p&5(PA^Wi($7aQ7_)oSXG~XQc$LFJnuO_@v}Ez zj}u_okZ_W^NGUbz6OE3i`pRDhgehV>?0piR&Hn2e9UPRHYe+aO4%>-JzgRGXS$_j#Q|#?#n6nhB1( zqR=WE%S+Lv5Wf_?HFD!G`4b0_Fdxnv=ymZc)LGI1#earVP1H0!C6%xLIltP~c2oYs zb|v_UakDeh(0TK*<>t3gg+}SLvy=8cCd&Sc71yIJ`RtOPdyl8U)RKDiz=um~RO|9*`yQs<8W!RfCv%-M;OylPU+TACKu^&lU@k*H#wwa%o+x zjhvr87K|)C7CUL@u)8{>_seFcQzX2w54l>~UF(OiD3I+%mZb$%dDa($6VF1aDuHnC z^#P@VRgC_k>eSfF){|ue&;8#cmtni97MKpN8owcVK-lC=e|9y?JfYKj)3-{488>bc zzIhZb#L5 zXegE{OnjHoNtnRZClPC&Z2tGwsWJ9>QCx!H#iDx66Zlqz^tg4Ci#OFNN)tUsLm7>} zLQ(}+Xg%$`{*eoubK_)WaJ4`wq0eM9DcDcSSc+o>x-_2iojOg6UUJgO~oJ+Rb_$S;U{GLCXECesnp|_U<9hc)R zm(?oHE9)e1=$S8hkO|YEknb9P4?O$7XatR*SG8+UgPM00*`S!!Awu2U(rYs|en+G3 z(E$i(_7RQSxl3ICkk1cyUa%v!=c6C4sOBHlk=S*k{BU5s`bKVj?H;`fEsU^Q#p+2t z)vvA{@oykjkJ#O816LCj17P=lLBHRKGf};#m~%YV&qv-k3OKAAS_)0OzF1M|C`lwvkckXWCoB(rL1%p(a-muI}sofbr=eu==Go`6%CB~82zk$el zu55Yte8{Ur{A`B3AW2)Ez`yr3S}|`EoF)@%LVO_=%Hcji>6D)XR%3yYEoAkXAm(#DNME|Xu zVL#$jGpk6PTiogY7>inQUEPCy0ekd?f%-A^M?;4LBZj{iwJR)0R*0(0)2 z^cB4RI$JxGH{R8srf6af49)N~Y*xCsaD=eGw_U<+yZgz8A+C5jrhCJ^ ztq=A_I_zH)mpsxoT)rg(^6dq#XB#v&SGW9q8__g$aH>(=hcA-FkP=6BRfV3!^?}a5 zP8V#u$(Hrm>5%hgCdt?Yz=G7D13&My@_3aH)bxO$GN(rS6wh5S%c3r48GkPyK+5J$ zMzO716Vb)XFJcD*35jI>L+q*1!NS^0J>bodCF+_dwEyl8X^j>kdQ#oFo_=#!29*G? z%I;dL;Qy(g5Fp7_$#75>Xi}CQZ|G<&Kj$}^Boz8o0!Se_jJuIv(6ec#6AuDM&7wy& z6`@<2b$oMT@W8ve9;Be@kU>ZnG)pcRlpl;y1cjAx)s1Ec-IE>&4p`U5D1yX!JE*;& zt+o2Lq0GO5-Mnah(Ap<>*a0I*uEw?*fK*-m89%d65jP?0*BE0m-CoI|FlixlggKuT`i zPGEjrf2sn1GK#saGq!&=p)VkAblapl_P*t%Z>)#{Eq_gPfoUq467#mW)S5_cXmc&3 z(q~xWZC*4l-0aG37R@ZUwk)N|x0rOZd7PdEu-2<5fI-tSbfBpQVeGF~_IU9p@Z>jX zKYz3Sc7Crh`VTA{9_eI0c>)tU|hy)jU zxsi;2sZQVVm-Hj$O~q+}k3BDn|1mzXE@ZZLIBWxAR(|JS z*|KEC-ObYg^0G30ERm*AC~zAo-wv)+{olrBy_mTp>%A)@BqEL9j7KqFq_l0OAk7l+ z?%?Nz*>x`MyQqWAUBjsKr{WVj-5mR%t^xa?;58}QD;Cu@=Zd$o87|`ADGG_)m|q|3 zo%)va8L){`DjlHvjw|74M8h>{P8{unl) zWK#qVFFc5ea7^BZ3*~sX!-6-+%?BKW0bLFI0H|9wHdhTP{Y1jo83%SY9mE2Nga@?6 zjsJ??*=uWW2glxus=s6672!)oQ&TlrjJ0C%+hIG$$fkVIDLk2sT zf-2>ZHjClQFY-2eJ+k(%Z8eL+@?8Pdh=CUL+VcTRnbheY$dExJ(rcBb1ZVDCeyx^t zH?-of8CB81%u4?DNO;8BoYU4fg-hJm3k-qzkg(Ud3VwoGJP2LF;R1JOo)j0fmmy5C2jhV>2ek!a?;sbxTW7fXk&Jg`BakPl$e%XK&hm06r*DIq-N-} z?eSRi=&E0nQ?MAmHt)lM`}`oB-G1tBYRoR%G2NZlP_Mq?msh0hJJEA$n5}cfrbI<| zl}`M_d*%Mm(f_pFhW0hty!jcGWGq<7JKDXam|pqCR7QbfgLe2S-dV1%^kM%xR_n4?s*4ZTaM#flOrAEH?BK$~KIz~q%(*I-|o zl5B-uJAX0)6nDu$*I&ue{{$2@vt>(S#Vq$r&-;4I~&qb}F&kjIvy3=^4H?gO_*oy-Z zwBB8ycUv-2&ca}LQLO_-p<}FpUbPF6rtJP#>wByFr0Xy8XoGJZoTiwX?qFV}Px0TB zhZ;f4r`OwK8>4cXY9i&<(EZnGbH1JitY^rVbemG@qjJ=(urMdmv|PR`drVId!NvWM z?#z4+tg%S7z-&S*$Np&g?i5gO?PZAYu?AQZtAS7ur6PUy&<4l*#@Hon(X(@e-!#hY zY&Gj!I2k^?m1T>*elold?xsP{D3^@quP9|BaGRyIt5Fpty7Na_$xovTSj#I0C#(;u zYuMC*vUjC`m9*|Z&M%lOoQOQ`FqU8qY@_~}-Z=Ga7pQXByU^l79=YMp9NEpxkUYhS zgY|*S3YarX$5iLj*5D+*C*!U_+;mQ6!=|z*StoV?Vv#dk*%pj7y+???6L^nwZ#}bp z$=s68(@u7Ybqm)i=>aad?d-2mR&--d`y2LA(={7&dEcW9F$JDJmuze1nsLqqH1?5- zB#JWa!M3&t$*+1&^%9cRqqqH%FiX-#AIu+Y6GtyK{mnGYML1PJAh?jTmSx&!!xe7B zmpJ|uJ;a=@kyc>u@mS~L@PBsZ8_s>1xZr&D@qrZnFlXbZ8N7qKrk)fVvRq)5c{A#{ z!C%3&H>nf6+fdG%Thu(O%aUCnJBVN7t=1`9?AM*}$w?A#JACTzXN6oEp4NH1Y_Mj< zCR**=^?!2$J>@y$ZgbJ>j+frgI)qDA(qq2kR1Cr^bOY9WymBMN>XbrHyRb{pk6$+$_uacBsdzZr_@K~r3)D@Xc_V*M z4K>gJy2sdrCq|qE4%AoxS>0(71r5cKb1Zkvb1`X&T980`Fz~;Vr|asU4IR&%BkmT{ z5ES&E3$1SbqgH4y`B2*`x3HG|Jxsq(WRikKOf)!jb4qaJOOI$Bq**uo!AT_-cG{i)j1feM){uW|R+E6AKh_Xru|ncT>Y z(R7oskYl(9#X-QsMXVOlr@w^z*5hQL==r%saqr3C6gO9N6dFc-ep{7$0=H&_VuD5v z1$ORZSOVu-PMXGSV-E(Cd1m_>iP?XMP#8u zN;IHvcDfuG2SBwIMj}X$*XsMspx%&Ka_vqCQo|an7FkEDwWs(^3LeSN1wbjx_LA(T4^R|*Q|&t^!C4VPB-RYuyzBxIT!8U zuT4~hHjKUQ6-JYMQ8Uy{uavl&CG{|VNr#F5U{Y!%0+KN|eWrZlrE0qPLR%3pUZsem zI-dcKrb1x;xX=xaJG5lDFxRSK@O|K1hEjFMHGeJCQnQ;ZjNUyv2}genJnOC)Ja>It z1vPRaa6gcu2=h?^iNlg<=yb!a#<&F*DQWsNYRA@W>MT z-?T_{y|6IP$d_?0LhuOgvm5$}dI@hLRIZZt&? zBk@>LlG>DAlCZ%uAe`>i!1wO{lhzWcZnvc&)PlN)c;nIk_Wq(hVQRZ%t_CsIEl!hWdMb~3ZTOO_jA>U!wxffr2NZ?;)uDeyv%JQN4G z`tXKd&lb6_$I-FxC;I}^i=O(=?1s|N`#IJ2?92Im0%`CIW~TVty_)dqv+6!I-vE?7 z>8xmm`s$_LWM#srt(j+W?z%-ysj;ExmVBMaa+w803l51`xWL$?@Zzga^^;_e^f}|z zMMO8@NPzHRxztr_|MKlJtD4NppQSR`3mx_=hDE8IG0BkXbn<%`=Sh)YgVofp@+oeH zi-qCaoegbt=NvG3ybgU^igJ8jFK8W6zGGGYVE+Yj%qp~44r4|tzUzDaziciJb!|l6 zxYr5>-)vV;yV0R0nxauZs22)iRuWmg=Y38<3$qOOXy4oWKp179){Usr+R+FqpBaZf zj-zfJrjgXG)Fx)JQ3ZPF%sO$4rW3D@0qH+IFIM)_Z z_PCUW-jn>Z9$~UH`Obi;%DXn%rdw(=$@`0Z8pS*sU+a7gfG{=oilOrRBES-hgfD+( zuZi&SGuQwlU%$}8B%x{LRgus1(i>}ens%(b_Mn=7K2K+D2XEMrBfnTp>l)&Vo(X)n zB=Y$DxFTF{1j{II=Y+?n8R5Upo^9PIVbpt+W%Wt@C)Jyi**gy1#(o(8Zyw^Vk%YY& zT4wbl>fb}-pO4-^G#aB^OTb-O;^sx!ZrPQau+^45-d50>{+&1a8t4tU_b{T0AGOrW z`x?KtagF}*Sh(=l_@AYZA39jcJC^aq+VsymB0H4z3x&nL_hv7ENpO^8;Z9UjPngh( z5wron7qZ5v6};-jZUV~>#?kIyk(thFjr|XZ{Rqt02hx@=4?I5K*bJA9Qc^qrjELWJ z95Fq@S z&wZ`|B}M)HjRK=L$b6hwy*H?63d(~uqve+;5 zEO_{#O@Hfv)$25$<((BZ1qnFACNL@7UYv`t!Gynp-bjkA43E&=OY`pP6sR{mnmi9|`(XT8Dq8khl2ruyMJ#Zhu`JTK>f8)kAub-x9-D!UKN?puI;d%_)76&Z!1X#x55D-w2G}oNSfNBTiZa z!qmKKM)gW)oGrYC^zxR^e#;V$tn1MaM|y*A!*nEk-@PBn_O#q0QD&)}$3*UejTE)e z3fQ+{1#Qjlhz{Luq;oT4pe^*-R+JCt`x=(|ULr2k)`A=92?BKrDUa{r* z;3saueX2p%>oc{cvVSA3~rq=;UmOPI3TJe(jE+ za-}=dg7w=?$H!pdzy0gxfQf!kVf?gX%yH?jYHo1$YwmY3u0lc{kgf2;*wozwcJ5F? z)n?YT=CNwr+w|8X4{LYHt*$;z8&o4$OPQ4dtPpQx65;JY>;qP;8#r%$M4tZ;zMI<( zqb zNA)IsXolszK~|g1%R}uHA$r1wOrD_6_!`Z-mL;Annj+<6aR0x}2Oa_Php`XYCiv1I z&X^fLXE?V&Cal8iFMMxxhjj)Kyrx-+e>Wf z%WN|saK`r&q(WWsu)_zpJ7B9U{HpR+5bPIg{TP5@xV^~>?q@YTU z=_@4Q^8V&a=@sJo{iR>;Up^AB_*|?{3%plfvJ9{RVsx}hq$d>q0?!aE?%Lae!=3l_ zDsK!GyOAe%J{w6!Be=p4CRh+!w>Q-WDq-tZ~`kPkSIMs7b4-*u#?LxI*i1qiJ=TV1;%~s9}+(Umg(OPJhM)nT)UMpTh z;x9RVarNYx7F3#CaSgr4Ptb3+bmJZJ07@Qm2g>1}x2f>Jd=OqE#lgA&F+!?P zM<_QT>ZAXZDqP+)WFCPjk@^E{#&Z$;{&Hf%Qo#N4q-w?`=_BfxE8_rJHqHPn4s>jDOJHH{8F}^nf>wZ>TwYU2bN=q|M7-&8fpeW|k01 ztJnK5@5Y!|>5NP^r-=Ur>SB&a0!PMay%z-67rWVZt@hMJAnE>V9spTzFb=52dz?ah$W={|~RR zTdxc@2^kGG%>2yR&ZWYGRa2l!qR1GUh}KkdF+kqAOM{grY3M5q()dcP7w zj`EYU;Nr3j`LTlKa@Gza?vupJbwDA=#*6v+nYWQf?Qlkp1*bG1kgtWcyDX^yT>@J^ zHWQB~EE(4W(7HQRfJgKxvDQ5qv7FMrZ|{_Yai#18vFgagf%9v1;km2utCy>tmaw97 zM@Ka08lo*0=7OKV+Yt&9yOi7r`_x}UdfeWE(FhzwK_%uv5$Cl>9Jte2Lp7wwFSSB9 z?`v<32&aat*CNIZVQB~&VIm+@t*O06P(5e3uPS|FDm@gnww8NF$hp4rrQ-nUA4Vcj z^4IFK+P#k2`crX2zh`y?CT)JwKPBkE7^ysyBuP%S5sN(BsM5+Od7B~dd9Q`vZ<=dk zp5FUbzvi{~uDZH5&48gCWsV(lsygn!cnZ?{+3ODQR^NLbas;Vj=0BzuZgpOj1Nj*N zm^!tWyM3udf!;sM+MY5A_r;>`l^!IO<@X=$eH|yE@NGA2d{YmgRXM_^xICj*M%$Ai zv6*3goI76LOfMxl8sa7S2b9mAF0VRO1I{|M;=d%W&sfmf(e0+@D1p{v6YRboY=c#8 zxX7ii0pNu{usLyy7trhpa)&+ssk~a&vL!}Fvv`^qJzJbho*pA$ii})P+&IHq-I8IDO0L zU#REOOqQR+rqd$=4a)5tTBIA)k@ld)RYXG8?3%`zaKLWq>i%x{p zU8mHM4erl&(VyY$ds}{j8MdD9u(z*U=RBb}GVJrrO{`3`ZpJg9zS?0$ktOT|zN)m* zremVL>P&v$6J-!z#u%LrQwCW$Z~f3DeP4Ok&J0BduGWOc&o?(u7;hhe5jssh2NgbB zA!Ek6&bo9a{Ic8y`#4D<+ZpV?3AUX(c3we|)+(>mp+t-_gV$p}W&@IsU?1$LqXx-U zdDX4BEt54!Ucag2y!rB_ioqJq3xO@~6sGVN9;?Q4UE_6Q1}=|Io@jmtZD>ex{cLVQ zVrd@Vq90>yFDq#I*R44ue8{&+#j6-@~lpx1^+m^UfS=3 zy+n$|j-KHm7`1rp;J!1IDf`SSH!I5<4%~r5=gcY3xJ8`UtFf#LQR5G@-OxOX)Uc~ zT|uEI=Zi8To-1Xu2S*~LgMurmw864J*vfIsMo&~;bI^;D#Hz|K&!umm#)8$`e6#7&(x|Oei^;W06a+PS3AF{>W zE)&7dPnN2+5ZpgJ_&@A>CAHqy4Lh?qsXe;%qK!DO{nhS}#krwzw_h#F8@&|i4!g|) zW(NGP>8BIXO)YgKdHL(iH)kgfoO>HQUM=<~)QQ0>xEZRgH$@B;$`RE)kV(tSZz9{2 zjmo@Kq|IN}yczpX29(Qfl73NEP2C8FOpU9bebMzjmjHYCB|>5)!tU;~03PNNmMybp+LkY9y_n zNT2WNw!AL;3iE@?^hIU``!@C3ML$6eP6+*chHWh*c_AOQ?3$X@A*f%4YV@7ejlhtM zBI`c`J>kZ9IN}PWadywLc+Wbab+~LNbZ=9354Za@IUwxx=ht!JqoWsZ)|{BSN2zqb zT(?!CEaX0nmR9Y|m1~$$6J|V`N29qv-EIut?&XB!$Kpebl`&8;``LAl1*Iy_v<`3? z$^Vg)JwD&o>Jc)WKky`{|4M@Q-@pljv3GhI?0=~*ko@uev01Uh$o~P`x;?yPS>i1=ZQm1QP;L3b&|tf72>5dzzA( za;sk!`l0E$E@fsNsefGoJEpsKSaP*l@N}i;1FBSz+cF=Wv6<8IQ&wQXg3EY`+1Qu6 z)!Hb-&i(Hy&5f1s9FwQ>$A<>50N$vy$N8tH+)Uo+0qrHwsQu{LW!~M9xROE)HKLy% z4|{IAoN4up)0Y(BnCS2MMsMo4-co$50k3= za){jH`VsvHx50<%;amB==JmBG&?~GT;*AH7%B~9iHE_bC?Y*mJ2!C0fB{Y;gy9u~abd^(*&pAq; z)&g|46exp5nc5oc9f`SvoXp6x3cVWx+6G|*=5P>T%t~sf`kZ6P^ei6xQ-Gw#v7@Ls z*@L~}`ESt#N~}jtAUMG0b!vK1r_2w7CXyzInMvO;q<8qxV2oqaW{>Ii#!+hi$rW~Q zE60bneZSP8Wf30S6}`2}F}9pw-BS2eEgn^it#+z9p<_G6Fc?GgEVx%5tEl)*_N~b0 zeIC6_EMP1X$a|$hH6X5*`Y4^-|1o7#HVJo;@!4#c+zF!s)1&_YWBz;eZ`IWoK77K; zXuJs(|FB&1+U!*G3A}%qI*x}pP}gWzdsLJkq~O0uZSy-AIM{vs7lY-L#tFi=oD!9y zdB%9OOrM4!`B>F=AR-N71C_H^e@EJLem?Wjjt%t=;8hja*Lx|t&#gPf<) z|E7PkyS~tk2)z|t8R<>V&0RLlzRJnn{)E}`W(g)bdUrPM;ta;9O*H@I(TLH6#;|hc zOV>DPLi9&-U$aB4hElVv)#&j(GXxPOf7foH%VWLfyQh|8%oFMRI|i9d7snCR!BWkD zQj4V_<#DT`elzi8b*Fo*yj@L+e^p(t|AGcJznJvwgK_xqqe4sy)>Ejgh`ci+&o8Xy zsu6|))(?0~^p``U5rHLTf0!w?<*wx*)|v~(=PBQf)T^U4S2T#u9WAWOnvp#LY5E>6 z%kE~hmbbZ$sdc5jT_+%%ZAYAcqRo4Qif0y-){&h@SKpu-r`lx40~V(~iQ`#ik4|2| zc70VZ&?B|bb{@F#@oAL{C4w*jX*0i731Sh=ea7L!Emsub64`(W(dMw10@fZH(O$G5|C{MUW-D;>!iNsh zhS`qCsFPRL#yl_BbyFie)@W{iR~-eHnC(VDo(4YL9M)JTdJgmiz)9ai2P3%5l@k!* z0w}cQ#P6Fku%^ljfX~v_Gyj8Z9S)#s1Yg!(jiPb^nf&ie4FjZ{8n6UbT{)`1_sM39 zT6A)JKa;f#5howJ6MMgGZd~+_WB|jg1V5Ux#@l_>8#zcnZJFuw<|L)o$;JE@LED&8 z2pu@F=j-HaNRI}lHS^X*2WS{fh22auJUV43W}vMlMalE#7mDCLTcv*8fZ8p}jR+0q z6C^+PiBP3)rUEKcZZ^HId*&2wgRW5hZ{#k19OnK5L?k=05WNk@ z%$E6WQjV7g^>fTP0~4`yt0Y&s`m7&$rxt(1WamQM*V@314_3(0KZ>fy?q{R-I--!G z#Ykj3;$d>@x$Dd}J7xQw9*51|mljD5Y1BUOKLq=lthHo6n(~|xEbd0;x(dLxF$OTD z1G{UmSbulnKJvc8gX%vV1@@BjAENL1zRka+T)!nx98!T-q_iuglvH~)e=vyzTKPyj zgKc%R*E8^{u+5Bi4RVo}sHEJp!t9mft5PSdmi0QMj4kV1Ke<@+J8N_4t=;x?TQT_# z*-7XE-ae2dA@_+VWmUl2qeC^;OI`Brt3+Y@&S;Swjo_AS9~}B+40rd_6%{$enS{Zk zshuNJ3Um*=>0P3s;QrQ^h)HD85W%FVsM4<7>|7>_Z?Sowd*usbMl`6d>A23sAZ7K> zwOy{aN_DUa%wMa;F?MMiEPF@%_mQ~iy3H#$_HZ6oj)#v~=*=^}VRp?q;ZFIVmVyuCZs z>(vq783zxLQRcUbv84F@53iK^k zC@h(uvlpi=|9C*1qXk{2_Lg<`b|SvV-v9ld+D9YgP7GT%3T`pRmnN< zK=tN-uu18;^3G-T=@O&G-_5##H*WeRX%R(v^1YMZ19>|i@$E|e$gr!uCCJc*6W6OM zNego?m4A<@?wYnADb1@UXBK*v%50soDYe<=0B4U{MDa@~zLG0ryP@%Ri_a=P^rLRn zWd_ZRJ#OhFf9uS+6_aoa?6IP;zh&v;T=R4RiZw9LvRaP7q(mtsIPMT~XAy!Q$L@$5 zmSJ~7dn?B^QU9#^ZJk{^1&z)3S^RCUaY?*j79M4-qVD^dZMSPydvrY5xoTUKx zJYs9X3cT^&r|j;GmF#+D!S1w1nr}b0urM6<#C>1~ zKbzC!M#6l5yWoJF)yVREoKMqZ+@Qp%fVoVVccd`XG4*#^p*<=lO6dU+<=htM+7RcY z)I37kG;o}{)7myU>pHDj|LBYl>YF*7H6`tMPmT&Q=iT$8MfhQ!IV~&$QC$a6p06nn zh_Uq&6hXGg^U2((dU6N=zT;I55^w6$SW8=gOz5%Qzx}w&|2Ft`8#bWdqdo^<&w^EV z<+~rD0=l^qSp$~g@z*@Icc(S$%FOz9f9BsU8!B}O9BSaZwh`v!XzRFYhlM=0ui;zO zhQ%vEm8(qLHUV=txWacO@~{a1^Rs`(Z&Dg-IaUqJoLUZJ0f5}| zDpYlHQDk|1n{6Z9%o9Gutxzb7DwxBDm^m+xm1|QuRqSKvG~B9lOwj?qTKRiBifudQ zT;UqhY4&`4QDw&TcIH7NPqLr@vCxWD*A9s{daU$;e`8A6>1vGqO?>8dhR)y9haqiS zf5{(Dsu(M$XaRNlrwfa3mH(8ShT|pxwCPacJTT4ftbSv~A!lx#}zlW{%!BtW}d_5qHF?JpW`@(GDBbG|`uwQrVu~_HiRC zH>EEib1W8`Y2^$1qC5KIL&(flbjT}-2!R%qF3O|XeBbcpSQA-=S!Nnd@H0LOH+CMG z@POH>I_>?JoO7-nG-YpY4$zQxa`}hZABsW<%z`$yD+vj2Vafv|W5dT5sC)A|=68gZ zstg5u%Mol~hw6|rEsM{UrHKMJuC2`46O$5yt7|V1cFlyAB}@384ucH0y#>Q|h6kDu zEjvX@@|frW$>3p^1PfQsO$_vMyp!yPZYGcE3e$;3Xl`}aRPmF6F=Dig^ca_Ef#!5) zXhB3df|Oh<8A9#8Gquu{IR|Zc!ZK`d*5V3(Y3;DUV!lN6?VF%Ea2NE?5HtPFov`a( zD<;y-lUy!A(BF7WH5#3*HCF@=k-T&TW34t1_dkl!q%dp8_QXG;=V{iQx9;cW0b4a= zqS=9stsi3^E68-XIJYXKbfPR33W|Y8w3xJL7I7`(lj!4tG`l9id+0i9l zXQNS!x3_7!-p;;q@OPE(D7highFwYoauIPR7nvok$V&DcZloV?m2t#P+-qwVOs|

D#XL~xA7_`U5G3=|ic4!Y?3s>&n5m(T8>KPb$JH=fWF1 z-_6|#{)gn~isRqE#~w=^i#|Vv3QmY_2{V3!ue~TuQAPWoKh8*Xlfo<5DXr$%U7PZj zt!y&22pQc|x#(?Hm`|(S7+xBR&I{Uw2gD}CkA?ZoDJ%d=ylf9>IijxHetzW94P^Ow zUn9!iI|rnkJ}H)f?q$uZ<}20B2Jq$9TS{gGRkI_nnYR^{)wj&J%)~Nr>{hbtY9cK; zQ=Hdz1kuTS?2v(eX5(T#_IBKwSdS2kwrJeT_8~t=TLTsuplw;<&5aa_8p=5tINfS$ zQQ{~(;=3bh+D7@1n?TONkB@`z(|%8FRe)3sG-G1+C63qJM3>E4+78J>+xGuATN>0O zOE4+0D zLRddmSF)u?K52diX1JLJe+=ydCgb!$lb`Z}#@&|lVu)dbFaqT{@j3p#^5;gj#Fds1 zKdLLZs=*ECn-=Ow`bkdfdDskkID`dJsz(Toae&D%^AoT!6{M>n2g-Va2>U>EV~2E= zWc{@8qmz(}tPB`g1KkC8t9rgcp^$S1shPf&ECb{0>(K#rb&`9B}cMtxG6G& z-0NRuAzf-zaD0WYbv}lkzfre2zq0!I9P zq-dt%mJY%T+g?8LYTmR&W9O@5_`h|Q>zk{9>I)qPumvFKX~WsIwJ5cF+xkER)g+;) zQcqqSj#tV>_9o!N0B(ZpsFL2 zBlNu&K7#Z`^*t0)9iNlHUI`s>o%@9U98;&gb-|)1*Q>LA2x8|E6tgIR?j09}us*k5 zkS2TZj5-Z9F7tG&2{BMCMd%w-zf(!B!oL_@{sT3aH2V9^Xdgy69^4&;+#iDW0xG!i zW@CA>)eXR{THEQLRFrD3X4)3de-(b{DQBLre@b24gOY!+eC>J)y;Za6w$`m35~>2J z`kOfS7?gx81iPSmEzL>PskII=`u$CE7pSNRZ0Q2(d4c3Lj=97PmSdP^^7%67z{{kK zYQ#N`y#VqSM(AsV2FLmO8gHH$lIh-E=U|_Mi|kXaqJBbjtD+C%U-~Q^%SO^TErZqC zD_cXGy6OgdKS`X!XbE{c6#(5N-bv?W(Z?sds(qOAuf;VMn8T1NMQkUyK+oCxPq?1x zK%47xgE$ul^SU z-@cWj`cX#vzTiK}kVn^_H`l|Q?NjJJ{x3SJW~-BG;FuTqpt%!!;5A@gvgR$hSia<`fHbp&Nx5DV(ASuoK9R&Xe!@sx6)x8#JU5mEt_DU<;wW+%i7R? zuNmx(RcP(c&F9Jk_VGD5cG_ZA_`&pKmxWgbW``FuRTqytpX721V^qpn5X2i zqRUKtsAH7~cM*o{E5!_)puj)dnnI6DvsI8pZj_7uf1`#wbV)dyMx2OY;|Ig`OS7(u zcP-JxPea^)ioEtyeCJe8E&z|<%VI&FlPW5$z#+3cY%2bsdN4$gS+9e&2g7DwCa}L< z!M^n9t@2%Emuz`%5kfvN4om~=xLsrZrQ8JpQjoBd=QxExr?c5uCU}QKvQ{Q z(bUc~JA@KyMZDu~x7)Ce0*(sU-CC%q?nVP^&FtTA=SB$BqQN_&;wJV$QhNRDyj`FT z<9C2SlGn$(O)Q)+@XKX&*kPR6)=Q_6Nq6-tyQ;x6H>)RRsldto46Ksfnh|7r(V@0+ zW!KmAa+!O1QDWz)2baA&m=ryS`Jr3$-t23IZ`KU@uQc-jL8_jlr(rJ9_gh@JhdYff z89X$e_ihBu*c}%9=TyStRBMGj__qIt4L!Zj-D>Z5$U+EeKtM=f(F}|3vfTUZvRkHi zJR4BbKTzMrl&F6&>|ewhUAj}D>&e3BMEB*3R)?xvqOKD)FAM5hM9o3pqwjF7o9Vz) z%_tVKl-D)E;TC3cW;ofdJY=ACK#~P}*O~~RB8HB{NCI+M;_1o%I5lh1(aAo1x}&Mo z&g%8tCn7=;z}fv}4|o0;$+vOzx~%GY&xp8gH-o97j26UCO-L0iO%nCP23+nDolDTW}MAbhDLo1FJq6nvC0{fe2r zwr2H}^$57wJPN2Ia;Y90RxpjKPj1DTkIJ}=HA*CkVebMEGt$z{mnehzVc19|H`v7g7A*6Aav!Bo;}-R z*~)6qg8nEOiXIJy`}yqRGlEXacY1DKdf_)3XNYRGgl~p`@pnm+05l5xb8!a zdtKdb^=J4>RT^LO&FA$u>Txdtt1do>TK)Z?z3p1ym-+4|3UEc&snUwY;W$?_X6>!( zw%B4gF6IvZB5W1V6zj2HyVSCC%I=2%!(Ya6O?ody4^R=?WiT8(RPR?X76O6@M}Mme6iAVv5_+@ z5j&O*`GiCiC}BJ#h71qVzx(3@K^=f}S&|iC71X_^--ii- z?>9YAEGBkhZ|PiK@VfrJPjO^Nm$i;c65mxg#MjJud3GQE$h8G?hmVIoQBXP85{^>+ z4g0WvM#3HZC%1589Gun-2!X57V&&4VVPHOu3!-<$>#iP|p> zo_iQDa7g+d&_pj5qcmCSnfKDN7%j&dl)1&4jh^Tp` z^*O(&erJ35ySZeRq6)M-XM5Kl&E=DvD<0hsVC||AtS)~LlExM=lQvl41fLz|Sz<;3 zXj-T|nBe}FX+XbvTR0toVJc~j5DmA5W8$yiXsh6#r6L95g%7K@1u{av3?61Iyy|}r z+@hd|#`3O2?!NU{pY~P@^f8b00Hz*7&be0}UJK`6tB6$rHKaR`r<#}BRft)fQlI^) zsN?tx@M%+NQkpWOrAdR{JP`KQciu7dcFr|hn|eru zz(;@<1l89tG|xv5By^@e@VFYmLbBwMxs^Le*;??H>yDf0+CKp2$ShXgiAS>g-oWII9Ioy|y!Ce6u zwUbf@vk5WlpZ<4^z9sOIG;`*_g872gW;>a%?%8YrFEm@!h9EuM%Qa@h*{LZWmDdw<1>~`^j%VJ0HV}rxzEbOSm!FSC60s$Ay+0Q$ah2 z)Jyv9qO(={_Ld>e2idk41;M$*A$>w|B8q{+UEn|1#j%i zmuO?XoLl1xTM}Z@oLwrPbe{c}(hwC*xZ+BN``8PFn`MN)n~xar<xHvw%9)3uaTD*q?^I1&)o$XS>vJi>VAXivBFEj#OBo1%I#F=4<2scyQ&?h z0o@mvm3~%?B}fDMti|pl>3cA_9!J-*2vVe$Ncjqlr5cN`>Uzt}ic(tYVjj0_UG}Q$ zv5860zcVRcsW&%gW--A3Xc4M~6(*PHqnMqx)a!|tU_x27^oe$oU{K( z)vq(Z$|iB=f+NW;ZW)BG?^@Rf&6)VpIchV<%b2Mlc*=G%e&X$x0%KZJ^>fOjp@K}o zfQ%sRyPil1yy|*>%Ndazv$;fZ5z4p)|1%Z%W_(`nf*E#M7E$})<^6lBM%;cqpOdo| zw+qLZaKxjtcxxR-)SMI28>ntqckq`g?^kI(q)neeZV@-^1gGJ153WD9`2Hw{cLvSQ z7BD9--#k})72j?%8DG!oH4E+}QBKTq=VI!*OXyih8+ajl5Cn!K;>8d00-o7{ zo+QE2^~X+aGO&G7|CYion0GDDe3xyqf*%uaSs~iiN{|)J7}G(e6nNu%Es!c3B>%>p0H}`!aI>~5s4_+kx7L4gU!J(@Zr$PU-iYE{ zC2Tr{ZNx(HF;CqKLZluy%J>}R4M%yC~ztuDo(N=rXnY&2g<^o5W^$Vv!ov%cMiB2B$L4D;%&Y;mF>PbghBCs~#rwH%=EQ%{LjLPq*cSU@oHUlXx z*oOxDhgCc@4feY?7jk!2B7LyazOM6LgJ}-=ezOqo+1JHa;DaN1mZ<9H!%2B%z@MV- zum(`v6jv)c_XfA;Ei^d%KRK?Xg|mE4%rp{(IPgo8)iz zr^_q?gN$Ec?+z5*|Kai0_2oz?lWJEH;KV314L%?q7INb(A~g+bixv@s z@+3R?cM2}mgRdmHrR~mPh%(b#%dvvb>5uIOPgxlotEGmNUF01_D}(4AyoE$)&6y<5 zj`aI8rYdr=R%GY-5af}gwRAox{XLnl?L65z#Vd<+-T&yNUgEQBo}3mwf0>h>%dC-e z!d-(ipUZ9C52}R4(GU+L3B|0JCzfl>YaL-n>~eRzxQUHkq#nZeQ=?^07m&B8RO;xHlm}BHz`PFk1G@Hmc{8t2qL-hO ze-%bV@@*-Q%UHU{!m+3yC~`o`s4?GZJ-Dn5MsIou@3Zh8r~~r}AUyFeWqONAbdfPn zwM&_iA?+dQYVoqIsQW&IuSFr{;MUoUyuF)?BGE;9z)?C5CwCN!- zIwsgrTfXrxVy0dGwNVukyU}$WWn9&*`L~}!9WWZv51XD|b1Bga7@xI#yM9G2i!%0_ z`DCdjm-Ni3*1q*ZeEl-LHRPWA_R+zgu`8>lXeywwt<%)^RMBGF`y>^D?-S78;fAh1 zrvi`Eo1EawJ4zczH%8&|Xod2YrV=q#C15}bL+!}*i5pnX;oVcHfCXYf7P}Nh` ziUg}+k~*ugjKVwt*?J0cKML{r!RigDt40&J+*KMD%WaPQ;2^OWFVRBmepscA#;ru0 z>oW;ne>UEu*02h9dF#MUDK^tlYBdcP%{OkEx?_6Z`@sGkIa2!BLpS5m_6Yb~TtZ#F zD5>*eIv7oJfM3YScR7w~y`JTErSArO$H$`2bS>6o7#Q^y$=X;!u-}YgO`J9c3XcZ*Y+faW-T>U?P=Lu_!$co9rm&M;D~?FmK*tXPVT)cm)}`+AYgD7=c~a|43t# z-Z5*>4k~Lva<)$(y^raLF4%rFLRKJz}Cb+^gp)~wukt1m9iw@{O0U(S0AV!%gV}gKb;}qg}Ox@C+bh-hKoU%1%!iXgHC$Mm2fT%dqO3F33KdI~HlKSM|#HA4%K6nnmlD>Wi8G z97?r+>vW%zrJdg&t3<{nBE}|zb2`$L#;n2J`L(~G1{@UH@ z_Xe6aKDW%EsY5lp7ud_7%~zH#7^kN6uzbQF0Wx^#5U}Qs-qs;h*rbA+X%QQ~a*2In z>qyYt*1_q}Fhy6^PEw{UhS$~uzT6s2bj)AUwz@zjEjD_Nzd=&1U#c4hy___=&i>%r z?n@V#ALu8I_VEsRR0`CmbK{e{2q+!yiR3=g|JjvU0?*Z%YBBkYa5CX|KO~W=BHM35 zPH1(r8TWSD?baPw!a{iW6~&R4vL~&)XxRZJd3vLoM-;BJy=CiZnWB7ACb)y}HAGM) zKGhXh8b^JoII-IMfCpY~;JqnN(KM&jPn?oGP_AI*usjPRY6sb_2@cFmHMn8(3DWA< z(YLZUJtlxHA{94wcCrd^i^Ss@<|a1=%;qLdUP)kQE^RJ46>zd|?#I>Bfyr=Tb=es9rG zKCW9jvC)?jbvkjHxJI zTQe2j6Y6%qh`y`vtS}d0ON~vWj&0ht+b`dy97{#Cjb@Hlzr{B)yTHt~_@ddEGhgw_xJm!UZy3nIy$~c2x)3(p)9jslJ?4P=DjR=beC- z11enU4*oGJ-@v>Mt#u(86}$7%%9~Siu$HrVl%+CT8Bk8>dO!UZ1Gc_l5;eCtsy=@b zy>_rD;k5LZdu7I|rgm0GF5lq3JnQdwa2YNYL@elpq7OsX(=$C^ambONXcFcx5Lxh@ zjcpw294jc^eUATp|JeupOSuy?~F&?4h0t!7ftn+0_S6mw=Dc#attK09@@$`QRC!}Acm z0}JvIotJY>(Fwj23&jtbb#{kgm`^8?v6JyCqJs(YnD_Gxf27}jV(k&4c-f-iu%n?q zyB|Wg(sh(r-V5p(JGbMHYR_l}E%5P(O=upGDe~=cNuW&JG_g9WO^81`)6Y&F3 zbEm3T*G%n@#Y`t)D$6* z^1^62&a6F40Cl0_JZIN383$EcFn?4C$aMCFiZm#`99S-3*?@fBqyLDXBBO7&Z^AoH zG0gmR04-vfu=~ax`OtUn-OREc;Y>O=$IKUo44T~F$@W!qzbF4rR;lMeEN{yKc2esqU*_pE4pn5KRp+7eu4k~zhg&- zkEcBS<#pEu<z98+;$bC{kpG;3g0MwJ9!GkIO zDqv}m!jtNyk2pitO_D}Tr(6N+5y-03VEKZ3C$NXV@}*t@@0}Zoj zU*6IZ$9+f;_RcBGfl!s5XgX;KE|nP}t5V(=#pKQ=)-Ca58Hj-Z?|-KIqHg~XPu5ov z7e&S)mR#S~$0h9ysz?_!8kqJWZ4;3Q(7@%*iwtWp3x1hA=TswrOlDEKIx(b+*S{lo zTa)uq`D2K%bmg$R-Qw$EgT1SLp*Vrug;)#n+?pI*`aYo=oQ+$e7c9JO=565?l8GsC zF`}bdo5)IYf!ucP1~p^JwopThAC&Tgq%YOUAMbm&J6a9zK4vZI?eE>T@1SkuB?roV zq%9ln4VUzBU)Q_+{(lIXuWQaR;HuSGvU%}7?0^~Iz4HG^Iuo}f(>H8aR!*5(Q|?<$ zi#4TY$%Os%&<4OMcFybiTY6q#ph&xr$4DsF!vhag0+;uX=vuO zxI%r0H2isK!15=&O!3aZPQA9OeB2eOLco2(!a}Qka8N z{9&_fN1k8SUBZ~Eo7C<0341IX9*=Cow|$tb-lpsP@XmfeANX}Qjf3Fet@m>=v(>{t zre~{1F6bw0ua29S8QylT3>k-(6qvV~IApQfiU5iFs#>WlrF@6ZjhmEWx0O`WqTGp6 zunRA5y>Pmql0l{rYzi^P&+Ey*EPIe)D`f6g^2Sn@Nw>2MRtU1u`2{Usbp(&iz=BvM zjQO&yH=DUfORpg7+&;*4l(sZoG{I4Q?FuT0J&JZwgJ*1~*0u}d;_-nlPgDm7nuPtK zV(tuL0OB{)YA8o8X<5WGXXyc}C90|6ltmtL{dG=9B!IiBk=belRzn?|3bUTt1-A<2~v$tkE_K&ait1O}V##Q3G_ zOl!eI+5EpN-l3JSea(3eBey=sA0`}@9a@cTeI)k$n z*1*&vg>u`%*xXci4jK z3s_p{-yJCF`7Kl#Zts-S(mA4NHF!ONnYL!-_s~;kF@@Kc)s_}mah95CRHf_G@bk#1 zU4FW)dYEBY-P+aIBdm&`8FBVZxN@9bxj`ryRhYE>8FOEHe{#pR!>g@O-I%Qcc2Ime z^aJSs(0mC)cK?#E?youUF*H&56zy+s z(!aF$EqQMNZLEP$eZ~Q>IUzyrew!2!l%48dF#E9lTh^zbs5Oz2;MlT%Z29rde1K=WL(8;rD_eVQ^jz1- zIe9w{6j$`pRDpH+jQqZA&ZN{L!Yr6LW$R{BNz(nTnGJ5L;f;M?JxYrS*zMC~OZFxg z^`Ec7+eW~)R`Z%;JNj&bg4iYTGq&C3(B5$ij-qVq4Oqg8@8t)?uaAy- z40vw(^IF!srnx%SPvU+|5puo9n=rt7X|ilH?9V0tU8t!R#q6C%>py0{lWvBafI`*a zao?}bqDFtt;WSR9Zl1%iB*wkHG1u~o!_vAIQ^G50uR5KZiKMC0&U?sO=ArR#ep6$| zdcXm>;d>>avAM>~26<=Klp&)}ieB&X-YHB63|txYoPRN^sAAi83er}pfP<7<7sP29 z6k&lm;7VY#|L{5eq9mn>y*hS?&|CFsMdw<(S?TqKBoQML#3mRgm^(w43~ z4rt<%_&}x>i@?s66&rZI-9Abix+@sF7doJ{@W<$0+_ztbUE-+r(@K$LHWutE*_bfZB3&aJVx)zz@@^;S=XS^sDbqTt=O9GWf&I{8n-h`Na@*?EYbFue~K4 zgz(SYH|F=6Fg9gDsAY;5m2Fz^Z+zu>l0COsP;F@`_F>Li2h%U{R(8DIhe&EXP0T`% zWgDA^hxdDIAx&fd66rNk*CdpI&g3iX1Ji0d`%AD`iZSyNzHO9zY12@`ZS^?bMVwm* zIX!7IcpV72g*IEjtTib5mF+9D_7k*2-;Ao!9vh|)+vdW){T^8!-w(c6;QOY#JIiMg zEF=xwgek|MDEFe1Mt{~_B0M)*Oiho6?nNGh1(}q&Ebpo}eN(15<$hl3VCMxu#9D__ zfUA~{y6X!sLxRTuZjA&`{YsB&!Eg% ze>9jtYIvV*8TzRO#$M&YWTS!SJ#tvExw{xd#bz}>&-985WqXS6we&aX#@VQ9Z z0^=@Wg*W>q@*ZJJYXCJWAHOEJvX)W`tUtVNYR5Wi9prUS-s%SidujlW=a&(glqpx%)Cv-mSGV*|_Ul3on z{f2&DSi}E-yqw~@uv~D&NpycxS9o~g+}1wdSG%c~q&}P`%#XOuGx}y&+eq6wtI$Si zI}U`nxUFC-ST=EgLd%q&)+qpwrEL#MvI#kWEH%qn;SRZH6yKZNpg7_txu#N>n(oks zGu%QZozk{a{as&Uip{mk>)40p>R$ehK`w;d>*SJf+(hVm&cyNa+*YgIzLsxuZX*Y$ zp@TZx8YmnRQ{!eSR@QF~6d@_^a*4sjld|!)US%*=@Yf`isQsHt&RQx?x7?7NmBwmh z2>kj1Uuem^d_`4fx~A=RyY8SOtNn)f97s+gzjoQ!Cw%qt>ad37;UcpD_6cb!*zH5? zefROCW^YySUum8Yq3T@pLN!%a0IihI|9kFZz>rD1y}|l2PA797-V$ls4j_6;UmZzs zG4xlmdBb=Pzl-eOXMI*&YI+2B6K7z?uk zC(7JfI!t}9FMxel+$lxr@$IKG^7+IPO;f>jH+Tn1`1z&j2+-~U!xWWi)!bC~H*IJT zx&t8o!%o`-x^g=-l3Vunt({gboKYZ`2J1L4AM%MCAJD?ib{;_cCAFGIx{30~)WaX` zR=hYD;Ot5J@ukO;a|XJck3eQo(&}O+a%Cffh7}fJBFfrY{Cxd~ zPXNBY9}_-m4T`%sezV^jCI^0FkhFfFl*PW)&jJrLU$#;5ZkJimu1N12_~piCGpu5+ z`|`#HdzQ&K&h<^CCMI@vnRX(>5<<^Bz!7 zTNi+r53jl4!8u&t`j?K|u=4A()%^0fvsvzTg8FE_m4Bb!q9+ zm$Wd*?puXst=|jRbeip<^vLzcDe+N86vqVyXRc|pjyV=JUhvQXzfNvwXS%4xAY#G#DMJU5v11J_N2s0176vLEP|VePQZQDL{nNPzZY zonV0MqT=igpVZuz4c+fBu%4s$WB%yiFk-K9)Ltdv+(Ar;IYY5(>ocUrlbvsM5P>M) zH>8S~O{q|g2))Jt25L{Qs)G(DxtW!houFCInkDYv33x1GDzfP{CZTIzPe)>woD_`e zRMjWG!Fj->soy-;c4xT>>gwB-4Jt!@ER!P8lyy##`zCHfyOjK}?rzv^(|ctg`)Cll z^*TXa#}0x8DZ}=;E1=^(h?c2t(WlWVWv1#!W!eUs+ZM}+SeK-aoB!Fre8atLjc>gr zbKbdX#!*N!WBQnZh1UkXB?g(A>aeq5!!;H1`vULxHe|icU_=W~r3@%MjUChI)_;tA-$?~ATQHbTWk$G@eL1NPyO2Pofm|DWxv)m!6}62w6gtaByk=MCl{$4q7C`C zx*q)m_pi&??hOb1#X63ajwS>9Gwx^YDVvf|kB7fTb$S}1+$??%Y-#31Z~iZ^ zN_tk4*H7Hz6!2M9cn^2$<83qS+=E+bIQ*k^!oUwB$@vVTBhWj^LDfl+tca^0?_84{Usk-2>vkbhJrGxK(8)UL)zewHU zHawVHVcy~vkWRs4J3q?B+#m0U>0n}0n7Oj#DFWZQ&_#32*RvDiY(S5Y+kGTpIR(1W zZo-X2im{97>%gA8b@jb3G3RSgI-*1(nfitgA!Y3)ay0#=r+RVYflhbW{j9uR2 zV;@BQ#jm3U*jJa<8T9b2JPY85$DPd+Bc1Cas|bT8Tc``Yqw-fiELePKizDH9=;k3C zg6W_NND`w(AO0@8Zf-C!f~^*}cw;DPzE*~H^jE$SV0U4_)VYQMu|3F?x63x4!YERf z>Bp7NUQs-!QM=tyV0d!C0a}9ej$|e#Mo^DQ+riRHdc(Gm9E%;Q<}hlo(aUc1$C%Y0 z;V%I~`*$enucD{;#@@it1LO4ZQ0Cq_rK;y@MwRZ9bvIr2W4xj?9O-;ub(Z(qKY>A^ zujHu*%w?wx=TZ^uQ&^JHXH}{acU*}gnh+jq{U2?|GMQ4w7tI5pK6819_yOTN-sZLX z6uMWUGQ0$}YJZ8E;IoOvd)-DJmiB2xw0=0b*vv3CuhonWcqru*SnV0@gbxWJlLQ;8 zb!dffT`d`oPJAHewWZAbup}q%m(ShfWPaHkQ=%j(=>rXH*IyVBm2OQFohI2NRF8J} z+N{bbFxm(G5J}2DHL7ge&!YQb1&0w67&}W4An=OyCiumjfOIfpTwLy1s>-(cc`n;K z*=>R_xD&%W6VqDEeFh-0RP&@)n7TP{IBnkSoh3-Y|Npc!*JObTI>QofZ>u%rgR0 z5(%4!*Madv|MZXYF0SiIvT0=%6{^JliG}|#Ps)riv`?F<29v+E>U+cEbBZR+46<|t zGsT7?a!ZCwfSuN)Bfccx*qj<4o?40>@ie`$tZopFkEMu$c}`os0Le?^_TkdC$9B18 zN~l@Y*h@E-5Be~xco`rQ6$KeBH&D3-M)HLf1Boh{`KiYLLw@xW z5?7}HpC4MVIRkKz){Qn)HjV$Y_HeSa8Fzh&e+&Jnm--4gU*Jqwe5oso<@!jMN^kNw zC;Kh5$Xz!UEh3d6Vv`9llTeGAHRvl<$=(scM%86h5^L&#ZuoPA)K4Z+Yg2-nL(-9# zsUDMoALXe^XOg$n_NrE*4?HlRCEiyB6?@}}v#X``Z4llX48Hju6>9f9VqwK1YGopK zyWJ$4b3~e&W7>H>SjmD=lwUvR+PW`FnqJtCqXyS({1`up8Q%I3s(=Vo%=?Hj?>)}t ztXg50F8l_WrRWD%dOd${+OX}ev%L4ry}2TI?GL;gZ$9iA{oquuGvu`%rXPf&xu_=1 zfiGrhyb~xm#T>g};Whik+j0dJ4KDkyTd-43j&T#RxBt-@`jNmMv};5F>}Fs_xw-h4 zkXd2!IX6w8pT@1%J*kxYePrtM zj9r`{v@+9E-Tfd2dz1XBwKl#aQZTCjSkYO?-n`&ttuPD^t!Hy9XItvx5M_! z?c#4p9fs+X5kBHP$@M^L@WHXKZ? zCmif)r5v)*eBs@YVd2Id$#bcRZr{p(m=R{M{)YrS1q{ST=PZg+$i6kn_@KnWgm}Iy;O4yP@AeQIv2n zHI+B=#7fQNX|>VncGepo%XmLyAJNtB~jx2YM&Y#g?{D8lv(6FxGo1T&z;Q29|*_mJ1$;h{c2U znA_rCC~ckZ=G4HPiY2_FBFNmK?|NFc$o;}lNroNU>PLDf?(1EbA8w(ano!uU!+TM8 zD`)4n6iQCkb&nE%CSvyAa$d6ggK-Xp=O&w@x@$`-R+Ho7m+Cw!5ho$*I;HDt8LHgV zg7x0!_&^LWWOJp{6#t-MTt@@)0BbWJIrv%B+$GFF+MCGy!jj0}*A~|Fu+^st%W87w zquUXkJS35f)>E!qw;fI1^h{J6iYHA=8oP5T5I-RS7`A2V{z^X>u5E)xZ#hwNMq|lMKr-8?Y3@c{AF4* zNh^O~_J7LGU?TZT=>V^cVt$I<-d?u!a;@KHqVvewmg)<&9q!)pdW()N&!uW8TY3R@ z)xvuJ`RU#GrHRKZZA{eKefwDbN2TLxg^*$$+gbzP_|bI9p*AD*cTO0H!5b##8SHcS z-MC4s2q+$q5K3h1r$h0GlM?^!aU@shwGM)tKM3xLKQlv4m<{&SIbR@o#=c*Xg6w&D)BGXG(19?SdKs-rrqR^`$~`&OHa`cO9^RCIS& zj=ZQ%5)AW~ytln!r!2L*Ax*%oeV0bJb14TKqt2Fo<-=7HqP9*3SQPuFUQf5GPm600 z&$tCAD>0D070_Cp0{V^GPowU*wirxK(bAtmhNRpdu&qn_Lx{wu`Et>iyNSUC8BNe8 z34qw{QynPPTL9ZR>2$fxq~>O;qPG6&&aZfhpX9bHGEQ+51%)K$yU6MOCAnAuZKdSK z`Au})CW_jWLRo$lh{cNwC_k$mk+XjC`t`fCg%#fZxxKEEp?4l8V_WNluQ2maD>>C& zQd>&h4bKg$@_ED%3r>ysogN-+(fw;=`izb93MQW-S+>#Z0oSz4*&TiIfoEzCQDvzN zD>;DBw~h!2?+$1WK$&g?KXn*3q;8KUj5D)rriaIOjSXuEF@@!7&t_)T8onEQrv!-Gd*%KlSCc@?q^npX;!Z~Vn z^-dtdf~ZdVY+E54cHf=i9qcqS%%?0R<(pmsFgjL;>vn?TSQpH;fp%ku@Fzkp8H1ss4*|EOUpDJ3uJq;Wt#Hd&n`nSDA{Z8Y~chw$1LYMM?4Xai0 z;Vs$|K-I^E9U(gaPrL$w6W%D&OTLI3etBYic<2mBi@ynx`D)evq{R5UlV(#v?EJ(u z#TqqN$IeK)uT@3OPDbLWmt%rO9AzuGz=%Xio}C9x>tg26;!|HO$?E$E_%)V0W6hBw zK7wE6UNnHrUa9Twd1DZxJr+K!Up zJyrp`eBk`dXpd2^g_ktVr1rXRc<4Wq)biuXV@Z?kLRMtJLx;#@av^Yn4-7;1XDGYKC9lWf*H}!Pe3a)=*i#U$AU8o5Li}K4)Dr zzP;f~w!cbKR8qFK`Tfix+jZtqXyNHw2ED$TEvhQ8t72Y&=(|Wy^hmLL@nq}wMxFBz zKT(5ZGoY?#z_E7kdA;IBZiPN0SM~mBLJK-tn;CLH7)hLvu-h#19b()KCNerAZ4{9_ zhRyy+xcA%=YsmHo!ZLxVnaNdRfiDaoJ^N{$rgz{>w3eRaw{s2EwjbGf(m zD6^)t(5lhFr?UC`S2nXoy+&Nsl$$^VFL+5st6g~B{i7AK0MiFEsSA+kVpz=VM$?$f zKsrxJ(1V!P2hxIJ>%eVSo*;m9@{!^?Zmz53?{cvDU-7B$8)R|0_kO_xcymj6zh@s) z-L$tKmF(a}QI#P`MNsVblVMrh{pMv`G#ud+!3WX{PqWBU*6lrax$Z&L)u9vpO12PH zXzZ=a0IW^wC0YrkZ8$xwcyZ#BR|SkevPP#yF#O4C%SSk)?-}1(f0&saaTa4_YnG9_ zmHG$ppv8Z2H(ETLNTDI233om3%GAv^gbzH90H~O#w_G`@%rB=ZXN-Ru9Ql25?&VKN*Ef7 zdINkjq(bvq>5&$Q`Re(l@p}xx*y3CLvzEX6uCPvO!Nl=;}VNZ-eF5lT7ym?+^Gy3;2)0KB-_y&(L<*504;S zzF8|b8e)jHW4cky-tD6q)adx8T03AW0jY2c8Z^l3CEZ_WI*a_a1*e}598?ee19X{8; zbtPygJjfAjO~RqqXD-+sT*4m3tv=}fjL)?5@;VlsE;x#y#t4c`Yz(1M{~fJ~V?84@ z$G)dNJ`)C0`5aVepCX=(Naun&8iAC4Cxe)%UI8SLtP0t$795 z56c)z=)95QFdCPgdBUML|F+%nhK&=;j`R<4m8^k8XmP1#KdikN_R^mXposJdZ#j9! zNhVP8g)(N-51gcyXyUm6pOrSJ`u5P(^nDHxZkz6E@S)yK_K)Cu%V?hH)Mom8t@&(s zopFKmSF89&3Vu|7k8Mo_Yq@C^T|=4DK}(M`4bW;?W2eh+jxHV?PZ=FM=^_+dCR>TZ z>05|zU+^12HeIM}05L`I>I<3 z4j%~P0mIvcCPUb@1MmbBw12lfb~WSCZfwZ4<<9bllHYYWnl>`hTpD^wT%GohI!&t+Gj56$iNcgv5a66|0c4GS4a zdLkFzxl{UAKJUmut_zeiHHD5$>+(@W5 zxHzV?oI(8C_p3C6$c+-kG#%;zA#8+s$0q6hZ&`cBPiJ5E`WqgBIqza z2kkgH;_P;-np?H}2i&5_vYpa1ASdJh1b^YJuiZjd059gV*6c<)drD>j)`Oj0@2e71 zyp4*sw%s&RBxfm?4Gh4jz<)PW41JaYLJbrsAzzBWnCGQ0uO0d-MOm$gd2jq&)4e=- z{>j@vk8sgwrn~uG*hx;+lpIh$dp#mwbrLV=JObym%SLQFP1fpptmLzUZ*FxXR_gE_dGk9cmGeQ^L zN;?RX(lX0LwN$i~(@dRWOG)K$b$!Y7f{T7e^^i|AK)TTn0n(Cn1Bp;3I zNw@b#QqTcXwC#0lF7$DNqi$ygXuAK6mFG$6a$ zW|UA*$v^3^tD&0-NmPo#FwLWxG*_ZrUmn7btqf5HyKU)7C-51@9#aP1LxrG)yvdi9 z_6dJ79--iyPqs!shS&Wj82SO}aB;Fh-VJcHxLi+7S{LhO4JrXwqUf*j9XZCuETMxsw*TsLYm4w6@UpYu65gwBj;4|4 zo3kRjk>f#S$VY|~09Thb9KKY8Zu94Z94mmyzz(QD@B(ka36@!OvPM1bOV}E%z8h!7 zNsWq_2#@favBP*4*eKfomTkCmgX_hXCP&7`vJ3cwa|IRE=T{9{+UKzgR^c~5wcnNO z`0&^#Zkv0_zx5uIWpF`_!8X1@(G$ZI87nio#&ALY-S>(PzB4zg*mR%a^hD!=JjOrW z0J?O%pw18xD)_tDH!*o|{Zr*s`E6xzRlgpKBwb0QExFx>|0)L9qF6sqx0MQx9AZ`U zu1wRx(FMFSqKvmppH496Uxt2dVVwsj|`XA&@_bvqexc;C?GAet5 z=;HVBwAIW0tG*n9b;az~Xb%=&5Cu@3FhQACyw&ja6U;rVweS(`_Tm0iyeLVRJPt4e z^z5!8F}!WfrusoG!6qp_bS*Ie8vG@4BD(~E#it=2xp|+un4crNy`C+2mz)N$TgnNr z?NLH(QzNC9!P{oAWAB!12Gf(rr$tOioKqi?h4dMi3_*QpHt#pR)HdU2kg+eMpzUJX za-}!rd-F7!<4IWXjZv$}5@*6O+u?OeXm|nSDC95snz)y_`q9;}Ixma*jM~lHB!1I< zgeY^a0DlGe5!~@kkY{Tb=}T|1vOg2`%WampZImU4i@Z?Vfizwj7;OAbCzl6k zn9a>rQSnGptrQ|QB+G9z%J)({9vmXQNpSu^dk-~; z%Df4x-Eb9mj7vUAqQwt|IwxHlH}{Z4&a6n=fy8fpz*+b12ODf;bGwMIzjb3R3BZP7w0(KQz63~G}Ka*~H2c891z-=XM zzw2K!7)-3tL7)J0 z%sa{VqK)ft2`$zDhY=LY>KUFsmq(%3jb>UUX$So4)^khHL23!4G&aZ{V%sDBGzkQs z^G&fN0pk)Qs^90De6-dM)6QS#Z@$ag>7l4_Ng*})lN;oN!gGh?`EK-IOIj+s+zTW}2YD-?i zdlJ=jN?Mf=DJHr?#bD5+XZ`GXdPirbni$rZetfbu@qzO(n7`NN*TjEk#{a`T^{&R- zS)RPe5bRkvz|M5xeG2I^_k(^-Up#~O|KOW>r(#*jH~Xn#ynD#?@a!OY8wA);LpAlcQ(F? zt8g1fnRrWD+B!|zi;IIBfCoJ~u`RC=>EczLm@noxHP9Nq|Fm9ZWl>!1L)%D|wOdEV z@2i}F6oA(9k(exjLV&USe}WVPqgGY&&n575KnxKH4wEz_v98~+#!$sy)KyEp^iumE^w~p7dkw8 z?=)m+yHm4#Mqf;2@QJz>rJE(2D2p7or~!>55wk@m)=r+wAZ@`L8{Ut778cN@^$OKO zrDKNA4Tns%@FUN(F46xN!5X3d??OQKKTb%jY$&Z3gnS^P^{Yg8br2er9BzDS=Gwi(7n9njq^kUkH0C zwF3=23{A4$A@uyKBHz{E88A`k`>F`G8u|Za+-@xE{%FIUgGat(>3wd&0RQoI3hvB3 zm)`nh9H{gOIVZcFZHpew$|;UD-(3zQqdGc+oo6P26P^ zeHyif>w*j3e*SvS~W-K0J!-cdLHJowCBA z-eSI()Lz#Lha3{b~&(OC|wqlg$gXy-8164|y$Tb5&#; z^GeSl(Y@nD!*~+&bA8+AoP1*k@JK?{PhZJkIe787YGB>)VKBU$F=Hx!6l%&EV7k#&B ztATAP@NQcR)*{-6bE31CLx*o0O42EJ>Uw5eKQu7czinKYjR(n@vF|#;y+DRG)s>+q zx!(IJWX0X2=i_3x5qOXB*5eB`D*r~;P`ESJZ7O^5d_3RAbCMg^A}g5CHizUm!StF@ zI>ys$hnK)nVsC@*0Tqe6;>SSUiJCB!d3iMTT)f)FKEmRI^9sWN^!7N5H#raIw*@G$ zZCh#=MwHR@r1V8IU2*HZ0OrPw#3k6?;L?q?=JUY1is@h-1iTbEv!fPFc9Li;{j(#P z{t(2j-MNM7I5bdZR}AqUkbr__wnv@AnrRo>ta%sm#dIv>s;!r$MnHr1!hoH5Km_^* zt*&TV4NVbzPgwRN+}9lh=eU3wEv@;oIq$(mwY5o@E5oQN1WzSae=Xne6nwUUyC2tFd9;f>b-Y33rk@RC{_mwtpLX3f&F`%+6 zuMv%3Ywe)O*I4tpvwAa3!OoAwp7W5sep+YqU}Q!XEG^-XGl!PESzsEeB9wW-V{?J0 z-P0NbUM@OH4_F+-PnQZZ>%b;W$3ZkVPC9&!Cv5|FqTMpP^qUvzW!V!a!>rc!-Z%Z) z{RZ0;6S4MqErsouT1Jm$x0mgY-^LE9XO(5R z-ufj*IZ~glMJat&@DuZ%Gp~pV?GI^48XSKz25#A(6TUwik#6XTvKz2n1xX6>gSRn1 z&P=Re?Gm3Bvm~Vx?Gxn@cQ1cFQz=_5WsPUedfjS9Ni}4Wo&0=bSrZY#Zguti8Oi=p z!ke2P(Pit&w%uu&OL=_V=`vQOGWV-pdVJe+@`OJIYZMM6;%40JRcLodOHKccWZQ!N zXdDlK`nH-`KAhwTu^J&DETu1W^fp`IcSr`TSC=?{Du7R1$}# zcG7ScU!G@uV7&(d;8*me$+IFB-iJs>(03Iq9(*4yaajm!O5O_lF!32BT)*d5*Cg5u z?oOaStHS`C`8r`3idlDNk)5Yv&p~FY$Z2gNxiCj((ag3h?4zodGWc7K-3nxLg?x5- zES)ngF9eWuLXzjeE#(gQose*05lflBlJ#l(74T(UZ0|FYlM4;h`vAKU@E9}&@US^j2 zSZPB~H@8@1&+7eH(f)sRK1(T;X#IB; zaCVr{mY!vW1{(Wz+dejubj6J}TA;e-7NCS!flv-UTsjLn^#y#36CvmLQ+` z+&IZ{3_Uge6?noY(N}Dj;E+Hm!LC)j{EhM~F+F1B41ZiNeBs39Ot%44uL({3udnf( z;0vNKAu;A*y-6UG=*nRLP$qEM*OLkJ7YtHxWKm$}oCp3k}L(6Orc0Fn4xR4{?>0?-Q z`pG0y}&(Wd~>fA1J6il#JHs9uknQ*+8_y#1($AK-_qZPGV@LZSJ%e>^M zHtzEqz3*>pxO;8nCeNoHfj6h#&Ac0MP<@OzGJ#YG^_Wi zd&UbiN_u6+<1VJqsFIOx=+fzVRtUfGCmGEI86a&RBH#Lf((CR74f9LFOu$ z75^~zE@SLMP^AV-Nq<6sx);J`4_HBCcWv!Oa3p?oSzx3I!zs~z@Gi`6PL=(9<#0aQ zm(%nv!2HYVUru6ndDj)!5DSbDsv03UCHYty?T6g%Z?bmcQt3bY)%tw|7U^Ep_?S~@ zuD4h_^g6rXfDnZc%8uEJpqEZIqwCo^6BSnfJO`b%Q}YdCo+{3Aq!c`Mlb))2-fF&| zIK#|K4|?i`C^J(9=6{Laocdz@BoJ(sJaCfs@F=Cj#EM$L&qr*pzMtrbq^svu;%_s% zG=8yVCNwRx9oVlvF|8lDJzw&XHj{dlShu6CdGgs6PvKpOAx#YZBGl-Qx=xTRw^`i-V`3=Wk^oAC=OE4Hr}PP?D|QfQfcxw!v@*Y_Jgu&745n8X-)e zyifFFh_7VU+-ZKLSq#v^(6g`A3o#!vEDWpoPU%_=1P9TGqinl3jxP{FErWhte z)tfJ`MsWU@kHEeC5H6~a9<&axOGkA86iXtuPg-=J!HP7$6_4`5>#X$d9V)|Fn%L@|s5lA5#32*No=!Xb@9!Zc8P2obdZ7bM z`le)3qfkkt;4@lxBHhps6|&$*ssH40mT>2LyWSdoGPj^J0^w@WnJ*Nh(?H)EFUrnP z0hd7Us9?!&r5^#|_3NH<)$KN_H%N)<7lmEWy2=I>Tt*%%6h6XS5jGd24V#Udg3xa? zJ~a;9PZkz_Fp|n$p~cu(%F~Au`6LA8Ni4s`W`sHj@`G=LD`F#ZLbg{T>j5KW0ME%9Pf9`2g8j1|CAa zuN#^5$;;mgRd4a%WP)++_=_95IyUw#$*R!BcjhZk0+l^8wsrBMHcI(ejVA}V!XOEx zgM$gV-ug%;d{j~EM47IOrb*+LjbA`vw2@pCz1`iY zfM5x4FWkf%ENW=iQ?cf&i9TYH70R$+pF5L%(`<;;6>We>TrvE%$vDw~(_pXHclVTT z*Ri#gqDp8R7|;vD`@SUL;)MzQkSr_Ydh+p{p^KQ`tJ~-{guIxK-qsCG57v5Isw=n` znY!W=cBg&&S_#zuTA%tp?v7Nnqu;ZNmYzv-pURC>z)VbTox{IDOC4Z>4zv~vr>A`$ zf|CA_B_vKZ;83GIM=n&qcmK4)`U*n*XKk#JHBvz->h_(@oDL7+Mm^-Gk z<#}mmRFwQVKua%5SH@p|@@UE@3js$Rh?d?(PY_ z+K^vuY3_!Do>`AQ=N>k+xI;UIrtio_6*rd|fTUMt^!bW9b52V8&KTe6NSSkG+q1&G zPU0#fbHAS-7z||bTJi;p^EPVU{UX2cAE@NSUOnir215e-wtPEkttJ~++JVBmiDOGE z-gXMI!Y8c`=oV(ZSZWwc?z3`?G;}Non!CL<-s0!U0|H-2`h0@*XMR-;ML$$+UH0Wj z=)Tz^NABf?x2pQ0xq!x(AmLxrHMB*3U<60&E$7L!N_i*X#MYx$`p@x|$?Y9MG7^rB z!^}Djc@b_fCOK2pj9yE|Jz;&}k9~Z)K5$<;$O`^j>wrwQ03?x+W66buQy)W}tb{BS zr)|qDx10CcL|ys_Ggz%{Ac_ieInBr65<`o&DIP(zhgs$1N)GyAu|ztTVYgF64_aPI z-#$yt>t&v{aIS-rHXp7VfdcXIBY`;I^A1ITJ<>snW797yzRQbNq50dRNx7_#h}@%^ z9IDt9jSBKbxQKd)LUHrW~&XBL5`tM8T0 z;5t2R#uV0zcR2sILUL-JMG95Yy|^JLO7{aQ>z$QW`5Q^TTmD3K-5YqG?^nsuC5!pg z|6OQib>&o@tk!y+Qv@s9ZHjNuzjxkQxcV|@>GfH+tHP|llWoR(&H#JCjXRM5hM;cA zE2Y|4t9Z|kpd$!7b9=L$$o@mtM8ezO#CrJ858R`50B-o&0%hcWvrM z)LBLQ#v&|#_D#dtmfA>`xBlmuP8V3HEm#A1)t8ihR|R86a7xsy?dAPX`gqGJ#UJRq zvWo29@+)?;^6c9_*5dc6REQY(v@fFShgo0QC+rejCP>n*eViX1W>?M@fuKVTQ)jab znh)u3(qf4HUKY$L+4?_6hm|eZZS59I7frC&h3LNZy*%r*c6&ogV%kRShQXLk+h9Vh zS@y(B@JZQOm;b}ko46&JxbNFFmQI;6Ww|TUIO&wBnYn{Z;LF#T^i2ljZ04J>GxeIiBNqp8LM9>pZ<{cO~@C z@ANqJ7Fm?Kc!~86u;}SVHK52&BKR&>ls?w)7T$@+9^t>n&8L}_enTUJL*9&D3)*AE z2jwRkp2)l-sJ?R?vIis7nBZB#^a@sM<_Au`v&)`u4LRI4ggFiyFAAk5j6DH<^+}83 zebD`fzv>}MD6W$I;*+I@8v8Sk2UnJLe1-5ct3M)|Y+wQ5?DQF+BAb`F%a?UA+?fd>q#|F@|<_Kv}e2)wb|Mihtrk z(;guYneRixA?LGvcmagfo0-9hpR|{5mpogV@6n7u*^FXo@;`C|HGAX!n)-8SW3ykL zrCK6I9QAv~|J8#}l42giWc>!06XynM>%5AG0shFJn|qCZgw%Q^I6J2FLtxPDl>#U^ z9hIiz^3t0&Ha7}i-sBnVH65$q&6HB@lRIIvPhgk^>LcT!e&5!$!SS533oCy%?{C~J zlXAD_GUN74(7;}!FP6Le5;ukC=^M>m>2NpqHBoZX?y0w(CdJHd$&hJbq1Qy79*LY$&V@?+BG6Z$WV^bSzbo_~{dV!F(Jz`4S_?RHFmr zjySgoc$D$%_!3=t$+V2)#H6eFN?PaMV`U#lJwgr<;{K-PXAGiOKy6RY$Lq!r#~RB^ zYB3bE>68Bo=vud8} zp|Yg4f@ux-WJU3b?kMUX^ojJqec#i;je}|qEn7YId6)&t$ND`sXy=vW=GmqcV4!O0 zlMN?Ehitct14dHhHR7-F?(yWgXJ7|6;Ot?_%u$trixcF!$ja@)3S#LoPoVtAtGk~f z%mr&v2JzZAs}$kYHR&n>r554g$uaL<$N>{dfS4Bp$8ZP4fSmC2u8z|ocH#n-;xk|j zv;#mHSo7*S_QjQ5l1s9m>^w(fjY3mH z-q`(5@^t$R?+tmOGB6s>po#et{{m+`d3~KT@DR2_S5c z^>*|rZf_6jbbPk6w;PSrM}*LVzS_iaXYFTh$`}8l?uN{9Qq}^ldc{+}=zf$kvXLIi z<+@z3wc=F#Sc!CbDr?M@Jp%`25VhgnlZ`a+LB~&cKyotGgIZvPEVq$IUqQ_1j*QhT z6aYvmbVqe7W{D>1VJk`O8q_Ol7hr3PVU)b6g)f=t0_20^W!*3Ju1sWa?^pFO;^k+w za)k!MiKNbg!h6-EzlT_ikC>FMIJti?C2jrz5pU$!4&dxh7;mZiY@D|uDd({D%vn!= zH)BN%T@}K}Wk1x&+7HzrAmfsItf|UgRjulBHyp>Lrmhv>-Lug}h?t@{I1(VyF8uloBLd0Wf}y`N5j8AO7r4XX;#7{m~V4(tYE~ z>2U4kkeKxY;QsL*OW^=rowcGdnWjt^gB%rc6u0mKLC-W{Xv)DKeGJh1I;h?>3gjHC zpB%lFvd;Ogr|P_O%QLDb@(|sAUINg9;5;Q4C=#GP=CQfVh54LLmE5*8=z00p1~*Q- z{H!`A-L3vs2`L2L+a#Fd*jzz(w?3l4rnY&xjL7(kHB1qB?M|KE!J&9sN~M*IE!-n} zd|F4o2l8>Fmwy~$Au>Z%&p%r#_nrtMk>hlyp63djCDRu{C%f0iL-%E5T(gX|UP+Kt z-Wgk9eJ`XW`o4QT`kapk&sjPoZsY)G#%GMA@k3j!Rf%N+E4wtL+>5A#1S=*78?Fy7 z0Xw$U3>v366&6#(t^dxcY$8EOLr8QjthF;W>IqI(0m%ZkuAV8`tj1PI3O%X7)`gX$ zSk36gYo!g(ve@ShHluhy;TlZ0d(Q8m;=8CD0tyD|ogEyeZv~yXr<@+KY|46Un+7R; zuDp)#u)deG<(ERHjAExpHKK~EucK1S4;hrj_A8Y7xgNi}P<>|;kS1QvV%@&U*=rid}^ zwtlEBGC~W=cIT|Umvsz-cjDXd!QTvtk@2k?#iSL~lwp&M#BCZ$`uxGrb<1=1FN^OQ z(Spi!J)=_DIgHlYJqdw3U1(pgmQ~wnUTE?Xk(_uwtDG*I0~d|wy>Ui$FY`;rSb-r5 zZ%nn{ECAP*TAyjsI{)otT0}D~etOj)x%tM{W1A&2`C;}u3RTmjH@^a0f0Okh|GSt+ z(p$r#CD@G~iUBAaxAFDk{&shxML)25C@e=kE%8ZJtmBMhI{Byx3EGeaJpXNHkVi9v61$z_o-`F`0d#Q#CBKc7`{Mo) z#vnE&)R7n6Kq$>lH215$hQ!yn7kq{ji<>rxjnU1+;_NIqX|xlo(hZN+*d-FOrjzu< zryl6?EBRJxN!%KCi(illnWv;$e3;yPcergE#Hv!+xOh3#GUseZS1SPBB2Cfc4aDX{ z((cJ;gd^yai5H?csr`hfS>)y}IiM0d$A4S&4jo&68;f;Zt&G?c@#|_L$(PA=dsdCH z^qQX_i;q;rFd~$_e$w$i(!Uoy)|2_g(q|Pb5AVd9s>UWxpv))z|orQZ||HyPF!2k+2|W(<{m0)Y!@EL=xW&*)Vb@ znspjMOK_q@x*6q%KjyF!`}AzKE2Y_j9VgGUNZl`~i4U}T#vG~`PA@j4C3K9=_9k*5 z$yL`{H6VJBko#f|$EnY%=?)4v}5wpd^X-(OVTUwL#P6kZ{aCmZ63ALPNi2Zh1 z`k2pTXT0l@_Hm;_1Z{;ISs39#5vFgYSjKn7L1u<*|MXOJ_A)=u9V7+1Wh3iO`l4u$p)zr7jrK@& z(++dgjfa9KZLzlEfip&1@M;j4W5idr@k&nT>DV#Ex91d7Wr8E#Px75I6P(ZZz$#;I zzOtC=fk`L2;=@)4J{$f^>AoJF9W44Et{czLl0aoS$p1OKW;nn*J=pNKE;$FJ{#|V}d6MqcPbALu(3qR_TdH+e>r6)f zx-@08bfI{lsor50?@YnFRoJqNxr!~Tmv8M-Z9>w;x3}zqF}OTzXhU`{D_?cD&4_Y{ zb69BZV7>Ar4xPbA9XEZS_zO*^m3FFRNn%3*$j?;KMwat4R?XIn2)Pxmb{k!-k6+!;SCrsUPwkm;hoEB9wDxE>l=@caz8kX zZ4F$jjnuNv{^(NOCG{`ftYd*-Rj-D^naUA!Y3Y8~i^{$9{1r_QetM}6^gboW6qkw@ zud#%2S(mTaC><6}K*TyVfJnJf++lP)LAc_qO69z5vkti-3l|Qabs?%!H5@;--k)7Z zH-~Rsjpb30oM@UwujjlM>~D*~TTK@~4QX|6!=Hb=#TN-$=Nn57tN3-*%aBEPiw7Zc z9Y|&TDa9{bIZ-v+cDvh+Y)*17^u)!Lo#TDOZoV%0tzU;bScY*NO{p*;rE#1m*O#0D zz>?b3?$-Ni&;${X*oD(59}#0z-W`IHlv|Kvlw2m&F4-Z_o7{Vi7;&TeB5i~yVq7_HKCYlDX% z{o{ve*JY|vv%Kn!o)KH$W^bb6E9ZpZpS!4o4Gj{a( zA(9sT!pj-6*4wPVSh~d|4Sc5n$-g& z#ST`){WuXr?9|v-^H)psMl0A5sO1>6w3i?X$Kx)01vqQ$*63rnZYLHD=sc}D)eZbr z@my!b`K-7*H#sq_{P!0SKfwBL=J-OVcc(9ZJZQsSg+P)7`dZdmH|_86c3+v>9e4;- zo=(%yJ07DGIX&;1)CLm*CcTI61S?(*9I&b&u|H|_3C&th0~&08*~+v6Npe^80tg|c zH65p_<{sRM0)N9f1Z-=AgaY|u&rOM;tCIo3!@}kgNZaJ8c+R zr@k@X2Xr!=Po08&3lZGgsb($N!+o^$rOJbRiP({lVn)ddk-p3B&Oul&69)|b)x0IhKUv=F&R=S6x*HDooTXvl-_nzwPF*pD` z#Oj9Nj#v($vwI18!S`@JUMIAVJ^_R@vH@KxtwrJ3Z=Ql z-^f}@Sa~st8T)TLrk~O7Q#{qF8Qk;NimCMJ`eD7XiS!FeGmqU_9R^HZt@I)|`6=S| z@?Am2ZrbRM8KcH$X3?oDwIon-f%NAJgbrk*AF2rT7iG8;GtF)6IXIj^y}@Re9+ZI+ zyiGQ8$=iQDLuQi*77&w-S%3Md+q8JaA650(oQDWZ+(SW^wYeKVpxulr$VRSCrrSqs zKwN+F&+&g}zDR~pj8b;Qik9t2=cMO3wzuFd{QJ(anUFw7=7ct}ZR8+=Z)ZQn6NXR5 zR6Vqr+q{mP+&DfF;a#sfl|riG_Gy{p{x|U^`2ghin2d=1z|VwlcA~%LH<~}WDHkK~ z@>tqcn_Cl-!MoMN879g6eIb8Q#$6MknfZLTmqy|OTv}AD_S*fM-b5`0XKUWkDZmC? z1{6JJH-WkS$*#KYyy|@lPL9OC#2C9BC(C|851M3sN%zly&%C`LuCS1|(1o$77qRkmRx!(FSYglF)b!4~ECHMD z=-xsNg6Cxo)GSdfXv4^+Lwq1*&aJr@epYwTGFcmPqGLxdIw28k=qK}5oN%Om1^Aw ztgm^{j!ke;v6>Lb+uZtJ{uMDm;@7gcRSlH zr*8W}ZKo_)-jaJ+tiinVd7)|6R-%H)aE7IPwb0|fAMJmv!m{hGBY^h9EU)>K>h5Uj zo=KQ#A>Nb^;0@K^2}(SvJg0sItDrmSdxpjw!#Bn`B)zUw4Vr8ML6M!1ln8JbxTyKF z_-yv6*_|(yrT5cw0$n@097PsLP)cN=osw5*lMFb^yG2oQb4eQ5ysgR(0wX|W5jb#g zpNv$G5rxd|)YfNLtvpcP^+@T^tg6f*uy2o#JT5j@_3ak?tms{9t1kw~a;wx#rJ3FQ zLar}GkP7a7x@RGqWa*;sHsn^a&7S+UxJ`zOh%)By7_R}H6}2tt61MAYl|75Qac<@r z#Q?rpL1mUCJ;)+G>u}RrA_lq7bhHGzLLv_x73LVn=5;a%vC!J?-Wvsek*_q{o>lNd zW>NcacbMHTu=(;YW(ft(f8Z1HJ&@Z+@W;6=g4xzrTpWj4Cj+w%D{?bBByYA=K8*{x z$!kZ<35L#6|1nM9^8XAElWsBaQ_nNv6(x%P0Pec+2}tl(aQ&WUT0q`r{gs(q0J^rv z^g0C!UAc~z)6CneI!sB7CoSscu0Q*qg$TZ$eX3O){3q}O{cqx@?ug%Hm)qX9c3>}3AP>DKul44eu=*fkB`c9y61 zE}RHm6$MMb_Z`8UQ?F`RD_YEW|q)J2vWKW{uca=uLcTmuFlkHN(QjZ4^TNag1r-AXt<-^S6Sj z{4a4GbI_{yCX*DHGWEKX<9(9efp=Sdk8ob`r3;MfUt=u#;!YY?#5|}@jFfr<`4Qx^ z?CLXXxy3%_7edOH4=`aaKVeDi#Ftr*RhEI*+|IIV5=#TbjNX9Hly*>+@@Eu#_M!v4 zK2VS<|Ao7FDq>@FO?V*$ru9;gpV(zuOw3a)wN(E}qRsbdoT?95IsZ++-O{M0t^Ei} zf}7MPk`iY1gdOG5wmEnnH-mhS<(#fG>7B)Xbp%+?{mJi;zKomt&!#ldJhVftyTma~ z=~p#_%&$J(8Gii+tl#4pwu1eJ$fT+D`JGU}7&aj6^l4<=7&K+6$=t+Ade`KWzywtq zdCBHRzhCllQ9O%qk7d~VBIgos1G!>sa6I(t1O{fh=FcT~tA-@1%%zkhQDLXi)p@kK zxnUB(JGvz6^Ei4TB<=#w6iSRbjFN8HXGfjtvWO;ZCHRIxA6+2t%2AFM0t2^OgHr74 zYxeXudiqa*Vo&NImp87{u#7P@>A16yb@s;D7z%#{qXDWtrBOmja63W&k&?V0S65qL zD#O!UayX7I-nTA!7GcKRcs*uD>fnR$6vKXw&bMzLnko%|#t5LbVe z!HsQ3L#rE_hv$`TZ3gN#V| zzy%Y$l|Gd}aybbQVRV#Rl=MRynAB`e^8L~P{7^ZKj@&fD&q(DhgJkh~`1%ctcfA8A z!M@1jN4cxFrTrCKn}M@gJ#O1FVB);RSJ5~ByU8|Nd$vA#TK_wa>HJ(a#;M7g!$xFz zJ0hVl1b9n8$dLw5?airVIUg~s5m#H1{79Q`Y(jisnX$)2nHUX3)5xb$jS=U}{mm~4 z_^27sr^bylS9R{2foGp%sc$tQ`a0x}SQFS$X%Kvz%XZyb5dYczJzbG#uT2MHVD&6?I29IHU&99_O zi)AE#&AmFUCtn;lN@%A-pYtK zqpQ0ZLdcV-pDuJ9*X~BI`Gwpsoq{1%0aAzL^C=i%@!GzW)xkvrFLom0eE%8D3V5om zKBWO^65DAc+3$8eWkAPxZ5!;<&P-VN!0o$CR%f=)a>}&ix1stTwLf%kQN4i}s%u2- z)fG-1Y`bPZ7E|SMi(1Us8NJ;XfVk*85+%|xOpoYR7;ImUuH-H!%?=|xjbEK+KP0xw z=yi!ZhmW*tjxn<1`TLYRHB+Wmbdo-4T0O}rC(qdP*q0`EMRsb~6qvD}YV+yae7*#8kvBS0ZoJ<jlyJ3s=MvuF2QQYJC6+^9D;U0!9s6nIgw8|Cd`xb_ zV$1M~f$c2S>Wbt){U%zZt9O$}l~EGN02Umk-Mkbaod^e1cYV|v?ahwq^KBW!mhb+gu` zjXdmed|+}6e#7Xjjw+6%w`c~Q{^+(_m9!O4K7`rh;&YWXpBnD{6mhH-jJ=Y7zu*5n zkfPqKS-cBu5^@*&MUPi=c5rvw8#@$^1hXaMoT;P?Q(KyK?L7y!pfWTE4};*dEBS?d zrK;Nuze_P$j7%vn-%6>L?i+K$|L0H#0+5+1YPVR9s8lUp!*oz7vebIflJHIV;aLE0 z@yOcIrN4#e9orVMDpCmQIDTh*)zJtD3q2*T3EiF%2aGhtgxHucB;g%g#0#MUmpUL)S&^CO2)aP@%?5_(-&qFe`9UO2N&xCrf7BpDc|J9fomIFH_p4_S=;VU zEAi?ZACTX-Gbu?exV4A$jZ0I1IySY}gCgM+QIo_Y_uTMm9i&E8x_JWc7J*buyGg)V zSFF&>%a$9qcs>upziO3MR;Nizm;OR*S_ICKoE&WZ*#79AGw_E6x*SpzYikn0WH&SJ zvdajRnWu}lV%BdnVH=Z)_2d!s{c|bkTi&?$?x;Xj&*rqzZ#d0tJB`kvr}QcGA;Kk! zJpNb}-xxG|nl*%Q*b{$9!E`HO>z!Xo;|qbT7ieBlZ{r2vC62G^YI~}klSD0e&}U2d zOY2vghpZjO#D)&}puXLTaf>T>7v#J#76}(m+JTaH5bY%aD3lxcG59mc(R#g~GF$DE z*v9l|3@+~exn<*B4%msg69U~qtlnjz(iD1!Osyctw)y-wS9^3nwx6o%+U;P`ak5@E zeF%h!uMGaydeia-;Cq!a?=Y2ssk?DMMM{Gyeh@q(_S(80F1q`|i@4^@q=2t0YAIdo z`&{n61NTjAUuYsDGX z;=2p1&gAtWGFXmctt}%NGx&3iz ztYabO7EMk11-!rLPsn(JGAim6Aj+Tc|An!VTB4k>sOruX?meLB8u@`Y9pqM(kKRL@ zR!PT6ZC{UU1LUR41l1@|75yd$z&O=h6xf%lI8eN%iWrxG?q~ z-SO)eLM(ALPQ8UXJR6{^`)k$}=15|%BPKj3XqA9DIg-)fbpM*s0=mm)Z;)!4j*y*4@Y}4iAPmtQM6C*uf8|Gcs z+|Ii|*J?q&{P)_9ZguUM;I@}5I#Ei1BdaqQ->$756rOq^c;6Xk6kkvuf?hoT7yk2u z`mNX6Ch=b~hy*_9a9h&1ny_Y?d z*xNU{v3aeRv+}pO6L4VR8tr29bCgz+KSzDWb}5ebMv~~V@<~ihUH{85a4m>tHg~bW z;XlG1*YZYc{r@Ep5ll*(XUcW>P_+cS^}8~b@j}h0a~PH~2iw$RG!J1Yj4QP<{EXMG ze(tj+rl&>WJ|&dR*Aph&rnUUgSFOLzTh}{4Gm5vd(Mesyhi_Ziu+lgmw*I-G(@0DD zz#NHFO~3MqOYP7+Yk!|%=rVkPKUI`)jKkhjFDD8?p+&GA?^%<|DOl@``yK3(H1NM52?GDMgpz46dH@91 zl8#@g6b4Z|-`(}Yiofr!Z&*wu{}a6f()@6!C~$x4vg_Bfr`FL`ZhrZocZ(j{8yP1O zdT8OLN6PY;&~j(>G;jb!sp~SRky6CbFKVVoYG^q>B)#31SN1a*U1_53;8yKkSNy1E)xsx z_rjuCnBQHI;<18?xa3jI9Fsjjwt*;vJT4!rcc}`I{su|o`flkPsiDxZgKOvSl;7dM zEnYtCtq|N!C^19tMSDustxF9|p|p_E5vY#Ow=RHm!1oIxCP%TcH#uu^#yN-S0{A-K z?Itk9AB}g5FBa`(>_$?IG1p&@RF1r^P($^#I>s+Z>&U-FgwCad|8}N*eR#I}7ElMv zDO~=k8hGDZ&ynCYzo``VDKyI{5fADv;_MxqWwD!&zua(Wj_F$pw2${19tF47UTiy= zP(QrU^qM&GVZ&tEFL7S@z9c!i^&mXc@oOSH*-9glH(=#Th%bM?aL8?QzgBywCwRNN z@+)zCb~}=rHas$%B0V^Xo3_Ygti9&>#wF7<1t%a@L& zd({h&ac3PBNhNxZ>I8TzQ(04d^r_9}Peb_Sr%zt=ayVmk6|&y3jFgq2#|zhWDu&R) z_8SrQR9Cg5j#19X%C4O#vq8;iDZ?gLf;j)IPMnVDyE_z=S=FBv6DpfD{*}%w5~8a% zOOCekO5@8`p5VE?R*xZ7{T|6b5(5h0Ei3vmGH3hRlpQ#2AK!6B5UpG|3+Hl1zir1(^2?8B zJ2IUc7ewSkI2o$4k{8x?1*xpU1Smd(xB5b7Jy>Ueg2sUPVGDpcYWw=;8d$oiMg&4! zyz9*JRF#{P^9XB7HEh)?s)MLN! z4-~%@N92?wjR7F|-a=uYSXFJMg4$Z9>y1Z7rjwA>^2qhmLt{VXH7sa&n|}{_`g_E9`85mc3u2q+Mt;z?3?b9O%c;PjOC0|vI!^bI!(2wVy zwJivQeoE5C?OQjm#F?r}zq3UvDd2xp#jYYZRz@_v(Tp(SYT=E&1w-{x*sRDXWz(df z>mb^O*=K7s@V>VM7p>$=D5?$3Z!mlZ-(@y4MR14lpTu!C(P_o|WHM)T?PEf?XA5-j zoT^S^yM>!mp^s2?5t-S9`1?M^(A52XVMgGNH||hZ@zUY2&*r*b>){#AO#a-~+6yu% zfzkwJ{1bXM{!iE0AJwn$bHupOWs@9*(7yHCTdR2Uw3{-FcFd+ukkni^sUn#$oi=5LdcA@><(~ zx^ZMD5&h68D$CKW<#N@u{i*BB1m-(#E4P7XH&u>9tv$pI#|~79q{n2?acFXtO)}OJ z6#IiWdiqe**gA@e8=fAQ

GYXu)-A6V#N*yg?zON7tPXc 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̺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/%K&l(El)5I@&T_>k_ha{D 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 af0o$SFK^!RpXVqm?uCjYQ~y5|^#21miwj=> literal 0 HcmV?d00001 diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/metadata.json b/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/metadata.json new file mode 100644 index 0000000..6e01639 --- /dev/null +++ b/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/metadata.json @@ -0,0 +1,14 @@ +{ + "augmentation": null, + "classes": 10, + "dataset_id": "fashion_mnist_v1", + "evaluation_rows": 1024, + "image_shape": [ + 1, + 28, + 28 + ], + "normalisation": "uint8 pixel value divided by 255", + "root_seed": 42, + "training_rows": 4096 +} diff --git a/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/train.npz b/pytorch/pytorch_extended_tests/datasets/prepared/fashion_mnist_v1/train.npz new file mode 100644 index 0000000000000000000000000000000000000000..54510115d673d26f7a625e58520a7f440352fb96 GIT binary patch literal 2661946 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μ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 v=GfPSXC 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 gP^T-e8VB9?~-1I)`FA4nw9r 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