From 1b2194cdceab686a28323b207f19fa25a17bc2df Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Sat, 5 Sep 2020 06:55:00 +0800 Subject: [PATCH] feat(whl/internal): put imperative rt to megbrain GitOrigin-RevId: f3b6e492d751ccef48fa4bf02be90dd1506faeb2 --- CMakeLists.txt | 42 +- .../core/tensor/multipledispatch/utils.py | 25 +- imperative/python/setup.py | 7 +- imperative/python/test/run.sh | 21 + python_module/.gitignore | 8 - python_module/CMakeLists.txt | 113 -- python_module/megengine/__init__.py | 11 - python_module/megengine/_internal/__init__.py | 729 ------------ .../_internal/_timed_func_fork_exec_entry.py | 37 - .../megengine/_internal/comp_graph_tools.py | 274 ----- python_module/megengine/_internal/config.py | 439 ------- python_module/megengine/_internal/craniotome.py | 432 ------- python_module/megengine/_internal/dtype.py | 286 ----- python_module/megengine/_internal/enum36.py | 947 --------------- python_module/megengine/_internal/exc.py | 58 - python_module/megengine/_internal/global_init.py | 41 - python_module/megengine/_internal/helper.py | 316 ----- python_module/megengine/_internal/logconf.py | 54 - python_module/megengine/_internal/mgb_helper.py | 87 -- python_module/megengine/_internal/opr_extra.py | 3 - .../megengine/_internal/persistent_cache.py | 90 -- python_module/megengine/_internal/plugin.py | 261 ----- python_module/megengine/_internal/version.py | 57 - python_module/megengine/core/__init__.py | 20 - python_module/megengine/core/device.py | 60 - python_module/megengine/core/function.py | 176 --- python_module/megengine/core/graph.py | 158 --- python_module/megengine/core/serialization.py | 128 -- python_module/megengine/core/tensor.py | 771 ------------ python_module/megengine/core/tensor_factory.py | 109 -- python_module/megengine/core/tensor_nn.py | 45 - python_module/megengine/data/__init__.py | 17 - python_module/megengine/data/_queue.py | 144 --- python_module/megengine/data/collator.py | 76 -- python_module/megengine/data/dataloader.py | 500 -------- python_module/megengine/data/dataset/__init__.py | 10 - .../megengine/data/dataset/meta_dataset.py | 73 -- .../megengine/data/dataset/vision/__init__.py | 17 - .../megengine/data/dataset/vision/cifar.py | 171 --- .../megengine/data/dataset/vision/cityscapes.py | 151 --- .../megengine/data/dataset/vision/coco.py | 366 ------ .../megengine/data/dataset/vision/folder.py | 90 -- .../megengine/data/dataset/vision/imagenet.py | 248 ---- .../megengine/data/dataset/vision/meta_vision.py | 41 - .../megengine/data/dataset/vision/mnist.py | 197 ---- .../megengine/data/dataset/vision/objects365.py | 498 -------- .../megengine/data/dataset/vision/utils.py | 89 -- python_module/megengine/data/dataset/vision/voc.py | 185 --- python_module/megengine/data/sampler.py | 274 ----- python_module/megengine/data/transform/__init__.py | 10 - .../megengine/data/transform/meta_transform.py | 31 - .../megengine/data/transform/vision/__init__.py | 9 - .../megengine/data/transform/vision/functional.py | 111 -- .../megengine/data/transform/vision/transform.py | 1025 ---------------- python_module/megengine/distributed/__init__.py | 33 - python_module/megengine/distributed/functional.py | 302 ----- python_module/megengine/distributed/helper.py | 63 - python_module/megengine/distributed/util.py | 146 --- python_module/megengine/functional/__init__.py | 118 -- python_module/megengine/functional/debug_param.py | 49 - python_module/megengine/functional/elemwise.py | 299 ----- python_module/megengine/functional/external.py | 65 -- python_module/megengine/functional/graph.py | 125 -- python_module/megengine/functional/loss.py | 391 ------- python_module/megengine/functional/math.py | 333 ------ python_module/megengine/functional/nn.py | 1234 -------------------- python_module/megengine/functional/quantized.py | 80 -- python_module/megengine/functional/sort.py | 123 -- python_module/megengine/functional/tensor.py | 667 ----------- python_module/megengine/functional/utils.py | 81 -- python_module/megengine/hub/__init__.py | 16 - python_module/megengine/hub/const.py | 17 - python_module/megengine/hub/exceptions.py | 30 - python_module/megengine/hub/fetcher.py | 300 ----- python_module/megengine/hub/hub.py | 333 ------ python_module/megengine/hub/tools.py | 48 - python_module/megengine/jit/__init__.py | 570 --------- .../megengine/jit/sublinear_memory_config.py | 56 - python_module/megengine/logger.py | 231 ---- python_module/megengine/module/__init__.py | 23 - python_module/megengine/module/activation.py | 231 ---- python_module/megengine/module/batchnorm.py | 257 ---- python_module/megengine/module/concat.py | 22 - python_module/megengine/module/conv.py | 392 ------- python_module/megengine/module/conv_bn.py | 69 -- python_module/megengine/module/dropout.py | 29 - python_module/megengine/module/elemwise.py | 90 -- python_module/megengine/module/embedding.py | 171 --- python_module/megengine/module/external.py | 83 -- python_module/megengine/module/identity.py | 17 - python_module/megengine/module/init.py | 264 ----- python_module/megengine/module/linear.py | 61 - python_module/megengine/module/module.py | 507 -------- python_module/megengine/module/parampack.py | 157 --- python_module/megengine/module/pooling.py | 80 -- python_module/megengine/module/pytorch/__init__.py | 9 - python_module/megengine/module/pytorch/pytorch.py | 451 ------- .../megengine/module/pytorch/torch_mem_fwd.cpp | 148 --- python_module/megengine/module/pytorch/utils.py | 67 -- python_module/megengine/module/qat/__init__.py | 14 - python_module/megengine/module/qat/concat.py | 30 - python_module/megengine/module/qat/conv.py | 59 - python_module/megengine/module/qat/conv_bn.py | 196 ---- python_module/megengine/module/qat/elemwise.py | 31 - python_module/megengine/module/qat/linear.py | 39 - python_module/megengine/module/qat/module.py | 154 --- .../megengine/module/qat/quant_dequant.py | 50 - python_module/megengine/module/quant_dequant.py | 28 - .../megengine/module/quantized/__init__.py | 14 - python_module/megengine/module/quantized/concat.py | 35 - python_module/megengine/module/quantized/conv.py | 108 -- .../megengine/module/quantized/conv_bn.py | 56 - .../megengine/module/quantized/elemwise.py | 47 - python_module/megengine/module/quantized/linear.py | 55 - python_module/megengine/module/quantized/module.py | 31 - .../megengine/module/quantized/quant_dequant.py | 49 - python_module/megengine/module/sequential.py | 97 -- python_module/megengine/optimizer/__init__.py | 15 - python_module/megengine/optimizer/adadelta.py | 78 -- python_module/megengine/optimizer/adagrad.py | 75 -- python_module/megengine/optimizer/adam.py | 86 -- python_module/megengine/optimizer/internal.py | 51 - python_module/megengine/optimizer/lr_scheduler.py | 65 -- python_module/megengine/optimizer/multi_step_lr.py | 67 -- python_module/megengine/optimizer/optimizer.py | 307 ----- python_module/megengine/optimizer/sgd.py | 73 -- python_module/megengine/quantization/__init__.py | 20 - python_module/megengine/quantization/fake_quant.py | 145 --- .../megengine/quantization/internal_fake_quant.py | 19 - python_module/megengine/quantization/observer.py | 422 ------- python_module/megengine/quantization/qconfig.py | 109 -- python_module/megengine/quantization/quantize.py | 191 --- python_module/megengine/quantization/utils.py | 116 -- python_module/megengine/random/__init__.py | 13 - python_module/megengine/random/distribution.py | 102 -- python_module/megengine/random/rng.py | 27 - python_module/megengine/test/__init__.py | 67 -- python_module/megengine/utils/__init__.py | 17 - python_module/megengine/utils/hook.py | 23 - python_module/megengine/utils/http_download.py | 66 -- .../megengine/utils/max_recursion_limit.py | 78 -- python_module/megengine/utils/net_stats.py | 279 ----- python_module/megengine/utils/profile_analyze.py | 424 ------- python_module/megengine/utils/profile_analyzer.py | 401 ------- python_module/megengine/utils/types.py | 37 - python_module/megengine/version.py | 1 - python_module/requires-style.txt | 4 - python_module/requires-test.txt | 3 - python_module/requires.txt | 7 - python_module/setup.py | 118 -- python_module/src/cpp/bfloat16.cpp | 296 ----- python_module/src/cpp/craniotome.cpp | 435 ------- python_module/src/cpp/craniotome.h | 193 --- python_module/src/cpp/function_replace.cpp | 174 --- python_module/src/cpp/intbx.cpp | 364 ------ python_module/src/cpp/megbrain_config.cpp | 517 -------- python_module/src/cpp/megbrain_config.h | 78 -- python_module/src/cpp/megbrain_pubapi.cpp | 334 ------ python_module/src/cpp/megbrain_pubapi.h | 185 --- python_module/src/cpp/megbrain_pubapi_internal.h | 31 - python_module/src/cpp/megbrain_serialize.cpp | 180 --- python_module/src/cpp/megbrain_serialize.h | 159 --- .../megbrain_serialize_TensorValueDumperContext.py | 44 - .../megbrain_serialize_TensorValueLoaderContext.py | 19 - python_module/src/cpp/megbrain_wrap.cpp | 1055 ----------------- python_module/src/cpp/megbrain_wrap.h | 491 -------- python_module/src/cpp/numpy_incl.h | 37 - python_module/src/cpp/opr_defs.cpp | 313 ----- python_module/src/cpp/opr_defs.h | 170 --- python_module/src/cpp/opr_helper.cpp | 192 --- python_module/src/cpp/opr_helper.h | 71 -- python_module/src/cpp/plugin.cpp | 243 ---- python_module/src/cpp/plugin.h | 135 --- python_module/src/cpp/python_helper.cpp | 911 --------------- python_module/src/cpp/python_helper.h | 229 ---- python_module/src/python/genopr.py | 293 ----- python_module/src/python/opr_template.py | 425 ------- python_module/src/swig/callback.i | 215 ---- python_module/src/swig/comp_graph.i | 87 -- .../src/swig/comp_graph_impl_AsyncExec.py | 229 ---- .../src/swig/comp_graph_impl_CompGraph.py | 191 --- python_module/src/swig/comp_graph_tools.i | 55 - python_module/src/swig/comp_node.i | 165 --- python_module/src/swig/craniotome.i | 88 -- python_module/src/swig/loop.i | 134 --- python_module/src/swig/mgb.i | 71 -- python_module/src/swig/mgb_exception.i | 40 - python_module/src/swig/misc.i | 151 --- python_module/src/swig/operator.i | 148 --- python_module/src/swig/operator.py | 37 - python_module/src/swig/shared_nd.i | 125 -- python_module/src/swig/shared_nd_HostSharedND.py | 67 -- python_module/src/swig/shared_nd_SharedND.py | 196 ---- python_module/src/swig/symbol_var.i | 113 -- python_module/src/swig/symbol_var_SymbolVar.py | 216 ---- python_module/src/swig/symbol_var_array.i | 46 - python_module/src/version.ld | 17 - python_module/test/.gitignore | 3 - python_module/test/README.md | 18 - python_module/test/__init__.py | 0 python_module/test/conftest.py | 34 - python_module/test/helpers/__init__.py | 172 --- python_module/test/helpers/env.py | 56 - python_module/test/helpers/torch_util.py | 33 - python_module/test/integration/manual/README.md | 178 --- .../test/integration/manual/resnet50_perf.py | 210 ---- .../test/integration/manual/run_resnet50_perf.py | 162 --- .../test/integration/mnist_model_with_test.mge | Bin 1568739 -> 0 bytes .../test/integration/mnist_model_with_test_cpu.mge | Bin 1568745 -> 0 bytes python_module/test/integration/test_converge.py | 114 -- python_module/test/integration/test_correctness.py | 199 ---- python_module/test/integration/test_distributed.py | 97 -- python_module/test/integration/test_equivalence.py | 184 --- python_module/test/integration/test_fastrun.py | 12 - python_module/test/integration/test_parampack.py | 274 ----- python_module/test/regression/.gitignore | 2 - python_module/test/regression/__init__.py | 0 python_module/test/regression/test_MGE-103.py | 34 - python_module/test/regression/test_MGE-22.py | 39 - python_module/test/regression/test_MGE-323.py | 21 - python_module/test/regression/test_MGE-81.py | 36 - python_module/test/run.sh | 19 - python_module/test/unit/__init__.py | 0 python_module/test/unit/core/__init__.py | 0 .../test/unit/core/test_dynamic_profiling.py | 56 - python_module/test/unit/core/test_function.py | 169 --- python_module/test/unit/core/test_graph.py | 74 -- python_module/test/unit/core/test_index.py | 311 ----- python_module/test/unit/core/test_recoverable.py | 40 - .../test/unit/core/test_release_memory.py | 56 - .../test/unit/core/test_reshape_broadcast.py | 108 -- python_module/test/unit/core/test_serialization.py | 47 - python_module/test/unit/core/test_tensor.py | 91 -- python_module/test/unit/core/test_zeros_ones.py | 35 - python_module/test/unit/data/__init__.py | 0 python_module/test/unit/data/test_dataloader.py | 183 --- python_module/test/unit/data/test_dataset.py | 43 - python_module/test/unit/data/test_sampler.py | 81 -- python_module/test/unit/data/test_transform.py | 108 -- .../test/unit/distributed/test_functional.py | 467 -------- python_module/test/unit/distributed/test_util.py | 187 --- python_module/test/unit/functional/__init__.py | 0 .../test/unit/functional/test_elemwise.py | 65 -- .../test/unit/functional/test_functional.py | 496 -------- .../test/unit/functional/test_interpolate.py | 60 - python_module/test/unit/functional/test_math.py | 168 --- python_module/test/unit/functional/test_onehot.py | 26 - python_module/test/unit/hub/__init__.py | 0 python_module/test/unit/hub/test_hub.py | 38 - python_module/test/unit/jit/__init__.py | 0 python_module/test/unit/jit/test_jit.py | 257 ---- python_module/test/unit/module/.gitattributes | 1 - .../test/unit/module/AtlasRuntimeOprTest.basic.om | Bin 32916 -> 0 bytes python_module/test/unit/module/__init__.py | 0 python_module/test/unit/module/test_activation.py | 24 - python_module/test/unit/module/test_batchnorm.py | 406 ------- python_module/test/unit/module/test_conv.py | 110 -- python_module/test/unit/module/test_external.py | 70 -- python_module/test/unit/module/test_init.py | 27 - python_module/test/unit/module/test_module.py | 464 -------- python_module/test/unit/module/test_pytorch.py | 140 --- python_module/test/unit/module/test_qat.py | 85 -- python_module/test/unit/module/test_tensor.py | 87 -- python_module/test/unit/optimizer/__init__.py | 0 .../test/unit/optimizer/test_lr_scheduler.py | 23 - .../test/unit/optimizer/test_optimizer.py | 258 ---- python_module/test/unit/quantization/quantize.py | 80 -- .../test/unit/quantization/test_fake_quant.py | 80 -- python_module/test/unit/random/test_random.py | 162 --- scripts/cmake-build/host_build.sh | 16 +- scripts/whl/BUILD_PYTHON_WHL_README.md | 34 +- scripts/whl/macos/macos_build_whl.sh | 76 +- scripts/whl/manylinux2010/build_wheel.sh | 164 +-- scripts/whl/manylinux2010/do_build.sh | 122 +- scripts/whl/windows/windows_build_whl.sh | 76 +- 275 files changed, 244 insertions(+), 40864 deletions(-) create mode 100755 imperative/python/test/run.sh delete mode 100644 python_module/.gitignore delete mode 100644 python_module/CMakeLists.txt delete mode 100644 python_module/megengine/__init__.py delete mode 100644 python_module/megengine/_internal/__init__.py delete mode 100644 python_module/megengine/_internal/_timed_func_fork_exec_entry.py delete mode 100644 python_module/megengine/_internal/comp_graph_tools.py delete mode 100644 python_module/megengine/_internal/config.py delete mode 100644 python_module/megengine/_internal/craniotome.py delete mode 100644 python_module/megengine/_internal/dtype.py delete mode 100644 python_module/megengine/_internal/enum36.py delete mode 100644 python_module/megengine/_internal/exc.py delete mode 100644 python_module/megengine/_internal/global_init.py delete mode 100644 python_module/megengine/_internal/helper.py delete mode 100644 python_module/megengine/_internal/logconf.py delete mode 100644 python_module/megengine/_internal/mgb_helper.py delete mode 100644 python_module/megengine/_internal/opr_extra.py delete mode 100644 python_module/megengine/_internal/persistent_cache.py delete mode 100644 python_module/megengine/_internal/plugin.py delete mode 100644 python_module/megengine/_internal/version.py delete mode 100644 python_module/megengine/core/__init__.py delete mode 100644 python_module/megengine/core/device.py delete mode 100644 python_module/megengine/core/function.py delete mode 100644 python_module/megengine/core/graph.py delete mode 100644 python_module/megengine/core/serialization.py delete mode 100644 python_module/megengine/core/tensor.py delete mode 100644 python_module/megengine/core/tensor_factory.py delete mode 100644 python_module/megengine/core/tensor_nn.py delete mode 100644 python_module/megengine/data/__init__.py delete mode 100644 python_module/megengine/data/_queue.py delete mode 100644 python_module/megengine/data/collator.py delete mode 100644 python_module/megengine/data/dataloader.py delete mode 100644 python_module/megengine/data/dataset/__init__.py delete mode 100644 python_module/megengine/data/dataset/meta_dataset.py delete mode 100644 python_module/megengine/data/dataset/vision/__init__.py delete mode 100644 python_module/megengine/data/dataset/vision/cifar.py delete mode 100644 python_module/megengine/data/dataset/vision/cityscapes.py delete mode 100644 python_module/megengine/data/dataset/vision/coco.py delete mode 100644 python_module/megengine/data/dataset/vision/folder.py delete mode 100644 python_module/megengine/data/dataset/vision/imagenet.py delete mode 100644 python_module/megengine/data/dataset/vision/meta_vision.py delete mode 100644 python_module/megengine/data/dataset/vision/mnist.py delete mode 100644 python_module/megengine/data/dataset/vision/objects365.py delete mode 100644 python_module/megengine/data/dataset/vision/utils.py delete mode 100644 python_module/megengine/data/dataset/vision/voc.py delete mode 100644 python_module/megengine/data/sampler.py delete mode 100644 python_module/megengine/data/transform/__init__.py delete mode 100644 python_module/megengine/data/transform/meta_transform.py delete mode 100644 python_module/megengine/data/transform/vision/__init__.py delete mode 100644 python_module/megengine/data/transform/vision/functional.py delete mode 100644 python_module/megengine/data/transform/vision/transform.py delete mode 100644 python_module/megengine/distributed/__init__.py delete mode 100644 python_module/megengine/distributed/functional.py delete mode 100644 python_module/megengine/distributed/helper.py delete mode 100644 python_module/megengine/distributed/util.py delete mode 100644 python_module/megengine/functional/__init__.py delete mode 100644 python_module/megengine/functional/debug_param.py delete mode 100644 python_module/megengine/functional/elemwise.py delete mode 100644 python_module/megengine/functional/external.py delete mode 100644 python_module/megengine/functional/graph.py delete mode 100644 python_module/megengine/functional/loss.py delete mode 100644 python_module/megengine/functional/math.py delete mode 100644 python_module/megengine/functional/nn.py delete mode 100644 python_module/megengine/functional/quantized.py delete mode 100644 python_module/megengine/functional/sort.py delete mode 100644 python_module/megengine/functional/tensor.py delete mode 100644 python_module/megengine/functional/utils.py delete mode 100644 python_module/megengine/hub/__init__.py delete mode 100644 python_module/megengine/hub/const.py delete mode 100644 python_module/megengine/hub/exceptions.py delete mode 100644 python_module/megengine/hub/fetcher.py delete mode 100644 python_module/megengine/hub/hub.py delete mode 100644 python_module/megengine/hub/tools.py delete mode 100644 python_module/megengine/jit/__init__.py delete mode 100644 python_module/megengine/jit/sublinear_memory_config.py delete mode 100644 python_module/megengine/logger.py delete mode 100644 python_module/megengine/module/__init__.py delete mode 100644 python_module/megengine/module/activation.py delete mode 100644 python_module/megengine/module/batchnorm.py delete mode 100644 python_module/megengine/module/concat.py delete mode 100644 python_module/megengine/module/conv.py delete mode 100644 python_module/megengine/module/conv_bn.py delete mode 100644 python_module/megengine/module/dropout.py delete mode 100644 python_module/megengine/module/elemwise.py delete mode 100644 python_module/megengine/module/embedding.py delete mode 100644 python_module/megengine/module/external.py delete mode 100644 python_module/megengine/module/identity.py delete mode 100644 python_module/megengine/module/init.py delete mode 100644 python_module/megengine/module/linear.py delete mode 100644 python_module/megengine/module/module.py delete mode 100644 python_module/megengine/module/parampack.py delete mode 100644 python_module/megengine/module/pooling.py delete mode 100644 python_module/megengine/module/pytorch/__init__.py delete mode 100644 python_module/megengine/module/pytorch/pytorch.py delete mode 100644 python_module/megengine/module/pytorch/torch_mem_fwd.cpp delete mode 100644 python_module/megengine/module/pytorch/utils.py delete mode 100644 python_module/megengine/module/qat/__init__.py delete mode 100644 python_module/megengine/module/qat/concat.py delete mode 100644 python_module/megengine/module/qat/conv.py delete mode 100644 python_module/megengine/module/qat/conv_bn.py delete mode 100644 python_module/megengine/module/qat/elemwise.py delete mode 100644 python_module/megengine/module/qat/linear.py delete mode 100644 python_module/megengine/module/qat/module.py delete mode 100644 python_module/megengine/module/qat/quant_dequant.py delete mode 100644 python_module/megengine/module/quant_dequant.py delete mode 100644 python_module/megengine/module/quantized/__init__.py delete mode 100644 python_module/megengine/module/quantized/concat.py delete mode 100644 python_module/megengine/module/quantized/conv.py delete mode 100644 python_module/megengine/module/quantized/conv_bn.py delete mode 100644 python_module/megengine/module/quantized/elemwise.py delete mode 100644 python_module/megengine/module/quantized/linear.py delete mode 100644 python_module/megengine/module/quantized/module.py delete mode 100644 python_module/megengine/module/quantized/quant_dequant.py delete mode 100644 python_module/megengine/module/sequential.py delete mode 100644 python_module/megengine/optimizer/__init__.py delete mode 100644 python_module/megengine/optimizer/adadelta.py delete mode 100644 python_module/megengine/optimizer/adagrad.py delete mode 100644 python_module/megengine/optimizer/adam.py delete mode 100644 python_module/megengine/optimizer/internal.py delete mode 100644 python_module/megengine/optimizer/lr_scheduler.py delete mode 100644 python_module/megengine/optimizer/multi_step_lr.py delete mode 100644 python_module/megengine/optimizer/optimizer.py delete mode 100644 python_module/megengine/optimizer/sgd.py delete mode 100644 python_module/megengine/quantization/__init__.py delete mode 100644 python_module/megengine/quantization/fake_quant.py delete mode 100644 python_module/megengine/quantization/internal_fake_quant.py delete mode 100644 python_module/megengine/quantization/observer.py delete mode 100644 python_module/megengine/quantization/qconfig.py delete mode 100644 python_module/megengine/quantization/quantize.py delete mode 100644 python_module/megengine/quantization/utils.py delete mode 100644 python_module/megengine/random/__init__.py delete mode 100644 python_module/megengine/random/distribution.py delete mode 100644 python_module/megengine/random/rng.py delete mode 100644 python_module/megengine/test/__init__.py delete mode 100644 python_module/megengine/utils/__init__.py delete mode 100644 python_module/megengine/utils/hook.py delete mode 100644 python_module/megengine/utils/http_download.py delete mode 100644 python_module/megengine/utils/max_recursion_limit.py delete mode 100644 python_module/megengine/utils/net_stats.py delete mode 100755 python_module/megengine/utils/profile_analyze.py delete mode 100644 python_module/megengine/utils/profile_analyzer.py delete mode 100644 python_module/megengine/utils/types.py delete mode 100644 python_module/megengine/version.py delete mode 100644 python_module/requires-style.txt delete mode 100644 python_module/requires-test.txt delete mode 100644 python_module/requires.txt delete mode 100644 python_module/setup.py delete mode 100644 python_module/src/cpp/bfloat16.cpp delete mode 100644 python_module/src/cpp/craniotome.cpp delete mode 100644 python_module/src/cpp/craniotome.h delete mode 100644 python_module/src/cpp/function_replace.cpp delete mode 100644 python_module/src/cpp/intbx.cpp delete mode 100644 python_module/src/cpp/megbrain_config.cpp delete mode 100644 python_module/src/cpp/megbrain_config.h delete mode 100644 python_module/src/cpp/megbrain_pubapi.cpp delete mode 100644 python_module/src/cpp/megbrain_pubapi.h delete mode 100644 python_module/src/cpp/megbrain_pubapi_internal.h delete mode 100644 python_module/src/cpp/megbrain_serialize.cpp delete mode 100644 python_module/src/cpp/megbrain_serialize.h delete mode 100644 python_module/src/cpp/megbrain_serialize_TensorValueDumperContext.py delete mode 100644 python_module/src/cpp/megbrain_serialize_TensorValueLoaderContext.py delete mode 100644 python_module/src/cpp/megbrain_wrap.cpp delete mode 100644 python_module/src/cpp/megbrain_wrap.h delete mode 100644 python_module/src/cpp/numpy_incl.h delete mode 100644 python_module/src/cpp/opr_defs.cpp delete mode 100644 python_module/src/cpp/opr_defs.h delete mode 100644 python_module/src/cpp/opr_helper.cpp delete mode 100644 python_module/src/cpp/opr_helper.h delete mode 100644 python_module/src/cpp/plugin.cpp delete mode 100644 python_module/src/cpp/plugin.h delete mode 100644 python_module/src/cpp/python_helper.cpp delete mode 100644 python_module/src/cpp/python_helper.h delete mode 100755 python_module/src/python/genopr.py delete mode 100644 python_module/src/python/opr_template.py delete mode 100644 python_module/src/swig/callback.i delete mode 100644 python_module/src/swig/comp_graph.i delete mode 100644 python_module/src/swig/comp_graph_impl_AsyncExec.py delete mode 100644 python_module/src/swig/comp_graph_impl_CompGraph.py delete mode 100644 python_module/src/swig/comp_graph_tools.i delete mode 100644 python_module/src/swig/comp_node.i delete mode 100644 python_module/src/swig/craniotome.i delete mode 100644 python_module/src/swig/loop.i delete mode 100644 python_module/src/swig/mgb.i delete mode 100644 python_module/src/swig/mgb_exception.i delete mode 100644 python_module/src/swig/misc.i delete mode 100644 python_module/src/swig/operator.i delete mode 100644 python_module/src/swig/operator.py delete mode 100644 python_module/src/swig/shared_nd.i delete mode 100644 python_module/src/swig/shared_nd_HostSharedND.py delete mode 100644 python_module/src/swig/shared_nd_SharedND.py delete mode 100644 python_module/src/swig/symbol_var.i delete mode 100644 python_module/src/swig/symbol_var_SymbolVar.py delete mode 100644 python_module/src/swig/symbol_var_array.i delete mode 100644 python_module/src/version.ld delete mode 100644 python_module/test/.gitignore delete mode 100644 python_module/test/README.md delete mode 100644 python_module/test/__init__.py delete mode 100644 python_module/test/conftest.py delete mode 100644 python_module/test/helpers/__init__.py delete mode 100644 python_module/test/helpers/env.py delete mode 100644 python_module/test/helpers/torch_util.py delete mode 100644 python_module/test/integration/manual/README.md delete mode 100644 python_module/test/integration/manual/resnet50_perf.py delete mode 100644 python_module/test/integration/manual/run_resnet50_perf.py delete mode 100644 python_module/test/integration/mnist_model_with_test.mge delete mode 100644 python_module/test/integration/mnist_model_with_test_cpu.mge delete mode 100644 python_module/test/integration/test_converge.py delete mode 100644 python_module/test/integration/test_correctness.py delete mode 100644 python_module/test/integration/test_distributed.py delete mode 100644 python_module/test/integration/test_equivalence.py delete mode 100644 python_module/test/integration/test_fastrun.py delete mode 100644 python_module/test/integration/test_parampack.py delete mode 100644 python_module/test/regression/.gitignore delete mode 100644 python_module/test/regression/__init__.py delete mode 100644 python_module/test/regression/test_MGE-103.py delete mode 100644 python_module/test/regression/test_MGE-22.py delete mode 100644 python_module/test/regression/test_MGE-323.py delete mode 100644 python_module/test/regression/test_MGE-81.py delete mode 100755 python_module/test/run.sh delete mode 100644 python_module/test/unit/__init__.py delete mode 100644 python_module/test/unit/core/__init__.py delete mode 100644 python_module/test/unit/core/test_dynamic_profiling.py delete mode 100644 python_module/test/unit/core/test_function.py delete mode 100644 python_module/test/unit/core/test_graph.py delete mode 100644 python_module/test/unit/core/test_index.py delete mode 100644 python_module/test/unit/core/test_recoverable.py delete mode 100644 python_module/test/unit/core/test_release_memory.py delete mode 100644 python_module/test/unit/core/test_reshape_broadcast.py delete mode 100644 python_module/test/unit/core/test_serialization.py delete mode 100644 python_module/test/unit/core/test_tensor.py delete mode 100644 python_module/test/unit/core/test_zeros_ones.py delete mode 100644 python_module/test/unit/data/__init__.py delete mode 100644 python_module/test/unit/data/test_dataloader.py delete mode 100644 python_module/test/unit/data/test_dataset.py delete mode 100644 python_module/test/unit/data/test_sampler.py delete mode 100644 python_module/test/unit/data/test_transform.py delete mode 100644 python_module/test/unit/distributed/test_functional.py delete mode 100644 python_module/test/unit/distributed/test_util.py delete mode 100644 python_module/test/unit/functional/__init__.py delete mode 100644 python_module/test/unit/functional/test_elemwise.py delete mode 100644 python_module/test/unit/functional/test_functional.py delete mode 100644 python_module/test/unit/functional/test_interpolate.py delete mode 100644 python_module/test/unit/functional/test_math.py delete mode 100644 python_module/test/unit/functional/test_onehot.py delete mode 100644 python_module/test/unit/hub/__init__.py delete mode 100644 python_module/test/unit/hub/test_hub.py delete mode 100644 python_module/test/unit/jit/__init__.py delete mode 100644 python_module/test/unit/jit/test_jit.py delete mode 100644 python_module/test/unit/module/.gitattributes delete mode 100644 python_module/test/unit/module/AtlasRuntimeOprTest.basic.om delete mode 100644 python_module/test/unit/module/__init__.py delete mode 100644 python_module/test/unit/module/test_activation.py delete mode 100644 python_module/test/unit/module/test_batchnorm.py delete mode 100644 python_module/test/unit/module/test_conv.py delete mode 100644 python_module/test/unit/module/test_external.py delete mode 100644 python_module/test/unit/module/test_init.py delete mode 100644 python_module/test/unit/module/test_module.py delete mode 100644 python_module/test/unit/module/test_pytorch.py delete mode 100644 python_module/test/unit/module/test_qat.py delete mode 100644 python_module/test/unit/module/test_tensor.py delete mode 100644 python_module/test/unit/optimizer/__init__.py delete mode 100644 python_module/test/unit/optimizer/test_lr_scheduler.py delete mode 100644 python_module/test/unit/optimizer/test_optimizer.py delete mode 100644 python_module/test/unit/quantization/quantize.py delete mode 100644 python_module/test/unit/quantization/test_fake_quant.py delete mode 100644 python_module/test/unit/random/test_random.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 347da9f9..a4329709 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,10 +47,9 @@ option(MGE_DEBUG_UTIL "Enable debug utility" ON) option(MGE_ENABLE_EXCEPTIONS "Build with exceptions" ON) option(MGE_WITH_TEST "Enable test for MegEngine." OFF) option(MGE_WITH_DISTRIBUTED "Build with distributed support" ON) -option(MGE_BUILD_IMPERATIVE_RT "Build _imperative_rt.so instead of _mgb.so " OFF) +option(MGE_BUILD_IMPERATIVE_RT "Build _imperative_rt Python Module " ON) option(MGE_BUILD_SDK "Build load_and_run" ON) option(MGE_INFERENCE_ONLY "Build inference only library." OFF) -option(MGE_WITH_PYTHON_MODULE "Build MegEngine Python Module." ON) option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON) option(MGE_WITH_ROCM "Enable ROCM support" OFF) @@ -256,8 +255,8 @@ endif() if(MGE_INFERENCE_ONLY) message("-- Disable distributed support for inference only build.") set(MGE_WITH_DISTRIBUTED OFF) - message("-- Disable python module for inference only build.") - set(MGE_WITH_PYTHON_MODULE OFF) + message("-- Disable imperative_rt python module for inference only build.") + set(MGE_BUILD_IMPERATIVE_RT OFF) endif() if(MGE_WITH_DISTRIBUTED) @@ -694,43 +693,18 @@ if(MGE_BUILD_SDK) add_subdirectory(sdk/load-and-run) endif() -if(MGE_WITH_PYTHON_MODULE) - if(MGE_BUILD_IMPERATIVE_RT) - add_subdirectory(imperative) - message("-- Enable imperative python wrapper runtime") - else() - add_subdirectory(python_module) - message("-- Enable legacy python wrapper runtime") - endif() + +if(MGE_BUILD_IMPERATIVE_RT) + add_subdirectory(imperative) + message("-- Enable imperative python wrapper runtime") endif() if(MGE_WITH_TEST AND MGE_ENABLE_RTTI) add_subdirectory(test) endif() -if(TARGET mgb) - add_custom_target( - develop - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/$ - ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/$ - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/mgb.py - ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/mgb.py - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/opr.py - ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/opr.py - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/opr_param_defs.py - ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/opr_param_defs.py - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/python_module/megengine/_internal/include - ${CMAKE_CURRENT_SOURCE_DIR}/python_module/megengine/_internal/include - DEPENDS mgb - VERBATIM - ) -elseif(TARGET _imperative_rt) +if(TARGET _imperative_rt) add_custom_target( develop COMMAND ${CMAKE_COMMAND} -E create_symlink diff --git a/imperative/python/megengine/core/tensor/multipledispatch/utils.py b/imperative/python/megengine/core/tensor/multipledispatch/utils.py index 4dcd0dc4..968430f3 100644 --- a/imperative/python/megengine/core/tensor/multipledispatch/utils.py +++ b/imperative/python/megengine/core/tensor/multipledispatch/utils.py @@ -183,25 +183,16 @@ def typename(type): # parse typing.Union -if sys.version_info < (3, 6): - - def parse_union(ann): +def parse_union(ann): + if hasattr(typing, "UnionMeta"): if type(ann) is not typing.UnionMeta: return return ann.__union_params__ - - -elif sys.version_info < (3, 7): - - def parse_union(ann): + elif hasattr(typing, "_Union"): if type(ann) is not typing._Union: return return ann.__args__ - - -elif sys.version_info < (3, 8): - - def parse_union(ann): + elif hasattr(typing, "_GenericAlias"): if type(ann) is not typing._GenericAlias: if type(ann) is not typing.Union: return @@ -209,11 +200,9 @@ elif sys.version_info < (3, 8): if ann.__origin__ is not typing.Union: return return ann.__args__ - - -else: - - def parse_union(ann): + elif hasattr(typing, "Union"): if typing.get_origin(ann) is not typing.Union: return return typing.get_args(ann) + else: + raise NotImplementedError("unsupported Python version") diff --git a/imperative/python/setup.py b/imperative/python/setup.py index c788b75c..19c6123c 100644 --- a/imperative/python/setup.py +++ b/imperative/python/setup.py @@ -6,6 +6,7 @@ # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + import os import re import pathlib @@ -55,11 +56,13 @@ package_data = [ str(f.relative_to('megengine')) for f in pathlib.Path('megengine', 'core', 'include').glob('**/*') ] + package_data += [ str(f.relative_to('megengine')) for f in pathlib.Path('megengine', 'core', 'lib').glob('**/*') ] + with open('requires.txt') as f: requires = f.read().splitlines() with open('requires-style.txt') as f: @@ -67,6 +70,7 @@ with open('requires-style.txt') as f: with open('requires-test.txt') as f: requires_test = f.read().splitlines() +prebuild_modules=[PrecompiledExtesion('megengine.core._imperative_rt')] setup_kwargs = dict( name=package_name, version=__version__, @@ -78,7 +82,7 @@ setup_kwargs = dict( package_data={ 'megengine': package_data, }, - ext_modules=[PrecompiledExtesion('megengine.core._imperative_rt')], + ext_modules=prebuild_modules, install_requires=requires, extras_require={ 'dev': requires_style + requires_test, @@ -87,6 +91,7 @@ setup_kwargs = dict( cmdclass={'build_ext': build_ext}, ) + setup_kwargs.update(dict( classifiers=[ 'Development Status :: 3 - Alpha', diff --git a/imperative/python/test/run.sh b/imperative/python/test/run.sh new file mode 100755 index 00000000..1e9676fb --- /dev/null +++ b/imperative/python/test/run.sh @@ -0,0 +1,21 @@ +#!/bin/bash -e + +test_dirs="test" +TEST_PLAT=$1 + +if [[ "$TEST_PLAT" == cpu ]]; then + echo "only test cpu pytest" +elif [[ "$TEST_PLAT" == cuda ]]; then + echo "test both cpu and gpu pytest" +else + log "Argument must cpu or cuda" + exit 1 +fi + +pushd $(dirname "${BASH_SOURCE[0]}")/.. >/dev/null + PYTHONPATH="." PY_IGNORE_IMPORTMISMATCH=1 python3 -m pytest $test_dirs -m 'not isolated_distributed' + if [[ "$TEST_PLAT" == cuda ]]; then + echo "test GPU pytest now" + PYTHONPATH="." PY_IGNORE_IMPORTMISMATCH=1 python3 -m pytest $test_dirs -m 'isolated_distributed' + fi +popd >/dev/null diff --git a/python_module/.gitignore b/python_module/.gitignore deleted file mode 100644 index f31367f5..00000000 --- a/python_module/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/megbrain/_mgb.so -/megbrain/_mgb.*.so -/MegBrain.egg-info/ -/dist -/dist_cuda -/dist_nocuda -/wheel_dist -.cache diff --git a/python_module/CMakeLists.txt b/python_module/CMakeLists.txt deleted file mode 100644 index e23c2488..00000000 --- a/python_module/CMakeLists.txt +++ /dev/null @@ -1,113 +0,0 @@ -cmake_policy(SET CMP0086 NEW) - -find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED) - -find_package(Git) -if(GIT_FOUND) - message("git found: ${GIT_EXECUTABLE}") -endif() - -find_package(NumPy REQUIRED) - -find_package(SWIG REQUIRED) -set(SWIG_SRC src/swig/mgb.i) -if(MSVC OR WIN32) - set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -DSWIGWORDSIZE64) - message("WARN: swig have some define issue at windows(64) env") - message("Please refs scripts/whl/BUILD_PYTHON_WHL_README.md to init windows build env") -else() - set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -modern -DSWIGWORDSIZE64) -endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") - -file(GLOB_RECURSE OPR_DECL_SRCS "${PROJECT_SOURCE_DIR}/src/**/*.oprdecl") -file(GLOB_RECURSE PYTHON_SRCS setup.py - src/python/*.py - test/*.py - megengine/*.py) -list(REMOVE_ITEM PYTHON_SRCS - ${CMAKE_CURRENT_SOURCE_DIR}/megengine/_internal/mgb.py - ${CMAKE_CURRENT_SOURCE_DIR}/megengine/_internal/opr.py - ${CMAKE_CURRENT_SOURCE_DIR}/megengine/_internal/opr_param_defs.py -) -list(APPEND PYTHON_SRCS ${MGB_SRCS}) - -file(GLOB_RECURSE ALL_HEADERS src/cpp/megbrain_pubapi.h - ${PROJECT_SOURCE_DIR}/src/core/include/* - ${PROJECT_SOURCE_DIR}/src/opr/include/* - ${PROJECT_SOURCE_DIR}/src/serialization/include/* - ${PROJECT_SOURCE_DIR}/src/plugin/include/* - ${PROJECT_SOURCE_DIR}/dnn/include/*) - -file(COPY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -file(READ ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py CONTENTS) -file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py ${CONTENTS}) - -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/opr.py ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/opr_param_defs.py - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/python ${CMAKE_CURRENT_BINARY_DIR}/src/python - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/src/python/genopr.py ${OPR_DECL_SRCS} - COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py -t py ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/opr_param_defs.py - DEPENDS ${OPR_DECL_SRCS} - VERBATIM -) - -add_custom_target(mgb_opr_py DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/opr.py) - -set(SRCS src/cpp/craniotome.cpp src/cpp/function_replace.cpp src/cpp/intbx.cpp src/cpp/bfloat16.cpp src/cpp/megbrain_config.cpp src/cpp/megbrain_pubapi.cpp src/cpp/megbrain_serialize.cpp src/cpp/megbrain_wrap.cpp src/cpp/opr_defs.cpp src/cpp/opr_helper.cpp src/cpp/plugin.cpp src/cpp/python_helper.cpp) - -include(UseSWIG) -set_property(SOURCE ${SWIG_SRC} PROPERTY CPLUSPLUS ON) - -# cmake < 3.12 do not honor INCLUDE_DIRECTORIES property, just add include directory into SWIG_FLAGS -# Add -I${PROJECT_BINARY_DIR}/genfiles in order to include megbrain_build_config.h so that we don't need to pass cmake flags by -D. -set_property(SOURCE ${SWIG_SRC} PROPERTY SWIG_FLAGS -I${PROJECT_SOURCE_DIR}/src/serialization/include -I${PROJECT_BINARY_DIR}/genfiles) - -set(SWIG_OUTFILE_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal) -swig_add_library(mgb LANGUAGE python SOURCES ${SWIG_SRC} ${SRCS}) - -set(VERSION_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/src/version.ld) -add_custom_target(version_ld SOURCES ${VERSION_SCRIPT}) - -set_target_properties(mgb PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal) -if (APPLE) - target_link_libraries(mgb megbrain megdnn) - set_target_properties(mgb PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") -elseif (MSVC OR WIN32) - target_link_libraries(mgb megbrain megdnn) -else() - target_link_libraries(mgb megbrain megdnn -Wl,--version-script=${VERSION_SCRIPT}) -endif() -target_include_directories(mgb PRIVATE ${PYTHON_INCLUDE_DIRS} src/cpp ${CMAKE_CURRENT_BINARY_DIR} ${NUMPY_INCLUDE_DIR}) -# only windows need link PYTHON_LIBRARIES -if(MSVC OR WIN32) - target_link_libraries(mgb ${PYTHON_LIBRARIES}) -endif() - -if (MGE_WITH_DISTRIBUTED) - target_link_libraries(mgb megray) -endif() - -add_dependencies(mgb mgb_opr_py version_ld) - -add_custom_command( - TARGET mgb POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/megengine ${CMAKE_CURRENT_BINARY_DIR}/megengine - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/test ${CMAKE_CURRENT_BINARY_DIR}/test - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/setup.py ${CMAKE_CURRENT_BINARY_DIR}/setup.py - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/requires.txt ${CMAKE_CURRENT_BINARY_DIR}/requires.txt - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/requires-style.txt ${CMAKE_CURRENT_BINARY_DIR}/requires-style.txt - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/requires-test.txt ${CMAKE_CURRENT_BINARY_DIR}/requires-test.txt - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/megbrain_pubapi.h ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include/megbrain_pubapi.h - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/core/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/opr/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/serialization/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/plugin/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/dnn/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/genfiles/megbrain_build_config.h ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include/megbrain_build_config.h -) - diff --git a/python_module/megengine/__init__.py b/python_module/megengine/__init__.py deleted file mode 100644 index 81c59cd0..00000000 --- a/python_module/megengine/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .core import * -from .logger import enable_debug_log, get_logger, set_log_file, set_log_level -from .version import __version__ diff --git a/python_module/megengine/_internal/__init__.py b/python_module/megengine/_internal/__init__.py deleted file mode 100644 index bac0e791..00000000 --- a/python_module/megengine/_internal/__init__.py +++ /dev/null @@ -1,729 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""the megbrain python package - -Note that all the submodules are automatically imported, so you usually only -need to ``import megengine._internal as mgb``. -""" - -import collections -import json -import os -import sys -import platform -import ctypes - -if sys.platform == "win32": - lib_path = os.path.join(os.path.dirname(__file__), "lib") - Lib_path = os.path.join(os.path.dirname(__file__), "Lib") - dll_paths = list(filter(os.path.exists, [lib_path, Lib_path])) - assert len(dll_paths) > 0 - - kernel32 = ctypes.WinDLL("kernel32.dll", use_last_error=True) - has_load_library_attr = hasattr(kernel32, "AddDllDirectory") - old_error_mode = kernel32.SetErrorMode(0x0001) - - kernel32.LoadLibraryW.restype = ctypes.c_void_p - if has_load_library_attr: - kernel32.AddDllDirectory.restype = ctypes.c_void_p - kernel32.LoadLibraryExW.restype = ctypes.c_void_p - - for dll_path in dll_paths: - if sys.version_info >= (3, 8): - os.add_dll_directory(dll_path) - elif has_load_library_attr: - res = kernel32.AddDllDirectory(dll_path) - if res is None: - err = ctypes.WinError(ctypes.get_last_error()) - err.strerror += ' Error adding "{}" to the DLL search PATH.'.format( - dll_path - ) - raise err - else: - print("WARN: python or OS env have some issue, may load DLL failed!!!") - - import glob - - dlls = glob.glob(os.path.join(lib_path, "*.dll")) - path_patched = False - for dll in dlls: - is_loaded = False - if has_load_library_attr: - res = kernel32.LoadLibraryExW(dll, None, 0x00001100) - last_error = ctypes.get_last_error() - if res is None and last_error != 126: - err = ctypes.WinError(last_error) - err.strerror += ' Error loading "{}" or one of its dependencies.'.format( - dll - ) - raise err - elif res is not None: - is_loaded = True - if not is_loaded: - if not path_patched: - os.environ["PATH"] = ";".join(dll_paths + [os.environ["PATH"]]) - path_patched = True - res = kernel32.LoadLibraryW(dll) - if res is None: - err = ctypes.WinError(ctypes.get_last_error()) - err.strerror += ' Error loading "{}" or one of its dependencies.'.format( - dll - ) - raise err - - kernel32.SetErrorMode(old_error_mode) - -import numpy as np - -from . import comp_graph_tools as cgtools -from . import config, craniotome, dtype -from . import global_init as _global_init -from . import helper as _helper -from . import mgb as _detail -from . import opr, opr_extra, opr_param_defs, plugin -from .exc import MegBrainError -from .logconf import get_logger -from .mgb import ( - CompGraph, - CompNode, - SharedND, - SharedScalar, - SymbolVar, - TensorValueDumperContext, - TensorValueLoaderContext, -) -from .mgb import as_comp_node as comp_node -from .mgb_helper import SharedNDLazyInitializer, callback_lazycopy, copy_output -from .plugin import CompGraphProfiler -from .plugin import GlobalInfkernFinder as _GlobalInfkernFinder -from .plugin import NumRangeChecker -from .version import __version__, version_info - -if sys.version_info.major < 3: - raise ImportError("megbrain requires python 3") - - -class ProxySharedNDAndSymbolVar(_detail.SymbolVar): - """this is a :class:`.SymbolVar` with a corresponding :class:`.SharedND`. - It can participate in graph computating and also provides :meth:`set_value` - and :meth:`get_value`. It should be constructed by :func:`make_shared`. - """ - - __shared_nd = None - __kwargs = None - - def __init__(self, snd, comp_graph, name, **kwargs): - self.__shared_nd = snd - self.__kwargs = kwargs - self.this = snd.symvar(comp_graph=comp_graph, name=name, **kwargs).this - - def set_value(self, v, **kwargs): - ret = self.__shared_nd.set_value(v, **kwargs) - self._reeval_if_eager_eval() - return ret - - def get_value(self): - return self.__shared_nd.get_value() - - def reset_zero(self): - self.__shared_nd.reset_zero() - - -def make_shared( - comp_node, - *, - dtype=None, - shape=None, - value=None, - comp_graph=None, - name=None, - volatile=None -): - """make a shared tensor which is stored on device and could be modified - later, either as a :class:`.SymbolVar` or a :class:`.SharedND` object - - :param comp_node: computing node - :type comp_node: :class:`.CompNode` - :param dtype: data type; if it is None, then dtype of value would be used - if value is not None, and float32 would be used as default dtype if - value is None - :type dtype: :class:`numpy.dtype` compatible - :param value: initializing value - :type value: None or :class:`numpy.ndarray` - :param comp_graph: the computing graph to which this shared value should - belong; if provided, the retuned object could be used as a - :class:`.SymbolVar` - :type comp_graph: None or :class:`.CompGraph` - :param name: node name to be used in computing graph; only meaningful if - *comp_graph* is provided - :param volatile: if *comp_graph* is given then *volatile* indicates whether - shape or mem ptr of this SharedND can be changed - :rtype: :class:`.SharedND` if *comp_graph* is not given; or - :class:`ProxySharedNDAndSymbolVar` otherwise - """ - if dtype is None: - if value is not None: - value = np.ascontiguousarray(value) - dtype = to_mgb_supported_dtype(value.dtype) - else: - dtype = np.float32 - comp_node = _detail.as_comp_node(comp_node) - rst = _detail.SharedND(comp_node, dtype) - if value is not None: - assert shape is None, "could not provide both value and shape" - rst.set_value(value) - elif shape is not None: - rst._set_init_shape(shape) - if comp_graph is None: - assert name is None and volatile is None - return rst - assert isinstance(comp_graph, CompGraph), "expect CompGraph but got {}".format( - comp_graph - ) - if volatile is None: - volatile = False - else: - assert isinstance(volatile, bool) - return ProxySharedNDAndSymbolVar(rst, comp_graph, name, volatile=volatile) - - -def make_immutable(comp_node, comp_graph, value, *, dtype=None, name=None): - """make a graph node containing an immutable tensor from host tensor value - - :param dtype: required data type; if not None, the data would be converted - to that type; otherwise - """ - - comp_node = _detail.as_comp_node(comp_node) - assert isinstance( - comp_graph, _detail.CompGraph - ), "expect CompGraph but got {!r}".format(comp_graph) - - config = _detail.make_opr_config(name, comp_node) - return _helper.cvt_opr_result( - _detail._make_immutable(comp_graph, value, dtype, config) - ) - - -def make_arg( - comp_node, - comp_graph, - *, - dtype=np.float32, - shape=None, - name=None, - value=None, - enable_static_infer=True -): - """make an argument to be passed to compiled function during runtime; - - :type shape: None or tuple of int - :param shape: expected tensor shape to be used for shape inferring; actual - tesor shape could be different - :type name: str - :param name: name of the generated var node - :type value: None or ndarray-compatible - :param value: initial value used for static inference; if not given, static - infer would be deferred to first graph execution - :param enable_static_infer: whether to enable static inference for this var - """ - comp_node = _detail.as_comp_node(comp_node) - host_val = mgb._HostSharedND(comp_node, dtype) - - if value is not None: - value = np.ascontiguousarray(value, dtype=dtype) - if shape is None: - shape = value.shape - else: - assert shape == value.shape - if shape is not None: - host_val._resize(shape) - - if value is not None: - host_val.set_value(value) - - return _helper.cvt_opr_result( - ProxySharedNDAndSymbolVar( - host_val, comp_graph, name, enable_static_infer=enable_static_infer - ) - ) - - -def comp_graph(*, extra_opts=None, check_env_var=True): - """allocate a new computing graph - - :param extra_opts: extra options to be set; would be updated (modified - inplace) from ``MGB_COMP_GRAPH_OPT`` environment var. See - :func:`.set_comp_graph_option` for list of supported options. - :type extra_opts: dict - :param check_env_var: whether to check environment vars - :type check_env_var: bool - - :return: the comp graph object - :rtype: :class:`.CompGraph` - """ - cg = _detail.CompGraph() - if extra_opts is None: - extra_opts = {} - if check_env_var: - setting = os.getenv("MGB_COMP_GRAPH_OPT") - if setting: - for item in setting.split(";"): - k, v = item.split("=", 1) - extra_opts.setdefault(k, v) - get_logger().warning( - "set comp graph option from env: {}".format(extra_opts) - ) - user_data = os.getenv("MGB_COMP_GRAPH_USER_DATA") - if user_data: - storage = cg.user_data - for ud in user_data.split(";"): - k, v = ud.split("=", 1) - storage[k] = eval(v) - _GlobalInfkernFinder.add_graph(cg) - for k, v in extra_opts.items(): - cg.set_option(k, v) - return cg - - -def grad( - target, wrt, warn_mid_wrt=True, use_virtual_grad=None, return_zero_for_nodep=True -): - r"""compute symbolic grad - - :param target: grad target var - :type target: :class:`.SymbolVar` - :param wrt: with respect to which to compute the grad - :type wrt: :class:`.SymbolVar` or Iterable[SymbolVar] - :param warn_mid_wrt: whether to give warning if *wrt* is not endpoint - :type warn_mid_wrt: bool - :param use_virtual_grad: whether to use virtual grad opr, so fwd graph can - be optimized before applying grad; if ``None`` is given, then virtual - grad would be used if ``graph_opt_level >= 2`` - :type use_virtual_grad: :class:`bool` or ``None`` - :param return_zero_for_nodep: if *target* does not depend on *wrt*, set to True to return - a zero-valued `.SymbolVar` rather than ``None``; can't be set to False when using - virtual grad opr. - :type return_zero_for_nodep: bool - :rtype: :class:`.SymbolVar` or None - :return: :math:`\frac{\partial\text{target}}{\partial\text{wrt}}` - """ - if use_virtual_grad is None: - use_virtual_grad = -1 - else: - use_virtual_grad = 1 if use_virtual_grad else 0 - - if isinstance(wrt, SymbolVar): - wrts = [ - wrt, - ] - else: - wrts = wrt - - assert isinstance(wrts, collections.Iterable) - # return a invalid SymbolVar (with nullptr VarNode*) when return_zero_for_nodep is False - # and target doesn't depend on wrt - grads = _detail._grad( - target, wrts, bool(warn_mid_wrt), use_virtual_grad, return_zero_for_nodep - ) - grads = list(grads) - - for i in range(len(grads)): - if not grads[i].valid: - assert ( - not return_zero_for_nodep - ), "invalid grad SymbolVar: target={}, wrt={}".format(target, wrts[i]) - grads[i] = None - - if len(grads) == 1: - grads = grads[0] - - return grads - - -def current_grad_target(comp_graph): - """get current target var to compute grad, used for implementing custom - gradient""" - return _detail._current_grad_target(comp_graph) - - -def add_device_map(map_location): - """add map location while loading models""" - _detail.CompNode.cn_thread_local.__setattr__("map_location", map_location) - - -def del_device_map(): - """delete map location""" - _detail.CompNode.cn_thread_local.__delattr__("map_location") - - -def inter_graph_trans_var(dest_graph, src): - """get the corresponding var of *src* in *dest_graph*; assuming - *dest_graph* is a copy of owner graph of *src*; usually used in callback of - set_grad to get grad of vars in loop - - :param dest_graph: target computing graph - :type dest_graph: :class:`.CompGraph` - :param src: source var node - :type src: :class:`.SymbolVar` - :return: corresponding var in *dest_graph* - :rtype: :class:`.SymbolVar` - """ - return _detail._inter_graph_trans_var(dest_graph, src) - - -def get_graph_optimizer_replaced_var(src): - """get optimized var corresponding to given var; usually used in callback - of set_grad to get grad w.r.t. some var - - :param src: source var node - :type src: :class:`.SymbolVar` - :rtype: :class:`.SymbolVar` - """ - return _detail._get_graph_optimizer_replaced_var(src) - - -CompGraphSerializationResult = collections.namedtuple( - "CompGraphSerializationResult", - [ - "nr_opr", - "tot_bytes", - "tensor_value_bytes", - "content_hash", - "inputs", - "outputs", - "params", - ], -) - - -def serialize_comp_graph_to_file( - fpath, - output_vars, - *, - keep_var_name=1, - keep_param_name=False, - keep_opr_priority=False, - tensor_value_dumper=None, - output_strip_info=False, - append=False, - format=None, - **kwargs -): - """serialize this computing graph and write result to a file. Note: - ``kwargs`` exists for backward compatibility; there is no additional - arguments. - - :parma fpath: path for the output file - :type fpath: ``str`` - :param output_vars: output variables that need to be retrieved when - deserializing - - .. note:: - - The underlying C++ API only accepts a var list. If a dict is given, - the vars would be renamed to given names. - - :type output_vars: dict(name => :class:`.SymbolVar`), or a list of vars - :param keep_var_name: level for keeping variable names: - - * 0: none of the names are kept - * 1: keep names of output vars - * 2: keep names of all (output and internal) vars - :param keep_param_name: whether to keep param names, so param values can be - easily manipulated after loading model - :param keep_opr_priority: whether to keep priority setting for operators - :param tensor_value_dumper: a callable to dump tensor values; it should - only write the tensor value without layout information. It would be - given a :class:`.TensorValueDumperContext` object as its sole argument. - :param output_strip_info: if set to True, then a json file containing - information for code strip would be written to ``fpath+'.json'`` - :param append: whether to open output file in append mode - :return: an instance of namedtuple :class:`CompGraphSerializationResult`, - whose fields are: - - * ``nr_opr`` number of operators dumped - * ``tot_bytes`` total bytes for the whole graph - * ``tensor_value_bytes`` bytes consumed for dumping tensor values - * ``inputs`` names of input tensors - * ``params`` list of names of dumped params - * ``outputs`` names of output vars - :param format: serialization format of the resulting model, should be either - "mdl" or "fbs"; none means default. - :type format: ``str`` - """ - - assert isinstance(fpath, str), "bad file path: {!r}".format(fpath) - ov = _detail._VectorSymbolVar() - SUPPORTED_FORMATS = { - # default - None: _detail.GraphDumpFormat_FLATBUFFERS, - "fbs": _detail.GraphDumpFormat_FLATBUFFERS, - } - resolved_fmt = SUPPORTED_FORMATS.get(format, None) - if resolved_fmt is None: - raise ValueError( - "unknown format {} requested, supported ones are {}".format( - format, list(filter(None, SUPPORTED_FORMATS.keys())) - ) - ) - if isinstance(output_vars, dict): - used_vars = set() - for name, var in output_vars.items(): - assert isinstance(var, _detail.SymbolVar), "bad output var: {!r}".format( - var - ) - assert var.id not in used_vars, ( - "var name is associated with a var object, so we can not have " - "two names given to the same var: {}".format(var) - ) - used_vars.add(var.id) - var.rename(name) - ov.push_back(var) - else: - for i in output_vars: - assert isinstance(i, _detail.SymbolVar), "bad output var: {!r}".format(i) - ov.push_back(i) - - if tensor_value_dumper is not None: - assert isinstance(tensor_value_dumper, collections.Callable) - - class Callback(_detail._TensorValueDumperCallback): - def call(self, ctx, *, _f=tensor_value_dumper): - _f(ctx) - - tensor_value_dumper = Callback() - - # for backward compatibility - mangle_opr_name = kwargs.pop("mangle_opr_name", ov) - if mangle_opr_name is not ov: - get_logger().warning("mangle_opr_name is deprecated; use keep_var_name instead") - keep_var_name = 1 if mangle_opr_name else 2 - mangle_param_name = kwargs.pop("mangle_param_name", ov) - assert ( - not kwargs - ), "extra kwargs provided to serialize_comp_graph_to_file: {}".format(kwargs) - - if mangle_param_name is not ov: - get_logger().warning( - "mangle_param_name is deprecated; use keep_param_name instead" - ) - keep_param_name = not mangle_param_name - - inputs = _detail._VectorString() - outputs = _detail._VectorString() - params = _detail._VectorString() - stat = _detail._VectorSizeT() - - _detail._serialize_comp_graph_to_file( - fpath, - append, - resolved_fmt, - ov, - keep_var_name, - keep_param_name, - keep_opr_priority, - tensor_value_dumper, - stat, - inputs, - outputs, - params, - ) - - dump_ret = CompGraphSerializationResult( - *stat, list(inputs), list(outputs), list(params) - ) - - if output_strip_info: - with open(fpath + ".json", "w") as fout: - strip_info = _detail._get_info_for_strip(ov) - strip_info_dict = json.loads(strip_info) - strip_info_dict["hash"] = dump_ret.content_hash - json.dump(strip_info_dict, fout) - - return dump_ret - - -CompGraphLoadResult = collections.namedtuple( - "CompGraphLoadResult", ["graph", "output_vars_dict", "output_vars_list"] -) - - -def load_comp_graph_from_file( - fpath, *, comp_node_mapper=None, tensor_value_loader=None -): - """Load a serialized computing graph from file. - - :parma fpath: Path for the output file - :type fpath: ``str`` - :param comp_node_mapper: A callable to modify comp node locator, takes old - locator as argument and returns new locator. - :type comp_node_mapper: Callable[[str], str] - :param tensor_value_loader: A callable to load tensor values. It should - read the tensor value with the given shape and dtype and return it as - NumPy ndarray. It would be given a :class:`.TensorValueLoaderContext` - object as its sole argument. - :type tensor_value_loader: Callable[[TensorValueLoaderContext], numpy.ndarray] - :return: An instance of namedtuple :class:`CompGraphLoadResult`, - whose fields are: - - * ``graph`` loaded CompGraph - * ``output_vars_dict`` A Python dict, mapping name to output SymbolVar - * ``output_vars_list`` A Python list, containing output vars in the - order passed to serialize_comp_graph_to_file - """ - assert isinstance(fpath, str), "bad file path: {!r}".format(fpath) - - if comp_node_mapper is not None: - assert isinstance(comp_node_mapper, collections.Callable) - - class Callback(_detail._CompNodeMapperCallback): - def call(self, desc, *, _f=comp_node_mapper): - return _f(desc) - - comp_node_mapper = Callback() - if tensor_value_loader is not None: - assert isinstance(tensor_value_loader, collections.Callable) - - class Callback(_detail._TensorValueLoaderCallback): - def call(self, ctx, *, _f=tensor_value_loader): - return _f(ctx) - - tensor_value_loader = Callback() - output_vars_map = _detail._VectorPairStringSymbolVar() - output_vars_list = _detail._VectorSymbolVar() - cg = _detail._load_comp_graph_from_file( - fpath, comp_node_mapper, tensor_value_loader, output_vars_map, output_vars_list - ) - return CompGraphLoadResult(cg, dict(list(output_vars_map)), list(output_vars_list)) - - -def optimize_for_inference( - output_vars, - *, - f16_io_f32_comp=False, - f16_io_comp=False, - use_nhwcd4=False, - fuse_conv_bias_nonlinearity=False, - use_nchw32=False, - fuse_conv_bias_with_z=False, - use_nchw4=False, - use_nchw88=False, - use_nchw44=False, - use_nchw44_dot=False, - use_chwn4=False -): - """optimize computing graph for inference - - This applies a predefined set of optimization passes. Refer to the mnist - sdk example and C++ code for fine-grained control. - - :param output_vars: output symvars - :type output_vars: list of :class:`.SymbolVar` - :param f16_io_f32_comp: whether to use float16 for I/O between oprs and use - float32 as internal computation precision. Note the output var would be - changed to float16 - :param f16_io_comp: whether to use float16 for both I/O and computation - precision - :param use_nhwcd4: whether to use NHWCD4 data format. This is faster on some - OpenCL devices - :param fuse_conv_bias_nonlinearity: whether to fuse conv+bias+nonlinearty - into one opr. This is supported only in NHWCD4 format. - :param use_nchw4: whether to use NCHW4 tensor format. - :param use_nchw88: whether to use NCHW88 tensor format. This maybe faster some - times. - :param use_nchw44: whether to use NCHW44 tensor format. This maybe faster some - times. - :param use_nchw44_dot: whether to use NCHW44_DOT tensor format. This format is - optimized for inference in armv8.2 - :param use_nchw32: whether to use NCHW32 tensor format. Mainly used for - nvidia tensorcore. - :param use_chwn4: whether to use CHWN4 tensor format. Mainly used for - nvidia tensorcore. - - - :return: list of transformed vars corresponding to given output vars - """ - - assert isinstance(output_vars, (list, tuple)) - opt = _detail._OptimizeForInferenceOptions() - settings = locals() - for i in [ - "f16_io_f32_comp", - "f16_io_comp", - "fuse_conv_bias_nonlinearity", - "fuse_conv_bias_with_z", - ]: - if settings[i]: - getattr(opt, "enable_{}".format(i))() - - layout_tranform = None - for k, v in { - "use_nchw4": "nchw4", - "use_nhwcd4": "nhwcd4", - "use_nchw32": "nchw32", - "use_nchw88": "nchw88", - "use_nchw44": "nchw44", - "use_nchw44_dot": "nchw44_dot", - "use_chwn4": "chwn4", - }.items(): - if settings[k]: - assert ( - not layout_tranform - ), "Only one layout transform supported, both {} and {}".format( - layout_tranform, k - ) - getattr(opt, "enable_{}".format(v))() - layout_tranform = k - - vec = _detail._VectorSymbolVar() - for i in output_vars: - assert isinstance(i, _detail.SymbolVar), "bad var: {}".format(i) - vec.push_back(i) - return list(_detail._optimize_for_inference(vec, opt)) - - -def get_opr_fp_graph_exec(comp_graph, output_vars): - """get opr footprint and graph exec info - - This function will recompile the compute graph, the AsyncExecutable compiled - before will be invalid. - - :param comp_graph: ComputingGraph - :param output_vars: list of :class:'.SymbolVar' - """ - assert isinstance(output_vars, (list, tuple)) - vec = _detail._VectorSymbolVar() - for i in output_vars: - assert isinstance(i, _detail.SymbolVar), "bad var: {}".format(i) - vec.push_back(i) - return json.loads(_detail._get_opr_fp_graph_exec(comp_graph, output_vars)) - - -def to_mgb_supported_dtype(dtype_): - """get the dtype supported by megbrain nearest to given dtype""" - if ( - dtype.is_lowbit(dtype_) - or dtype.is_quantize(dtype_) - or dtype.is_bfloat16(dtype_) - ): - return dtype_ - return _detail._to_mgb_supported_dtype(dtype_) - - -def return_free_memory(): - """return free memory chunks on all devices. - - This function will try it best to free all consecutive free chunks back to - operating system, small pieces may not be returned. - - Please notice that this function will not move any memory in-use. - """ - _detail.CompNode._try_coalesce_all_free_memory() diff --git a/python_module/megengine/_internal/_timed_func_fork_exec_entry.py b/python_module/megengine/_internal/_timed_func_fork_exec_entry.py deleted file mode 100644 index 50492ec1..00000000 --- a/python_module/megengine/_internal/_timed_func_fork_exec_entry.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import argparse -import os -import sys - -import megengine._internal.mgb as _mgb - -try: - from setproctitle import setproctitle -except ImportError: - setproctitle = None - - -def main(): - parser = argparse.ArgumentParser( - description="entry point for fork-exec callback in TimedFuncInvoker;" - " this file should not be used directly by normal user." - ) - parser.add_argument("user_data") - args = parser.parse_args() - - if setproctitle: - setproctitle("megbrain:timed_func_exec:ppid={}".format(os.getppid())) - _mgb._timed_func_exec_cb(args.user_data) - raise SystemError("_timed_func_exec_cb returned") - - -if __name__ == "__main__": - main() diff --git a/python_module/megengine/_internal/comp_graph_tools.py b/python_module/megengine/_internal/comp_graph_tools.py deleted file mode 100644 index 5777d7d0..00000000 --- a/python_module/megengine/_internal/comp_graph_tools.py +++ /dev/null @@ -1,274 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""tools for graph manipulation""" - -import collections - -from . import mgb as _mgb - - -def get_dep_vars(var, var_type=None): - """return :class:`.SymbolVar` of type ``var_type`` that input ``var`` - depands on. If ``var_type`` is None, return all types. - - :type var: an instance or iterable of :class:`.SymbolVar` - :type var_type: ``str`` or an iterable of ``str`` - "rtype: list of :class:`.SymbolVar` - """ - outputs = [] - memo = set() - - if isinstance(var, _mgb.SymbolVar): - var = [var] - - if isinstance(var_type, str): - var_type = [var_type] - - q = list(var) - while q: - v = q.pop() - if v in memo: - continue - memo.add(v) - q.extend(get_inputs(v)) - if var_type is not None: - if get_type(v) in var_type: - outputs.append(v) - else: - outputs.append(v) - - return outputs - - -def get_inputs(var): - """get the inputs of owner opr of a variable - - :type var: :class:`.SymbolVar` - :rtype: list of :class:`.SymbolVar` - """ - assert isinstance(var, _mgb.SymbolVar) - return _mgb._get_owner_opr_inputs(var) - - -def get_type(var): - """get the type of owner opr of a variable - - :type var: :class:`.SymbolVar` - :rtype: ``str`` - """ - assert isinstance(var, _mgb.SymbolVar) - return _mgb._get_owner_opr_type(var) - - -def get_opr_type(opr): - """get the type of a opr - - :type var: :class:`.Operator` - :rtype: ``str`` - """ - assert isinstance(opr, _mgb.Operator) - return _mgb._get_opr_type(opr) - - -def graph_traversal(outputs): - """helper function to traverse the computing graph and reeturn enough useful information - - :param outputs: model outputs - :type outputs: :class:`.Symbolvar` - :return: tuple (map_oprs, map_vars, var2oprs, opr2receivers, indegree2opr, opr2indegree) - WHERE - map_oprs is dict from opr_id to actual opr - map_vars is dict from var_id to actual var - var2oprs is dict from var to dest oprs along with index - opr2receivers is dict from current opr to next opr - indegree2opr is dict from in_degree to opr in computing graph - opr2indegree is dict from opr in computing graph to in_degree - - (indegree2opr, opr2indegree) are only used in topological sort in get_oprs_seq function - """ - # meta information for comp graph - map_oprs = collections.defaultdict(set) - map_vars = collections.defaultdict(set) - - var2oprs = collections.defaultdict(list) - opr2receivers = collections.defaultdict(list) - - queue = list(map(lambda x: x.owner_opr, outputs)) - visited = set(map(lambda x: x.id, queue)) - - # iterate through whole comp_graph, fill in meta information - indegree2opr = collections.defaultdict(set) - opr2indegree = {} - - idx = 0 - while idx < len(queue): - cur_opr = queue[idx] - map_oprs[cur_opr.id] = cur_opr - - idx += 1 - - indegree = 0 - for var_idx, var in enumerate(cur_opr.inputs): - map_vars[var.id] = var - var2oprs[var.id].append((cur_opr.id, var_idx)) - - pre_opr = var.owner_opr - - if pre_opr.id not in visited: - visited.add(pre_opr.id) - queue.append(pre_opr) - - indegree += 1 - opr2receivers[pre_opr.id].append(cur_opr.id) - - indegree2opr[indegree].add(cur_opr.id) - opr2indegree[cur_opr.id] = indegree - - return map_oprs, map_vars, var2oprs, opr2receivers, indegree2opr, opr2indegree - - -def get_oprs_seq(outputs, prune_reshape=False): - """get oprs in some topological order for a dumped model - - :param outputs: model outputs - :param prune_reshape: whether to prune the operators useless during inference - :return: opr list with some correct execution order - """ - - def topological_sort(map_oprs, opr2receivers, indegree2opr, opr2indegree): - # generate an execution order with topological sort algorithm - oprs_seq = [] - nr_remain = len(map_oprs) - while indegree2opr[0]: - opr_id = indegree2opr[0].pop() - opr = map_oprs[opr_id] - nr_remain -= 1 - - # skip const value generation operator - if get_opr_type(opr) != "ImmutableTensor": - oprs_seq.append(opr) - - for post_id in opr2receivers[opr_id]: - indegree = opr2indegree[post_id] - indegree2opr[indegree].remove(post_id) - - indegree -= 1 - indegree2opr[indegree].add(post_id) - opr2indegree[post_id] = indegree - - assert nr_remain == 0, "there are {} remaining nodes; cyclic graph?".format( - nr_remain - ) - return oprs_seq - - # reshape op definition: reshape(input_tensor, dest_shape) -> output_tensor - # when inferencing, shape of output_tensor is already known, so one can prune some operators related to dest_shape in the loaded graph - def prune_reshape_oprs(outputs, oprs_seq, var2oprs): - def iterative_pruning(cur_opr, post_opr, marked_opr_ids): - useless = True - for oup in cur_opr.outputs: - if "workspace" not in oup.name: - var_idx = post_opr.inputs.index(oup) - var2oprs[oup.id].remove((post_opr.id, var_idx)) - useless = useless and (len(var2oprs[oup.id]) == 0) - - if useless: - marked_opr_ids.append(cur_opr.id) - - for inp in cur_opr.inputs: - iterative_pruning(inp.owner_opr, cur_opr, marked_opr_ids) - - reshape_vars = get_dep_vars(outputs, "Reshape") - reshape_oprs = [var.owner_opr for var in reshape_vars] - - marked_opr_ids = [] - for reshape_opr in reshape_oprs: - iterative_pruning( - reshape_opr.inputs[1].owner_opr, reshape_opr, marked_opr_ids - ) - - # filter out all marked oprs - return list(filter(lambda x: x.id not in marked_opr_ids, oprs_seq)) - - map_oprs, _, var2oprs, opr2receivers, indegree2opr, opr2indegree = graph_traversal( - outputs - ) - oprs_seq = topological_sort(map_oprs, opr2receivers, indegree2opr, opr2indegree) - if prune_reshape is True: - oprs_seq = prune_reshape_oprs(outputs, oprs_seq, var2oprs.copy()) - return oprs_seq - - -def replace_vars(dst, varmap): - """replace vars in the graph - - :param dst: target vars representing the graph - :type dst: list of :class:`.SymbolVar` - :param varmap: the map that specifies how to replace the vars - :type varmap: dict that maps from src var to dst var - - :return: new vars that correspond to ``dst`` with all the dependencies - replaced - :rtype: list of :class:`.SymbolVar` - """ - dst_vec = _mgb._VectorSymbolVar() - repl_src_vec = _mgb._VectorSymbolVar() - repl_dst_vec = _mgb._VectorSymbolVar() - for i in dst: - assert isinstance(i, _mgb.SymbolVar) - dst_vec.push_back(i) - - for i, j in getattr(varmap, "items", lambda: varmap)(): - assert isinstance(i, _mgb.SymbolVar) - assert isinstance(j, _mgb.SymbolVar) - repl_src_vec.push_back(i) - repl_dst_vec.push_back(j) - - return _mgb._replace_vars(repl_src_vec, repl_dst_vec, dst_vec) - - -def replace_oprs(dst, oprmap): - """Replace operators in the graph. Roughly equivalent to - - :param dst: target vars representing the graph - :type dst: list of :class:`.SymbolVar` - :param oprmap: the map that specifies how to replace the operators - :type oprmap: dict that maps from src operator to dst operator - - :return: new vars that correspond to ``dst`` with all the dependencies - replaced - :rtype: list of :class:`.SymbolVar` - """ - dst_vec = _mgb._VectorSymbolVar() - repl_src_vec = _mgb._VectorOperator() - repl_dst_vec = _mgb._VectorOperator() - for i in dst: - assert isinstance(i, _mgb.SymbolVar) - dst_vec.push_back(i) - - for i, j in getattr(oprmap, "items", lambda: oprmap)(): - assert isinstance(i, _mgb.Operator) - assert isinstance(j, _mgb.Operator) - repl_src_vec.push_back(i) - repl_dst_vec.push_back(j) - - return _mgb._replace_oprs(repl_src_vec, repl_dst_vec, dst_vec) - - -def set_priority_to_id(dest_vars): - """For all oprs in the subgraph constructed by dest_vars - set its priority to id if its original priority is zero - :param dest_vars: target vars representing the graph - """ - dest_vec = _mgb._VectorSymbolVar() - for i in dest_vars: - assert isinstance(i, _mgb.SymbolVar) - dest_vec.push_back(i) - _mgb._set_priority_to_id(dest_vec) diff --git a/python_module/megengine/_internal/config.py b/python_module/megengine/_internal/config.py deleted file mode 100644 index 3bac8ab5..00000000 --- a/python_module/megengine/_internal/config.py +++ /dev/null @@ -1,439 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import collections -import os - -from . import mgb as _mgb - -_default_device_type = "CUDA" - - -def set_device_map(logical_dev, physical_dev, device_type=None): - """map from *logical_dev* to *physical_dev* for furture comp node - loading - - example:: - - set_device_map(0, 2, 'CPU') # cpu0 -> cpu2 - set_device_map('gpu3', 'gpu0') # gpu0 -> gpu0 - - :param device_type: specify the device type if devices are given by - integers; if devices are given by integers and ``device_type`` is not - given, the default value ``'CUDA'`` would be used. Possible values are - ``'CUDA'`` and ``'CPU'``. - """ - - if device_type is None: - device_type = _default_device_type - - if device_type == "CUDA": - xpu = "gpu" - else: - assert device_type == "CPU" - xpu = "cpu" - - def rmxpu(v): - if isinstance(v, str): - assert v.startswith(xpu) or v.startswith("xpu"), ( - "bad comp node in set_device_map: " - "device_type={} comp_node={}".format(device_type, v) - ) - return v[3:] - return v - - logical_dev, physical_dev = map(rmxpu, [logical_dev, physical_dev]) - _mgb.CompNode._set_device_map(device_type, int(logical_dev), int(physical_dev)) - - -def set_default_device(physical_dev, device_type=None): - """set physcal device for xpux - - when *device_type* is None and *physical_dev* starts with *gpu* or *cpu*, - the default device type would be modified accordingly for future calls to - :func:`set_device_map` when remapping device number. - """ - global _default_device_type - if ( - device_type is None - and isinstance(physical_dev, str) - and not physical_dev.isdigit() - and not physical_dev.startswith("xpu") - ): - t = physical_dev[:3] - if t == "gpu": - _default_device_type = "CUDA" - else: - assert t == "cpu", "bad physical_dev: {}".format(physical_dev) - _default_device_type = "CPU" - set_default_device_type(_default_device_type) - device_type = _default_device_type - set_device_map(-1, physical_dev, device_type) - - -def set_default_device_type(device_type): - """set device type for xpu""" - global _default_device_type - device_type = device_type.upper() - _mgb.CompNode._set_unspec_device_type(device_type) - _default_device_type = device_type - - -def set_fork_cuda_warning_flag(flag): - """set warning to be printed at fork if cuda has been initialized - - :type flag: int - :param flag: controls how the warning should be printed: - - * 0: disable warning - * 1: print warning to log - * 2: print warning to log and raise exception - """ - _mgb._config.set_fork_cuda_warning_flag(int(flag)) - - -def get_device_count(device_type="xpu", warn=True): - """get number of devices installed on this system - - :param device_type: device type, one of 'xpu', 'gpu' or 'cpu' - :type device_type: str - """ - return _mgb.CompNode._get_device_count(device_type.upper(), warn) - - -def parse_locator(device_name: str) -> tuple: - """get the tensor locator expression by device name. - - :param device_name: device name, like 'cpu0', 'gpu1' and 'xpux' - :type device_name: str - - :return: (device_type, dev_num, stream_num) - """ - return _mgb.CompNode._parse_locator(device_name) - - -def set_mem_reserve_size(size): - """set memory reserve size: - - * If *size* is greater than 1, it is the absolute amount of memory to - be reserved in MB; - * If *size* is in the range (0, 1), it is the ratio of total memory; - * If *size* is 0, memory reservation and pre-allocation would be - disabled; - * If *size* is -1, disable custom memory allocator and use cuda APIs - directly. - """ - _mgb._config.set_mem_reserve_size(float(size)) - - -def set_comp_graph_option(comp_graph, name, val): - """set computing graph option and return its old value - :type comp_graph: :class:`.CompGraph` - :param comp_graph: the computing graph whose option should be modified - :type name: str - :param name: option name - Currently supported options are: - - * "no_profiling_on_shape_change": bool; - When execution strategy is set to profiling, always use the - initial profile result and do not re-run profiling even if input - shape changes. - * "seq_opt.enable_mem_plan_opt": bool - * "seq_opt.enable_mem_reuse_alloc": bool - * "seq_opt.enable_seq_comp_node_opt": bool - * "force_dynamic_alloc": bool - * "var_sanity_check_first_run": bool - * "enable_sublinear_memory_opt": bool - * "enable_memory_swap": bool; whether to enable memory swap; it - usually performs worse than sublinear memory - * "enable_var_mem_defragment": bool - * "allocate_static_mem_after_graph_compile": bool - * "enable_grad_var_static_reshape": bool: - If set to ``True``, dynamically-shaped gradients whose original - shape is statically inferrable would be reshaped, so static - shape inference can continue - * "async_exec_level": int - - * ``0``: do not dispatch asynchronously - * ``1``: async dispatch if there are more than 1 cuda comp - nodes - * mask ``0b10``: async for comp nodes with unlimited queue - (e.g. CPU comp nodes) - * mask ``0b100``: async for even one comp node - * "log_level": int - - * ``0``: no log info for graph construction/compiling - * ``1``: static memory allocation status, - WorkspaceLimitGetter summary, and optimizer summary - * ``2``: optimizer details and duplicated operators tha are - removed - * "graph_opt.jit": whether to enable JIT - * "graph_opt.tensorrt": whether to enable fine-grained automatic - replacement for TensorRT operators - * "graph_opt.android_nn": whether to enable fine-grained automatic - replacement for Android NN operators - * "graph_opt_level": int - - * ``0``: disable - * ``1``: level-1: inplace arith transformations during graph - construction - * ``2``: (default) level-2: level-1, plus global optimization - before graph compiling - * ``3``: also enable JIT - :param val: new option value - :return: old option value - """ - if name == "log_static_mem_alloc": - name = "log_level" - if name == "enable_async_exec": - name = "async_exec_level" - return _mgb._config.set_comp_graph_option(comp_graph, name, int(val)) - - -def comp_graph_is_eager(comp_graph): - return _mgb._config.comp_graph_is_eager(comp_graph) - - -def add_extra_vardep(var, dep): - """add *dep* as an extra dependency of *var*, so if *var* is required to - compute the final output when compiling a comp graph, *dep* would also be - included in the computing sequence. Note that the order computing of these - two vars is not guaranteed. - """ - assert isinstance(var, _mgb.SymbolVar) and isinstance(dep, _mgb.SymbolVar) - assert var.owner_graph == dep.owner_graph - return _mgb._config.add_extra_vardep(var, dep) - - -class _GraphPropertyBase: - """helper class for implementing operator property setter context managers""" - - _cur_graph = None - - _graph2stack = None - """class attribute that maintains mapping from graph to property stack; - should be defined by child classes""" - - __prop_setup__ = None - """overwritten by subclass to setup property""" - - __prop_clear__ = None - """overwritten by subclass to clear property""" - - def __init__(self, comp_graph, prop): - """:param comp_graph: computing graph, or None to not set this - property""" - if comp_graph is not None: - assert isinstance( - comp_graph, _mgb.CompGraph - ), "invalid comp graph: {!r}".format(comp_graph) - self._cur_graph = comp_graph - self._graph2stack.setdefault(comp_graph, []).append(prop) - - def __setup(self, prop): - self.__prop_setup__(self._cur_graph, prop) - - def __clear(self): - self.__prop_clear__(self._cur_graph) - - def __enter__(self): - if self._cur_graph is None: - return - - stack = self._graph2stack[self._cur_graph] - if len(stack) > 1: - # clear nested property - self.__clear() - self.__setup(stack[-1]) - - def __exit__(self, exc_type, exc_value, exc_traceback): - if self._cur_graph is None: - return - - stack = self._graph2stack[self._cur_graph] - self.__clear() - stack.pop() - if stack: - # restore nested property - self.__setup(stack[-1]) - else: - del self._graph2stack[self._cur_graph] - - -class exc_opr_tracker_scope(_GraphPropertyBase): - """context manager for associating an object with all operators created - within this context; so when an exception is raised, information about the - corresponding operator could be retrieved from - :attr:`.MegBrainError.tracker` - - :param comp_graph: the computing graph where the operators should be tracked - :type comp_graph: :class:`.CompGraph` - :param tracker: an arbitrary python object to track the operators - """ - - _graph2stack = {} - - def __init__(self, comp_graph, tracker): - assert ( - tracker is not None - ), "bad args for exc_opr_tracker_scope: {!r} {!r}".format(comp_graph, tracker) - super().__init__(comp_graph, tracker) - - __prop_setup__ = staticmethod(_mgb._config.begin_set_exc_opr_tracker) - __prop_clear__ = staticmethod(_mgb._config.end_set_exc_opr_tracker) - - -class opr_priority_scope(_GraphPropertyBase): - """context manager for setting priority for all operators created in this - context - - :param comp_graph: the computing graph for which operator priority should - be set - :type comp_graph: :class:`.CompGraph` - :param priority: operator priority. Smaller number means higher priority. - Default value is 0. Grad operator would use negative priority by - default. - """ - - _graph2stack = {} - - LOWEST_PRIORITY = 2 ** 31 - 1 - """lowest prority (i.e. max possible value)""" - - HIGHEST_PRIORITY = -LOWEST_PRIORITY - """highest prority (i.e. min possible value)""" - - def __init__(self, comp_graph, priority): - super().__init__(comp_graph, int(priority)) - - __prop_setup__ = staticmethod(_mgb._config.begin_set_opr_priority) - __prop_clear__ = staticmethod(_mgb._config.end_set_opr_priority) - - -OprTrackerResult = collections.namedtuple( - "OprTrackerResult", ["msg", "tracker", "grad_tracker"] -) - - -def get_opr_tracker(cg, var_id): - """get the tracking object associated with the owner operator of a var - - :param cg: the computing graph - :param var_id: id of the var whose owner opr tracker should be found - - :return: if no var is found, ``None`` is returned; otherwise return an - :class:`OprTrackerResult` object - """ - assert isinstance(cg, _mgb.CompGraph) - ret = _mgb._config.get_opr_tracker(cg, int(var_id)) - if ret is None: - return - return OprTrackerResult(*ret) - - -def set_opr_sublinear_memory_endpoint(var): - """set the owner operator of a symvar to be endpoint of sublinear memory - optimizer - - - :type var: :class:`.SymbolVar` - """ - _mgb._config.set_opr_sublinear_memory_endpoint(var) - - -def max_size_t(): - """get max value of size_t type on local architecture""" - return _mgb.max_size_t() - - -def is_cuda_ctx_set(): - """return whether current thread has an active cuda driver context""" - return _mgb._config.is_cuda_ctx_set() - - -def get_include_path(): - """get include path for building megbrain extensions""" - return os.path.join(os.path.realpath(os.path.dirname(__file__)), "include") - - -def get_cuda_gencode(only_cap=False): - """get -gencode options to be passed to nvcc for compiling on local - machine - - :param only_cap: if True, return only a list of cuda compute capability - strings (like ``['35', '52']`` ) - """ - ret = _mgb._config.get_cuda_gencode().split() - if not only_cap: - ret = " ".join(map("-gencode arch=compute_{0},code=sm_{0}".format, ret)) - return ret - - -def get_cuda_lib_path(): - """get the cuda lib64 path by locating nvcc - """ - return _mgb._config.get_cuda_lib_path() - - -def get_cuda_include_path(): - """get the cuda include path by locating nvcc, including - parent path and `parent path`/include - """ - return _mgb._config.get_cuda_include_path() - - -def get_cuda_version(): - """get runtime cuda version - """ - return _mgb._config.get_cuda_version() - - -def is_local_cuda_env_ok(): - """check whether local cuda environment ok by locating nvcc - """ - return _mgb._config.is_local_cuda_env_ok() - - -def is_compiled_with_cuda(): - """whether cuda is enabled at compile time""" - return _mgb._config.is_compiled_with_cuda() - - -def load_opr_library(path): - """Load an external operator library. This essentially sets megbrain - symbols as public and load the library. - - :param path: path to the shared object; if it is None, then only megbrain - symbols are made public. - """ - _mgb._config.load_opr_library( - os.path.realpath(os.path.join(os.path.dirname(__file__), "_mgb.so")), path - ) - - -def dump_registered_oprs(): - """ - get all registered oprs, return dict(id, name) - """ - return dict(_mgb._config.dump_registered_oprs()) - - -def create_mm_server(server_addr, port): - """ - create mm server with server address - throw exception if server_addr is already used - """ - return _mgb._config.create_mm_server(server_addr, port) - - -def group_barrier(server_addr, port, size, rank): - """ - block until all ranks reach this barrier - """ - return _mgb._config.group_barrier(server_addr, port, size, rank) diff --git a/python_module/megengine/_internal/craniotome.py b/python_module/megengine/_internal/craniotome.py deleted file mode 100644 index 3a1e6d50..00000000 --- a/python_module/megengine/_internal/craniotome.py +++ /dev/null @@ -1,432 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""used for creating a megbrain operator from python""" - -import copy -import itertools -from abc import ABCMeta, abstractmethod, abstractproperty - -from . import helper as _helper -from . import mgb as _mgb - - -class _CraniotomeBaseMeta(ABCMeta): - _base_created = False - - def __init__(cls, name, bases, member_dict): - if _CraniotomeBaseMeta._base_created: - assert "__init__" not in member_dict, ( - "Craniotome operators should not overwrite __init__ method; " - "use setup() instead." - ) - forbidden = set( - k for k in dir(CraniotomeBase) if k[0] == "_" and k[1] != "_" - ) - forbidden.add("get_io_vars") - check_key = member_dict.get("__check_key__", True) - whitelist = ["__classcell__"] - for k in member_dict.keys(): - assert k not in forbidden, "{} could not be overwritten".format(k) - if ( - check_key - and k.startswith("__") - and k.endswith("__") - and k not in whitelist - and not hasattr(CraniotomeBase, k) - ): - raise KeyError( - "name {} in class {} does not exist in the baseclass".format( - k, name - ) - ) - else: - _CraniotomeBaseMeta._base_created = True - super().__init__(name, bases, member_dict) - - -class CraniotomeBase(_mgb.CraniotomeDesc, metaclass=_CraniotomeBaseMeta): - """base class used for extending megbrain core operators in python - - Note: all names starting and ending with two underscores in the subclasses - would be checked and KeyError would be raised if the name does not exist in - the base class. This behavor can be disabled by setting ``__check_key__`` - to ``False`` (see the testcase for more details) - """ - - # methods and attributes to be overwritten by subclasses - - __expand_single_outputs__ = True - """if :attr:`__nr_outputs__` is 1, whether to return a single - :class:`.SymbolVar` instead of a tuple in :meth:`make`""" - - __is_dynamic_output_shape__ = False - """whether output shape could not be inferred from input shape. If value of - this attribute is ``False``, :meth:`infer_shape` must be implemented. If - this attribute is ``True`` but the operator has no inputs, then - :meth:`infer_shape` would also be called to infer output shape before - operator execution. - """ - - __disable_sys_mem_alloc__ = False - """whether to disable system memory allocator. This is used when - :attr:`__is_dynamic_output_shape__` is ``False`` but the output memory - should not be managed by megbrain system (so it can be forwarded from - external buffer)""" - - __allow_duplicate__ = True - """whether this operator can be duplicated (e.g. used in sublinear - memory)""" - - __allow_empty_out__ = False - """whether empty output shape is allowed; if it is set as ``False``, then - an exception would be raised if output var is empty to prevent erroneously - forgetting initializing output vars""" - - @abstractproperty - def __nr_inputs__(self): - """number of input vars""" - - @abstractproperty - def __nr_outputs__(self): - """number of output vars""" - - @abstractmethod - def execute(self, inputs, outputs): - """execute the operator, read values from *inputs* by calling - :meth:`.CompGraphCallbackValueProxy.get_value` and write results into - *outputs* by calling :meth:`.SharedND.set_value` - - :param inputs: values for each input var - :type inputs: tuple of :class:`.CompGraphCallbackValueProxy` - :param outputs: values for each output var - :type outputs: tuple of :class:`.SharedND` - """ - - def setup(self): - """overwritten by subclass to accept kwargs passed to :meth:`make` to - setup the operator""" - - def infer_shape(self, inp_shapes): - """infer output shape from input shapes - - :type inp_shapes: tuple of tuple of ints - :param inp_shapes: input shapes for each input var - :rtype: tuple of tuple of ints - :return: output shapes for each output var - """ - raise NotImplementedError( - "{}: infer_shape() not implemented; for operators with dynamic " - "output shape, __is_dynamic_output_shape__ should be set to True".format( - self - ) - ) - - def grad(self, wrt_idx, inputs, outputs, out_grad): - """compute symbolic gradient; should be overwritten by differentiable - subclasses - - :type wrt_idx: int - :param wrt_idx: the input var with respect to which the gradient should - be computed; please also see the notes below - :type inputs: tuple of :class:`.SymbolVar` - :param inputs: input symbol vars - :type outputs: tuple of :class:`.SymbolVar` - :param outputs: output symbol vars - :type out_grad: tuple of (:class:`.SymbolVar` or None) - :param out_grad: gradients of loss with respect to each output var - - .. note:: - - In case when loss does not depend on some var (i.e. zero grad), - the corresponding value in *out_grad* would be ``None``. It is - guaranteed that at least one element in *out_grad* is not - ``None``. - - .. note:: - - This function can return either of the following: - - 1. Gradient of the input specified by ``wrt_idx`` - 2. A list containing gradients of all inputs. In this case, - ``wrt_idx`` can be ignored. - - And the so called gradient can be either one of: - - 1. A :class:`.SymbolVar` representing the symbolic gradient - value - 2. ``0`` representing zero gradient - """ - raise NotImplementedError("grad for {} not implemented".format(self)) - - def init_output_dtype(self, input_dtypes): - """infer output dtypes from input dtypes; return None to use default - infer function in megbrain. - - .. note:: - This method must be implemented if there is no input var - - :param input_dtypes: input dtypes - :type input_dtypes: list of :class:`numpy.dtype` - :rtype: None or list of :class:`numpy.dtype`-compatible - """ - - def get_serialize_params(self): - """get params for megbrain graph serialization. This function should - return a list or tuple, containing one or two elements: the first - element must be a string, representing the name passed to - ``opr_loader_maker`` during deserializing; the second element, if - exists, must be convertible to ``bytes`` and is used for dumping any - extra opr params, which can be retrieved by ``load_buf_with_len`` - during deserializing. - """ - raise NotImplementedError( - "get_serialize_params() for {} not implemented".format(self) - ) - - def copy(self): - """copy this craniotome descriptor; the default implementation creates - a new object, and copies object ``__dict__``""" - ret = type(self)() - d0 = self.__dict__.copy() - d0.pop("this") - ret.__dict__.update(copy.deepcopy(d0)) - return ret - - def on_graph_compiled(self, used_outputs): - """a callback that would be invoked when the graph is compiled; it - would always have a matching :meth:`on_compiled_func_deleted` call - - :param used_outputs: indices of outputs that are needed for the - computation - :type used_outputs: ``tuple of int`` - """ - - def on_compiled_func_deleted(self): - """a callback that would be invoked when the compiled function is - destructed; it would always have a matching :meth:`on_graph_compiled` - call""" - - def get_io_vars(self): - """get input vars, comp order dep vars and output vars - - :return: a dict with keys ``'input'``, ``'output'`` and - ``'comp_order'`` that maps to corresponding list of vars - """ - all_vars = list(self._get_all_io_vars()) - nr_inp = self.__nr_inputs__ - nr_out = self.__nr_outputs__ - nr_comp_order = self._get_nr_dev_comp_order_deps() - s0 = nr_inp + nr_comp_order - return dict( - input=all_vars[:nr_inp], - comp_order=all_vars[nr_inp:s0], - output=all_vars[s0:], - ) - - @property - def owner_opr_id(self): - """ID of the operator that owns this descriptor""" - return self._get_opr_id() - - @property - def comp_node(self): - """comp node on which this operator runs""" - return self._get_comp_node() - - # below are methods that should not be changed - - def _hash(self): - return int(hash(self)) % (1 << 64) - - def _setup_self(self, dst): - dst.append(self) - - def _is_same(self, rhs): - return bool(self == rhs) - - def _node_flag(self): - return ( - (int(bool(self.__is_dynamic_output_shape__)) << 0) - | (int(not self.__allow_duplicate__) << 1) - | (int(bool(self.__allow_empty_out__)) << 2) - | (int(bool(self.__disable_sys_mem_alloc__)) << 3) - ) - - def _get_opr_type_name(self): - return str(self.__class__.__name__) - - def _get_nr_outputs(self): - return int(self.__nr_outputs__) - - def _execute(self, inputs, outputs): - inputs = tuple(inputs) - outputs = tuple(outputs) - if not self.__is_dynamic_output_shape__: - out_shapes = [i.shape for i in outputs] - self.execute(inputs, outputs) - if not self.__is_dynamic_output_shape__: - new_shapes = [i.shape for i in outputs] - assert ( - out_shapes == new_shapes - ), "output shape changed after executing {}: before={} after={}".format( - self, out_shapes, new_shapes - ) - - def _infer_shape(self, inp_shapes): - inp_shapes = tuple(tuple(map(int, i)) for i in inp_shapes) - oshp_get = self.infer_shape(inp_shapes) - assert ( - len(oshp_get) == self.__nr_outputs__ - ), "{}: expect {} outputs; got {}(val: {}) from infer_shape".format( - self, self.__nr_outputs__, len(oshp_get), oshp_get - ) - return _helper.cvt_to_vector_of_shape(oshp_get) - - def _grad(self, wrt_idx, inputs, outputs, out_grad): - og = [] - for i in out_grad: - if i.valid: - og.append(i) - else: - og.append(None) - rst = self.grad(int(wrt_idx), tuple(inputs), tuple(outputs), tuple(og)) - if not isinstance(rst, (list, tuple)): - rst = [rst] - else: - assert len(rst) == len( - inputs - ), "{}: opr has {} inputs but {} grads are returned".format( - self, len(inputs), len(rst) - ) - - for i in range(len(rst)): - cur = rst[i] - if cur is 0: - rst[i] = _mgb.SymbolVar() - else: - assert isinstance(cur, _mgb.SymbolVar), ( - "{}: invalid grad result; it should be either " - "0 or a SymbolVar, got {!r} instead".format(self, cur) - ) - return rst - - def _get_nr_dev_comp_order_deps(self): - return 0 - - def _init_output_dtype(self, input_dtypes, ret): - get = self.init_output_dtype(input_dtypes) - if get is not None: - assert isinstance(ret, (list, tuple)) and len(get) == len(ret) - ret[:] = get - return True - assert self.__nr_inputs__, ( - "{}: init_output_dtype must be implemented " - "if there is no input var".format(self) - ) - return False - - def _setup_serialize_params(self, output): - val = list(self.get_serialize_params()) - assert len(val) in [1, 2] - name = val[0] - assert isinstance(name, str) - output.append(name) - if len(val) == 2: - output.append(bytes(val[1])) - - def _copy(self): - ret = self.copy() - assert type(ret) is type( - self - ), "copy() returned different type: src={} copied={}".format( - type(self), type(ret) - ) - assert ret is not self - ret.__disown__() - self._set_copy_result(ret) - - def _on_graph_compile_or_func_del(self, used_outputs): - if used_outputs: - self.on_graph_compiled(used_outputs) - else: - self.on_compiled_func_deleted() - - def __repr__(self): - return "cranoiotome:{}".format(self.__class__.__name__) - - @classmethod - def make( - cls, - *inputs, - comp_graph=None, - name=None, - comp_node=None, - config=None, - dev_comp_order_deps=[], - **kwargs - ): - """apply this operator on some input vars and return corresponding - output vars - - :type inputs: tuple of :class:`.SymbolVar` - :param inputs: input symvars; immediate values could also be accepted, - as long as there is symvar to infer comp node and comp graph - :param comp_graph: if there is no input vars, *comp_graph* must be - provided to specify which computing graph to insert this operator - :param dev_comp_order_deps: vars that must have been computed - before executing this operator - :param kwargs: extra keyword arguments to be passed to :meth:`setup` of - this class - :param name: name of the resulting operator - :rtype: tuple of :class:`.SymbolVar` - :return: output symvars - """ - - if not inputs and not dev_comp_order_deps: - assert isinstance( - comp_graph, _mgb.CompGraph - ), "{}: comp_graph must be given if no inputs provided".format(self) - - desc = cls() - desc.setup(**kwargs) - assert ( - len(inputs) == desc.__nr_inputs__ - ), "{}: expected {} inputs, got {}".format( - desc, desc.__nr_inputs__, len(inputs) - ) - - config = _helper.gen_config(name, comp_node, config) - - # get inp_vec - inp_vec = _mgb._VectorSymbolVar() - for i in _helper.canonize_input_vars( - itertools.chain(inputs, dev_comp_order_deps), - comp_graph=comp_graph, - config=config, - ): - inp_vec.push_back(i) - desc._get_nr_dev_comp_order_deps = lambda *, val=len(dev_comp_order_deps): val - - if comp_graph is not None: - desc._get_comp_graph = lambda: comp_graph - expand_single_outputs = desc.__expand_single_outputs__ - desc.__disown__() - rst = _mgb.make_opr_from_craniotome_desc(desc, inp_vec, config) - if expand_single_outputs and len(rst) == 1: - return rst[0] - return tuple(rst) - - -def make_opr(cls): - """decorator used to wrap a :class:`.CraniotomeBase` subclass and return - its :meth:`~.CraniotomeBase.make` method - """ - assert issubclass(cls, CraniotomeBase) - return cls.make diff --git a/python_module/megengine/_internal/dtype.py b/python_module/megengine/_internal/dtype.py deleted file mode 100644 index 6bb32f86..00000000 --- a/python_module/megengine/_internal/dtype.py +++ /dev/null @@ -1,286 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import collections -from typing import Union - -import numpy as np - -from .mgb import bfloat16, intb1, intb2, intb4 - -_QuantDtypeMetadata = collections.namedtuple( - "QuantDtypeMetadata", ["name", "np_dtype_str", "is_unsigned", "qmin", "qmax",] -) - -_metadata_dict = { - "quint8": _QuantDtypeMetadata("Quantized8Asymm", "uint8", True, 0, 255), - "qint8": _QuantDtypeMetadata("QuantizedS8", "int8", False, -128, 127), - "quint4": _QuantDtypeMetadata("Quantized4Asymm", "uint8", True, 0, 15), - "qint4": _QuantDtypeMetadata("QuantizedS4", "int8", False, -8, 7), - "qint32": _QuantDtypeMetadata( - "QuantizedS32", "int32", False, -(2 ** 31), 2 ** 31 - 1, - ), - # NOTE: int2 is not supported for model dump yet - "quint2": _QuantDtypeMetadata(None, "uint8", True, 0, 3), - "qint2": _QuantDtypeMetadata(None, "int8", False, -2, 1), -} - - -def is_quantize(dtype): - return ( - hasattr(dtype, "metadata") - and dtype.metadata is not None - and "mgb_dtype" in dtype.metadata - ) - - -def is_lowbit(dtype): - return (dtype is intb1) or (dtype is intb2) or (dtype is intb4) - - -def is_bfloat16(dtype): - return dtype is bfloat16 - - -def get_scale(dtype): - assert is_quantize(dtype) - return dtype.metadata["mgb_dtype"]["scale"] - - -def get_zero_point(dtype): - assert is_quantize(dtype) - metadata = dtype.metadata["mgb_dtype"] - assert metadata["name"] in ("Quantized8Asymm", "Quantized4Asymm") - return metadata["zero_point"] - - -def _check_zero_point(zp: int, dtype_str: str): - qmin = _metadata_dict[dtype_str].qmin - qmax = _metadata_dict[dtype_str].qmax - if zp < qmin or zp > qmax: - raise ValueError( - "zero_point should be within [{}, {}] for {}".format(qmin, qmax, dtype_str) - ) - - -def get_quantized_dtype(dtype_str: str, scale: float, zp: Union[int, None]): - r""" - Get quantized dtype with metadata attribute according to _metadata_dict. - - Note that unsigned dtype must have ``zero_point`` and signed dtype must - not have ``zero_point``, to be consitent with tensor generated by calling - compiled function from `CompGraph.compile(inputs, outspec)`. - - :param dtype: a string indicating which dtype to return - :param scale: a number for scale to store in dtype's metadata - :param zp: a number for zero_point to store in dtype's metadata - """ - metadata = _metadata_dict[dtype_str] - np_dtype_str = metadata.np_dtype_str - is_unsigned = metadata.is_unsigned - if is_unsigned: - if zp is None or int(zp) != zp: - raise ValueError("zero_point should be an integer") - zp = int(zp) - _check_zero_point(zp, dtype_str) - return np.dtype( - np_dtype_str, - metadata={ - "mgb_dtype": { - "name": metadata.name, - "scale": float(scale), - "zero_point": zp, - } - }, - ) - else: - return np.dtype( - np_dtype_str, - metadata={"mgb_dtype": {"name": metadata.name, "scale": float(scale)}}, - ) - - -def quint8(scale, zero_point): - """ - Consturct a quantized unsigned int8 data type with ``scale`` (float) and - ``zero_point`` (uint8). The real value represented by a quint8 data type is - float_val = scale * (uint8_val - zero_point) - """ - return get_quantized_dtype("quint8", scale, zero_point) - - -def qint8(scale): - """ - Construct a quantized int8 data type with ``scale`` (float). The real value - represented by a qint8 data type is float_val = scale * int8_val - """ - return get_quantized_dtype("qint8", scale, None) - - -def qint32(scale): - """ - Construct a quantized int32 data type with ``scale`` (float). The real value - represented by a qint32 data type is float_val = scale * int32_val - """ - return get_quantized_dtype("qint32", scale, None) - - -def quint4(scale, zero_point): - """ - Consturct a quantized unsigned int4 data type with ``scale`` (float) and - ``zero_point`` (uint8). The real value represented by a quint4 data type is - float_val = scale * (uint4_val - zero_point) - """ - return get_quantized_dtype("quint4", scale, zero_point) - - -def qint4(scale): - """ - Construct a quantized int4 data type with ``scale`` (float). The real value - represented by a qint4 data type is float_val = scale * int4_val - """ - return get_quantized_dtype("qint4", scale, None) - - -def _convert_to_quantized_dtype(arr: np.ndarray, dtype: np.dtype, dtype_str: str): - metadata = _metadata_dict[dtype_str] - arr_metadata = dtype.metadata["mgb_dtype"] - if not isinstance(arr, np.ndarray): - raise ValueError("arr parameter should be instance of np.ndarray") - if not is_quantize(dtype) or arr_metadata["name"] != metadata.name: - raise ValueError("dtype parameter should be a {} dtype".format(dtype_str)) - is_unsigned = metadata.is_unsigned - if is_unsigned: - scale, zp = ( - arr_metadata["scale"], - arr_metadata["zero_point"], - ) - return ( - (np.round(arr / scale) + zp) - .clip(metadata.qmin, metadata.qmax) - .astype(dtype) - ) - else: - # don't trick to combine with is_unsigned, seeing ``get_quantized_dtype`` - scale = arr_metadata["scale"] - return np.round(arr / scale).clip(metadata.qmin, metadata.qmax).astype(dtype) - - -def _convert_from_quantized_dtype(arr: np.ndarray, dtype_str: str): - metadata = _metadata_dict[dtype_str] - arr_metadata = arr.dtype.metadata["mgb_dtype"] - if not isinstance(arr, np.ndarray): - raise ValueError("arr parameter should be instance of np.ndarray") - if not is_quantize(arr.dtype) or arr_metadata["name"] != metadata.name: - raise ValueError("arr's dtype should be a {} dtype".format(dtype_str)) - is_unsigned = metadata.is_unsigned - if is_unsigned: - scale, zp = ( - arr_metadata["scale"], - arr_metadata["zero_point"], - ) - return (arr.astype(np.float32) - zp) * scale - else: - # don't trick to combine with is_unsigned, seeing ``get_quantized_dtype`` - scale = arr_metadata["scale"] - return (arr.astype(np.float32)) * scale - - -def convert_to_quint8(arr: np.ndarray, q: np.dtype): - """ - Quantize a float NumPy ndarray into a quint8 one with specified params. - - :param arr: Input ndarray. - :param q: Target data type, should be a quint8. - """ - return _convert_to_quantized_dtype(arr, q, "quint8") - - -def convert_from_quint8(arr: np.ndarray): - """ - Dequantize a quint8 NumPy ndarray into a float one. - - :param arr: Input ndarray. - """ - return _convert_from_quantized_dtype(arr, "quint8") - - -def convert_to_qint8(arr: np.ndarray, q: np.dtype): - """ - Quantize a float NumPy ndarray into a qint8 one with specified params. - - :param arr: Input ndarray. - :param q: Target data type, should be a qint8. - """ - return _convert_to_quantized_dtype(arr, q, "qint8") - - -def convert_from_qint8(arr: np.ndarray): - """ - Dequantize a qint8 NumPy ndarray into a float one. - - :param arr: Input ndarray. - """ - return _convert_from_quantized_dtype(arr, "qint8") - - -def convert_to_qint32(arr: np.ndarray, q: np.dtype): - """ - Quantize a float NumPy ndarray into a qint32 one with specified params. - - :param arr: Input ndarray. - :param q: Target data type, should be a qint8. - """ - return _convert_to_quantized_dtype(arr, q, "qint32") - - -def convert_from_qint32(arr): - """ - Dequantize a qint32 NumPy ndarray into a float one. - - :param arr: Input ndarray. - """ - return _convert_from_quantized_dtype(arr, "qint32") - - -def convert_to_quint4(arr: np.ndarray, q: np.dtype): - """ - Quantize a float NumPy ndarray into a quint4 one with specified params. - - :param arr: Input ndarray. - :param q: Target data type, should be a quint4. - """ - return _convert_to_quantized_dtype(arr, q, "quint4") - - -def convert_from_quint4(arr: np.ndarray): - """ - Dequantize a quint4 NumPy ndarray into a float one. - - :param arr: Input ndarray. - """ - return _convert_from_quantized_dtype(arr, "quint4") - - -def convert_to_qint4(arr: np.ndarray, q: np.dtype): - """ - Quantize a float NumPy ndarray into a qint4 one with specified params. - - :param arr: Input ndarray. - :param q: Target data type, should be a qint4. - """ - return _convert_to_quantized_dtype(arr, q, "qint4") - - -def convert_from_qint4(arr: np.ndarray): - """ - Dequantize a qint4 NumPy ndarray into a float one. - - :param arr: Input ndarray. - """ - return _convert_from_quantized_dtype(arr, "qint4") diff --git a/python_module/megengine/_internal/enum36.py b/python_module/megengine/_internal/enum36.py deleted file mode 100644 index 929eecf7..00000000 --- a/python_module/megengine/_internal/enum36.py +++ /dev/null @@ -1,947 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright [2001] [Cython] -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# --------------------------------------------------------------------- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# -# This file has been modified by Megvii ("Megvii Modifications"). -# All Megvii Modifications are Copyright (C) 2014-2020 Megvii Inc. All rights reserved. -# ---------------------------------------------------------------------- - -import sys -from functools import reduce -from operator import or_ as _or_ -from types import DynamicClassAttribute, MappingProxyType - -# try _collections first to reduce startup cost -try: - from _collections import OrderedDict -except ImportError: - from collections import OrderedDict - - -__all__ = [ - "EnumMeta", - "Enum", - "IntEnum", - "Flag", - "IntFlag", - "auto", - "unique", -] - - -def _is_descriptor(obj): - """Returns True if obj is a descriptor, False otherwise.""" - return ( - hasattr(obj, "__get__") or hasattr(obj, "__set__") or hasattr(obj, "__delete__") - ) - - -def _is_dunder(name): - """Returns True if a __dunder__ name, False otherwise.""" - return ( - name[:2] == name[-2:] == "__" - and name[2:3] != "_" - and name[-3:-2] != "_" - and len(name) > 4 - ) - - -def _is_sunder(name): - """Returns True if a _sunder_ name, False otherwise.""" - return ( - name[0] == name[-1] == "_" - and name[1:2] != "_" - and name[-2:-1] != "_" - and len(name) > 2 - ) - - -def _make_class_unpicklable(cls): - """Make the given class un-picklable.""" - - def _break_on_call_reduce(self, proto): - raise TypeError("%r cannot be pickled" % self) - - cls.__reduce_ex__ = _break_on_call_reduce - cls.__module__ = "" - - -_auto_null = object() - - -class auto: - """ - Instances are replaced with an appropriate value in Enum class suites. - """ - - value = _auto_null - - -class _EnumDict(dict): - """Track enum member order and ensure member names are not reused. - - EnumMeta will use the names found in self._member_names as the - enumeration member names. - - """ - - def __init__(self): - super().__init__() - self._member_names = [] - self._last_values = [] - - def __setitem__(self, key, value): - """Changes anything not dundered or not a descriptor. - - If an enum member name is used twice, an error is raised; duplicate - values are not checked for. - - Single underscore (sunder) names are reserved. - - """ - if _is_sunder(key): - if key not in ( - "_order_", - "_create_pseudo_member_", - "_generate_next_value_", - "_missing_", - ): - raise ValueError("_names_ are reserved for future Enum use") - if key == "_generate_next_value_": - setattr(self, "_generate_next_value", value) - elif _is_dunder(key): - if key == "__order__": - key = "_order_" - elif key in self._member_names: - # descriptor overwriting an enum? - raise TypeError("Attempted to reuse key: %r" % key) - elif not _is_descriptor(value): - if key in self: - # enum overwriting a descriptor? - raise TypeError("%r already defined as: %r" % (key, self[key])) - if isinstance(value, auto): - if value.value == _auto_null: - value.value = self._generate_next_value( - key, 1, len(self._member_names), self._last_values[:] - ) - value = value.value - self._member_names.append(key) - self._last_values.append(value) - super().__setitem__(key, value) - - -# Dummy value for Enum as EnumMeta explicitly checks for it, but of course -# until EnumMeta finishes running the first time the Enum class doesn't exist. -# This is also why there are checks in EnumMeta like `if Enum is not None` -Enum = None - - -class EnumMeta(type): - """Metaclass for Enum""" - - @classmethod - def __prepare__(metacls, cls, bases): - # create the namespace dict - enum_dict = _EnumDict() - # inherit previous flags and _generate_next_value_ function - member_type, first_enum = metacls._get_mixins_(bases) - if first_enum is not None: - enum_dict["_generate_next_value_"] = getattr( - first_enum, "_generate_next_value_", None - ) - return enum_dict - - def __new__(metacls, cls, bases, classdict): - # an Enum class is final once enumeration items have been defined; it - # cannot be mixed with other types (int, float, etc.) if it has an - # inherited __new__ unless a new __new__ is defined (or the resulting - # class will fail). - member_type, first_enum = metacls._get_mixins_(bases) - __new__, save_new, use_args = metacls._find_new_( - classdict, member_type, first_enum - ) - - # save enum items into separate mapping so they don't get baked into - # the new class - enum_members = {k: classdict[k] for k in classdict._member_names} - for name in classdict._member_names: - del classdict[name] - - # adjust the sunders - _order_ = classdict.pop("_order_", None) - - # check for illegal enum names (any others?) - invalid_names = set(enum_members) & { - "mro", - } - if invalid_names: - raise ValueError( - "Invalid enum member name: {0}".format(",".join(invalid_names)) - ) - - # create a default docstring if one has not been provided - if "__doc__" not in classdict: - classdict["__doc__"] = "An enumeration." - - # create our new Enum type - enum_class = super().__new__(metacls, cls, bases, classdict) - enum_class._member_names_ = [] # names in definition order - enum_class._member_map_ = OrderedDict() # name->value map - enum_class._member_type_ = member_type - - # save attributes from super classes so we know if we can take - # the shortcut of storing members in the class dict - base_attributes = {a for b in enum_class.mro() for a in b.__dict__} - - # Reverse value->name map for hashable values. - enum_class._value2member_map_ = {} - - # If a custom type is mixed into the Enum, and it does not know how - # to pickle itself, pickle.dumps will succeed but pickle.loads will - # fail. Rather than have the error show up later and possibly far - # from the source, sabotage the pickle protocol for this class so - # that pickle.dumps also fails. - # - # However, if the new class implements its own __reduce_ex__, do not - # sabotage -- it's on them to make sure it works correctly. We use - # __reduce_ex__ instead of any of the others as it is preferred by - # pickle over __reduce__, and it handles all pickle protocols. - if "__reduce_ex__" not in classdict: - if member_type is not object: - methods = ( - "__getnewargs_ex__", - "__getnewargs__", - "__reduce_ex__", - "__reduce__", - ) - if not any(m in member_type.__dict__ for m in methods): - _make_class_unpicklable(enum_class) - - # instantiate them, checking for duplicates as we go - # we instantiate first instead of checking for duplicates first in case - # a custom __new__ is doing something funky with the values -- such as - # auto-numbering ;) - for member_name in classdict._member_names: - value = enum_members[member_name] - if not isinstance(value, tuple): - args = (value,) - else: - args = value - if member_type is tuple: # special case for tuple enums - args = (args,) # wrap it one more time - if not use_args: - enum_member = __new__(enum_class) - if not hasattr(enum_member, "_value_"): - enum_member._value_ = value - else: - enum_member = __new__(enum_class, *args) - if not hasattr(enum_member, "_value_"): - if member_type is object: - enum_member._value_ = value - else: - enum_member._value_ = member_type(*args) - value = enum_member._value_ - enum_member._name_ = member_name - enum_member.__objclass__ = enum_class - enum_member.__init__(*args) - # If another member with the same value was already defined, the - # new member becomes an alias to the existing one. - for name, canonical_member in enum_class._member_map_.items(): - if canonical_member._value_ == enum_member._value_: - enum_member = canonical_member - break - else: - # Aliases don't appear in member names (only in __members__). - enum_class._member_names_.append(member_name) - # performance boost for any member that would not shadow - # a DynamicClassAttribute - if member_name not in base_attributes: - setattr(enum_class, member_name, enum_member) - # now add to _member_map_ - enum_class._member_map_[member_name] = enum_member - try: - # This may fail if value is not hashable. We can't add the value - # to the map, and by-value lookups for this value will be - # linear. - enum_class._value2member_map_[value] = enum_member - except TypeError: - pass - - # double check that repr and friends are not the mixin's or various - # things break (such as pickle) - for name in ("__repr__", "__str__", "__format__", "__reduce_ex__"): - class_method = getattr(enum_class, name) - obj_method = getattr(member_type, name, None) - enum_method = getattr(first_enum, name, None) - if obj_method is not None and obj_method is class_method: - setattr(enum_class, name, enum_method) - - # replace any other __new__ with our own (as long as Enum is not None, - # anyway) -- again, this is to support pickle - if Enum is not None: - # if the user defined their own __new__, save it before it gets - # clobbered in case they subclass later - if save_new: - enum_class.__new_member__ = __new__ - enum_class.__new__ = Enum.__new__ - - # py3 support for definition order (helps keep py2/py3 code in sync) - if _order_ is not None: - if isinstance(_order_, str): - _order_ = _order_.replace(",", " ").split() - if _order_ != enum_class._member_names_: - raise TypeError("member order does not match _order_") - - return enum_class - - def __bool__(self): - """ - classes/types should always be True. - """ - return True - - def __call__( - cls, value, names=None, *, module=None, qualname=None, type=None, start=1 - ): - """Either returns an existing member, or creates a new enum class. - - This method is used both when an enum class is given a value to match - to an enumeration member (i.e. Color(3)) and for the functional API - (i.e. Color = Enum('Color', names='RED GREEN BLUE')). - - When used for the functional API: - - `value` will be the name of the new class. - - `names` should be either a string of white-space/comma delimited names - (values will start at `start`), or an iterator/mapping of name, value pairs. - - `module` should be set to the module this class is being created in; - if it is not set, an attempt to find that module will be made, but if - it fails the class will not be picklable. - - `qualname` should be set to the actual location this class can be found - at in its module; by default it is set to the global scope. If this is - not correct, unpickling will fail in some circumstances. - - `type`, if set, will be mixed in as the first base class. - - """ - if names is None: # simple value lookup - return cls.__new__(cls, value) - # otherwise, functional API: we're creating a new Enum type - return cls._create_( - value, names, module=module, qualname=qualname, type=type, start=start - ) - - def __contains__(cls, member): - return isinstance(member, cls) and member._name_ in cls._member_map_ - - def __delattr__(cls, attr): - # nicer error message when someone tries to delete an attribute - # (see issue19025). - if attr in cls._member_map_: - raise AttributeError("%s: cannot delete Enum member." % cls.__name__) - super().__delattr__(attr) - - def __dir__(self): - return [ - "__class__", - "__doc__", - "__members__", - "__module__", - ] + self._member_names_ - - def __getattr__(cls, name): - """Return the enum member matching `name` - - We use __getattr__ instead of descriptors or inserting into the enum - class' __dict__ in order to support `name` and `value` being both - properties for enum members (which live in the class' __dict__) and - enum members themselves. - - """ - if _is_dunder(name): - raise AttributeError(name) - try: - return cls._member_map_[name] - except KeyError: - raise AttributeError(name) from None - - def __getitem__(cls, name): - return cls._member_map_[name] - - def __iter__(cls): - return (cls._member_map_[name] for name in cls._member_names_) - - def __len__(cls): - return len(cls._member_names_) - - @property - def __members__(cls): - """Returns a mapping of member name->value. - - This mapping lists all enum members, including aliases. Note that this - is a read-only view of the internal mapping. - - """ - return MappingProxyType(cls._member_map_) - - def __repr__(cls): - return "" % cls.__name__ - - def __reversed__(cls): - return (cls._member_map_[name] for name in reversed(cls._member_names_)) - - def __setattr__(cls, name, value): - """Block attempts to reassign Enum members. - - A simple assignment to the class namespace only changes one of the - several possible ways to get an Enum member from the Enum class, - resulting in an inconsistent Enumeration. - - """ - member_map = cls.__dict__.get("_member_map_", {}) - if name in member_map: - raise AttributeError("Cannot reassign members.") - super().__setattr__(name, value) - - def _create_( - cls, class_name, names=None, *, module=None, qualname=None, type=None, start=1 - ): - """Convenience method to create a new Enum class. - - `names` can be: - - * A string containing member names, separated either with spaces or - commas. Values are incremented by 1 from `start`. - * An iterable of member names. Values are incremented by 1 from `start`. - * An iterable of (member name, value) pairs. - * A mapping of member name -> value pairs. - - """ - metacls = cls.__class__ - bases = (cls,) if type is None else (type, cls) - _, first_enum = cls._get_mixins_(bases) - classdict = metacls.__prepare__(class_name, bases) - - # special processing needed for names? - if isinstance(names, str): - names = names.replace(",", " ").split() - if isinstance(names, (tuple, list)) and names and isinstance(names[0], str): - original_names, names = names, [] - last_values = [] - for count, name in enumerate(original_names): - value = first_enum._generate_next_value_( - name, start, count, last_values[:] - ) - last_values.append(value) - names.append((name, value)) - - # Here, names is either an iterable of (name, value) or a mapping. - for item in names: - if isinstance(item, str): - member_name, member_value = item, names[item] - else: - member_name, member_value = item - classdict[member_name] = member_value - enum_class = metacls.__new__(metacls, class_name, bases, classdict) - - # TODO: replace the frame hack if a blessed way to know the calling - # module is ever developed - if module is None: - try: - module = sys._getframe(2).f_globals["__name__"] - except (AttributeError, ValueError) as exc: - pass - if module is None: - _make_class_unpicklable(enum_class) - else: - enum_class.__module__ = module - if qualname is not None: - enum_class.__qualname__ = qualname - - return enum_class - - @staticmethod - def _get_mixins_(bases): - """Returns the type for creating enum members, and the first inherited - enum class. - - bases: the tuple of bases that was given to __new__ - - """ - if not bases: - return object, Enum - - # double check that we are not subclassing a class with existing - # enumeration members; while we're at it, see if any other data - # type has been mixed in so we can use the correct __new__ - member_type = first_enum = None - for base in bases: - if base is not Enum and issubclass(base, Enum) and base._member_names_: - raise TypeError("Cannot extend enumerations") - # base is now the last base in bases - if not issubclass(base, Enum): - raise TypeError( - "new enumerations must be created as " - "`ClassName([mixin_type,] enum_type)`" - ) - - # get correct mix-in type (either mix-in type of Enum subclass, or - # first base if last base is Enum) - if not issubclass(bases[0], Enum): - member_type = bases[0] # first data type - first_enum = bases[-1] # enum type - else: - for base in bases[0].__mro__: - # most common: (IntEnum, int, Enum, object) - # possible: (, , - # , , - # ) - if issubclass(base, Enum): - if first_enum is None: - first_enum = base - else: - if member_type is None: - member_type = base - - return member_type, first_enum - - @staticmethod - def _find_new_(classdict, member_type, first_enum): - """Returns the __new__ to be used for creating the enum members. - - classdict: the class dictionary given to __new__ - member_type: the data type whose __new__ will be used by default - first_enum: enumeration to check for an overriding __new__ - - """ - # now find the correct __new__, checking to see of one was defined - # by the user; also check earlier enum classes in case a __new__ was - # saved as __new_member__ - __new__ = classdict.get("__new__", None) - - # should __new__ be saved as __new_member__ later? - save_new = __new__ is not None - - if __new__ is None: - # check all possibles for __new_member__ before falling back to - # __new__ - for method in ("__new_member__", "__new__"): - for possible in (member_type, first_enum): - target = getattr(possible, method, None) - if target not in { - None, - None.__new__, - object.__new__, - Enum.__new__, - }: - __new__ = target - break - if __new__ is not None: - break - else: - __new__ = object.__new__ - - # if a non-object.__new__ is used then whatever value/tuple was - # assigned to the enum member name will be passed to __new__ and to the - # new enum member's __init__ - if __new__ is object.__new__: - use_args = False - else: - use_args = True - - return __new__, save_new, use_args - - -class Enum(metaclass=EnumMeta): - """Generic enumeration. - - Derive from this class to define new enumerations. - - """ - - def __new__(cls, value): - # all enum instances are actually created during class construction - # without calling this method; this method is called by the metaclass' - # __call__ (i.e. Color(3) ), and by pickle - if type(value) is cls: - # For lookups like Color(Color.RED) - return value - # by-value search for a matching enum member - # see if it's in the reverse mapping (for hashable values) - try: - if value in cls._value2member_map_: - return cls._value2member_map_[value] - except TypeError: - # not there, now do long search -- O(n) behavior - for member in cls._member_map_.values(): - if member._value_ == value: - return member - # still not found -- try _missing_ hook - return cls._missing_(value) - - def _generate_next_value_(name, start, count, last_values): - for last_value in reversed(last_values): - try: - return last_value + 1 - except TypeError: - pass - else: - return start - - @classmethod - def _missing_(cls, value): - raise ValueError("%r is not a valid %s" % (value, cls.__name__)) - - def __repr__(self): - return "<%s.%s: %r>" % (self.__class__.__name__, self._name_, self._value_) - - def __str__(self): - return "%s.%s" % (self.__class__.__name__, self._name_) - - def __dir__(self): - added_behavior = [ - m - for cls in self.__class__.mro() - for m in cls.__dict__ - if m[0] != "_" and m not in self._member_map_ - ] - return ["__class__", "__doc__", "__module__"] + added_behavior - - def __format__(self, format_spec): - # mixed-in Enums should use the mixed-in type's __format__, otherwise - # we can get strange results with the Enum name showing up instead of - # the value - - # pure Enum branch - if self._member_type_ is object: - cls = str - val = str(self) - # mix-in branch - else: - cls = self._member_type_ - val = self._value_ - return cls.__format__(val, format_spec) - - def __hash__(self): - return hash(self._name_) - - def __reduce_ex__(self, proto): - return self.__class__, (self._value_,) - - # DynamicClassAttribute is used to provide access to the `name` and - # `value` properties of enum members while keeping some measure of - # protection from modification, while still allowing for an enumeration - # to have members named `name` and `value`. This works because enumeration - # members are not set directly on the enum class -- __getattr__ is - # used to look them up. - - @DynamicClassAttribute - def name(self): - """The name of the Enum member.""" - return self._name_ - - @DynamicClassAttribute - def value(self): - """The value of the Enum member.""" - return self._value_ - - @classmethod - def _convert(cls, name, module, filter, source=None): - """ - Create a new Enum subclass that replaces a collection of global constants - """ - # convert all constants from source (or module) that pass filter() to - # a new Enum called name, and export the enum and its members back to - # module; - # also, replace the __reduce_ex__ method so unpickling works in - # previous Python versions - module_globals = vars(sys.modules[module]) - if source: - source = vars(source) - else: - source = module_globals - # We use an OrderedDict of sorted source keys so that the - # _value2member_map is populated in the same order every time - # for a consistent reverse mapping of number to name when there - # are multiple names for the same number rather than varying - # between runs due to hash randomization of the module dictionary. - members = [(name, source[name]) for name in source.keys() if filter(name)] - try: - # sort by value - members.sort(key=lambda t: (t[1], t[0])) - except TypeError: - # unless some values aren't comparable, in which case sort by name - members.sort(key=lambda t: t[0]) - cls = cls(name, members, module=module) - cls.__reduce_ex__ = _reduce_ex_by_name - module_globals.update(cls.__members__) - module_globals[name] = cls - return cls - - -class IntEnum(int, Enum): - """Enum where members are also (and must be) ints""" - - -def _reduce_ex_by_name(self, proto): - return self.name - - -class Flag(Enum): - """Support for flags""" - - def _generate_next_value_(name, start, count, last_values): - """ - Generate the next value when not given. - - name: the name of the member - start: the initital start value or None - count: the number of existing members - last_value: the last value assigned or None - """ - if not count: - return start if start is not None else 1 - for last_value in reversed(last_values): - try: - high_bit = _high_bit(last_value) - break - except Exception: - raise TypeError("Invalid Flag value: %r" % last_value) from None - return 2 ** (high_bit + 1) - - @classmethod - def _missing_(cls, value): - original_value = value - if value < 0: - value = ~value - possible_member = cls._create_pseudo_member_(value) - if original_value < 0: - possible_member = ~possible_member - return possible_member - - @classmethod - def _create_pseudo_member_(cls, value): - """ - Create a composite member iff value contains only members. - """ - pseudo_member = cls._value2member_map_.get(value, None) - if pseudo_member is None: - # verify all bits are accounted for - _, extra_flags = _decompose(cls, value) - if extra_flags: - raise ValueError("%r is not a valid %s" % (value, cls.__name__)) - # construct a singleton enum pseudo-member - pseudo_member = object.__new__(cls) - pseudo_member._name_ = None - pseudo_member._value_ = value - # use setdefault in case another thread already created a composite - # with this value - pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) - return pseudo_member - - def __contains__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return other._value_ & self._value_ == other._value_ - - def __repr__(self): - cls = self.__class__ - if self._name_ is not None: - return "<%s.%s: %r>" % (cls.__name__, self._name_, self._value_) - members, uncovered = _decompose(cls, self._value_) - return "<%s.%s: %r>" % ( - cls.__name__, - "|".join([str(m._name_ or m._value_) for m in members]), - self._value_, - ) - - def __str__(self): - cls = self.__class__ - if self._name_ is not None: - return "%s.%s" % (cls.__name__, self._name_) - members, uncovered = _decompose(cls, self._value_) - if len(members) == 1 and members[0]._name_ is None: - return "%s.%r" % (cls.__name__, members[0]._value_) - else: - return "%s.%s" % ( - cls.__name__, - "|".join([str(m._name_ or m._value_) for m in members]), - ) - - def __bool__(self): - return bool(self._value_) - - def __or__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return self.__class__(self._value_ | other._value_) - - def __and__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return self.__class__(self._value_ & other._value_) - - def __xor__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return self.__class__(self._value_ ^ other._value_) - - def __invert__(self): - members, uncovered = _decompose(self.__class__, self._value_) - inverted_members = [ - m - for m in self.__class__ - if m not in members and not m._value_ & self._value_ - ] - inverted = reduce(_or_, inverted_members, self.__class__(0)) - return self.__class__(inverted) - - -class IntFlag(int, Flag): - """Support for integer-based Flags""" - - @classmethod - def _missing_(cls, value): - if not isinstance(value, int): - raise ValueError("%r is not a valid %s" % (value, cls.__name__)) - new_member = cls._create_pseudo_member_(value) - return new_member - - @classmethod - def _create_pseudo_member_(cls, value): - pseudo_member = cls._value2member_map_.get(value, None) - if pseudo_member is None: - need_to_create = [value] - # get unaccounted for bits - _, extra_flags = _decompose(cls, value) - # timer = 10 - while extra_flags: - # timer -= 1 - bit = _high_bit(extra_flags) - flag_value = 2 ** bit - if ( - flag_value not in cls._value2member_map_ - and flag_value not in need_to_create - ): - need_to_create.append(flag_value) - if extra_flags == -flag_value: - extra_flags = 0 - else: - extra_flags ^= flag_value - for value in reversed(need_to_create): - # construct singleton pseudo-members - pseudo_member = int.__new__(cls, value) - pseudo_member._name_ = None - pseudo_member._value_ = value - # use setdefault in case another thread already created a composite - # with this value - pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) - return pseudo_member - - def __or__(self, other): - if not isinstance(other, (self.__class__, int)): - return NotImplemented - result = self.__class__(self._value_ | self.__class__(other)._value_) - return result - - def __and__(self, other): - if not isinstance(other, (self.__class__, int)): - return NotImplemented - return self.__class__(self._value_ & self.__class__(other)._value_) - - def __xor__(self, other): - if not isinstance(other, (self.__class__, int)): - return NotImplemented - return self.__class__(self._value_ ^ self.__class__(other)._value_) - - __ror__ = __or__ - __rand__ = __and__ - __rxor__ = __xor__ - - def __invert__(self): - result = self.__class__(~self._value_) - return result - - -def _high_bit(value): - """returns index of highest bit, or -1 if value is zero or negative""" - return value.bit_length() - 1 - - -def unique(enumeration): - """Class decorator for enumerations ensuring unique member values.""" - duplicates = [] - for name, member in enumeration.__members__.items(): - if name != member.name: - duplicates.append((name, member.name)) - if duplicates: - alias_details = ", ".join( - ["%s -> %s" % (alias, name) for (alias, name) in duplicates] - ) - raise ValueError( - "duplicate values found in %r: %s" % (enumeration, alias_details) - ) - return enumeration - - -def _decompose(flag, value): - """Extract all members from the value.""" - # _decompose is only called if the value is not named - not_covered = value - negative = value < 0 - # issue29167: wrap accesses to _value2member_map_ in a list to avoid race - # conditions between iterating over it and having more psuedo- - # members added to it - if negative: - # only check for named flags - flags_to_check = [ - (m, v) - for v, m in list(flag._value2member_map_.items()) - if m.name is not None - ] - else: - # check for named flags and powers-of-two flags - flags_to_check = [ - (m, v) - for v, m in list(flag._value2member_map_.items()) - if m.name is not None or _power_of_two(v) - ] - members = [] - for member, member_value in flags_to_check: - if member_value and member_value & value == member_value: - members.append(member) - not_covered &= ~member_value - if not members and value in flag._value2member_map_: - members.append(flag._value2member_map_[value]) - members.sort(key=lambda m: m._value_, reverse=True) - if len(members) > 1 and members[0].value == value: - # we have the breakdown, don't need the value member itself - members.pop(0) - return members, not_covered - - -def _power_of_two(value): - if value < 1: - return False - return value == 2 ** _high_bit(value) diff --git a/python_module/megengine/_internal/exc.py b/python_module/megengine/_internal/exc.py deleted file mode 100644 index 954756b1..00000000 --- a/python_module/megengine/_internal/exc.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""exception handling""" - -from . import mgb as _mgb - - -class MegBrainError(Exception): - """exception class used by megbrain library""" - - tracker = None - """the tracker setup by :func:`.set_exc_opr_tracker` when the related - operator is created""" - - tracker_grad_orig = None - """if this operator is created by taking gradient, this var would be the - tracker of the operator that causes the grad.""" - - def __init__(self, msg, tracker, tracker_grad_orig): - assert isinstance(msg, str) - super().__init__(msg, tracker, tracker_grad_orig) - self.tracker = tracker - self.tracker_grad_orig = tracker_grad_orig - - @classmethod - def _format_tracker(cls, tracker): - return ("| " + i for i in str(tracker).split("\n")) - - def __str__(self): - lines = [] - lines.extend(self.args[0].split("\n")) - if self.tracker is not None: - lines.append("Exception tracker:") - lines.extend(self._format_tracker(self.tracker)) - if self.tracker_grad_orig is not None: - lines.append( - "Exception caused by taking grad of another operator with tracker:" - ) - lines.extend(self._format_tracker(self.tracker_grad_orig)) - while not lines[-1].strip(): - lines.pop() - for idx, ct in enumerate(lines): - if ct.startswith("bt:"): - lines[idx] = "+ " + lines[idx] - for t in range(idx + 1, len(lines)): - lines[t] = "| " + lines[t] - break - return "\n".join(lines) - - -_mgb._reg_exception_class(MegBrainError) diff --git a/python_module/megengine/_internal/global_init.py b/python_module/megengine/_internal/global_init.py deleted file mode 100644 index 1b4fff87..00000000 --- a/python_module/megengine/_internal/global_init.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""global initialization work; classes/functions defined in this module should -not be used by user code""" - -import atexit -import os -import sys -import traceback - -from . import mgb -from .logconf import get_logger -from .persistent_cache import PersistentCacheOnServer - - -class PyStackExtracterImpl(mgb._PyStackExtracter): - def extract(self): - return "".join(traceback.format_stack()[:-1]) - - -mgb._register_logger(get_logger()) -assert sys.executable -mgb._timed_func_set_fork_exec_path( - sys.executable, - os.path.join(os.path.dirname(__file__), "_timed_func_fork_exec_entry.py"), -) - -persistent_cache_impl_ins = PersistentCacheOnServer() -mgb._PersistentCache.reg(persistent_cache_impl_ins) - -PyStackExtracterImplIns = PyStackExtracterImpl() -PyStackExtracterImpl.reg(PyStackExtracterImplIns) - -atexit.register(mgb._mgb_global_finalize) diff --git a/python_module/megengine/_internal/helper.py b/python_module/megengine/_internal/helper.py deleted file mode 100644 index 8fbb974f..00000000 --- a/python_module/megengine/_internal/helper.py +++ /dev/null @@ -1,316 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import collections - -import numpy as np - -from . import mgb -from .exc import MegBrainError -from .mgb import SharedND, SymbolVar -from .opr_param_defs import OptionalAxisV1 - - -def canonize_reshape(inputs, *, comp_graph, config): - src, tshape = inputs - tshape = cvt_to_shape_desc(tshape, src, comp_graph, config) - return src, tshape - - -def canonize_shape_input(inputs, *, comp_graph, config): - assert isinstance(inputs, (list, tuple)) and len(inputs) == 1 - return [cvt_to_shape_desc(inputs[0], None, comp_graph, config)] - - -def cvt_to_shape_desc(val, inpvar, graph, config): - """convert some python object to a :class:`SymbolVar` that describes tensor - shape - - :param val: the python object to be converted from - :param inpvar, graph, config: provide graph and comp node information; can - be None if not known. Either input or (graph, config) must be provided. - :return: a new var corresponding to *val* - :rtype: :class:`.SymbolVar` - """ - if hasattr(val, "__mgb_symvar__"): - val = val.__mgb_symvar__() - elif hasattr(val, "symvar"): - val = val.symvar - if isinstance(val, SymbolVar): - return val - if not isinstance(val, collections.Iterable): - val = [val] - components = [] - has_sym = False - for i in val: - if hasattr(i, "__mgb_symvar__"): - i = i.__mgb_symvar__() - elif hasattr(i, "symvar"): - i = i.symvar - if isinstance(i, SymbolVar): - has_sym = True - components.append(i) - else: - assert isinstance(i, int), ( - "shape desc could contain either int or SymbolVar, got {}" - " actually".format(repr(i)) - ) - components.append(i) - assert components, "shape desc could not be empty" - - if inpvar is not None: - assert isinstance(inpvar, SymbolVar) - if graph is None: - graph = inpvar.owner_graph - else: - assert graph == inpvar.owner_graph - config = mgb.make_opr_config(comp_node=inpvar.comp_node) - else: - assert isinstance(graph, mgb.CompGraph), "graph must be provided" - assert isinstance(config, mgb.OperatorNodeConfig) - - if not has_sym: - shape = np.ascontiguousarray(components, dtype=np.int32) - assert np.all(shape == components), "failed to convert to shape: {}".format( - components - ) - return mgb._make_immutable(graph, shape, None, config) - - for idx, v in enumerate(components): - if not isinstance(v, SymbolVar): - vi = int(v) - assert vi == v, "could not convert {} to int".format(v) - components[idx] = mgb._make_immutable(graph, vi, None, config) - from . import opr as O - - return O.concat(components, axis=0, config=config) - - -def canonize_input_vars(inputs, *, comp_graph, config): - """convert immediate numbers and SharedND to SymbolVar in inputs; at least - one of the inputs must be SymbolVar, so comp node and comp graph can - beinferred - - :return: list of converted vars - """ - from . import make_immutable - - if ( - isinstance(inputs, (list, tuple)) - and len(inputs) == 1 - and isinstance(inputs[0], (list, tuple)) - ): - # handle the case when a list is passed to a function with - # variable-length argument (e.g. concat has signature concat(*inputs) - # and is called with concat([a, b])) - inputs = inputs[0] - - if isinstance(inputs, SymbolVar): - return [inputs] - - old_inputs = inputs - inputs = [] - get_comp_node = None - need_cvt = False - for i in old_inputs: - if isinstance(i, SymbolVar): - get_comp_node = lambda cn=i.comp_node: cn - if comp_graph is not None: - assert comp_graph == i.owner_graph - else: - comp_graph = i.owner_graph - else: - need_cvt = True - inputs.append(i) - if not need_cvt: - return inputs - - if get_comp_node is None: - - def get_comp_node(): - nonlocal get_comp_node - cn = config.require_comp_node() - get_comp_node = lambda: cn - return cn - - for idx, var in enumerate(inputs): - if not isinstance(var, SymbolVar): - if isinstance(var, SharedND): - var = var.symvar(comp_graph) - elif isinstance(var, mgb.SharedScalar): - var = var._as_sym_var(comp_graph, get_comp_node()) - elif hasattr(var, "__mgb_symvar__"): - try: - cn = get_comp_node() - except MegBrainError: - cn = None - var = var.__mgb_symvar__(comp_graph=comp_graph, comp_node=cn) - elif hasattr(var, "symvar"): - var = var.symvar - else: - var = make_immutable(get_comp_node(), comp_graph, var) - inputs[idx] = var - return inputs - - -def cvt_to_vector_of_shape(shapes): - """convert ``[[int]]`` to nested ``std::vector`` of ``size_t``""" - ret = mgb._VectorTensorShape() - for i in shapes: - val = tuple(i) - assert val and all( - j > 0 and isinstance(j, int) for j in val - ), "something returns bad shape in infer_shape(): {}".format(val) - ret.push_back(val) - return ret - - -def cvt_to_opr_param_def(param, ptype, kwargs): - if param is not None: - if isinstance(param, ptype): - return param - - param = [param] - assert len(param) == len( - ptype.__slots__ - ), "{} needs {} params, but {} are provided".format( - ptype, len(ptype.__slots__), len(param) - ) - return ptype(*param) - - ckw = {} - for i in ptype.__slots__: - val = kwargs.pop(i, ckw) - if val is not ckw: - ckw[i] = val - return ptype(**ckw) - - -def cvt_getitem_to_idx_desc(inpvar, tuple_val, *, allow_newaxis=True): - """convert ``__getitem__`` args to index desc - - :return: ``(new_var, index_desc)`` where new_var is inpvar with - ``np.newaxis`` applied; note that ``index_desc`` can be ``None``. - """ - assert isinstance(inpvar, SymbolVar), "bad input: {!r}".format(inpvar) - if not isinstance(tuple_val, tuple): - tuple_val = (tuple_val,) - - axis_indexer = mgb._VectorAxisIndexer() - - config = mgb.make_opr_config(comp_node=inpvar.comp_node) - graph = inpvar.owner_graph - - def as_symvar(v, *, allow_list=True): - if isinstance(v, SymbolVar): - return v - vi = np.ascontiguousarray(v, dtype=np.int32) - assert np.abs(vi - v).max() == 0, "bad index: {!r}".format(v) - return mgb._make_immutable(graph, vi, None, config) - - def _s(v): # convert slice item - if v is None: - return SymbolVar() - return as_symvar(v, allow_list=False) - - new_axes = [] - cur_axis = -1 - for i_idx, i in enumerate(tuple_val): - cur_axis += 1 - if i is np.newaxis: - if cur_axis >= 0: - new_axes.append(cur_axis) - continue - - if i is Ellipsis: - cur_axis = -1 - for j in tuple_val[:i_idx:-1]: - if j is Ellipsis: - raise IndexError("only one ellipsis is allowed") - if j is np.newaxis: - new_axes.append(cur_axis) - cur_axis -= 1 - continue - - if isinstance(i, slice): - if i.start is None and i.stop is None and i.step is None: - continue - cur = mgb._AxisIndexer.make_interval( - cur_axis, _s(i.start), _s(i.stop), _s(i.step) - ) - else: - cur = mgb._AxisIndexer.make_index(cur_axis, as_symvar(i)) - axis_indexer.push_back(cur) - if new_axes: - if not allow_newaxis: - raise IndexError("newaxis is not allowed here") - inpvar = mgb._Opr.add_axis(inpvar, new_axes, mgb.make_opr_config()) - if axis_indexer.empty(): - axis_indexer = None - return inpvar, axis_indexer - - -def cvt_to_reshape_unspec_axis(unspec_axis, tshape): - assert isinstance(unspec_axis, OptionalAxisV1), repr(unspec_axis) - unspec_axis = unspec_axis.axis - assert abs(unspec_axis) <= OptionalAxisV1.MAX_NDIM - if not isinstance(tshape, SymbolVar): - for idx, val in enumerate(tshape): - if val == -1: - assert ( - unspec_axis == OptionalAxisV1.INVALID_AXIS - ), "multiple unknown dimensions for reshape" - unspec_axis = idx - return OptionalAxisV1(unspec_axis) - - -def gen_config(name, comp_node, config, output_dtype=None): - if config is None: - config = mgb.make_opr_config(name, comp_node, output_dtype) - else: - assert isinstance(config, mgb.OperatorNodeConfig) - assert name is None and comp_node is None - return config - - -def cvt_opr_result(rst, *, explode_single=True): - """:param explode_single: whether to return the content of a single-item - list rather thatn the list itself""" - if not isinstance(rst, mgb.SymbolVar): - assert isinstance(rst, (list, tuple)) - if len(rst) == 1 and explode_single: - return cvt_opr_result(rst[0]) - return tuple(map(cvt_opr_result, rst)) - if not rst.valid: - return None - # TODO Because the __init__ of SwigObject can not be modified to keep the - # reference of graph, we get owner graph explicitly here. The correct - # handling is moving the reference to SwigWrapper, but it is unsupported to - # add a member variable to SwigWrapper, so we should wrap the SymbolVar - # manually in megbrain_wrap.h - rst.owner_graph - - f32 = np.float32 - if not hasattr(cvt_opr_result, "_cvt_to_float32"): - import os - from .logconf import get_logger - - cvt_opr_result._cvt_to_float32 = os.getenv("MGB_ALL_FLOAT32") - if cvt_opr_result._cvt_to_float32: - get_logger().warn( - "\n" - "+=====================================================+\n" - "| MGB_ALL_FLOAT32 is set, so all megbrain opr result |\n" - "| would to converted to float32; this should only be |\n" - "| used for loading old models. |\n" - "+=====================================================+" - ) - if cvt_opr_result._cvt_to_float32 and rst.dtype != f32: - rst = rst.astype(f32) - return rst diff --git a/python_module/megengine/_internal/logconf.py b/python_module/megengine/_internal/logconf.py deleted file mode 100644 index f88c8c08..00000000 --- a/python_module/megengine/_internal/logconf.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import logging -import os - -_replaced_logger = None - - -def get_logger(): - global _replaced_logger - if _replaced_logger is not None: - return _replaced_logger - logger = logging.getLogger("megbrain") - logger.propagate = False - logger.setLevel(logging.INFO) - handler = logging.StreamHandler() - handler.setFormatter(MgbLogFormatter(datefmt="%d %H:%M:%S")) - handler.setLevel(0) - del logger.handlers[:] - logger.addHandler(handler) - _replaced_logger = logger - return logger - - -class MgbLogFormatter(logging.Formatter): - def format(self, record): - date = "\x1b[32m[%(asctime)s %(lineno)d@%(filename)s:%(name)s]\x1b[0m" - msg = "%(message)s" - if record.levelno == logging.DEBUG: - fmt = "{} \x1b[32mDBG\x1b[0m {}".format(date, msg) - elif record.levelno == logging.WARNING: - fmt = "{} \x1b[1;31mWRN\x1b[0m {}".format(date, msg) - elif record.levelno == logging.ERROR: - fmt = "{} \x1b[1;4;31mERR\x1b[0m {}".format(date, msg) - else: - fmt = date + " " + msg - self._style._fmt = fmt - return super().format(record) - - -def set_logger(logger): - """replace the logger""" - global _replaced_logger - _replaced_logger = logger - from .mgb import _register_logger - - _register_logger(logger) diff --git a/python_module/megengine/_internal/mgb_helper.py b/python_module/megengine/_internal/mgb_helper.py deleted file mode 100644 index 955d5c88..00000000 --- a/python_module/megengine/_internal/mgb_helper.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""helper utils for the core mgb module""" - -import collections -import inspect -import json -import threading -from abc import ABCMeta, abstractmethod - - -class callback_lazycopy: - """wraps around a callable to be passed to :meth:`.CompGraph.compile`. - - This is used to disable eager copy, so we could get rid of an h2d copy and - a d2h if values are to be passed from one callback to another - :class:`.SharedND`. - """ - - def __init__(self, func): - assert isinstance(func, collections.Callable) - self.__func = func - - @property - def func(self): - return self.__func - - -class SharedNDLazyInitializer(metaclass=ABCMeta): - """lazy initialization policy for :class:`.SharedND`""" - - @abstractmethod - def get_shape(self): - """get shape, without loading value""" - - @abstractmethod - def get_value(self): - """get value as numpy ndarray""" - - -class copy_output: - """wraps a :class:`.SymbolVar` in outspec for :meth:`.CompGraph.compile`, - to copy the output to function return value""" - - symvar = None - borrow_mem = None - - def __init__(self, symvar, *, borrow_mem=False): - """ - - :param borrow_mem: see :meth:`.CompGraphCallbackValueProxy.get_value` - """ - from .mgb import SymbolVar - - assert isinstance( - symvar, SymbolVar - ), "copy_output expects an SymbolVar, got {} instead".format(symvar) - self.symvar = symvar - self.borrow_mem = borrow_mem - - -class FuncOutputSaver: - """instance could be used as callbacks for :meth:`.CompGraph.compile` to - copy output to host buffer - """ - - _value = None - _borrow_mem = None - - def __init__(self, borrow_mem=False): - self._borrow_mem = borrow_mem - - def __call__(self, v): - self._value = v.get_value(borrow_mem=self._borrow_mem) - - def get(self): - assert ( - self._value is not None - ), "{} not called; maybe due to unwaited async func".format(self) - return self._value diff --git a/python_module/megengine/_internal/opr_extra.py b/python_module/megengine/_internal/opr_extra.py deleted file mode 100644 index 7a59a2cf..00000000 --- a/python_module/megengine/_internal/opr_extra.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015-2019 Megvii Inc. All rights reserved. - diff --git a/python_module/megengine/_internal/persistent_cache.py b/python_module/megengine/_internal/persistent_cache.py deleted file mode 100644 index 47da6637..00000000 --- a/python_module/megengine/_internal/persistent_cache.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import argparse -import getpass -import json -import os -import shelve - -from .logconf import get_logger -from .mgb import _PersistentCache -from .version import __version__ - - -class _FakeRedisConn: - def __init__(self): - try: - from ..hub.hub import _get_megengine_home - - cache_dir = os.path.expanduser( - os.path.join(_get_megengine_home(), "persistent_cache") - ) - os.makedirs(cache_dir, exist_ok=True) - cache_file = os.path.join(cache_dir, "cache") - self._dict = shelve.open(cache_file) - self._is_shelve = True - except: - self._dict = {} - self._is_shelve = False - - def get(self, key): - if self._is_shelve and isinstance(key, bytes): - key = key.decode("utf-8") - - return self._dict.get(key) - - def set(self, key, val): - if self._is_shelve and isinstance(key, bytes): - key = key.decode("utf-8") - - self._dict[key] = val - - def __del__(self): - if self._is_shelve: - self._dict.close() - - -class PersistentCacheOnServer(_PersistentCache): - _cached_conn = None - _prefix = None - _prev_get_refkeep = None - - @property - def _conn(self): - """get redis connection""" - if self._cached_conn is None: - self._cached_conn = _FakeRedisConn() - self._prefix = self.make_user_prefix() - - return self._cached_conn - - @classmethod - def make_user_prefix(cls): - return "mgbcache:{}".format(getpass.getuser()) - - - def _make_key(self, category, key): - prefix_with_version = "{}:MGB{}".format(self._prefix, __version__) - return b"@".join( - (prefix_with_version.encode("ascii"), category.encode("ascii"), key) - ) - - def put(self, category, key, value): - conn = self._conn - key = self._make_key(category, key) - conn.set(key, value) - - def get(self, category, key): - conn = self._conn - key = self._make_key(category, key) - self._prev_get_refkeep = conn.get(key) - return self._prev_get_refkeep - - diff --git a/python_module/megengine/_internal/plugin.py b/python_module/megengine/_internal/plugin.py deleted file mode 100644 index 4290bc1b..00000000 --- a/python_module/megengine/_internal/plugin.py +++ /dev/null @@ -1,261 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""plugins associated with computing graph""" - -import atexit -import collections -import json -import os -import platform -import signal -import struct - -import numpy as np - -from . import mgb as _mgb -from .logconf import get_logger - -InfkernFinderInputValueRec = collections.namedtuple( - "InfkernFinderInputValueRec", ["var_name", "var_id", "run_id", "value"] -) - - -class CompGraphProfiler(_mgb._CompGraphProfilerImpl): - """a plugin to profile computing graphs""" - - def __init__(self, comp_graph): - super().__init__(comp_graph) - - def get(self): - """get visualizable profiling result on a function""" - return json.loads(self._get_result()) - - def write_json(self, fobj): - """write the result to a json file - - :param fobj: a file-like object, or a string - """ - if isinstance(fobj, str): - with open(fobj, "w") as fout: - return self.write_json(fout) - fobj.write(self._get_result()) - - -class NumRangeChecker(_mgb._NumRangeCheckerImpl): - """check that all numberical float values of variables in a computing graph - are within given range""" - - def __init__(self, comp_graph, max_abs_val): - """:param max_abs_val: max absolute value""" - super().__init__(comp_graph, float(max_abs_val)) - - -class TextOprIODump(_mgb._TextOprIODumpImpl): - """dump all internal results as text to a file""" - - def __init__(self, comp_graph, fpath, *, print_addr=None, max_size=None): - super().__init__(comp_graph, fpath) - if print_addr is not None: - self.print_addr(print_addr) - if max_size is not None: - self.max_size(max_size) - - def print_addr(self, flag): - """set whether to print var address - - :return: self - """ - self._print_addr(flag) - return self - - def max_size(self, size): - """set the number of elements to be printed for each var - - :return: self - """ - self._max_size(size) - return self - - -class BinaryOprIODump(_mgb._BinaryOprIODumpImpl): - """dump all internal results binary files to a directory; the values can be - loaded by :func:`load_tensor_binary` - """ - - def __init__(self, comp_graph, dir_path): - super().__init__(comp_graph, dir_path) - - -class InfkernFinder(_mgb._InfkernFinderImpl): - """a plugin to find kernels that cause infinite loops""" - - def __init__(self, comp_graph, record_input_value): - """ - :param record_input_value: whether need to record input var values of - all operators - :type record_input_value: bool - """ - super().__init__(comp_graph, record_input_value) - - def write_to_file(self, fpath): - """write current execution status to a text file - - :return: ID of the first operator that is still not finished, - or None if all oprs are finished - :rtype: int or None - """ - v = self._write_to_file(fpath) - if v == 0: - return - return v - 1 - - def get_input_values(self, opr_id): - """get recorded input values of a given operator. Return a list - of :class:`InfkernFinderInputValueRec`. Note that the value in - each item is either None (if it is not recorded) or a numpy - array - """ - ret = [] - for idx in range(self._get_input_values_prepare(opr_id)): - vn = self._get_input_values_var_name(idx) - vi = self._get_input_values_var_idx(idx) - ri = self._get_input_values_run_id(idx) - val = self._get_input_values_val(idx) - if not val.shape: - val = None - else: - val = val.get_value() - ret.append(InfkernFinderInputValueRec(vn, vi, ri, val)) - return ret - - -def fast_signal_hander(signum, callback): - """bypass python's signal handling system and registera handler that is - called ASAP in a dedicated thread (in contrary, python calls handlers in - the main thread) - - :param callback: signal callback, taking the signal number as its sole - argument - """ - - def cb_wrapped(): - try: - callback(signum) - except: - get_logger().exception("error calling signal handler for {}".format(signum)) - - _mgb._FastSignal.register_handler(signum, cb_wrapped) - - -atexit.register(_mgb._FastSignal.shutdown) - - -class GlobalInfkernFinder: - """ - manage a list of :class:`InfkernFinder` objects; when this process is - signaled with SIGUSR1, an interactive IPython shell would be presented for - further investigation - """ - - _signal = None - if platform.system() != "Windows": - _signal = signal.SIGUSR1 - else: - _signal = signal.CTRL_C_EVENT - _registry = [] - _shell_maker = None - - @classmethod - def add_graph(cls, comp_graph): - """register a graph so it can be tracked by :class:`InfkernFinder`""" - enabled = os.getenv("MGB_DBG_INFKERN_FINDER") - if not enabled: - return - - if enabled == "1": - record_input_value = False - else: - assert enabled == "2", ( - "MGB_DBG_INFKERN_FINDER must be either 1 or 2, indicating " - "whether to record input values" - ) - record_input_value = True - - finder = InfkernFinder(comp_graph, record_input_value) - get_logger().warning( - "interactive InfkernFinder {} registered to graph {}; all input " - "var values would be recorded and the graph would never be " - "reclaimed. You can enter the interactive debug session by " - 'executing "kill -{} {}". record_input_value={}'.format( - finder, comp_graph, cls._signal, os.getpid(), record_input_value - ) - ) - - if not cls._registry: - from IPython.terminal.embed import InteractiveShellEmbed - - cls._shell_maker = InteractiveShellEmbed - fast_signal_hander(cls._signal, cls._on_signal) - - cls._registry.append(finder) - - @classmethod - def _on_signal(cls, signum): - shell = cls._shell_maker() - shell( - header="Enter interactive InfkernFinder session; the registered " - "finder objects can be found in variable f", - local_ns={"f": cls._registry}, - ) - - -def load_tensor_binary(fobj): - """load a tensor dumped by the :class:`BinaryOprIODump` plugin; the actual - tensor value dump is implemented by ``mgb::debug::dump_tensor``. - - Multiple values can be compared by ``tools/compare_binary_iodump.py``. - - :param fobj: file object, or a string that contains the file name - :return: tuple ``(tensor_value, tensor_name)`` - """ - if isinstance(fobj, str): - with open(fobj, "rb") as fin: - return load_tensor_binary(fin) - - DTYPE_LIST = { - 0: np.float32, - 1: np.uint8, - 2: np.int8, - 3: np.int16, - 4: np.int32, - 5: _mgb.intb1, - 6: _mgb.intb2, - 7: _mgb.intb4, - 8: None, - 9: np.float16, - # quantized dtype start from 100000 - # see MEGDNN_PARAMETERIZED_DTYPE_ENUM_BASE in - # dnn/include/megdnn/dtype.h - 100000: np.uint8, - 100001: np.int32, - 100002: np.int8, - } - - header_fmt = struct.Struct("III") - name_len, dtype, max_ndim = header_fmt.unpack(fobj.read(header_fmt.size)) - assert ( - DTYPE_LIST[dtype] is not None - ), "Cannot load this tensor: dtype Byte is unsupported." - - shape = list(struct.unpack("I" * max_ndim, fobj.read(max_ndim * 4))) - while shape[-1] == 0: - shape.pop(-1) - name = fobj.read(name_len).decode("ascii") - return np.fromfile(fobj, dtype=DTYPE_LIST[dtype]).reshape(shape), name diff --git a/python_module/megengine/_internal/version.py b/python_module/megengine/_internal/version.py deleted file mode 100644 index 57803f31..00000000 --- a/python_module/megengine/_internal/version.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -"""version information for MegBrain package""" - -import collections - -from . import mgb as _mgb - - -class Version( - collections.namedtuple("VersionBase", ["major", "minor", "patch", "dev"]) -): - """simple sematic version object""" - - @classmethod - def __normalize(cls, v): - if isinstance(v, str): - v = v.split(".") - a, b, c = map(int, v) - return cls(a, b, c) - - def __eq__(self, rhs): - return super().__eq__(self.__normalize(rhs)) - - def __ne__(self, rhs): - return super().__ne__(self.__normalize(rhs)) - - def __lt__(self, rhs): - return super().__lt__(self.__normalize(rhs)) - - def __le__(self, rhs): - return super().__le__(self.__normalize(rhs)) - - def __gt__(self, rhs): - return super().__gt__(self.__normalize(rhs)) - - def __ge__(self, rhs): - return super().__ge__(self.__normalize(rhs)) - - def __str__(self): - rst = "{}.{}.{}".format(self.major, self.minor, self.patch) - if self.dev: - rst += "-dev{}".format(self.dev) - return rst - - -Version.__new__.__defaults__ = (0,) # dev defaults to 0 - -version_info = Version(*_mgb._get_mgb_version()) -__version__ = str(version_info) diff --git a/python_module/megengine/core/__init__.py b/python_module/megengine/core/__init__.py deleted file mode 100644 index ab452954..00000000 --- a/python_module/megengine/core/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .device import ( - get_default_device, - get_device_count, - is_cuda_available, - set_default_device, -) -from .function import Function -from .graph import Graph, dump -from .serialization import load, save -from .tensor import Tensor, TensorDict, tensor, wrap_io_tensor -from .tensor_factory import ones, zeros -from .tensor_nn import Buffer, Parameter diff --git a/python_module/megengine/core/device.py b/python_module/megengine/core/device.py deleted file mode 100644 index cb3999db..00000000 --- a/python_module/megengine/core/device.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os - -import megengine._internal as mgb - -_default_device = os.getenv("MGE_DEFAULT_DEVICE", "xpux") - - -def get_device_count(device_type: str) -> int: - """Gets number of devices installed on this system. - - :param device_type: device type, one of 'gpu' or 'cpu' - """ - - device_type_set = ("cpu", "gpu") - assert device_type in device_type_set, "device must be one of {}".format( - device_type_set - ) - return mgb.config.get_device_count(device_type) - - -def is_cuda_available() -> bool: - """Returns whether cuda device is available on this system. - - """ - return mgb.config.get_device_count("gpu", warn=False) > 0 - - -def set_default_device(device: str = "xpux"): - r"""Sets default computing node. - - :param device: default device type. The type can be 'cpu0', 'cpu1', etc., - or 'gpu0', 'gpu1', etc., to specify the particular cpu or gpu to use. - 'cpux' and 'gupx' can also be used to specify any number of cpu or gpu devices. - - 'multithread' device type is avaliable when inference, which implements - multi-threading parallelism at the operator level. For example, - 'multithread4' will compute with 4 threads. which implements - - The default value is 'xpux' to specify any device available. - - It can also be set by environmental variable `MGE_DEFAULT_DEVICE`. - """ - global _default_device # pylint: disable=global-statement - _default_device = device - - -def get_default_device() -> str: - r"""Gets default computing node. - - It returns the value set by :func:`~.set_default_device`. - """ - return _default_device diff --git a/python_module/megengine/core/function.py b/python_module/megengine/core/function.py deleted file mode 100644 index c6fb7d43..00000000 --- a/python_module/megengine/core/function.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy -from abc import ABCMeta, abstractmethod -from typing import Iterable, Tuple, Union - -import megengine._internal as mgb - -from .tensor import Tensor - - -class _OverrideGradientCraniotome(mgb.craniotome.CraniotomeBase): - __nr_inputs__ = None - __nr_outputs__ = None - __expand_single_outputs__ = False - __allow_duplicate__ = False - - grad_func = None - - def setup(self, nr_inputs, nr_outputs, grad_func): - self.__nr_inputs__ = nr_inputs + nr_outputs - self.__nr_outputs__ = nr_outputs - self.grad_func = grad_func - - def infer_shape(self, inp_shapes): - return inp_shapes[-self.__nr_outputs__ :] - - def init_output_dtype(self, input_dtypes): - return input_dtypes[-self.__nr_outputs__ :] - - def execute(self, inputs, outputs): - for ivar, ovar in zip(inputs[-self.__nr_outputs__ :], outputs): - ovar.set_value(ivar) - - def grad(self, wrt_idx, inputs, outputs, out_grad): - # TODO: Make sure grad_values really have values in eager mode. - # Porting to the new imperative engine would solve this, but if it - # don't happen, EagerEvalManager should be changed. - grads = self.grad_func( - *(Tensor(x) if x is not None else None for x in out_grad) - ) - # pylint: disable=literal-comparison - if isinstance(grads, Tensor) or grads is None or grads is 0: - grads = (grads,) - assert ( - len(grads) == self.__nr_inputs__ - self.__nr_outputs__ - ), "Function.backward should return a tuple with len = {}, got {}".format( - self.__nr_inputs__ - self.__nr_outputs__, len(grads) - ) - # pylint: disable=literal-comparison - return ( - list(x._symvar if x is not None and x is not 0 else 0 for x in grads) - + [0] * self.__nr_outputs__ - ) - - def get_serialize_params(self): - raise NotImplementedError("Serialization of Function is not implemented") - - -class Function(metaclass=ABCMeta): - """ - Defines a block of operations with customizable differentiation. - - The computation should be defined in ``forward`` method, with gradient - computation defined in ``backward`` method. - - Each instance of ``Function`` should be used only once during forwardding. - - Examples: - - .. testcode:: - - class Sigmoid(Function): - def forward(self, x): - y = 1 / (1 + F.exp(-x)) - self.save_for_backward(y) - return y - - def backward(self, output_grads): - (y, ) = self.saved_tensors - return output_grads * y * (1-y) - - """ - - _has_saved_state = False - saved_tensors = None - - def __init__(self): - self.saved_tensors = () - - @abstractmethod - def forward(self, *inputs: Iterable[Tensor]) -> Union[Tuple[Tensor], Tensor]: - """ - Applies operations to ``inputs`` and returns results. It must be overriden by all subclasses. - Users can call :meth:`~.function.Function.save_for_backward` in this method to save tensors. - - :param input: Input tensors. - :return: A tuple of Tensor or a single Tensor. - - .. note:: - - This method should return a tuple of Tensor or a single Tensor representing the output - of the function. - """ - raise NotImplementedError - - @abstractmethod - def backward( - self, *output_grads: Iterable[Union[Tensor, None]] - ) -> Union[Tuple[Tensor], Tensor]: - """ - Compute the gradient of the forward function. It must be overriden by all subclasses. - - :param output_grads: gradients of outputs that are returned by :meth:`~.function.Function.forward` - - .. note:: - - In case when some tensors of outputs are not related to loss function, the corresponding - values in ``output_grads`` would be ``None``. - - .. note:: - - This method should return a tuple which containing the gradients of all inputs, in the same order - as the ``inputs`` argument of :meth:`~.function.Function.forward` . A ``Tensor`` could be returned - instead if there is only one input. If users want to stop the propagation of some gradients, - the corresponding returned values should be set ``None`` . - - """ - raise NotImplementedError - - def save_for_backward(self, *tensors: Iterable[Tensor]): - """ - Saves tensors needed for gradient computation. This method should be called only - once in :meth:`~.function.Function.forward`, additional calls will replace values saved previously. - - The saved tensors can be accessed through the ``saved_tensors`` attribute. - """ - self.saved_tensors = tensors - - def __deepcopy__(self, memo): - """ - Defines how the operator is deeply copied - """ - cls = self.__class__ - result = cls.__new__(cls) - tmp = self.saved_tensors - self.saved_tensors = None - memo[id(self)] = result - for k, v in self.__dict__.items(): - setattr(result, k, copy.deepcopy(v, memo)) - setattr(result, "saved_tensors", tmp) - self.saved_tensors = tmp - return result - - def __call__(self, *inputs): - assert ( - not self._has_saved_state - ), "A Function instance should not be called multiple times" - outputs = self.forward(*inputs) - if isinstance(outputs, Tensor): - outputs = (outputs,) - self._has_saved_state = True - sv = (x._symvar for x in inputs + outputs) - outputs = _OverrideGradientCraniotome.make( - *sv, nr_inputs=len(inputs), nr_outputs=len(outputs), grad_func=self.backward - ) - outputs = tuple(map(Tensor, outputs)) - if len(outputs) == 1: - outputs = outputs[0] - return outputs diff --git a/python_module/megengine/core/graph.py b/python_module/megengine/core/graph.py deleted file mode 100644 index 332f198d..00000000 --- a/python_module/megengine/core/graph.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import threading - -import megengine._internal as mgb - -from .device import get_default_device - - -class _DefaultGraph(threading.local): - r""" - An implicit thread-local graph - """ - - def __init__(self): - super(_DefaultGraph, self).__init__() - self._default_graph = None - - def get_default(self): - r"""Returns a default Graph object for eager evaluation. - """ - if self._default_graph is None: - self._default_graph = Graph() - return self._default_graph - - -_default_graph = _DefaultGraph() - - -class Graph(mgb.CompGraph): - r""" - A computing graph that supporting context management. - - :param check_env_var: whether to check environment vars including ``MGB_COMP_GRAPH_OPT``. - :param eager_evaluation: use dynamic graph(``True``) or static graph(``False``). - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - from megengine.core import Graph - - with Graph(eager_evaluation=True): - x = tensor([1, 2]) - print(x) - - Outputs: - - .. testoutput:: - - Tensor([1 2], dtype=int32) - - """ - - __saved_graph = None - - def __new__( - cls, *, check_env_var: bool = True, eager_evaluation: bool = True, **kwargs - ): - kwargs.update(eager_evaluation=eager_evaluation) - self = mgb.comp_graph(extra_opts=kwargs, check_env_var=check_env_var) - self.__class__ = cls - return self - - def __init__( - self, *, check_env_var: bool = True, eager_evaluation: bool = True, **kwargs - ): - # pylint: disable=super-init-not-called - pass - - def __enter__(self): - self.__saved_graph = _default_graph._default_graph - _default_graph._default_graph = self - return self - - def __exit__(self, type, value, traceback): - _default_graph._default_graph = self.__saved_graph - del self.__saved_graph - - -def _use_default_if_none(device, comp_graph): - if device is None: - device = get_default_device() - if comp_graph is None: - comp_graph = get_default_graph() - return device, comp_graph - - -def dump(outputs, fpath, optimize_options=None, **kwargs): - r""" - Serializes this computing graph and writes it to a file. - - :type outputs: ``Tensor`` or a collection of ``Tensor`` - :param outputs: output variables that need to be retrieved when - deserializing - :type fpath: ``str`` - :param fpath: path for the output file - :type optimize_options: ``list`` - :param optimize_options: ``['f16_io_f32_comp', 'f16_io_comp', 'use_nhwcd4', 'fuse_conv_bias_nonlinearity']`` , four elements are optional, it can be an empty list, None or a list containing any of them. - - .. note:: - - ``f16_io_f32_comp`` – whether to use float16 for I/O between oprs and use float32 as internal computation precision. Note the output var would be changed to float16; - - ``f16_io_comp`` – whether to use float16 for both I/O and computation precision; - - ``use_nhwcd4`` – whether to use NHWCD4 data format. This is faster on some OpenCL devices; - - ``fuse_conv_bias_nonlinearity`` – whether to fuse conv+bias+nonlinearty into one opr. This is supported only when ``use_nhwcd4`` is set. - - """ - from .tensor import Tensor - - assert optimize_options is None or isinstance( - optimize_options, list - ), "optimize_options must be a list" - - if isinstance(outputs, Tensor): - outputs = [outputs] - else: - assert isinstance(outputs, collections.Iterable), "{} not iterable".format( - outputs - ) - outputs = list(outputs) - - for output in outputs: - assert isinstance(output, Tensor), "All outputs must be Tensors." - - outputs = [o._symvar for o in outputs] - - if optimize_options: - opt_dict = dict.fromkeys(optimize_options, True) - mgb.optimize_for_inference(outputs, **opt_dict) - mgb.serialize_comp_graph_to_file(fpath, outputs, **kwargs) - - -def set_default_graph(default_graph): - r""" - Sets a global default Graph object. - """ - global _default_graph # pylint: disable=global-statement - _default_graph._default_graph = default_graph - - -def get_default_graph(): - r""" - Returns a default Graph object, most probably for eager evaluation. - """ - return _default_graph.get_default() diff --git a/python_module/megengine/core/serialization.py b/python_module/megengine/core/serialization.py deleted file mode 100644 index 8c18a534..00000000 --- a/python_module/megengine/core/serialization.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import pickle - -import megengine._internal as mgb - -from ..utils.max_recursion_limit import max_recursion_limit -from .device import get_default_device - - -def save(obj, f, pickle_module=pickle, pickle_protocol=pickle.HIGHEST_PROTOCOL): - r"""Save an object to disk file. - - :type obj: object - :param obj: object to save. Only ``module`` or ``state_dict`` are allowed. - :type f: text file object - :param f: a string of file name or a text file object to which ``obj`` is saved to. - :type pickle_module: - :param pickle_module: Default: ``pickle``. - :type pickle_protocol: - :param pickle_protocol: Default: ``pickle.HIGHEST_PROTOCOL``. - - """ - if isinstance(f, str): - with open(f, "wb") as fout: - save( - obj, fout, pickle_module=pickle_module, pickle_protocol=pickle_protocol - ) - return - - with max_recursion_limit(): - assert hasattr(f, "write"), "{} does not support write".format(f) - pickle_module.dump(obj, f, pickle_protocol) - - -class dmap: - def __init__(self, map_location): - self.map_location = map_location - - def __enter__(self): - mgb.add_device_map(self.map_location) - return self - - def __exit__(self, type, value, traceback): - mgb.del_device_map() - - -def _get_callable_map_location(map_location): - if map_location is None: - - def callable_map_location(state): - return str(get_default_device()) - - elif isinstance(map_location, str): - - def callable_map_location(state): - return map_location - - elif isinstance(map_location, dict): - locator_map = {} - for key, value in map_location.items(): - locator_key = mgb.config.parse_locator(key)[:2] - locator_map[locator_key] = value - - def callable_map_location(state): - orig = mgb.config.parse_locator(state)[:2] - if orig in locator_map.keys(): - state = locator_map[orig] - return state - - else: - assert callable(map_location), "map_location should be str, dict or function" - callable_map_location = map_location - return callable_map_location - - -def load(f, map_location=None, pickle_module=pickle): - r"""Load an object saved with save() from a file. - - :type f: text file object - :param f: a string of file name or a text file object from which to load. - :type map_location: str, dict or a function specifying the map rules - :param map_location: Default: ``None``. - - .. note:: - - map_location will change the logical locator when loading models, - avoiding tensors be loading on non-existent device. If you want to - add the mapping relationship between logical locator and physical - locator in runtime, please call :func:`mge.set_device_map()` - - :type pickle_module: - :param pickle_module: Default: ``pickle``. - - .. note:: - - If you will call :func:`mge.set_default_device()`, please do it - before :func:`mge.load()`. - - Examples: - - .. testcode: - - import megengine as mge - mge.load('model.mge') - # Load all tensors based on logical location. - mge.load('model.mge', map_location='gpu0') - # Load all tensors onto the device: GPU0 - mge.load('model.mge', map_location={'gpu0':'cpu0'}) - # Load all tensors based on logical location, but 'GPU0' will be renamed to 'CPU0' - mge.load('model.mge', map_location=lambda dev: 'cpu0') - # Load all tensors onto the device" CPU0 - - """ - if isinstance(f, str): - with open(f, "rb") as fin: - return load(fin, map_location=map_location, pickle_module=pickle_module) - - map_location = _get_callable_map_location(map_location) # callable map_location - - with dmap(map_location): - return pickle_module.load(f) diff --git a/python_module/megengine/core/tensor.py b/python_module/megengine/core/tensor.py deleted file mode 100644 index f96f90f2..00000000 --- a/python_module/megengine/core/tensor.py +++ /dev/null @@ -1,771 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import copy -import functools -import itertools -import weakref -from typing import Callable, Tuple, Union - -import numpy as np - -import megengine._internal as mgb - -from .graph import _use_default_if_none, get_default_graph - - -def wrap_io_tensor(func): - r"""A wrapper to make ``func`` compatible with functions in ``_internal.opr``. - """ - - @functools.wraps(func) - def wrapper(*args, **kwargs): - comp_graph = None - for i in itertools.chain(args, kwargs.values()): - if isinstance(i, Tensor) and i._comp_graph: - comp_graph = i._comp_graph - break - else: - - comp_graph = get_default_graph() - new_args = ( - arg._attach(comp_graph) if isinstance(arg, Tensor) else arg for arg in args - ) - new_kwargs = { - k: v._attach(comp_graph) if isinstance(v, Tensor) else v - for k, v in kwargs.items() - } - ret = func(*new_args, **new_kwargs) - if isinstance(ret, mgb.SymbolVar): - ret = Tensor(ret) - elif isinstance(ret, list): - ret = [Tensor(t) if isinstance(t, mgb.SymbolVar) else t for t in ret] - elif isinstance(ret, tuple): - ret = tuple(Tensor(t) if isinstance(t, mgb.SymbolVar) else t for t in ret) - return ret - - return wrapper - - -def _wrap_symbolvar_binary_op(f): - @functools.wraps(f) - def wrapped(self, other): - comp_graph = ( - isinstance(other, Tensor) - and other._comp_graph - or self._comp_graph - or get_default_graph() - ) - if isinstance(other, Tensor): - other = other._attach(comp_graph) - return Tensor(f(self._attach(comp_graph), other)) - - return wrapped - - -def _wrap_slice(inp: slice): - r""" - A wrapper to handle Tensor values in ``inp`` slice. - """ - start = inp.start._symvar if isinstance(inp.start, Tensor) else inp.start - stop = inp.stop._symvar if isinstance(inp.stop, Tensor) else inp.stop - step = inp.step._symvar if isinstance(inp.step, Tensor) else inp.step - return slice(start, stop, step) - - -def _wrap_idx(idx: Tuple[Union[int, "Tensor"]]): - r""" - A wrapper to handle Tensor values in ``idx``. - """ - if not isinstance(idx, tuple): - idx = (idx,) - - idx = tuple(i._symvar if isinstance(i, Tensor) else i for i in idx) - idx = tuple(_wrap_slice(i) if isinstance(i, slice) else i for i in idx) - return idx - - -class _MGBIndexWrapper: - r""" - A wrapper class to handle ``__getitem__`` for index containing Tensor values. - - :param dest: a destination Tensor to do indexing on. - :param mgb_index: an ``_internal`` helper function indicating how to index. - :param val: a optional Tensor parameter used for ``mgb_index``. - """ - - def __init__(self, dest: "Tensor", mgb_index: Callable, val=None): - self.dest = dest - self.val = val - self.mgb_index = mgb_index - - def __getitem__(self, idx): - if self.val is None: - return wrap_io_tensor(self.mgb_index(self.dest._symvar).__getitem__)( - _wrap_idx(idx) - ) - else: - return wrap_io_tensor( - self.mgb_index(self.dest._symvar, self.val._symvar).__getitem__ - )(_wrap_idx(idx)) - - -class _Guard: - r""" - A wrapper class with custom ``__del__`` method calling ``deleter``. - - :param deleter: a function to be called in ``__del__``. - """ - - def __init__(self, deleter: Callable): - self.deleter = deleter - - def __del__(self): - self.deleter() - - -class Tensor: - r"""The main data container in MegEngine. - Use :func:`~.tensor` to create a Tensor with existed data. - """ - requires_grad = False - grad = None - - def __init__(self, val=None, *, requires_grad=None): - self._reset(val, requires_grad=requires_grad) - self.q_dict = {"mode": None, "scale": None, "zero_point": None} - - def _reset(self, val=None, *, requires_grad=None): - self.__sym_override = None - if val is None: - self.__val = None - self.__sym = None - elif isinstance(val, mgb.SharedND): - self.__val = val - self.__sym = None - elif isinstance(val, mgb.SymbolVar): - self.__val = None - self.__sym = val - else: - raise TypeError("must be initialized with SymbolVar or SharedND") - self.requires_grad = requires_grad - - def _as_tensor(self, obj): - r"""Convert the data into a ``Tensor``. If the data is already a Tensor - with the same dtype and device, no copy will be performed. Otherwise a - new Tensor will be returned with computational graph retained. - - """ - if isinstance(obj, Tensor): - return obj - if isinstance(obj, mgb.SymbolVar): - return Tensor(obj) - if isinstance(obj, mgb.SharedScalar): - return Tensor(obj._as_sym_var(self._comp_graph, self._comp_node)) - return tensor(data=obj, device=self.device) - - def numpy(self): - r"""Return the tensor value in numpy.ndarray format. - """ - if self.__val is not None: - assert self.__sym is None - return self.__val.get_value() - if self.__sym is None: - raise ValueError("uninitialized") - if self.__sym.eager_val is not None: - return self.__sym.eager_val.get_value() - return self.__sym.inferred_value - - def item(self): - r"""If tensor only has only one value, return it.""" - return self.numpy().item() - - def _attach(self, comp_graph, *, volatile=True): - sym = self.__sym_override or self.__sym - if sym: - if sym.owner_graph != comp_graph: - raise RuntimeError("internal error") - return sym - if self.__val: - return self.__val.symvar(comp_graph, volatile=volatile) - else: - raise ValueError("uninitialized") - - @property - def _symvar(self): - if self.__sym_override: - return self.__sym_override - if self.__sym: - assert not self.__val - return self.__sym - if not self.__val: - raise ValueError("uninitialized") - - return self._attach(get_default_graph()) - - def __mgb_symvar__(self, comp_graph=None, **_): - if self.__sym_override: - return self.__sym_override - if self.__val and comp_graph: - return self._attach(comp_graph) - return self._symvar # read by mgb.opr - - def _override_symvar_during_trace(self, trace, symvar): - assert self.__val and not self.__sym - assert trace is type(trace)._active_instance - deleters = trace._user_cache.setdefault(Tensor, set()) - self_ref = weakref.ref(self) - - def restore(): - self = self_ref() - if self is not None: - self.__sym_override = None - - deleters.add(_Guard(restore)) - self.__sym_override = symvar - - @property - def dtype(self): - r"""Return the data type of the tensor. - """ - if self.__val is not None: - return self.__val.dtype - return self._symvar.dtype - - @dtype.setter - def dtype(self, dtype: str = None): - r"""Set the data type of the tensor. - """ - if self.__val is not None: - self.__val = mgb.make_shared(self.device, value=self.astype(dtype).numpy()) - elif self.__sym_override is not None: - self.__sym_override = self.__sym_override.astype(dtype) - elif self.__sym is not None: - self.__sym = self.__sym.astype(dtype) - - @property - def name(self): - r"""Get the tensor name, does not support Parameter and Buffer. - """ - return self._symvar.name - - @name.setter - def name(self, name: str = None): - r"""Set the tensor name, does not support Parameter and Buffer. - """ - if self.__val is not None: - raise ValueError("name setting is not available for Parameter or Buffer.") - if self.__sym_override is not None: - self.__sym_override = self.__sym_override.rename(name) - if self.__sym is not None: - assert not self.__val - self.__sym = self.__sym.rename(name) - - @property - def _comp_node(self): - if self.__val is not None: - return self.__val.comp_node - return self._symvar.comp_node - - device = _comp_node - - @property - def _comp_graph(self): - if self.__sym is not None: - return self.__sym.owner_graph - return None - - @property - def shape(self): - r"""Return an int tuple that is the shape/layout of the tensor. - Could be invalid in static graph mode. - """ - from ..jit import trace - - if trace._active_instance: # pylint: disable=protected-access - # NOTE: this is an hack - shape = mgb.opr.get_var_shape(self._symvar) - return tuple(Tensor(shape[i]) for i in range(self.ndim)) - return self._symvar.imm_shape - - def set_value(self, value, *, sync=True, inplace=False, share=False): - r"""Set value to the tensor. - """ - if not self.__val: - raise ValueError("not detached") - if isinstance(value, Tensor): - value = value.__val or value.__sym.eager_val - self.__val.set_value(value, sync=sync, inplace=inplace, share=share) - - def fill(self, value): - r"""Fills the tensor with the specified value. - """ - self.set_value(np.full(self.shape, value, dtype=self.dtype)) - - def reset_zero(self): - r"""Reset the tensor and fills with zeros. - """ - if not self.__val: - raise ValueError("not detached") - self.__val.reset_zero() - - def to(self, device): - r"""Performs Tensor device conversion, returns Tensor with the specified device. - """ - return wrap_io_tensor(mgb.opr.copy)(self, comp_node=device) - - # https://docs.python.org/3/reference/datamodel.html#object.__hash__ - # > If a class does not define an __eq__() method it should not define a - # > __hash__() operation either - __hash__ = None # type: ignore[assignment] - - def __eq__(self, rhs): - rhs = self._as_tensor(rhs) - return Tensor(self._symvar._binary_opr("EQ", rhs._symvar)) - - def __ne__(self, rhs): - return 1 - self.__eq__(rhs) - - def __len__(self): - if self._symvar.eager_val is not None: - return self._symvar.eager_val.shape[0] - raise TypeError( - "__len__ and __iter__ is not available for tensors on non eager graph." - ) - - __add__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__add__) - __radd__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__radd__) - __sub__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__sub__) - __rsub__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rsub__) - __mul__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__mul__) - __rmul__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rmul__) - __matmul__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__matmul__) - __rmatmul__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rmatmul__) - __lshift__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__lshift__) - __rshift__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rshift__) - __truediv__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__truediv__) - __rtruediv__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rtruediv__) - __floordiv__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__floordiv__) - __rfloordiv__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rfloordiv__) - __mod__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__mod__) - __rmod__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rmod__) - __pow__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__pow__) - __rpow__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__rpow__) - __lt__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__lt__) - __gt__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__gt__) - __le__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__le__) - __ge__ = _wrap_symbolvar_binary_op(mgb.SymbolVar.__ge__) - __neg__ = wrap_io_tensor(mgb.SymbolVar.__neg__) - sum = wrap_io_tensor(mgb.SymbolVar.sum) - """ - Sum up the given tensors. - """ - max = wrap_io_tensor(mgb.SymbolVar.max) - """ - Return the maximum value of given tensor. - """ - min = wrap_io_tensor(mgb.SymbolVar.min) - """ - Return the minimum value of given tensor. - """ - prod = wrap_io_tensor(mgb.SymbolVar.prod) - """ - Return the product value of the given tensor. - """ - mean = wrap_io_tensor(mgb.SymbolVar.mean) - """ - Return the mean value of the given tensor. - """ - dimshuffle = wrap_io_tensor(mgb.SymbolVar.dimshuffle) - """ - See more details in :func:`~.functional.tensor.dimshuffle`. - """ - astype = wrap_io_tensor(mgb.SymbolVar.astype) - """ - Cast the tensor to a specified type. - """ - - def reshape(self, *target_shape): - r"""Return a tensor which has given target shape - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4,4)) - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1,16)) - out = out.reshape(inp.shape) - print(out.numpy()) - - .. testoutput:: - - [[100 101 102 103] - [104 105 106 107] - [108 109 110 111] - [112 113 114 115]] - """ - - if isinstance(target_shape[0], tuple): - if len(target_shape) > 1: - raise ValueError("Only single tuple is accepted in reshape") - target_shape = target_shape[0] - target_shape = (t._symvar if isinstance(t, Tensor) else t for t in target_shape) - return Tensor(mgb.SymbolVar.reshape(self._symvar, *target_shape)) - - def broadcast(self, *target_shape): - r"""Return a tesnor broadcasted by current tensor to given target shape - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - - data = tensor(np.arange(100, 104, dtype=np.int32).reshape(1,4)) - data = data.broadcast((4,4)) - print(data.numpy()) - - .. testoutput:: - - [[100 101 102 103] - [100 101 102 103] - [100 101 102 103] - [100 101 102 103]] - """ - - if isinstance(target_shape[0], tuple): - if len(target_shape) > 1: - raise ValueError("Only single tuple is accepted in broadcast") - target_shape = target_shape[0] - target_shape = (t._symvar if isinstance(t, Tensor) else t for t in target_shape) - return Tensor(mgb.SymbolVar.broadcast(self._symvar, *target_shape)) - - # Prefer operators on Tensor instead of convert to numpy - __array_priority__ = 1000 - - # mgb indexing family - def __getitem__(self, idx): - return wrap_io_tensor(self._symvar.__getitem__)(_wrap_idx(idx)) - - def set_subtensor(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Return a object which supports using ``__getitem__`` to set subtensor. - - ``c = a.set_subtensor(b)[idx]`` is equivalent to ``c = a.copy()`` and ``c[idx] = b``. - """ - return _MGBIndexWrapper(self, mgb.opr.set_subtensor, val) - - def incr_subtensor(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Return a object which supports using ``__getitem__`` to increase subtensor. - - ``c = a.incr_subtensor(b)[idx]`` is equivalent to ``c = a.copy()`` and ``c[idx] += b``. - """ - return _MGBIndexWrapper(self, mgb.opr.incr_subtensor, val) - - @property - def ai(self) -> _MGBIndexWrapper: - r""" - Return a object which supports complex index method to get subtensor. - - Examples: - - .. testcode:: - - from megengine import tensor - a = tensor(np.arange(16, dtype=np.float32).reshape((4, 4))) - print(a.ai[:, [2, 3]]) - - Outputs: - - .. testoutput:: - - Tensor([[ 2. 3.] - [ 6. 7.] - [10. 11.] - [14. 15.]]) - """ - return _MGBIndexWrapper(self, mgb.opr.advanced_indexing) - - def set_ai(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.set_subtensor` which supports advanced indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.set_advanced_indexing, val) - - def incr_ai(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.incr_subtensor` which supports advanced indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.incr_advanced_indexing, val) - - @property - def mi(self) -> _MGBIndexWrapper: - r""" - Return a object which supports getting subtensor by - the coordinates which is Cartesian product of given index. - - Examples: - - .. testcode:: - - from megengine import tensor - a = tensor(np.arange(16, dtype=np.float32).reshape((4, 4))) - print(a.mi[[1, 2], [2, 3]]) - # is equal to elements on [1, 2] * [2, 3] = [[(1,2), (1, 3)], [(2, 2), (2, 3)]] - # a[1,2] = 6, a[1,3] = 7, a[2,2] = 10, a[2,3] = 11 - - Outputs: - - .. testoutput:: - - Tensor([[ 6. 7.] - [10. 11.]]) - """ - return _MGBIndexWrapper(self, mgb.opr.mesh_indexing) - - def set_mi(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.set_subtensor` which using mesh indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.set_mesh_indexing, val) - - def incr_mi(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.incr_subtensor` which using mesh indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.incr_mesh_indexing, val) - - @property - def batched_mi(self) -> _MGBIndexWrapper: - r""" - Return a object which supports getting subtensor by - batched mesh indexing. - - For Tensor ``a`` and index ``idx``, each value of the ``idx`` need to be a 2-dim matrix or slice. - Cartesian product ``... * idx[k-1][i] * idx[k][i] * idx[k+1][i] * ...`` will be a subtensor from ``a[i]``. - Each matrix ``idx[k]`` should have the size of ``batched_dim`` rows as ``idx[0]`` indicated. - And for slice value, it will apply same slice for each ``batched_dim``. For more details see the example below. - - Examples: - - .. testcode:: - - from megengine import tensor - a = tensor(np.arange(144, dtype=np.float32).reshape((3, 3, 4, 4))) - - print(a.batched_mi[:2, [[0],[1]],[[0,1],[2,3]],[[0],[1]]]) - # is equal to elements from a[0] with ``[0] * [0,1] * [0] = [[[(0,0,0)], [(0,1,0)]]]``(shape is [1,2,1]) - # and from a[1] with ``[1] * [2,3] * [1] = [[[(1,2,1)], [(1,3,1)]]]``(shape is also [1,2,1]) - # a[0,0,0,0] = 0, a[0,0,1,0] = 4, a[1,1,2,1] = 73, a[1,1,3,1] = 77 - - print(a.batched_mi[:2, [[0],[1]], :2, :1]) - # is equal to ``a.batched_mi[:2, [[0],[1]], [[0,1],[0,1]],[[0],[0]]]`` - - Outputs: - - .. testoutput:: - - Tensor([[[[ 0.] - [ 4.]]] - [[[73.] - [77.]]]]) - Tensor([[[[ 0.] - [ 4.]]] - [[[64.] - [68.]]]]) - """ - return _MGBIndexWrapper(self, mgb.opr.batched_mesh_indexing) - - def batched_set_mi(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.incr_subtensor` which using batched mesh indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.batched_set_mesh_indexing, val) - - def batched_incr_mi(self, val: "Tensor") -> _MGBIndexWrapper: - r""" - Equal to :meth:`~.Tensor.incr_subtensor` which using batched mesh indexing. - """ - return _MGBIndexWrapper(self, mgb.opr.batched_incr_mesh_indexing, val) - - def __array__(self, dtype=None): - if dtype is None: - return self.numpy() - else: - return self.numpy().astype(dtype, copy=False) - - def __int__(self): - return int(self.item()) - - def __index__(self): - return int(self.item()) - - def __round__(self, ndigits=0): - if ndigits != 0: - raise ValueError("ndigits must be 0 for Tensor.round") - return Tensor(mgb.opr.elemwise([self._symvar], mode="ROUND")) - - round = __round__ - - def sqrt(self): - r"""Return a tensor that each element is the square root of its - original value. - - """ - return Tensor(mgb.opr.sqrt(self._symvar)) - - def shapeof(self, axis=None): - r"""Return a Tensor that represent the shape of the tensor. - """ - return Tensor(mgb.opr.get_var_shape(self._symvar, axis=axis)) - - @property - def ndim(self): - r"""Return the number of dimensions of the tensor. - """ - return len(self._symvar.imm_shape) - - def __repr__(self): - piece = "Tensor(" - with np.printoptions(precision=4, suppress=True): - piece += "{}".format(str(self.numpy())) - if self.dtype != np.float32: - piece += ", dtype={}".format(np.dtype(self.dtype).name) - if self._comp_node.locator_logical != ("XPU", -1, 0): - piece += ", device={}".format(self.device) - piece += ")" - return piece - - def __bool__(self): - raise RuntimeError( - "Tensor object should not be converted to bool or used in a if statement. Use .numpy(), int() or float() if you want to use its value in if statement, be aware that this may lead to incorrect result in non-eager mode." - ) - - def __getstate__(self): - r""" __getstate__ will be called for pickle serialization or deep copy - """ - - assert (self.__val is not None) and ( - self.__sym is None - ), "Only SharedND initialized Tensor can be serialized or deep copied" - metadata = {"requires_grad": self.requires_grad} - state = { - "data": self.numpy(), - "device": self.device, - "dtype": self.dtype, - "metadata": metadata, - } - return state - - def __setstate__(self, state): - data = state.pop("data") - device = state.pop("device") - dtype = state.pop("dtype") - metadata = state.pop("metadata", {}) - requires_grad = metadata.pop("requires_grad", None) - snd = mgb.make_shared(device, value=data, dtype=dtype) - self._reset(snd, requires_grad=requires_grad) - - def __deepcopy__(self, memo): - """ - The default deepcopy will ignore other attributes except those defined at - __getstate__ and __setstate__ method. - So we need to add __deepcopy__ method to deepcopy correct attributes. - """ - assert (self.__val is not None) and ( - self.__sym is None - ), "Only SharedND initialized Tensor can be serialized or deep copied" - cls = self.__class__ - result = cls.__new__(cls) - memo[id(self)] = result - for k, v in self.__dict__.items(): - setattr(result, k, copy.deepcopy(v, memo)) - return result - - -def tensor( - data: Union[list, np.ndarray] = None, - *, - dtype: str = None, - device: mgb.CompNode = None, - requires_grad: bool = None -): - r"""A helper function to create a :class:`~.Tensor` using existing data. - - :param data: an existing data array, must be Python list, NumPy array or None. - :param dtype: target Tensor data type, one of ``("uint8", "int8", "int16", "int32", "float32", "float16")``. - :param device: target device for Tensor storing. - :param requires_grad: whether its gradiant will be calculated during :meth:`~.Optimizer.backward` - """ - supported_dtypes = ("uint8", "int8", "int16", "int32", "float32", "float16") - if isinstance(data, Tensor): - raise NotImplementedError - if dtype is not None and np.dtype(dtype).name not in supported_dtypes: - raise TypeError("unsupported dtype {}".format(dtype)) - if data is not None: - if not isinstance(data, np.ndarray): - data = np.array(data, dtype=dtype) - # In order to accept tensor([1]), - # Automaticlly convert to 32-bit number instead of numpy's default 64-bit when input data is not nparray. - dtype = mgb.to_mgb_supported_dtype(data.dtype) - if dtype is None: - if data.dtype.name not in supported_dtypes: - raise TypeError("unsupported dtype {}".format(data.dtype)) - - device, _ = _use_default_if_none(device, None) - shared_nd = mgb.make_shared(device, value=data, dtype=dtype) - return Tensor(shared_nd, requires_grad=requires_grad) - - -class TensorDict(collections.MutableMapping): - r""" - A helper class to maintain dict with Tensor key. - """ - - def __init__(self, *args, **kwargs): - self.data = {} - for i in args: - self.update(i) - self.update(**kwargs) - - class keyfn: - def __new__(cls, x: Tensor): - if not isinstance(x, Tensor): - return x - return super().__new__(cls) - - def __init__(self, x: Tensor): - self._data = x # do not save id directly to make pickle work - - def __hash__(self): - return id(self._data) - - def __eq__(self, other): - return isinstance(other, type(self)) and id(self._data) == id(other._data) - - def __getitem__(self, key): - _, v = self.data[self.keyfn(key)] - return v - - def __setitem__(self, key, value): - self.data[self.keyfn(key)] = key, value - - def __delitem__(self, key): - del self.data[self.keyfn(key)] - - def __iter__(self): - for _, (k, _) in self.data.items(): - yield k - - def __len__(self): - return len(self.data) diff --git a/python_module/megengine/core/tensor_factory.py b/python_module/megengine/core/tensor_factory.py deleted file mode 100644 index 4e83bdba..00000000 --- a/python_module/megengine/core/tensor_factory.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable, Optional, Union - -import megengine._internal as mgb - -from .graph import _use_default_if_none -from .tensor import Tensor - -__all__ = ["zeros", "ones"] - - -def scalar( - value, - dtype: type = None, - device: Optional[mgb.CompNode] = None, - comp_graph: Optional[mgb.CompGraph] = None, -) -> Tensor: - """ - convert ``value`` to the type of :class:`~.Tensor`. - """ - device, comp_graph = _use_default_if_none(device, comp_graph) - return Tensor(mgb.make_immutable(device, comp_graph, value, dtype=dtype, name=None)) - - -def zeros( - shape: Union[int, Iterable[int], Tensor], - dtype: type = None, - device: Optional[mgb.CompNode] = None, - comp_graph: Optional[mgb.CompGraph] = None, -) -> Tensor: - """ - Create a tensor filled with 0. - - :param shape: tensor shape - :param dtype: data type, Default: "int32" - :param device: Compute node of the matrix, Default: None - :param comp_graph: Compute graph of the matrix, Default: None - :return: tensor of zeros - - Examples: - - .. testcode:: - - import megengine as mge - - t = mge.zeros((2, 2), dtype="int32") - print(t.numpy()) - - Outputs: - - .. testoutput:: - - [[0 0] - [0 0]] - - """ - device, comp_graph = _use_default_if_none(device, comp_graph) - if isinstance(shape, (int, Tensor)): - shape = (shape,) - tensor = scalar(0, dtype=dtype, device=device, comp_graph=comp_graph) - tensor = tensor.broadcast(*shape) - return tensor - - -def ones( - shape: Union[int, Iterable[int], Tensor], - dtype: type = None, - device: Optional[mgb.CompNode] = None, - comp_graph: Optional[mgb.CompGraph] = None, -) -> Tensor: - """ - Create a tensor filled with 1. - - :param shape: tensor shape - :param dtype: data type, Default: "int32" - :param device: Compute node of the matrix, Default: None - :param comp_graph: Compute graph of the matrix, Default: None - :return: tensor of ones - - Examples: - - .. testcode:: - - import megengine as mge - - t = mge.ones((2, 2), dtype="float32") - print(t.numpy()) - - Outputs: - - .. testoutput:: - - [[1. 1.] - [1. 1.]] - - """ - device, comp_graph = _use_default_if_none(device, comp_graph) - if isinstance(shape, (int, Tensor)): - shape = (shape,) - tensor = scalar(1, dtype=dtype, device=device, comp_graph=comp_graph) - tensor = tensor.broadcast(*shape) - return tensor diff --git a/python_module/megengine/core/tensor_nn.py b/python_module/megengine/core/tensor_nn.py deleted file mode 100644 index e2bbc927..00000000 --- a/python_module/megengine/core/tensor_nn.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .tensor import Tensor, tensor - - -class Buffer(Tensor): - r"""A kind of Tensor with ``requires_grad=False``. - """ - - def __init__(self, value, *, dtype=None, device=None, requires_grad=False): - # pylint: disable=super-init-not-called - t = tensor(value, dtype=dtype, device=device, requires_grad=requires_grad) - self.__dict__.update(t.__dict__) - - -class Parameter(Tensor): - r"""A kind of Tensor that is to be considered a module parameter. - """ - - def __init__(self, value, *, dtype=None, device=None, requires_grad=True): - # pylint: disable=super-init-not-called - if isinstance(value, Tensor): - t = value - else: - t = tensor(value, dtype=dtype, device=device, requires_grad=requires_grad) - self.__dict__.update(t.__dict__) - - # broadcast and allreduce will not be performed in optimizer if replica_mode is False - self.replica_mode = True - - @property - def shape(self): - r"""Return shape of parameter. - """ - if self._Tensor__val is not None: - return self._Tensor__val.shape - elif self._Tensor__sym is not None: - return self._Tensor__sym.imm_shape - return None diff --git a/python_module/megengine/data/__init__.py b/python_module/megengine/data/__init__.py deleted file mode 100644 index 3b1e0d55..00000000 --- a/python_module/megengine/data/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .collator import Collator -from .dataloader import DataLoader -from .sampler import ( - Infinite, - RandomSampler, - ReplacementSampler, - Sampler, - SequentialSampler, -) diff --git a/python_module/megengine/data/_queue.py b/python_module/megengine/data/_queue.py deleted file mode 100644 index 8e359ae0..00000000 --- a/python_module/megengine/data/_queue.py +++ /dev/null @@ -1,144 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import binascii -import os -import queue -import subprocess -from multiprocessing import Queue - -import pyarrow -import pyarrow.plasma as plasma - -MGE_PLASMA_MEMORY = int(os.environ.get("MGE_PLASMA_MEMORY", 4000000000)) # 4GB - -# Each process only need to start one plasma store, so we set it as a global variable. -# TODO: how to share between different processes? -MGE_PLASMA_STORE_MANAGER = None - - -def _clear_plasma_store(): - # `_PlasmaStoreManager.__del__` will not be called automaticly in subprocess, - # so this function should be called explicitly - global MGE_PLASMA_STORE_MANAGER - if MGE_PLASMA_STORE_MANAGER is not None and MGE_PLASMA_STORE_MANAGER.refcount == 0: - del MGE_PLASMA_STORE_MANAGER - MGE_PLASMA_STORE_MANAGER = None - - -class _PlasmaStoreManager: - __initialized = False - - def __init__(self): - self.socket_name = "/tmp/mge_plasma_{}".format( - binascii.hexlify(os.urandom(8)).decode() - ) - debug_flag = bool(os.environ.get("MGE_DATALOADER_PLASMA_DEBUG", 0)) - # NOTE: this is a hack. Directly use `plasma_store` may make subprocess - # difficult to handle the exception happened in `plasma-store-server`. - # For `plasma_store` is just a wrapper of `plasma-store-server`, which use - # `os.execv` to call the executable `plasma-store-server`. - cmd_path = os.path.join(pyarrow.__path__[0], "plasma-store-server") - self.plasma_store = subprocess.Popen( - [cmd_path, "-s", self.socket_name, "-m", str(MGE_PLASMA_MEMORY),], - stdout=None if debug_flag else subprocess.DEVNULL, - stderr=None if debug_flag else subprocess.DEVNULL, - ) - self.__initialized = True - self.refcount = 1 - - def __del__(self): - if self.__initialized and self.plasma_store.returncode is None: - self.plasma_store.kill() - - -class PlasmaShmQueue: - def __init__(self, maxsize: int = 0): - r"""Use pyarrow in-memory plasma store to implement shared memory queue. - - Compared to native `multiprocess.Queue`, `PlasmaShmQueue` avoid pickle/unpickle - and communication overhead, leading to better performance in multi-process - application. - - :type maxsize: int - :param maxsize: maximum size of the queue, `None` means no limit. (default: ``None``) - """ - - # Lazy start the plasma store manager - global MGE_PLASMA_STORE_MANAGER - if MGE_PLASMA_STORE_MANAGER is None: - try: - MGE_PLASMA_STORE_MANAGER = _PlasmaStoreManager() - except Exception as e: - err_info = ( - "Please make sure pyarrow installed correctly!\n" - "You can try reinstall pyarrow and see if you can run " - "`plasma_store -s /tmp/mge_plasma_xxx -m 1000` normally." - ) - raise RuntimeError( - "Exception happened in starting plasma_store: {}\n" - "Tips: {}".format(str(e), err_info) - ) - else: - MGE_PLASMA_STORE_MANAGER.refcount += 1 - - self.socket_name = MGE_PLASMA_STORE_MANAGER.socket_name - - # TODO: how to catch the exception happened in `plasma.connect`? - self.client = None - - # Used to store the header for the data.(ObjectIDs) - self.queue = Queue(maxsize) # type: Queue - - def put(self, data, block=True, timeout=None): - if self.client is None: - self.client = plasma.connect(self.socket_name) - try: - object_id = self.client.put(data) - except plasma.PlasmaStoreFull: - raise RuntimeError("plasma store out of memory!") - try: - self.queue.put(object_id, block, timeout) - except queue.Full: - self.client.delete([object_id]) - raise queue.Full - - def get(self, block=True, timeout=None): - if self.client is None: - self.client = plasma.connect(self.socket_name) - object_id = self.queue.get(block, timeout) - if not self.client.contains(object_id): - raise RuntimeError( - "ObjectID: {} not found in plasma store".format(object_id) - ) - data = self.client.get(object_id) - self.client.delete([object_id]) - return data - - def qsize(self): - return self.queue.qsize() - - def empty(self): - return self.queue.empty() - - def join(self): - self.queue.join() - - def disconnect_client(self): - if self.client is not None: - self.client.disconnect() - - def close(self): - self.queue.close() - self.disconnect_client() - global MGE_PLASMA_STORE_MANAGER - MGE_PLASMA_STORE_MANAGER.refcount -= 1 - _clear_plasma_store() - - def cancel_join_thread(self): - self.queue.cancel_join_thread() diff --git a/python_module/megengine/data/collator.py b/python_module/megengine/data/collator.py deleted file mode 100644 index 952fc398..00000000 --- a/python_module/megengine/data/collator.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2016- Facebook, Inc (Adam Paszke) -# Copyright (c) 2014- Facebook, Inc (Soumith Chintala) -# Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert) -# Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu) -# Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu) -# Copyright (c) 2011-2013 NYU (Clement Farabet) -# Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston) -# Copyright (c) 2006 Idiap Research Institute (Samy Bengio) -# Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz) -# --------------------------------------------------------------------- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# -# This file has been modified by Megvii ("Megvii Modifications"). -# All Megvii Modifications are Copyright (C) 2014-2020 Megvii Inc. All rights reserved. -# ---------------------------------------------------------------------- -import collections.abc -import re - -import numpy as np - -np_str_obj_array_pattern = re.compile(r"[aO]") -default_collate_err_msg_format = ( - "default_collator: inputs must contain numpy arrays, numbers, " - "Unicode strings, bytes, dicts or lists; found {}" -) - - -class Collator: - r""" - Used for merge a list of samples to form a mini-batch of Tenor(s). Used when using batched loading from a dataset. - modified from https://github.com/pytorch/pytorch/blob/master/torch/utils/data/_utils/collate.py - """ - - def apply(self, inputs): - """ - input : sequence_N(tuple(CHW, C, CK)) - output : tuple(NCHW, NC, NCK) - """ - elem = inputs[0] - elem_type = type(elem) - if ( - elem_type.__module__ == "numpy" - and elem_type.__name__ != "str_" - and elem_type.__name__ != "string_" - ): - elem = inputs[0] - if elem_type.__name__ == "ndarray": - # array of string classes and object - if np_str_obj_array_pattern.search(elem.dtype.str) is not None: - raise TypeError(default_collate_err_msg_format.format(elem.dtype)) - - return np.ascontiguousarray(np.stack(inputs)) - elif elem.shape == (): # scalars - return np.array(inputs) - elif isinstance(elem, float): - return np.array(inputs, dtype=np.float64) - elif isinstance(elem, int): - return np.array(inputs) - elif isinstance(elem, (str, bytes)): - return inputs - elif isinstance(elem, collections.abc.Mapping): - return {key: self.apply([d[key] for d in inputs]) for key in elem} - elif isinstance(elem, tuple) and hasattr(elem, "_fields"): # namedtuple - return elem_type(*(self.apply(samples) for samples in zip(*inputs))) - elif isinstance(elem, collections.abc.Sequence): - transposed = zip(*inputs) - return [self.apply(samples) for samples in transposed] - - raise TypeError(default_collate_err_msg_format.format(elem_type)) diff --git a/python_module/megengine/data/dataloader.py b/python_module/megengine/data/dataloader.py deleted file mode 100644 index 1fd3482d..00000000 --- a/python_module/megengine/data/dataloader.py +++ /dev/null @@ -1,500 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import math -import multiprocessing -import queue -import random -import time - -import numpy as np - -from ..logger import get_logger -from ..random.rng import _random_seed_generator -from .collator import Collator -from .dataset import Dataset -from .sampler import Sampler, SequentialSampler -from .transform import PseudoTransform, Transform - -logger = get_logger(__name__) - - -MP_QUEUE_GET_TIMEOUT = 5 - - -class DataLoader: - __initialized = False - - def __init__( - self, - dataset: Dataset, - sampler: Sampler = None, - transform: Transform = None, - collator: Collator = None, - num_workers: int = 0, - timeout: int = 0, - divide: bool = False, - ): - r"""Provides a convenient way to iterate on a given dataset. - - `DataLoader` combines a dataset with sampler, transform and collator, - make it flexible to get minibatch continually from a dataset. - - :type dataset: Dataset - :param dataset: dataset from which to load the minibatch. - :type sampler: Sampler - :param sampler: defines the strategy to sample data from the dataset. - If specified, :attr:`shuffle` must be ``False``. - :type transform: Transform - :param transform: defined the transforming strategy for a sampled batch. - (default: ``None``) - :type collator: Collator - :param collator: defined the merging strategy for a transformed batch. - (default: ``None``) - :type num_workers: int - :param num_workers: the number of sub-process to load, transform and collate - the batch. ``0`` means using single-process. (default: ``0``) - :type timeout: int - :param timeout: if positive, means the timeout value(second) for collecting a - batch from workers. (default: 0) - :type divide: bool - :param divide: define the paralleling strategy in multi-processing mode. - ``True`` means one batch is divided into :attr:`num_workers` pieces, and - the workers will process these pieces parallelly. ``False`` means - different sub-process will process different batch. (default: ``False``) - - """ - - if num_workers < 0: - raise ValueError("num_workers should not be negative") - - if timeout < 0: - raise ValueError("timeout should not be negative") - - if divide and num_workers <= 1: - raise ValueError("divide should not be set to True when num_workers <= 1") - - self.dataset = dataset - self.num_workers = num_workers - self.timeout = timeout - - self.divide = divide - - if sampler is None: - self.sampler = SequentialSampler(dataset, batch_size=1, drop_last=False) - else: - self.sampler = sampler - - if divide: - if self.sampler.batch_size <= self.num_workers: - raise ValueError( - "batch size must not smaller than num_workers in divide mode." - ) - elif self.sampler.batch_size % self.num_workers: - logger.warning( - "batch size is not divisible by num_workers, may lose performance in divide mode." - ) - - if transform is None: - self.transform = PseudoTransform() - else: - self.transform = transform - - if collator is None: - self.collator = Collator() - else: - self.collator = collator - - self.__initialized = True - - def __iter__(self): - if self.num_workers == 0: - return _SerialDataLoaderIter(self) - else: - return _ParallelDataLoaderIter(self) - - def __len__(self): - return len(self.sampler) - - -class _BaseDataLoaderIter: - def __init__(self, loader): - self.dataset = loader.dataset - self.sampler = loader.sampler - self.seed = _random_seed_generator().__next__() - self.transform = loader.transform - self.collator = loader.collator - self.num_workers = loader.num_workers - self.timeout = loader.timeout - self.divide = loader.divide - self.num_processed = 0 - - def _get_next_batch(self): - raise NotImplementedError - - def __len__(self): - return len(self.sampler) - - def __iter__(self): - return self - - def __next__(self): - if self.num_processed >= len(self): - raise StopIteration - minibatch = self._get_next_batch() - self.num_processed += 1 - return minibatch - - -class _SerialDataLoaderIter(_BaseDataLoaderIter): - def __init__(self, loader): - super(_SerialDataLoaderIter, self).__init__(loader) - self.indices_iter = iter(self.sampler) - - def _get_next_batch(self): - indices = next(self.indices_iter) - items = [self.dataset[idx] for idx in indices] - trans_items = self.transform.apply_batch(items) - return self.collator.apply(trans_items) - - -class _ParallelDataLoaderIter(_BaseDataLoaderIter): - __initialized = False - - def __init__(self, loader): - super(_ParallelDataLoaderIter, self).__init__(loader) - - self.task_queues = [ - multiprocessing.Queue(maxsize=2) for _ in range(self.num_workers) - ] - - self.feed_batch_idx = multiprocessing.Value("i", 0) - self.target_batch_idx = multiprocessing.Value("i", 0) - self.shutdown_flag = multiprocessing.Value("i", 0) - - self.trans_data_queues = [ - multiprocessing.Queue(maxsize=1) for _ in range(self.num_workers) - ] - - # use shared-memory queue implemented by pyarrow plasma store. - from ._queue import PlasmaShmQueue - - self.batch_queue = PlasmaShmQueue(maxsize=2) - - self.task_feeding_worker = multiprocessing.Process( - target=_task_feeding_loop, - args=( - iter(self.sampler), - self.task_queues, - self.num_workers, - self.divide, - self.shutdown_flag, - self.feed_batch_idx, - ), - daemon=True, - ) - self.task_feeding_worker.start() - - self.workers = [] - for worker_id in range(self.num_workers): - worker = multiprocessing.Process( - target=_worker_loop, - args=( - self.dataset, - self.task_queues[worker_id], - self.trans_data_queues[worker_id], - self.transform, - self.seed + worker_id + 1, - self.shutdown_flag, - ), - daemon=True, - ) - worker.start() - self.workers.append(worker) - - if self.divide: - self.data_collecting_worker = multiprocessing.Process( - target=_data_gathering_loop, - args=( - self.trans_data_queues, - self.batch_queue, - self.collator, - len(self), - self.num_workers, - self.shutdown_flag, - self.target_batch_idx, - ), - daemon=True, - ) - else: - self.data_collecting_worker = multiprocessing.Process( - target=_data_selecting_loop, - args=( - self.trans_data_queues, - self.batch_queue, - self.collator, - len(self), - self.num_workers, - self.shutdown_flag, - self.target_batch_idx, - ), - daemon=True, - ) - self.data_collecting_worker.start() - - self.__initialized = True - - def _check_workers(self): - # Check the status of each worker. - if not self.data_collecting_worker.is_alive(): - exitcode = self.task_feeding_worker.exitcode - if exitcode != 0: - raise RuntimeError("data collecting worker died. {}".format(exitcode)) - - if not self.task_feeding_worker.is_alive(): - exitcode = self.task_feeding_worker.exitcode - if exitcode != 0: - raise RuntimeError("task feeding worker died. {}".format(exitcode)) - - for worker_id, worker in enumerate(self.workers): - if not worker.is_alive(): - exitcode = worker.exitcode - if exitcode != 0: - raise RuntimeError("worker:{} died. {}".format(worker_id, exitcode)) - - logger.debug("all workers are alive.") - - def _try_get_next_batch(self): - start_time = time.time() - while True: - self._check_workers() - try: - return self.batch_queue.get(timeout=1) - except queue.Empty: - logger.debug("batch queue empty!") - waited_time = time.time() - start_time - if self.timeout > 0: - if waited_time > self.timeout: - raise RuntimeError("get_next_batch timeout!") - - def _get_next_batch(self): - batch_data = self._try_get_next_batch() - return batch_data - - def _shutdown(self): - with self.shutdown_flag.get_lock(): - self.shutdown_flag.value = 1 - - if self.task_feeding_worker.is_alive(): - self.task_feeding_worker.terminate() - self.task_feeding_worker.join() - - if self.data_collecting_worker.is_alive(): - self.data_collecting_worker.terminate() - self.data_collecting_worker.join() - - for worker in self.workers: - if worker.is_alive(): - worker.terminate() - worker.join() - - for q in self.trans_data_queues: - q.cancel_join_thread() - q.close() - - for q in self.task_queues: - q.cancel_join_thread() - q.close() - - self.batch_queue.cancel_join_thread() - self.batch_queue.close() - - def __del__(self): - if self.__initialized: - self._shutdown() - - -def _task_feeding_loop( - indices_iter, task_queues, num_workers, divide, shutdown_flag, feed_batch_idx -): - # Feed the indices into the task queues - while True: - if shutdown_flag.value == 1: - break - batch_idx = feed_batch_idx.value - try: - indices = next(indices_iter) - except StopIteration: - break - if divide: - # make sure all task_queues is ready for put - while any([q.full() for q in task_queues]): - if shutdown_flag.value == 1: - return - # divide into small pieces, feed to different workers. - sub_num = math.ceil(len(indices) / num_workers) - for worker_id in range(num_workers): - sub_indices = indices[worker_id * sub_num : (worker_id + 1) * sub_num] - task_queues[worker_id].put((batch_idx, sub_indices)) - else: - # distribute tasks to different workers uniformly. - target_id = batch_idx % num_workers - while task_queues[target_id].full(): - if shutdown_flag.value == 1: - return - task_queues[target_id].put((batch_idx, indices)) - with feed_batch_idx.get_lock(): - feed_batch_idx.value += 1 - - -def _worker_loop(dataset, task_queue, trans_data_queue, transform, seed, shutdown_flag): - # Get dataset items and do the transform - random.seed(seed) - np.random.seed(seed) - while True: - if shutdown_flag.value == 1: - break - try: - batch_idx, indices = task_queue.get(timeout=MP_QUEUE_GET_TIMEOUT) - except queue.Empty: - continue - if len(indices) > 0: - items = [dataset[idx] for idx in indices] - trans_items = transform.apply_batch(items) - else: - # in case of incomplete last batch - trans_items = () - while True: - try: - trans_data_queue.put((batch_idx, trans_items), timeout=1) - break - except queue.Full: - if shutdown_flag.value == 1: - break - logger.debug("batch part queue is full!") - - -def _data_gathering_loop( - trans_data_queues, - batch_queue, - collator, - length, - num_workers, - shutdown_flag, - target_idx, -): - # Gathering the small pieces of batch data into full batch data - while True: - if shutdown_flag.value == 1: - break - - target_batch_idx = target_idx.value - - if target_batch_idx >= length: - break - - full_trans_items = [] - for worker_id in range(num_workers): - while True: - try: - batch_idx, trans_items = trans_data_queues[worker_id].get( - timeout=MP_QUEUE_GET_TIMEOUT - ) - break - except queue.Empty: - if shutdown_flag.value == 1: - break - logger.debug( - "worker:{} data queue get timeout! target batch idx:{}".format( - worker_id, target_batch_idx - ) - ) - if batch_idx != target_batch_idx: - raise RuntimeError( - "Unexperted batch_idx in data gathering loop. worker_id:{}.".format( - worker_id - ) - ) - else: - full_trans_items.extend(trans_items) - - # Merge different parts into a batch. - full_batch = collator.apply(full_trans_items) - - while True: - try: - batch_queue.put(full_batch, timeout=1) - break - except queue.Full: - if shutdown_flag.value == 1: - break - logger.debug("batch queue is full!") - - with target_idx.get_lock(): - target_idx.value += 1 - - batch_queue.disconnect_client() - - -def _data_selecting_loop( - trans_data_queues, - batch_queue, - collator, - length, - num_workers, - shutdown_flag, - target_idx, -): - # Make sure that batch is generated exactly with the same order as generated indices - while True: - if shutdown_flag.value == 1: - break - - target_batch_idx = target_idx.value - - if target_batch_idx >= length: - break - - target_worker_id = target_batch_idx % num_workers - while True: - try: - batch_idx, trans_items = trans_data_queues[target_worker_id].get( - timeout=MP_QUEUE_GET_TIMEOUT - ) - batch_data = collator.apply(trans_items) - break - except queue.Empty: - if shutdown_flag.value == 1: - break - logger.debug( - "worker:{} data queue get timeout! target batch idx:{}".format( - target_worker_id, target_batch_idx - ) - ) - - if batch_idx != target_batch_idx: - raise RuntimeError( - "batch_idx {} mismatch the target_batch_idx {}".format( - batch_idx, target_batch_idx - ) - ) - - while True: - try: - batch_queue.put(batch_data, timeout=1) - break - except queue.Full: - if shutdown_flag.value == 1: - break - logger.debug("batch queue is full!") - - with target_idx.get_lock(): - target_idx.value += 1 - - batch_queue.disconnect_client() diff --git a/python_module/megengine/data/dataset/__init__.py b/python_module/megengine/data/dataset/__init__.py deleted file mode 100644 index 8b70d221..00000000 --- a/python_module/megengine/data/dataset/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .meta_dataset import ArrayDataset, Dataset, MapDataset, StreamDataset -from .vision import * diff --git a/python_module/megengine/data/dataset/meta_dataset.py b/python_module/megengine/data/dataset/meta_dataset.py deleted file mode 100644 index 4415a427..00000000 --- a/python_module/megengine/data/dataset/meta_dataset.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import ABC, abstractmethod -from typing import Tuple - - -class Dataset(ABC): - r""" - An abstract class for all Datasets - """ - - @abstractmethod - def __init__(self): - pass - - -class MapDataset(Dataset): - r""" - An abstract class for map data - __getitem__ and __len__ method are aditionally needed - """ - - @abstractmethod - def __init__(self): - pass - - @abstractmethod - def __getitem__(self, index): - pass - - @abstractmethod - def __len__(self): - pass - - -class StreamDataset(Dataset): - r""" - An abstract class for stream data - __iter__ method is aditionally needed - """ - - @abstractmethod - def __init__(self): - pass - - @abstractmethod - def __iter__(self): - pass - - -class ArrayDataset(MapDataset): - def __init__(self, *arrays): - r""" - ArrayDataset is a dataset for numpy array data, one or more numpy arrays - are needed to initiate the dataset. And the dimensions represented sample number - are expected to be the same. - """ - super().__init__() - if not all(len(arrays[0]) == len(array) for array in arrays): - raise ValueError("lengths of input arrays are inconsistent") - self.arrays = arrays - - def __getitem__(self, index: int) -> Tuple: - return tuple(array[index] for array in self.arrays) - - def __len__(self) -> int: - return len(self.arrays[0]) diff --git a/python_module/megengine/data/dataset/vision/__init__.py b/python_module/megengine/data/dataset/vision/__init__.py deleted file mode 100644 index dd2b0fc3..00000000 --- a/python_module/megengine/data/dataset/vision/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .cifar import CIFAR10, CIFAR100 -from .cityscapes import Cityscapes -from .coco import COCO -from .folder import ImageFolder -from .imagenet import ImageNet -from .meta_vision import VisionDataset -from .mnist import MNIST -from .objects365 import Objects365 -from .voc import PascalVOC diff --git a/python_module/megengine/data/dataset/vision/cifar.py b/python_module/megengine/data/dataset/vision/cifar.py deleted file mode 100644 index 9ce73688..00000000 --- a/python_module/megengine/data/dataset/vision/cifar.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import pickle -import tarfile -from typing import Tuple - -import numpy as np - -from ....logger import get_logger -from .meta_vision import VisionDataset -from .utils import _default_dataset_root, load_raw_data_from_url - -logger = get_logger(__name__) - - -class CIFAR10(VisionDataset): - r""" ``Dataset`` for CIFAR10 meta data - """ - - url_path = "http://www.cs.utoronto.ca/~kriz/" - raw_file_name = "cifar-10-python.tar.gz" - raw_file_md5 = "c58f30108f718f92721af3b95e74349a" - raw_file_dir = "cifar-10-batches-py" - train_batch = [ - "data_batch_1", - "data_batch_2", - "data_batch_3", - "data_batch_4", - "data_batch_5", - ] - test_batch = ["test_batch"] - meta_info = {"name": "batches.meta"} - - def __init__( - self, - root: str = None, - train: bool = True, - download: bool = True, - timeout: int = 500, - ): - super().__init__(root, order=("image", "image_category")) - - self.timeout = timeout - - # process the root path - if root is None: - self.root = self._default_root - if not os.path.exists(self.root): - os.makedirs(self.root) - else: - self.root = root - if not os.path.exists(self.root): - if download: - logger.debug( - "dir %s does not exist, will be automatically created", - self.root, - ) - os.makedirs(self.root) - else: - raise ValueError("dir %s does not exist" % self.root) - - self.target_file = os.path.join(self.root, self.raw_file_dir) - - # check existence of target pickle dir, if exists load the - # pickle file no matter what download is set - if os.path.exists(self.target_file): - if train: - self.arrays = self.bytes2array(self.train_batch) - else: - self.arrays = self.bytes2array(self.test_batch) - else: - if download: - self.download() - if train: - self.arrays = self.bytes2array(self.train_batch) - else: - self.arrays = self.bytes2array(self.test_batch) - else: - raise ValueError( - "dir does not contain target file %s, please set download=True" - % (self.target_file) - ) - - def __getitem__(self, index: int) -> Tuple: - return tuple(array[index] for array in self.arrays) - - def __len__(self) -> int: - return len(self.arrays[0]) - - @property - def _default_root(self): - return os.path.join(_default_dataset_root(), self.__class__.__name__) - - @property - def meta(self): - meta_path = os.path.join(self.root, self.raw_file_dir, self.meta_info["name"]) - with open(meta_path, "rb") as f: - meta = pickle.load(f, encoding="bytes") - return meta - - def download(self): - url = self.url_path + self.raw_file_name - load_raw_data_from_url( - url, self.raw_file_name, self.raw_file_md5, self.root, self.timeout - ) - self.process() - - def untar(self, file_path, dirs): - assert file_path.endswith(".tar.gz") - logger.debug("untar file %s to %s", file_path, dirs) - t = tarfile.open(file_path) - t.extractall(path=dirs) - - def bytes2array(self, filenames): - data = [] - label = [] - for filename in filenames: - path = os.path.join(self.root, self.raw_file_dir, filename) - logger.debug("unpickle file %s", path) - with open(path, "rb") as fo: - dic = pickle.load(fo, encoding="bytes") - batch_data = dic[b"data"].reshape(-1, 3, 32, 32).transpose((0, 2, 3, 1)) - data.extend(list(batch_data[..., [2, 1, 0]])) - label.extend(dic[b"labels"]) - label = np.array(label, dtype=np.int32) - return (data, label) - - def process(self): - logger.info("process raw data ...") - self.untar(os.path.join(self.root, self.raw_file_name), self.root) - - -class CIFAR100(CIFAR10): - url_path = "http://www.cs.utoronto.ca/~kriz/" - raw_file_name = "cifar-100-python.tar.gz" - raw_file_md5 = "eb9058c3a382ffc7106e4002c42a8d85" - raw_file_dir = "cifar-100-python" - train_batch = ["train"] - test_batch = ["test"] - meta_info = {"name": "meta"} - - @property - def meta(self): - meta_path = os.path.join(self.root, self.raw_file_dir, self.meta_info["name"]) - with open(meta_path, "rb") as f: - meta = pickle.load(f, encoding="bytes") - return meta - - def bytes2array(self, filenames): - data = [] - fine_label = [] - coarse_label = [] - for filename in filenames: - path = os.path.join(self.root, self.raw_file_dir, filename) - logger.debug("unpickle file %s", path) - with open(path, "rb") as fo: - dic = pickle.load(fo, encoding="bytes") - batch_data = dic[b"data"].reshape(-1, 3, 32, 32).transpose((0, 2, 3, 1)) - data.extend(list(batch_data[..., [2, 1, 0]])) - fine_label.extend(dic[b"fine_labels"]) - coarse_label.extend(dic[b"coarse_labels"]) - fine_label = np.array(fine_label, dtype=np.int32) - coarse_label = np.array(coarse_label, dtype=np.int32) - return data, fine_label, coarse_label diff --git a/python_module/megengine/data/dataset/vision/cityscapes.py b/python_module/megengine/data/dataset/vision/cityscapes.py deleted file mode 100644 index aa05ac92..00000000 --- a/python_module/megengine/data/dataset/vision/cityscapes.py +++ /dev/null @@ -1,151 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# --------------------------------------------------------------------- -# Part of the following code in this file refs to torchvision -# BSD 3-Clause License -# -# Copyright (c) Soumith Chintala 2016, -# All rights reserved. -# --------------------------------------------------------------------- -import json -import os - -import cv2 -import numpy as np - -from .meta_vision import VisionDataset - - -class Cityscapes(VisionDataset): - r"""`Cityscapes `_ Dataset. - """ - - supported_order = ( - "image", - "mask", - "info", - ) - - def __init__(self, root, image_set, mode, *, order=None): - super().__init__(root, order=order, supported_order=self.supported_order) - - city_root = self.root - if not os.path.isdir(city_root): - raise RuntimeError("Dataset not found or corrupted.") - - self.mode = mode - self.images_dir = os.path.join(city_root, "leftImg8bit", image_set) - self.masks_dir = os.path.join(city_root, self.mode, image_set) - self.images, self.masks = [], [] - # self.target_type = ["instance", "semantic", "polygon", "color"] - - # for semantic segmentation - if mode == "gtFine": - valid_modes = ("train", "test", "val") - else: - valid_modes = ("train", "train_extra", "val") - - for city in os.listdir(self.images_dir): - img_dir = os.path.join(self.images_dir, city) - mask_dir = os.path.join(self.masks_dir, city) - for file_name in os.listdir(img_dir): - mask_name = "{}_{}".format( - file_name.split("_leftImg8bit")[0], - self._get_target_suffix(self.mode, "semantic"), - ) - self.images.append(os.path.join(img_dir, file_name)) - self.masks.append(os.path.join(mask_dir, mask_name)) - - def __getitem__(self, index): - target = [] - for k in self.order: - if k == "image": - image = cv2.imread(self.images[index], cv2.IMREAD_COLOR) - target.append(image) - elif k == "mask": - mask = cv2.imread(self.masks[index], cv2.IMREAD_GRAYSCALE) - mask = self._trans_mask(mask) - mask = mask[:, :, np.newaxis] - target.append(mask) - elif k == "info": - if image is None: - image = cv2.imread(self.images[index], cv2.IMREAD_COLOR) - info = [image.shape[0], image.shape[1], self.images[index]] - target.append(info) - else: - raise NotImplementedError - - return tuple(target) - - def __len__(self): - return len(self.images) - - def _trans_mask(self, mask): - trans_labels = [ - 7, - 8, - 11, - 12, - 13, - 17, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 31, - 32, - 33, - ] - label = np.ones(mask.shape) * 255 - for i, tl in enumerate(trans_labels): - label[mask == tl] = i - return label.astype(np.uint8) - - def _get_target_suffix(self, mode, target_type): - if target_type == "instance": - return "{}_instanceIds.png".format(mode) - elif target_type == "semantic": - return "{}_labelIds.png".format(mode) - elif target_type == "color": - return "{}_color.png".format(mode) - else: - return "{}_polygons.json".format(mode) - - def _load_json(self, path): - with open(path, "r") as file: - data = json.load(file) - return data - - class_names = ( - "road", - "sidewalk", - "building", - "wall", - "fence", - "pole", - "traffic light", - "traffic sign", - "vegetation", - "terrain", - "sky", - "person", - "rider", - "car", - "truck", - "bus", - "train", - "motorcycle", - "bicycle", - ) diff --git a/python_module/megengine/data/dataset/vision/coco.py b/python_module/megengine/data/dataset/vision/coco.py deleted file mode 100644 index 11366de0..00000000 --- a/python_module/megengine/data/dataset/vision/coco.py +++ /dev/null @@ -1,366 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# --------------------------------------------------------------------- -# Part of the following code in this file refs to maskrcnn-benchmark -# MIT License -# -# Copyright (c) 2018 Facebook -# --------------------------------------------------------------------- -import json -import os -from collections import defaultdict - -import cv2 -import numpy as np - -from .meta_vision import VisionDataset - -min_keypoints_per_image = 10 - - -def _count_visible_keypoints(anno): - return sum(sum(1 for v in ann["keypoints"][2::3] if v > 0) for ann in anno) - - -def has_valid_annotation(anno, order): - # if it"s empty, there is no annotation - if len(anno) == 0: - return False - if "boxes" in order or "boxes_category" in order: - if "bbox" not in anno[0]: - return False - if "keypoints" in order: - if "keypoints" not in anno[0]: - return False - # for keypoint detection tasks, only consider valid images those - # containing at least min_keypoints_per_image - if _count_visible_keypoints(anno) < min_keypoints_per_image: - return False - return True - - -class COCO(VisionDataset): - r"""`MS COCO `_ Dataset. - """ - - supported_order = ( - "image", - "boxes", - "boxes_category", - "keypoints", - # TODO: need to check - # "polygons", - "info", - ) - - def __init__( - self, root, ann_file, remove_images_without_annotations=False, *, order=None - ): - super().__init__(root, order=order, supported_order=self.supported_order) - - with open(ann_file, "r") as f: - dataset = json.load(f) - - self.imgs = dict() - for img in dataset["images"]: - # for saving memory - if "license" in img: - del img["license"] - if "coco_url" in img: - del img["coco_url"] - if "date_captured" in img: - del img["date_captured"] - if "flickr_url" in img: - del img["flickr_url"] - self.imgs[img["id"]] = img - - self.img_to_anns = defaultdict(list) - for ann in dataset["annotations"]: - # for saving memory - if ( - "boxes" not in self.order - and "boxes_category" not in self.order - and "bbox" in ann - ): - del ann["bbox"] - if "polygons" not in self.order and "segmentation" in ann: - del ann["segmentation"] - self.img_to_anns[ann["image_id"]].append(ann) - - self.cats = dict() - for cat in dataset["categories"]: - self.cats[cat["id"]] = cat - - self.ids = list(sorted(self.imgs.keys())) - - # filter images without detection annotations - if remove_images_without_annotations: - ids = [] - for img_id in self.ids: - anno = self.img_to_anns[img_id] - # filter crowd annotations - anno = [obj for obj in anno if obj["iscrowd"] == 0] - anno = [ - obj for obj in anno if obj["bbox"][2] > 0 and obj["bbox"][3] > 0 - ] - if has_valid_annotation(anno, order): - ids.append(img_id) - self.img_to_anns[img_id] = anno - else: - del self.imgs[img_id] - del self.img_to_anns[img_id] - self.ids = ids - - self.json_category_id_to_contiguous_id = { - v: i + 1 for i, v in enumerate(sorted(self.cats.keys())) - } - - self.contiguous_category_id_to_json_id = { - v: k for k, v in self.json_category_id_to_contiguous_id.items() - } - - def __getitem__(self, index): - img_id = self.ids[index] - anno = self.img_to_anns[img_id] - - target = [] - for k in self.order: - if k == "image": - file_name = self.imgs[img_id]["file_name"] - path = os.path.join(self.root, file_name) - image = cv2.imread(path, cv2.IMREAD_COLOR) - target.append(image) - elif k == "boxes": - boxes = [obj["bbox"] for obj in anno] - boxes = np.array(boxes, dtype=np.float32).reshape(-1, 4) - # transfer boxes from xywh to xyxy - boxes[:, 2:] += boxes[:, :2] - target.append(boxes) - elif k == "boxes_category": - boxes_category = [obj["category_id"] for obj in anno] - boxes_category = [ - self.json_category_id_to_contiguous_id[c] for c in boxes_category - ] - boxes_category = np.array(boxes_category, dtype=np.int32) - target.append(boxes_category) - elif k == "keypoints": - keypoints = [obj["keypoints"] for obj in anno] - keypoints = np.array(keypoints, dtype=np.float32).reshape( - -1, len(self.keypoint_names), 3 - ) - target.append(keypoints) - elif k == "polygons": - polygons = [obj["segmentation"] for obj in anno] - polygons = [ - [np.array(p, dtype=np.float32).reshape(-1, 2) for p in ps] - for ps in polygons - ] - target.append(polygons) - elif k == "info": - info = self.imgs[img_id] - info = [info["height"], info["width"], info["file_name"]] - target.append(info) - else: - raise NotImplementedError - - return tuple(target) - - def __len__(self): - return len(self.ids) - - def get_img_info(self, index): - img_id = self.ids[index] - img_info = self.imgs[img_id] - return img_info - - class_names = ( - "person", - "bicycle", - "car", - "motorcycle", - "airplane", - "bus", - "train", - "truck", - "boat", - "traffic light", - "fire hydrant", - "stop sign", - "parking meter", - "bench", - "bird", - "cat", - "dog", - "horse", - "sheep", - "cow", - "elephant", - "bear", - "zebra", - "giraffe", - "backpack", - "umbrella", - "handbag", - "tie", - "suitcase", - "frisbee", - "skis", - "snowboard", - "sports ball", - "kite", - "baseball bat", - "baseball glove", - "skateboard", - "surfboard", - "tennis racket", - "bottle", - "wine glass", - "cup", - "fork", - "knife", - "spoon", - "bowl", - "banana", - "apple", - "sandwich", - "orange", - "broccoli", - "carrot", - "hot dog", - "pizza", - "donut", - "cake", - "chair", - "couch", - "potted plant", - "bed", - "dining table", - "toilet", - "tv", - "laptop", - "mouse", - "remote", - "keyboard", - "cell phone", - "microwave", - "oven", - "toaster", - "sink", - "refrigerator", - "book", - "clock", - "vase", - "scissors", - "teddy bear", - "hair drier", - "toothbrush", - ) - - classes_originID = { - "person": 1, - "bicycle": 2, - "car": 3, - "motorcycle": 4, - "airplane": 5, - "bus": 6, - "train": 7, - "truck": 8, - "boat": 9, - "traffic light": 10, - "fire hydrant": 11, - "stop sign": 13, - "parking meter": 14, - "bench": 15, - "bird": 16, - "cat": 17, - "dog": 18, - "horse": 19, - "sheep": 20, - "cow": 21, - "elephant": 22, - "bear": 23, - "zebra": 24, - "giraffe": 25, - "backpack": 27, - "umbrella": 28, - "handbag": 31, - "tie": 32, - "suitcase": 33, - "frisbee": 34, - "skis": 35, - "snowboard": 36, - "sports ball": 37, - "kite": 38, - "baseball bat": 39, - "baseball glove": 40, - "skateboard": 41, - "surfboard": 42, - "tennis racket": 43, - "bottle": 44, - "wine glass": 46, - "cup": 47, - "fork": 48, - "knife": 49, - "spoon": 50, - "bowl": 51, - "banana": 52, - "apple": 53, - "sandwich": 54, - "orange": 55, - "broccoli": 56, - "carrot": 57, - "hot dog": 58, - "pizza": 59, - "donut": 60, - "cake": 61, - "chair": 62, - "couch": 63, - "potted plant": 64, - "bed": 65, - "dining table": 67, - "toilet": 70, - "tv": 72, - "laptop": 73, - "mouse": 74, - "remote": 75, - "keyboard": 76, - "cell phone": 77, - "microwave": 78, - "oven": 79, - "toaster": 80, - "sink": 81, - "refrigerator": 82, - "book": 84, - "clock": 85, - "vase": 86, - "scissors": 87, - "teddy bear": 88, - "hair drier": 89, - "toothbrush": 90, - } - - keypoint_names = ( - "nose", - "left_eye", - "right_eye", - "left_ear", - "right_ear", - "left_shoulder", - "right_shoulder", - "left_elbow", - "right_elbow", - "left_wrist", - "right_wrist", - "left_hip", - "right_hip", - "left_knee", - "right_knee", - "left_ankle", - "right_ankle", - ) diff --git a/python_module/megengine/data/dataset/vision/folder.py b/python_module/megengine/data/dataset/vision/folder.py deleted file mode 100644 index 7124ef56..00000000 --- a/python_module/megengine/data/dataset/vision/folder.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# BSD 3-Clause License - -# Copyright (c) Soumith Chintala 2016, -# All rights reserved. -# --------------------------------------------------------------------- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# -# This file has been modified by Megvii ("Megvii Modifications"). -# All Megvii Modifications are Copyright (C) 2014-2020 Megvii Inc. All rights reserved. -# --------------------------------------------------------------------- -import os -from typing import Dict, List, Tuple - -import cv2 -import numpy as np - -from .meta_vision import VisionDataset -from .utils import is_img - - -class ImageFolder(VisionDataset): - def __init__(self, root: str, check_valid_func=None, class_name: bool = False): - r""" - ImageFolder is a class for loading image data and labels from a organized folder. - - the folder is expected to be organized as followed - root/cls/xxx.img_ext - - labels are indices of sorted classes in the root directory - - :param root: root directory of an image folder - :param loader: a function used to load image from path, - if ``None``, default function that loads - images with PILwill be called - :param check_valid_func: a function used to check if files in folder are - expected image files, if ``None``, default function - that checks file extensions will be called - :param class_name: if ``True``, return class name instead of class index - - """ - super().__init__(root, order=("image", "image_category")) - - self.root = root - - if check_valid_func is not None: - self.check_valid = check_valid_func - else: - self.check_valid = is_img - - self.class_name = class_name - - self.class_dict = self.collect_class() - self.samples = self.collect_samples() - - def collect_samples(self) -> List: - samples = [] - directory = os.path.expanduser(self.root) - for key in sorted(self.class_dict.keys()): - d = os.path.join(directory, key) - if not os.path.isdir(d): - continue - for r, _, filename in sorted(os.walk(d, followlinks=True)): - for name in sorted(filename): - path = os.path.join(r, name) - if self.check_valid(path): - if self.class_name: - samples.append((path, key)) - else: - samples.append((path, self.class_dict[key])) - return samples - - def collect_class(self) -> Dict: - classes = [d.name for d in os.scandir(self.root) if d.is_dir()] - classes.sort() - return {classes[i]: np.int32(i) for i in range(len(classes))} - - def __getitem__(self, index: int) -> Tuple: - path, label = self.samples[index] - img = cv2.imread(path, cv2.IMREAD_COLOR) - return img, label - - def __len__(self): - return len(self.samples) diff --git a/python_module/megengine/data/dataset/vision/imagenet.py b/python_module/megengine/data/dataset/vision/imagenet.py deleted file mode 100644 index 449401bf..00000000 --- a/python_module/megengine/data/dataset/vision/imagenet.py +++ /dev/null @@ -1,248 +0,0 @@ -# -*- coding: utf-8 -*- -# BSD 3-Clause License -# -# Copyright (c) Soumith Chintala 2016, -# All rights reserved. -# --------------------------------------------------------------------- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# -# This file has been modified by Megvii ("Megvii Modifications"). -# All Megvii Modifications are Copyright (C) 2014-2020 Megvii Inc. All rights reserved. -# --------------------------------------------------------------------- -import os -import shutil - -from tqdm import tqdm - -from ....core.serialization import load, save -from ....distributed.util import is_distributed -from ....logger import get_logger -from .folder import ImageFolder -from .utils import _default_dataset_root, calculate_md5, untar, untargz - -logger = get_logger(__name__) - - -class ImageNet(ImageFolder): - r""" - Load ImageNet from raw files or folder, expected folder looks like - - .. code-block:: bash - - ${root}/ - | [REQUIRED TAR FILES] - |- ILSVRC2012_img_train.tar - |- ILSVRC2012_img_val.tar - |- ILSVRC2012_devkit_t12.tar.gz - | [OPTIONAL IMAGE FOLDERS] - |- train/cls/xxx.${img_ext} - |- val/cls/xxx.${img_ext} - |- ILSVRC2012_devkit_t12/data/meta.mat - |- ILSVRC2012_devkit_t12/data/ILSVRC2012_validation_ground_truth.txt - - If the image folders don't exist, raw tar files are required to get extracted and processed. - """ - - raw_file_meta = { - "train": ("ILSVRC2012_img_train.tar", "1d675b47d978889d74fa0da5fadfb00e"), - "val": ("ILSVRC2012_img_val.tar", "29b22e2961454d5413ddabcf34fc5622"), - "devkit": ("ILSVRC2012_devkit_t12.tar.gz", "fa75699e90414af021442c21a62c3abf"), - } # ImageNet raw files - default_train_dir = "train" - default_val_dir = "val" - default_devkit_dir = "ILSVRC2012_devkit_t12" - - def __init__(self, root: str = None, train: bool = True, **kwargs): - r""" - initialization: - - * if ``root`` contains ``self.target_folder`` depent on ``train``: - - * initialize ImageFolder with target_folder - - * else: - - * if all raw files are in ``root``: - - * parse ``self.target_folder`` from raw files - * initialize ImageFolder with ``self.target_folder`` - - * else: - - * raise error - - :param root: root directory of imagenet data, if root is ``None``, used default_dataset_root - :param train: if ``True``, load the train split, otherwise load the validation split - """ - - # process the root path - if root is None: - self.root = self._default_root - else: - self.root = root - - if not os.path.exists(self.root): - raise FileNotFoundError("dir %s does not exist" % self.root) - - self.devkit_dir = os.path.join(self.root, self.default_devkit_dir) - - if not os.path.exists(self.devkit_dir): - logger.warning("devkit directory %s does not exists", self.devkit_dir) - self._prepare_devkit() - - self.train = train - - if train: - self.target_folder = os.path.join(self.root, self.default_train_dir) - else: - self.target_folder = os.path.join(self.root, self.default_val_dir) - - if not os.path.exists(self.target_folder): - logger.warning( - "expected image folder %s does not exist, try to load from raw file", - self.target_folder, - ) - if not self.check_raw_file(): - raise FileNotFoundError( - "expected image folder %s does not exist, and raw files do not exist in %s" - % (self.target_folder, self.root) - ) - elif is_distributed(): - raise RuntimeError( - "extracting raw file shouldn't be done in distributed mode, use single process instead" - ) - elif train: - self._prepare_train() - else: - self._prepare_val() - - super().__init__(self.target_folder, **kwargs) - - @property - def _default_root(self): - return os.path.join(_default_dataset_root(), self.__class__.__name__) - - @property - def valid_ground_truth(self): - groud_truth_path = os.path.join( - self.devkit_dir, "data", "ILSVRC2012_validation_ground_truth.txt" - ) - if os.path.exists(groud_truth_path): - with open(groud_truth_path, "r") as f: - val_labels = f.readlines() - return [int(val_label) for val_label in val_labels] - else: - raise FileNotFoundError( - "valid ground truth file %s does not exist" % groud_truth_path - ) - - @property - def meta(self): - try: - return load(os.path.join(self.devkit_dir, "meta.pkl")) - except FileNotFoundError: - import scipy.io - - meta_path = os.path.join(self.devkit_dir, "data", "meta.mat") - if not os.path.exists(meta_path): - raise FileNotFoundError("meta file %s does not exist" % meta_path) - meta = scipy.io.loadmat(meta_path, squeeze_me=True)["synsets"] - nums_children = list(zip(*meta))[4] - meta = [ - meta[idx] - for idx, num_children in enumerate(nums_children) - if num_children == 0 - ] - idcs, wnids, classes = list(zip(*meta))[:3] - classes = [tuple(clss.split(", ")) for clss in classes] - idx_to_wnid = dict(zip(idcs, wnids)) - wnid_to_classes = dict(zip(wnids, classes)) - logger.info( - "saving cached meta file to %s", - os.path.join(self.devkit_dir, "meta.pkl"), - ) - save( - (idx_to_wnid, wnid_to_classes), - os.path.join(self.devkit_dir, "meta.pkl"), - ) - return idx_to_wnid, wnid_to_classes - - def check_raw_file(self) -> bool: - return all( - [ - os.path.exists(os.path.join(self.root, value[0])) - for _, value in self.raw_file_meta.items() - ] - ) - - def _organize_val_data(self): - id2wnid = self.meta[0] - val_idcs = self.valid_ground_truth - val_wnids = [id2wnid[idx] for idx in val_idcs] - - val_images = sorted( - [ - os.path.join(self.target_folder, image) - for image in os.listdir(self.target_folder) - ] - ) - - logger.debug("mkdir for val set wnids") - for wnid in set(val_wnids): - os.makedirs(os.path.join(self.root, self.default_val_dir, wnid)) - - logger.debug("mv val images into wnids dir") - for wnid, img_file in tqdm(zip(val_wnids, val_images)): - shutil.move( - img_file, - os.path.join( - self.root, self.default_val_dir, wnid, os.path.basename(img_file) - ), - ) - - def _prepare_val(self): - assert not self.train - raw_filename, checksum = self.raw_file_meta["val"] - raw_file = os.path.join(self.root, raw_filename) - logger.info("checksum valid tar file %s ...", raw_file) - assert ( - calculate_md5(raw_file) == checksum - ), "checksum mismatch, {} may be damaged".format(raw_file) - logger.info("extract valid tar file... this may take 10-20 minutes") - untar(os.path.join(self.root, raw_file), self.target_folder) - self._organize_val_data() - - def _prepare_train(self): - assert self.train - raw_filename, checksum = self.raw_file_meta["train"] - raw_file = os.path.join(self.root, raw_filename) - logger.info("checksum train tar file %s ...", raw_file) - assert ( - calculate_md5(raw_file) == checksum - ), "checksum mismatch, {} may be damaged".format(raw_file) - logger.info("extract train tar file.. this may take several hours") - untar( - os.path.join(self.root, raw_file), self.target_folder, - ) - paths = [ - os.path.join(self.target_folder, child_dir) - for child_dir in os.listdir(self.target_folder) - ] - for path in tqdm(paths): - untar(path, os.path.splitext(path)[0], remove=True) - - def _prepare_devkit(self): - raw_filename, checksum = self.raw_file_meta["devkit"] - raw_file = os.path.join(self.root, raw_filename) - logger.info("checksum devkit tar file %s ...", raw_file) - assert ( - calculate_md5(raw_file) == checksum - ), "checksum mismatch, {} may be damaged".format(raw_file) - logger.info("extract devkit file..") - untargz(os.path.join(self.root, self.raw_file_meta["devkit"][0])) diff --git a/python_module/megengine/data/dataset/vision/meta_vision.py b/python_module/megengine/data/dataset/vision/meta_vision.py deleted file mode 100644 index 6d03d3ed..00000000 --- a/python_module/megengine/data/dataset/vision/meta_vision.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections.abc -import os - -from ..meta_dataset import MapDataset - - -class VisionDataset(MapDataset): - _repr_indent = 4 - - def __init__(self, root, *, order=None, supported_order=None): - if isinstance(root, (str, bytes)): - root = os.path.expanduser(root) - self.root = root - - if order is None: - order = ("image",) - if not isinstance(order, collections.abc.Sequence): - raise ValueError( - "order should be a sequence, but got order={}".format(order) - ) - - if supported_order is not None: - assert isinstance(supported_order, collections.abc.Sequence) - for k in order: - if k not in supported_order: - raise NotImplementedError("{} is unsupported data type".format(k)) - self.order = order - - def __getitem__(self, index): - raise NotImplementedError - - def __len__(self): - raise NotImplementedError diff --git a/python_module/megengine/data/dataset/vision/mnist.py b/python_module/megengine/data/dataset/vision/mnist.py deleted file mode 100644 index 5e89a314..00000000 --- a/python_module/megengine/data/dataset/vision/mnist.py +++ /dev/null @@ -1,197 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import gzip -import os -import struct -from typing import Tuple - -import numpy as np -from tqdm import tqdm - -from ....logger import get_logger -from .meta_vision import VisionDataset -from .utils import _default_dataset_root, load_raw_data_from_url - -logger = get_logger(__name__) - - -class MNIST(VisionDataset): - r""" ``Dataset`` for MNIST meta data - """ - - url_path = "http://yann.lecun.com/exdb/mnist/" - """ - url prefix for downloading raw file - """ - raw_file_name = [ - "train-images-idx3-ubyte.gz", - "train-labels-idx1-ubyte.gz", - "t10k-images-idx3-ubyte.gz", - "t10k-labels-idx1-ubyte.gz", - ] - """ - raw file names of both training set and test set (10k) - """ - raw_file_md5 = [ - "f68b3c2dcbeaaa9fbdd348bbdeb94873", - "d53e105ee54ea40749a09fcbcd1e9432", - "9fb629c4189551a2d022fa330f9573f3", - "ec29112dd5afa0611ce80d1b7f02629c", - ] - """ - md5 for checking raw files - """ - - def __init__( - self, - root: str = None, - train: bool = True, - download: bool = True, - timeout: int = 500, - ): - r""" - :param root: path for mnist dataset downloading or loading, if ``None``, - set ``root`` to the ``_default_root`` - :param train: if ``True``, loading trainingset, else loading test set - :param download: if raw files do not exists and download sets to ``True``, - download raw files and process, otherwise raise ValueError, default is True - - """ - super().__init__(root, order=("image", "image_category")) - - self.timeout = timeout - - # process the root path - if root is None: - self.root = self._default_root - if not os.path.exists(self.root): - os.makedirs(self.root) - else: - self.root = root - if not os.path.exists(self.root): - if download: - logger.debug( - "dir %s does not exist, will be automatically created", - self.root, - ) - os.makedirs(self.root) - else: - raise ValueError("dir %s does not exist" % self.root) - - if self._check_raw_files(): - self.process(train) - elif download: - self.download() - self.process(train) - else: - raise ValueError( - "root does not contain valid raw files, please set download=True" - ) - - def __getitem__(self, index: int) -> Tuple: - return tuple(array[index] for array in self.arrays) - - def __len__(self) -> int: - return len(self.arrays[0]) - - @property - def _default_root(self): - return os.path.join(_default_dataset_root(), self.__class__.__name__) - - @property - def meta(self): - return self._meta_data - - def _check_raw_files(self): - return all( - [ - os.path.exists(os.path.join(self.root, path)) - for path in self.raw_file_name - ] - ) - - def download(self): - for file_name, md5 in zip(self.raw_file_name, self.raw_file_md5): - url = self.url_path + file_name - load_raw_data_from_url(url, file_name, md5, self.root, self.timeout) - - def process(self, train): - # load raw files and transform them into meta data and datasets Tuple(np.array) - logger.info("process the raw files of %s set...", "train" if train else "test") - if train: - meta_data_images, images = parse_idx3( - os.path.join(self.root, self.raw_file_name[0]) - ) - meta_data_labels, labels = parse_idx1( - os.path.join(self.root, self.raw_file_name[1]) - ) - else: - meta_data_images, images = parse_idx3( - os.path.join(self.root, self.raw_file_name[2]) - ) - meta_data_labels, labels = parse_idx1( - os.path.join(self.root, self.raw_file_name[3]) - ) - - self._meta_data = { - "images": meta_data_images, - "labels": meta_data_labels, - } - self.arrays = (images, labels.astype(np.int32)) - - -def parse_idx3(idx3_file): - # parse idx3 file to meta data and data in numpy array (images) - logger.debug("parse idx3 file %s ...", idx3_file) - assert idx3_file.endswith(".gz") - with gzip.open(idx3_file, "rb") as f: - bin_data = f.read() - - # parse meta data - offset = 0 - fmt_header = ">iiii" - magic, imgs, height, width = struct.unpack_from(fmt_header, bin_data, offset) - meta_data = {"magic": magic, "imgs": imgs, "height": height, "width": width} - - # parse images - image_size = height * width - offset += struct.calcsize(fmt_header) - fmt_image = ">" + str(image_size) + "B" - images = [] - bar = tqdm(total=meta_data["imgs"], ncols=80) - for image in struct.iter_unpack(fmt_image, bin_data[offset:]): - images.append(np.array(image, dtype=np.uint8).reshape((height, width, 1))) - bar.update() - bar.close() - return meta_data, images - - -def parse_idx1(idx1_file): - # parse idx1 file to meta data and data in numpy array (labels) - logger.debug("parse idx1 file %s ...", idx1_file) - assert idx1_file.endswith(".gz") - with gzip.open(idx1_file, "rb") as f: - bin_data = f.read() - - # parse meta data - offset = 0 - fmt_header = ">ii" - magic, imgs = struct.unpack_from(fmt_header, bin_data, offset) - meta_data = {"magic": magic, "imgs": imgs} - - # parse labels - offset += struct.calcsize(fmt_header) - fmt_image = ">B" - labels = np.empty(imgs, dtype=int) - bar = tqdm(total=meta_data["imgs"], ncols=80) - for i, label in enumerate(struct.iter_unpack(fmt_image, bin_data[offset:])): - labels[i] = label[0] - bar.update() - bar.close() - return meta_data, labels diff --git a/python_module/megengine/data/dataset/vision/objects365.py b/python_module/megengine/data/dataset/vision/objects365.py deleted file mode 100644 index e56e6462..00000000 --- a/python_module/megengine/data/dataset/vision/objects365.py +++ /dev/null @@ -1,498 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# --------------------------------------------------------------------- -# Part of the following code in this file refs to maskrcnn-benchmark -# MIT License -# -# Copyright (c) 2018 Facebook -# --------------------------------------------------------------------- -import json -import os -from collections import defaultdict - -import cv2 -import numpy as np - -from .meta_vision import VisionDataset - - -class Objects365(VisionDataset): - r"""`Objects365 `_ Dataset. - """ - - supported_order = ( - "image", - "boxes", - "boxes_category", - "info", - ) - - def __init__( - self, root, ann_file, remove_images_without_annotations=False, *, order=None - ): - super().__init__(root, order=order, supported_order=self.supported_order) - - with open(ann_file, "r") as f: - dataset = json.load(f) - - self.imgs = dict() - for img in dataset["images"]: - self.imgs[img["id"]] = img - - self.img_to_anns = defaultdict(list) - for ann in dataset["annotations"]: - # for saving memory - if ( - "boxes" not in self.order - and "boxes_category" not in self.order - and "bbox" in ann - ): - del ann["bbox"] - self.img_to_anns[ann["image_id"]].append(ann) - - self.cats = dict() - for cat in dataset["categories"]: - self.cats[cat["id"]] = cat - - self.ids = list(sorted(self.imgs.keys())) - - # filter images without detection annotations - if remove_images_without_annotations: - ids = [] - for img_id in self.ids: - anno = self.img_to_anns[img_id] - # filter crowd annotations - anno = [obj for obj in anno if obj["iscrowd"] == 0] - anno = [ - obj for obj in anno if obj["bbox"][2] > 0 and obj["bbox"][3] > 0 - ] - if len(anno) > 0: - ids.append(img_id) - self.img_to_anns[img_id] = anno - else: - del self.imgs[img_id] - del self.img_to_anns[img_id] - self.ids = ids - - self.json_category_id_to_contiguous_id = { - v: i + 1 for i, v in enumerate(sorted(self.cats.keys())) - } - - self.contiguous_category_id_to_json_id = { - v: k for k, v in self.json_category_id_to_contiguous_id.items() - } - - def __getitem__(self, index): - img_id = self.ids[index] - anno = self.img_to_anns[img_id] - - target = [] - for k in self.order: - if k == "image": - file_name = self.imgs[img_id]["file_name"] - path = os.path.join(self.root, file_name) - image = cv2.imread(path, cv2.IMREAD_COLOR) - target.append(image) - elif k == "boxes": - boxes = [obj["bbox"] for obj in anno] - boxes = np.array(boxes, dtype=np.float32).reshape(-1, 4) - # transfer boxes from xywh to xyxy - boxes[:, 2:] += boxes[:, :2] - target.append(boxes) - elif k == "boxes_category": - boxes_category = [obj["category_id"] for obj in anno] - boxes_category = [ - self.json_category_id_to_contiguous_id[c] for c in boxes_category - ] - boxes_category = np.array(boxes_category, dtype=np.int32) - target.append(boxes_category) - elif k == "info": - info = self.imgs[img_id] - info = [info["height"], info["width"], info["file_name"]] - target.append(info) - else: - raise NotImplementedError - - return tuple(target) - - def __len__(self): - return len(self.ids) - - def get_img_info(self, index): - img_id = self.ids[index] - img_info = self.imgs[img_id] - return img_info - - class_names = ( - "person", - "sneakers", - "chair", - "hat", - "lamp", - "bottle", - "cabinet/shelf", - "cup", - "car", - "glasses", - "picture/frame", - "desk", - "handbag", - "street lights", - "book", - "plate", - "helmet", - "leather shoes", - "pillow", - "glove", - "potted plant", - "bracelet", - "flower", - "tv", - "storage box", - "vase", - "bench", - "wine glass", - "boots", - "bowl", - "dining table", - "umbrella", - "boat", - "flag", - "speaker", - "trash bin/can", - "stool", - "backpack", - "couch", - "belt", - "carpet", - "basket", - "towel/napkin", - "slippers", - "barrel/bucket", - "coffee table", - "suv", - "toy", - "tie", - "bed", - "traffic light", - "pen/pencil", - "microphone", - "sandals", - "canned", - "necklace", - "mirror", - "faucet", - "bicycle", - "bread", - "high heels", - "ring", - "van", - "watch", - "sink", - "horse", - "fish", - "apple", - "camera", - "candle", - "teddy bear", - "cake", - "motorcycle", - "wild bird", - "laptop", - "knife", - "traffic sign", - "cell phone", - "paddle", - "truck", - "cow", - "power outlet", - "clock", - "drum", - "fork", - "bus", - "hanger", - "nightstand", - "pot/pan", - "sheep", - "guitar", - "traffic cone", - "tea pot", - "keyboard", - "tripod", - "hockey", - "fan", - "dog", - "spoon", - "blackboard/whiteboard", - "balloon", - "air conditioner", - "cymbal", - "mouse", - "telephone", - "pickup truck", - "orange", - "banana", - "airplane", - "luggage", - "skis", - "soccer", - "trolley", - "oven", - "remote", - "baseball glove", - "paper towel", - "refrigerator", - "train", - "tomato", - "machinery vehicle", - "tent", - "shampoo/shower gel", - "head phone", - "lantern", - "donut", - "cleaning products", - "sailboat", - "tangerine", - "pizza", - "kite", - "computer box", - "elephant", - "toiletries", - "gas stove", - "broccoli", - "toilet", - "stroller", - "shovel", - "baseball bat", - "microwave", - "skateboard", - "surfboard", - "surveillance camera", - "gun", - "life saver", - "cat", - "lemon", - "liquid soap", - "zebra", - "duck", - "sports car", - "giraffe", - "pumpkin", - "piano", - "stop sign", - "radiator", - "converter", - "tissue ", - "carrot", - "washing machine", - "vent", - "cookies", - "cutting/chopping board", - "tennis racket", - "candy", - "skating and skiing shoes", - "scissors", - "folder", - "baseball", - "strawberry", - "bow tie", - "pigeon", - "pepper", - "coffee machine", - "bathtub", - "snowboard", - "suitcase", - "grapes", - "ladder", - "pear", - "american football", - "basketball", - "potato", - "paint brush", - "printer", - "billiards", - "fire hydrant", - "goose", - "projector", - "sausage", - "fire extinguisher", - "extension cord", - "facial mask", - "tennis ball", - "chopsticks", - "electronic stove and gas stove", - "pie", - "frisbee", - "kettle", - "hamburger", - "golf club", - "cucumber", - "clutch", - "blender", - "tong", - "slide", - "hot dog", - "toothbrush", - "facial cleanser", - "mango", - "deer", - "egg", - "violin", - "marker", - "ship", - "chicken", - "onion", - "ice cream", - "tape", - "wheelchair", - "plum", - "bar soap", - "scale", - "watermelon", - "cabbage", - "router/modem", - "golf ball", - "pine apple", - "crane", - "fire truck", - "peach", - "cello", - "notepaper", - "tricycle", - "toaster", - "helicopter", - "green beans", - "brush", - "carriage", - "cigar", - "earphone", - "penguin", - "hurdle", - "swing", - "radio", - "CD", - "parking meter", - "swan", - "garlic", - "french fries", - "horn", - "avocado", - "saxophone", - "trumpet", - "sandwich", - "cue", - "kiwi fruit", - "bear", - "fishing rod", - "cherry", - "tablet", - "green vegetables", - "nuts", - "corn", - "key", - "screwdriver", - "globe", - "broom", - "pliers", - "volleyball", - "hammer", - "eggplant", - "trophy", - "dates", - "board eraser", - "rice", - "tape measure/ruler", - "dumbbell", - "hamimelon", - "stapler", - "camel", - "lettuce", - "goldfish", - "meat balls", - "medal", - "toothpaste", - "antelope", - "shrimp", - "rickshaw", - "trombone", - "pomegranate", - "coconut", - "jellyfish", - "mushroom", - "calculator", - "treadmill", - "butterfly", - "egg tart", - "cheese", - "pig", - "pomelo", - "race car", - "rice cooker", - "tuba", - "crosswalk sign", - "papaya", - "hair drier", - "green onion", - "chips", - "dolphin", - "sushi", - "urinal", - "donkey", - "electric drill", - "spring rolls", - "tortoise/turtle", - "parrot", - "flute", - "measuring cup", - "shark", - "steak", - "poker card", - "binoculars", - "llama", - "radish", - "noodles", - "yak", - "mop", - "crab", - "microscope", - "barbell", - "bread/bun", - "baozi", - "lion", - "red cabbage", - "polar bear", - "lighter", - "seal", - "mangosteen", - "comb", - "eraser", - "pitaya", - "scallop", - "pencil case", - "saw", - "table tennis paddle", - "okra", - "starfish", - "eagle", - "monkey", - "durian", - "game board", - "rabbit", - "french horn", - "ambulance", - "asparagus", - "hoverboard", - "pasta", - "target", - "hotair balloon", - "chainsaw", - "lobster", - "iron", - "flashlight", - ) diff --git a/python_module/megengine/data/dataset/vision/utils.py b/python_module/megengine/data/dataset/vision/utils.py deleted file mode 100644 index de6657d7..00000000 --- a/python_module/megengine/data/dataset/vision/utils.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import hashlib -import os -import tarfile - -from ....distributed.util import is_distributed -from ....logger import get_logger -from ....utils.http_download import download_from_url - -IMG_EXT = (".jpg", ".png", ".jpeg", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp") - -logger = get_logger(__name__) - - -def _default_dataset_root(): - default_dataset_root = os.path.expanduser( - os.path.join(os.getenv("XDG_CACHE_HOME", "~/.cache"), "megengine") - ) - - return default_dataset_root - - -def load_raw_data_from_url( - url: str, filename: str, target_md5: str, raw_data_dir: str, timeout: int -): - cached_file = os.path.join(raw_data_dir, filename) - logger.debug( - "load_raw_data_from_url: downloading to or using cached %s ...", cached_file - ) - if not os.path.exists(cached_file): - if is_distributed(): - logger.warning( - "Downloading raw data in DISTRIBUTED mode\n" - " File may be downloaded multiple times. We recommend\n" - " users to download in single process first." - ) - md5 = download_from_url(url, cached_file, http_read_timeout=timeout) - else: - md5 = calculate_md5(cached_file) - if target_md5 == md5: - logger.debug("%s exists with correct md5: %s", filename, target_md5) - else: - os.remove(cached_file) - raise RuntimeError("{} exists but fail to match md5".format(filename)) - - -def calculate_md5(filename): - m = hashlib.md5() - with open(filename, "rb") as f: - while True: - data = f.read(4096) - if not data: - break - m.update(data) - return m.hexdigest() - - -def is_img(filename): - return filename.lower().endswith(IMG_EXT) - - -def untar(path, to=None, remove=False): - if to is None: - to = os.path.dirname(path) - with tarfile.open(path, "r") as tar: - tar.extractall(path=to) - - if remove: - os.remove(path) - - -def untargz(path, to=None, remove=False): - if path.endswith(".tar.gz"): - if to is None: - to = os.path.dirname(path) - with tarfile.open(path, "r:gz") as tar: - tar.extractall(path=to) - else: - raise ValueError("path %s does not end with .tar" % path) - - if remove: - os.remove(path) diff --git a/python_module/megengine/data/dataset/vision/voc.py b/python_module/megengine/data/dataset/vision/voc.py deleted file mode 100644 index b22fd2fa..00000000 --- a/python_module/megengine/data/dataset/vision/voc.py +++ /dev/null @@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# --------------------------------------------------------------------- -# Part of the following code in this file refs to torchvision -# BSD 3-Clause License -# -# Copyright (c) Soumith Chintala 2016, -# All rights reserved. -# --------------------------------------------------------------------- -import collections.abc -import os -import xml.etree.ElementTree as ET - -import cv2 -import numpy as np - -from .meta_vision import VisionDataset - - -class PascalVOC(VisionDataset): - r"""`Pascal VOC `_ Dataset. - """ - - supported_order = ( - "image", - "boxes", - "boxes_category", - "mask", - "info", - ) - - def __init__(self, root, image_set, *, order=None): - if ("boxes" in order or "boxes_category" in order) and "mask" in order: - raise ValueError( - "PascalVOC only supports boxes & boxes_category or mask, not both." - ) - - super().__init__(root, order=order, supported_order=self.supported_order) - - if not os.path.isdir(self.root): - raise RuntimeError("Dataset not found or corrupted.") - - self.image_set = image_set - image_dir = os.path.join(self.root, "JPEGImages") - - if "boxes" in order or "boxes_category" in order: - annotation_dir = os.path.join(self.root, "Annotations") - splitdet_dir = os.path.join(self.root, "ImageSets/Main") - split_f = os.path.join(splitdet_dir, image_set.rstrip("\n") + ".txt") - with open(os.path.join(split_f), "r") as f: - self.file_names = [x.strip() for x in f.readlines()] - self.images = [os.path.join(image_dir, x + ".jpg") for x in self.file_names] - self.annotations = [ - os.path.join(annotation_dir, x + ".xml") for x in self.file_names - ] - assert len(self.images) == len(self.annotations) - elif "mask" in order: - if "aug" in image_set: - mask_dir = os.path.join(self.root, "SegmentationClass_aug") - else: - mask_dir = os.path.join(self.root, "SegmentationClass") - splitmask_dir = os.path.join(self.root, "ImageSets/Segmentation") - split_f = os.path.join(splitmask_dir, image_set.rstrip("\n") + ".txt") - with open(os.path.join(split_f), "r") as f: - self.file_names = [x.strip() for x in f.readlines()] - self.images = [os.path.join(image_dir, x + ".jpg") for x in self.file_names] - self.masks = [os.path.join(mask_dir, x + ".png") for x in self.file_names] - assert len(self.images) == len(self.masks) - else: - raise NotImplementedError - - self.img_infos = dict() - - def __getitem__(self, index): - target = [] - for k in self.order: - if k == "image": - image = cv2.imread(self.images[index], cv2.IMREAD_COLOR) - target.append(image) - elif k == "boxes": - anno = self.parse_voc_xml(ET.parse(self.annotations[index]).getroot()) - boxes = [obj["bndbox"] for obj in anno["annotation"]["object"]] - # boxes type xyxy - boxes = [ - (bb["xmin"], bb["ymin"], bb["xmax"], bb["ymax"]) for bb in boxes - ] - boxes = np.array(boxes, dtype=np.float32).reshape(-1, 4) - target.append(boxes) - elif k == "boxes_category": - anno = self.parse_voc_xml(ET.parse(self.annotations[index]).getroot()) - boxes_category = [obj["name"] for obj in anno["annotation"]["object"]] - boxes_category = [ - self.class_names.index(bc) + 1 for bc in boxes_category - ] - boxes_category = np.array(boxes_category, dtype=np.int32) - target.append(boxes_category) - elif k == "mask": - if "aug" in self.image_set: - mask = cv2.imread(self.masks[index], cv2.IMREAD_GRAYSCALE) - else: - mask = cv2.imread(self.masks[index], cv2.IMREAD_COLOR) - mask = self._trans_mask(mask) - mask = mask[:, :, np.newaxis] - target.append(mask) - elif k == "info": - info = self.get_img_info(index, image) - info = [info["height"], info["width"], info["file_name"]] - target.append(info) - else: - raise NotImplementedError - - return tuple(target) - - def __len__(self): - return len(self.images) - - def get_img_info(self, index, image=None): - if index not in self.img_infos: - if image is None: - image = cv2.imread(self.images[index], cv2.IMREAD_COLOR) - self.img_infos[index] = dict( - height=image.shape[0], - width=image.shape[1], - file_name=self.file_names[index], - ) - return self.img_infos[index] - - def _trans_mask(self, mask): - label = np.ones(mask.shape[:2]) * 255 - for i in range(len(self.class_colors)): - b, g, r = self.class_colors[i] - label[ - (mask[:, :, 0] == b) & (mask[:, :, 1] == g) & (mask[:, :, 2] == r) - ] = i - return label.astype(np.uint8) - - def parse_voc_xml(self, node): - voc_dict = {} - children = list(node) - if children: - def_dic = collections.defaultdict(list) - for dc in map(self.parse_voc_xml, children): - for ind, v in dc.items(): - def_dic[ind].append(v) - if node.tag == "annotation": - def_dic["object"] = [def_dic["object"]] - voc_dict = { - node.tag: { - ind: v[0] if len(v) == 1 else v for ind, v in def_dic.items() - } - } - if node.text: - text = node.text.strip() - if not children: - voc_dict[node.tag] = text - return voc_dict - - class_names = ( - "aeroplane", - "bicycle", - "bird", - "boat", - "bottle", - "bus", - "car", - "cat", - "chair", - "cow", - "diningtable", - "dog", - "horse", - "motorbike", - "person", - "pottedplant", - "sheep", - "sofa", - "train", - "tvmonitor", - ) diff --git a/python_module/megengine/data/sampler.py b/python_module/megengine/data/sampler.py deleted file mode 100644 index dbd5d3a3..00000000 --- a/python_module/megengine/data/sampler.py +++ /dev/null @@ -1,274 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections.abc -import math -from abc import ABC -from typing import Any, Generator, Iterator, List, Union - -import numpy as np - -import megengine.distributed as dist - - -class Sampler(ABC): - def __init__( - self, - dataset, - batch_size=1, - drop_last=False, - num_samples=None, - world_size=None, - rank=None, - seed=None, - ): - r""" - An abstract class for all sampler - - :type dataset: `dataset` - :param dataset: dataset to sample from - :type batch_size: positive integer - :param batch_size: batch size for batch method - :type drop_last: bool - :param drop_last: set ``True`` to drop the last incomplete batch, - if the dataset size is not divisible by the batch size. If ``False`` and - the size of dataset is not divisible by the batch_size, then the last batch will - be smaller. (default: ``False``) - :type num_samples: positive integer - :param num_samples: number of samples assigned to one rank - :type world_size: positive integer - :param world_size: number of ranks - :type rank: non-negative integer within 0 and world_size - :param rank: rank id, non-negative interger within 0 and ``world_size`` - :type seed: non-negative integer - :param seed: seed for random operators - """ - if ( - not isinstance(batch_size, int) - or isinstance(batch_size, bool) - or batch_size <= 0 - ): - raise ValueError( - "batch_size should be a positive integer value, " - "but got batch_size={}".format(batch_size) - ) - if not isinstance(drop_last, bool): - raise ValueError( - "drop_last should be a boolean value, but got " - "drop_last={}".format(drop_last) - ) - if num_samples is not None and ( - not isinstance(num_samples, int) - or isinstance(num_samples, bool) - or num_samples <= 0 - ): - raise ValueError( - "num_samples should be a positive integer " - "value, but got num_samples={}".format(num_samples) - ) - - self.batch_size = batch_size - self.dataset = dataset - self.drop_last = drop_last - - if world_size is None: - world_size = dist.get_world_size() if dist.is_distributed() else 1 - self.world_size = world_size - if rank is None: - rank = dist.get_rank() if dist.is_distributed() else 0 - self.rank = rank - - if num_samples is None: - num_samples = len(self.dataset) - self.num_samples = int(math.ceil(num_samples / self.world_size)) - - # Make sure seeds are the same at each rank - if seed is None and self.world_size > 1: - seed = 0 - self.rng = np.random.RandomState(seed) - - def __iter__(self) -> Union[Generator, Iterator]: - return self.batch() - - def __len__(self) -> int: - if self.drop_last: - return self.num_samples // self.batch_size - else: - return int(math.ceil(self.num_samples / self.batch_size)) - - def sample(self): - """ - return a list contains all sample indices - """ - raise NotImplementedError - - def scatter(self, indices) -> List: - r""" - scatter method is used for splitting indices into subset, each subset - will be assigned to a rank. Indices are evenly splitted by default. - If customized indices assignment method is needed, please rewrite this method - """ - total_size = self.num_samples * self.world_size - - # add extra indices to make it evenly divisible - indices += indices[: (total_size - len(indices))] - assert len(indices) == total_size - - # subsample - indices = indices[self.rank : total_size : self.world_size] - assert len(indices) == self.num_samples - - return indices - - def batch(self) -> Iterator[List[Any]]: - r""" - batch method provides a batch indices generator - """ - indices = list(self.sample()) - - # user might pass the world_size parameter without dist, - # so dist.is_distributed() should not be used - if self.world_size > 1: - indices = self.scatter(indices) - - step, length = self.batch_size, len(indices) - batch_index = [indices[i : i + step] for i in range(0, length, step)] - - if self.drop_last and len(batch_index[-1]) < self.batch_size: - batch_index.pop() - - return iter(batch_index) - - -class SequentialSampler(Sampler): - def __init__( - self, - dataset, - batch_size=1, - drop_last=False, - indices=None, - world_size=None, - rank=None, - ): - r""" - Sample elements sequentially - """ - super().__init__(dataset, batch_size, drop_last, None, world_size, rank) - if indices is not None and not isinstance(indices, collections.abc.Sequence): - raise ValueError( - "indices should be None or a sequence, " - "but got indices={}".format(indices) - ) - self.indices = indices - - def sample(self) -> Iterator[Any]: - r""" - return a generator - """ - if self.indices is None: - return iter(range(len(self.dataset))) - else: - return self.indices - - -class RandomSampler(Sampler): - def __init__( - self, - dataset, - batch_size=1, - drop_last=False, - indices=None, - world_size=None, - rank=None, - seed=None, - ): - r""" - Sample elements randomly without replacement - """ - super().__init__(dataset, batch_size, drop_last, None, world_size, rank, seed) - if indices is not None and not isinstance(indices, collections.abc.Sequence): - raise ValueError( - "indices should be None or a sequence, " - "but got indices={}".format(indices) - ) - self.indices = indices - - def sample(self) -> List: - if self.indices is None: - return self.rng.permutation(len(self.dataset)).tolist() - else: - return self.rng.permutation(self.indices).tolist() - - -class ReplacementSampler(Sampler): - def __init__( - self, - dataset, - batch_size=1, - drop_last=False, - num_samples=None, - weights=None, - world_size=None, - rank=None, - seed=None, - ): - r""" - Sample elements randomly with replacement - - :type weights: List - :param weights: weights for sampling indices, it could be unnormalized weights - """ - super().__init__( - dataset, batch_size, drop_last, num_samples, world_size, rank, seed - ) - if weights is not None: - if not isinstance(weights, collections.abc.Sequence): - raise ValueError( - "weights should be None or a sequence, " - "but got weights={}".format(weights) - ) - if len(weights) != len(dataset): - raise ValueError( - "len(dataset)={} should be equal to" - "len(weights)={}".format(len(dataset), len(weights)) - ) - self.weights = weights - if self.weights is not None: - self.weights = np.array(weights) / sum(weights) - - def sample(self) -> List: - n = len(self.dataset) - if self.weights is None: - return self.rng.randint(n, size=self.num_samples).tolist() - else: - return self.rng.multinomial(n, self.weights, self.num_samples).tolist() - - -class Infinite(Sampler): - r"""Infinite Sampler warper for basic sampler""" - - def sample(self): - raise NotImplementedError("sample method not supported in Infinite") - - def __init__(self, sampler): - self.sampler = sampler - self.sampler_iter = iter(self.sampler) - - def __iter__(self): - return self - - def __next__(self): - try: - index = next(self.sampler_iter) - except StopIteration: - self.sampler_iter = iter(self.sampler) - index = next(self.sampler_iter) - return index - - def __len__(self): - return np.iinfo(np.int64).max diff --git a/python_module/megengine/data/transform/__init__.py b/python_module/megengine/data/transform/__init__.py deleted file mode 100644 index 30424cbc..00000000 --- a/python_module/megengine/data/transform/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .meta_transform import PseudoTransform, Transform -from .vision import * diff --git a/python_module/megengine/data/transform/meta_transform.py b/python_module/megengine/data/transform/meta_transform.py deleted file mode 100644 index d7fd4f47..00000000 --- a/python_module/megengine/data/transform/meta_transform.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import ABC, abstractmethod -from typing import Sequence, Tuple - - -class Transform(ABC): - """ - rewrite apply method in subclass - """ - - def apply_batch(self, inputs: Sequence[Tuple]): - return tuple(self.apply(input) for input in inputs) - - @abstractmethod - def apply(self, input: Tuple): - pass - - def __repr__(self): - return self.__class__.__name__ - - -class PseudoTransform(Transform): - def apply(self, input: Tuple): - return input diff --git a/python_module/megengine/data/transform/vision/__init__.py b/python_module/megengine/data/transform/vision/__init__.py deleted file mode 100644 index d90c9e98..00000000 --- a/python_module/megengine/data/transform/vision/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .transform import * diff --git a/python_module/megengine/data/transform/vision/functional.py b/python_module/megengine/data/transform/vision/functional.py deleted file mode 100644 index e2f4e512..00000000 --- a/python_module/megengine/data/transform/vision/functional.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections.abc -import functools -import random - -import cv2 -import numpy as np - - -def wrap_keepdims(func): - """Wraper to keep the dimension of input images unchanged""" - - @functools.wraps(func) - def wrapper(image, *args, **kwargs): - if len(image.shape) != 3: - raise ValueError( - "image must have 3 dims, but got {} dims".format(len(image.shape)) - ) - ret = func(image, *args, **kwargs) - if len(ret.shape) == 2: - ret = ret[:, :, np.newaxis] - return ret - - return wrapper - - -@wrap_keepdims -def to_gray(image): - r""" - Change BGR format image's color space to gray - - :param image: Input BGR format image, with (H, W, C) shape - :return: Gray format image, with (H, W, C) shape - """ - return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) - - -@wrap_keepdims -def to_bgr(image): - r""" - Change gray format image's color space to BGR - - :param image: input Gray format image, with (H, W, C) shape - :return: BGR format image, with (H, W, C) shape - """ - return cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) - - -@wrap_keepdims -def pad(input, size, value): - r""" - Pad input data with *value* and given *size* - - :param input: Input data, with (H, W, C) shape - :param size: Padding size of input data, it could be integer or sequence. - If it's an integer, the input data will be padded in four directions. - If it's a sequence contains two integer, the bottom and right side - of input data will be padded. - If it's a sequence contains four integer, the top, bottom, left, right - side of input data will be padded with given size. - :param value: Padding value of data, could be a sequence of int or float. - if it's float value, the dtype of image will be casted to float32 also. - :return: Padded image - """ - if isinstance(size, int): - size = (size, size, size, size) - elif isinstance(size, collections.abc.Sequence) and len(size) == 2: - size = (0, size[0], 0, size[1]) - if np.array(value).dtype == float: - input = input.astype(np.float32) - return cv2.copyMakeBorder(input, *size, cv2.BORDER_CONSTANT, value=value) - - -@wrap_keepdims -def flip(image, flipCode): - r""" - Accordding to the flipCode (the type of flip), flip the input image - - :param image: Input image, with (H, W, C) shape - :param flipCode: code that indicates the type of flip. - 1 : Flip horizontally - 0 : Flip vertically - -1 : Flip horizontally and vertically - :return: BGR format image, with (H, W, C) shape - """ - return cv2.flip(image, flipCode=flipCode) - - -@wrap_keepdims -def resize(input, size, interpolation=cv2.INTER_LINEAR): - r""" - resize the input data to given size - - :param input: Input data, could be image or masks, with (H, W, C) shape - :param size: Target size of input data, with (height, width) shape. - :param interpolation: Interpolation method. - :return: Resized data, with (H, W, C) shape - """ - if len(size) != 2: - raise ValueError("resize needs (h, w), but got {}".format(size)) - - if isinstance(interpolation, collections.abc.Sequence): - interpolation = random.choice(interpolation) - return cv2.resize(input, size[::-1], interpolation=interpolation) diff --git a/python_module/megengine/data/transform/vision/transform.py b/python_module/megengine/data/transform/vision/transform.py deleted file mode 100644 index bf3834a9..00000000 --- a/python_module/megengine/data/transform/vision/transform.py +++ /dev/null @@ -1,1025 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections.abc -import math -from typing import Sequence, Tuple - -import cv2 -import numpy as np - -from megengine.data.transform import Transform -from megengine.data.transform.vision import functional as F - -__all__ = [ - "VisionTransform", - "ToMode", - "Compose", - "TorchTransformCompose", - "Pad", - "Resize", - "ShortestEdgeResize", - "RandomResize", - "RandomCrop", - "RandomResizedCrop", - "CenterCrop", - "RandomHorizontalFlip", - "RandomVerticalFlip", - "Normalize", - "GaussianNoise", - "BrightnessTransform", - "SaturationTransform", - "ContrastTransform", - "HueTransform", - "ColorJitter", - "Lighting", -] - - -class VisionTransform(Transform): - r""" - Base class of all transforms used in computer vision. - calling logic: apply_batch() -> apply() -> _apply_image() and other _apply_*() - method. If you want to implement a self-defined transform method for image, - rewrite _apply_image method in subclass. - - :param order: Input type order. Input is a tuple contains different structures, - order is used to specify the order of structures. For example, if your input - is (image, boxes) type, then the order should be ("image", "boxes"). - Current available strings & data type are describe below: - - * "image": input image, with shape of (H, W, C) - * "coords": coordinates, with shape of (N, 2) - * "boxes": bounding boxes, with shape of (N, 4), "xyxy" format, - the 1st "xy" represents top left point of a box, - the 2nd "xy" represents right bottom point. - * "mask": map used for segmentation, with shape of (H, W, 1) - * "keypoints": keypoints with shape of (N, K, 3), N for number of instances, - and K for number of keypoints in one instance. The first two dimensions - of last axis is coordinate of keypoints and the the 3rd dimension is - the label of keypoints. - * "polygons": A sequence contains numpy array, its length is number of instances. - Each numpy array represents polygon coordinate of one instance. - * "category": categories for some data type. For example, "image_category" - means category of the input image and "boxes_category" means categories of - bounding boxes. - * "info": information for images such as image shapes and image path. - - You can also customize your data types only if you implement the corresponding - _apply_*() methods, otherwise ``NotImplementedError`` will be raised. - """ - - def __init__(self, order=None): - super().__init__() - if order is None: - order = ("image",) - elif not isinstance(order, collections.abc.Sequence): - raise ValueError( - "order should be a sequence, but got order={}".format(order) - ) - for k in order: - if k in ("batch",): - raise ValueError("{} is invalid data type".format(k)) - elif k.endswith("category") or k.endswith("info"): - # when the key is *category or info, we should do nothing - # if the corresponding apply methods are not implemented. - continue - elif self._get_apply(k) is None: - raise NotImplementedError("{} is unsupported data type".format(k)) - self.order = order - - def apply_batch(self, inputs: Sequence[Tuple]): - r"""Apply transform on batch input data""" - return tuple(self.apply(input) for input in inputs) - - def apply(self, input: Tuple): - r"""Apply transform on single input data""" - if not isinstance(input, tuple): - input = (input,) - - output = [] - for i in range(min(len(input), len(self.order))): - apply_func = self._get_apply(self.order[i]) - if apply_func is None: - output.append(input[i]) - else: - output.append(apply_func(input[i])) - if len(input) > len(self.order): - output.extend(input[len(self.order) :]) - - if len(output) == 1: - output = output[0] - else: - output = tuple(output) - return output - - def _get_apply(self, key): - return getattr(self, "_apply_{}".format(key), None) - - def _get_image(self, input: Tuple): - if not isinstance(input, tuple): - input = (input,) - return input[self.order.index("image")] - - def _apply_image(self, image): - raise NotImplementedError - - def _apply_coords(self, coords): - raise NotImplementedError - - def _apply_boxes(self, boxes): - idxs = np.array([(0, 1), (2, 1), (0, 3), (2, 3)]).flatten() - coords = np.asarray(boxes).reshape(-1, 4)[:, idxs].reshape(-1, 2) - coords = self._apply_coords(coords).reshape((-1, 4, 2)) - minxy = coords.min(axis=1) - maxxy = coords.max(axis=1) - trans_boxes = np.concatenate((minxy, maxxy), axis=1) - return trans_boxes - - def _apply_mask(self, mask): - raise NotImplementedError - - def _apply_keypoints(self, keypoints): - coords, visibility = keypoints[..., :2], keypoints[..., 2:] - trans_coords = [self._apply_coords(p) for p in coords] - return np.concatenate((trans_coords, visibility), axis=-1) - - def _apply_polygons(self, polygons): - return [[self._apply_coords(p) for p in instance] for instance in polygons] - - -class ToMode(VisionTransform): - r"""Change input data to a target mode. - For example, most transforms use HWC mode image, - while the Neural Network might use CHW mode input tensor - - :param mode: Output mode of input. Use "CHW" mode by default. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, mode="CHW", *, order=None): - super().__init__(order) - assert mode in ["CHW"], "unsupported mode: {}".format(mode) - self.mode = mode - - def _apply_image(self, image): - if self.mode == "CHW": - return np.ascontiguousarray(np.rollaxis(image, 2)) - return image - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - if self.mode == "CHW": - return np.ascontiguousarray(np.rollaxis(mask, 2)) - return mask - - -class Compose(VisionTransform): - r""" - Composes several transforms together. - - :param transforms: List of :class:`VisionTransform` to compose. - :param batch_compose: Whether use shuffle_indices for batch data or not. - If True, use original input sequence. - Otherwise, the shuffle_indices will be used for transforms. - :param shuffle_indices: Indices used for random shuffle, start at 1. - For example, if shuffle_indices is [(1, 3), (2, 4)], then the 1st and 3rd transform - will be random shuffled, the 2nd and 4th transform will also be shuffled. - :param order: The same with :class:`VisionTransform` - - Example: - - ..testcode:: - - from megengine.data.transform import RandomHorizontalFlip, RandomVerticalFlip, CenterCrop, ToMode, Compose - - transform_func = Compose([ - RandomHorizontalFlip(), - RandomVerticalFlip(), - CenterCrop(100), - ToMode("CHW"), - ], - shuffle_indices=[(1, 2, 3)] - ) - """ - - def __init__( - self, transforms=[], batch_compose=False, shuffle_indices=None, *, order=None - ): - super().__init__(order) - self.transforms = transforms - self._set_order() - - if batch_compose and shuffle_indices is not None: - raise ValueError( - "Do not support shuffle when apply transforms along the whole batch" - ) - self.batch_compose = batch_compose - - if shuffle_indices is not None: - shuffle_indices = [tuple(x - 1 for x in idx) for idx in shuffle_indices] - self.shuffle_indices = shuffle_indices - - def _set_order(self): - for t in self.transforms: - t.order = self.order - if isinstance(t, Compose): - t._set_order() - - def apply_batch(self, inputs: Sequence[Tuple]): - if self.batch_compose: - for t in self.transforms: - inputs = t.apply_batch(inputs) - return inputs - else: - return super().apply_batch(inputs) - - def apply(self, input: Tuple): - for t in self._shuffle(): - input = t.apply(input) - return input - - def _shuffle(self): - if self.shuffle_indices is not None: - source_idx = list(range(len(self.transforms))) - for idx in self.shuffle_indices: - shuffled = np.random.permutation(idx).tolist() - for src, dst in zip(idx, shuffled): - source_idx[src] = dst - return [self.transforms[i] for i in source_idx] - else: - return self.transforms - - -class TorchTransformCompose(VisionTransform): - r""" - Compose class used for transforms in torchvision, only support PIL image, - some transforms with tensor in torchvision are not supported, - such as Normalize and ToTensor in torchvision. - - :param transforms: The same with ``Compose`` - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, transforms, *, order=None): - super().__init__(order) - self.transforms = transforms - - def _apply_image(self, image): - from PIL import Image - - try: - import accimage - except ImportError: - accimage = None - - if image.shape[0] == 3: # CHW - image = np.ascontiguousarray(image[[2, 1, 0]]) - elif image.shape[2] == 3: # HWC - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) - image = Image.fromarray(image.astype(np.uint8)) - - for t in self.transforms: - image = t(image) - - if isinstance(image, Image.Image) or ( - accimage is not None and isinstance(image, accimage.Image) - ): - image = np.array(image, dtype=np.uint8) - if image.shape[0] == 3: # CHW - image = np.ascontiguousarray(image[[2, 1, 0]]) - elif image.shape[2] == 3: # HWC - image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) - return image - - -class Pad(VisionTransform): - r"""Pad the input data. - - :param size: Padding size of input image, it could be integer or sequence. - If it's an integer, the input image will be padded in four directions. - If it's a sequence contains two integer, the bottom and right side - of image will be padded. - If it's a sequence contains four integer, the top, bottom, left, right - side of image will be padded with given size. - :param value: Padding value of image, could be a sequence of int or float. - if it's float value, the dtype of image will be casted to float32 also. - :param mask_value: Padding value of segmentation map. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, size=0, value=0, mask_value=0, *, order=None): - super().__init__(order) - if isinstance(size, int): - size = (size, size, size, size) - elif isinstance(size, collections.abc.Sequence) and len(size) == 2: - size = (0, size[0], 0, size[1]) - elif not (isinstance(size, collections.abc.Sequence) and len(size) == 4): - raise ValueError( - "size should be a list/tuple which contains " - "(top, down, left, right) four pad sizes." - ) - self.size = size - self.value = value - if not isinstance(mask_value, int): - raise ValueError( - "mask_value should be a positive integer, " - "but got mask_value={}".format(mask_value) - ) - self.mask_value = mask_value - - def _apply_image(self, image): - return F.pad(image, self.size, self.value) - - def _apply_coords(self, coords): - coords[:, 0] += self.size[2] - coords[:, 1] += self.size[0] - return coords - - def _apply_mask(self, mask): - return F.pad(mask, self.size, self.mask_value) - - -class Resize(VisionTransform): - r"""Resize the input data. - - :param output_size: Target size of image, with (height, width) shape. - :param interpolation: Interpolation method. All methods are listed below: - - * cv2.INTER_NEAREST – a nearest-neighbor interpolation. - * cv2.INTER_LINEAR – a bilinear interpolation (used by default). - * cv2.INTER_AREA – resampling using pixel area relation. - * cv2.INTER_CUBIC – a bicubic interpolation over 4×4 pixel neighborhood. - * cv2.INTER_LANCZOS4 – a Lanczos interpolation over 8×8 pixel neighborhood. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, output_size, interpolation=cv2.INTER_LINEAR, *, order=None): - super().__init__(order) - self.output_size = output_size - self.interpolation = interpolation - - def apply(self, input: Tuple): - self._shape_info = self._get_shape(self._get_image(input)) - return super().apply(input) - - def _apply_image(self, image): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return image - return F.resize(image, (th, tw), self.interpolation) - - def _apply_coords(self, coords): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return coords - coords[:, 0] = coords[:, 0] * (tw / w) - coords[:, 1] = coords[:, 1] * (th / h) - return coords - - def _apply_mask(self, mask): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return mask - return F.resize(mask, (th, tw), cv2.INTER_NEAREST) - - def _get_shape(self, image): - h, w, _ = image.shape - if isinstance(self.output_size, int): - if min(h, w) == self.output_size: - return h, w, h, w - if h < w: - th = self.output_size - tw = int(self.output_size * w / h) - else: - tw = self.output_size - th = int(self.output_size * h / w) - return h, w, th, tw - else: - return (h, w, *self.output_size) - - -class ShortestEdgeResize(VisionTransform): - def __init__( - self, - min_size, - max_size, - sample_style="range", - interpolation=cv2.INTER_LINEAR, - *, - order=None - ): - super().__init__(order) - if sample_style not in ("range", "choice"): - raise NotImplementedError( - "{} is unsupported sample style".format(sample_style) - ) - self.sample_style = sample_style - if isinstance(min_size, int): - min_size = (min_size, min_size) - self.min_size = min_size - self.max_size = max_size - self.interpolation = interpolation - - def apply(self, input: Tuple): - self._shape_info = self._get_shape(self._get_image(input)) - return super().apply(input) - - def _apply_image(self, image): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return image - return F.resize(image, (th, tw), self.interpolation) - - def _apply_coords(self, coords): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return coords - coords[:, 0] = coords[:, 0] * (tw / w) - coords[:, 1] = coords[:, 1] * (th / h) - return coords - - def _apply_mask(self, mask): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return mask - return F.resize(mask, (th, tw), cv2.INTER_NEAREST) - - def _get_shape(self, image): - h, w, _ = image.shape - if self.sample_style == "range": - size = np.random.randint(self.min_size[0], self.min_size[1] + 1) - else: - size = np.random.choice(self.min_size) - - scale = size / min(h, w) - if h < w: - th, tw = size, scale * w - else: - th, tw = scale * h, size - if max(th, tw) > self.max_size: - scale = self.max_size / max(th, tw) - th = th * scale - tw = tw * scale - th = int(round(th)) - tw = int(round(tw)) - return h, w, th, tw - - -class RandomResize(VisionTransform): - r"""Resize the input data randomly. - - :param scale_range: . - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, scale_range, interpolation=cv2.INTER_LINEAR, *, order=None): - super().__init__(order) - self.scale_range = scale_range - self.interpolation = interpolation - - def apply(self, input: Tuple): - self._shape_info = self._get_shape(self._get_image(input)) - return super().apply(input) - - def _apply_image(self, image): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return image - return F.resize(image, (th, tw), self.interpolation) - - def _apply_coords(self, coords): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return coords - coords[:, 0] = coords[:, 0] * (tw / w) - coords[:, 1] = coords[:, 1] * (th / h) - return coords - - def _apply_mask(self, mask): - h, w, th, tw = self._shape_info - if h == th and w == tw: - return mask - return F.resize(mask, (th, tw), cv2.INTER_NEAREST) - - def _get_shape(self, image): - h, w, _ = image.shape - scale = np.random.uniform(*self.scale_range) - th = int(round(h * scale)) - tw = int(round(w * scale)) - return h, w, th, tw - - -class RandomCrop(VisionTransform): - r"""Crop the input data randomly. Before applying the crop transform, - pad the image first. And if target size is still bigger than the size of - padded image, pad the image size to target size. - - :param output_size: Target size of output image, with (height, width) shape. - :param padding_size: The same with `size` in ``Pad`` - :param padding_value: The same with `value` in ``Pad`` - :param order: The same with :class:`VisionTransform` - """ - - def __init__( - self, - output_size, - padding_size=0, - padding_value=[0, 0, 0], - padding_maskvalue=0, - *, - order=None - ): - super().__init__(order) - if isinstance(output_size, int): - self.output_size = (output_size, output_size) - else: - self.output_size = output_size - self.pad = Pad(padding_size, padding_value, order=self.order) - self.padding_value = padding_value - self.padding_maskvalue = padding_maskvalue - - def apply(self, input): - input = self.pad.apply(input) - self._h, self._w, _ = self._get_image(input).shape - self._th, self._tw = self.output_size - self._x = np.random.randint(0, max(0, self._w - self._tw) + 1) - self._y = np.random.randint(0, max(0, self._h - self._th) + 1) - return super().apply(input) - - def _apply_image(self, image): - if self._th > self._h: - image = F.pad(image, (self._th - self._h, 0), self.padding_value) - if self._tw > self._w: - image = F.pad(image, (0, self._tw - self._w), self.padding_value) - return image[self._y : self._y + self._th, self._x : self._x + self._tw] - - def _apply_coords(self, coords): - coords[:, 0] -= self._x - coords[:, 1] -= self._y - return coords - - def _apply_mask(self, mask): - if self._th > self._h: - mask = F.pad(mask, (self._th - self._h, 0), self.padding_maskvalue) - if self._tw > self._w: - mask = F.pad(mask, (0, self._tw - self._w), self.padding_maskvalue) - return mask[self._y : self._y + self._th, self._x : self._x + self._tw] - - -class RandomResizedCrop(VisionTransform): - r"""Crop the input data to random size and aspect ratio. - A crop of random size (default: of 0.08 to 1.0) of the original size and a random - aspect ratio (default: of 3/4 to 1.33) of the original aspect ratio is made. - After applying crop transfrom, the input data will be resized to given size. - - :param output_size: Target size of output image, with (height, width) shape. - :param scale_range: Range of size of the origin size cropped. Default: (0.08, 1.0) - :param ratio_range: Range of aspect ratio of the origin aspect ratio cropped. Default: (0.75, 1.33) - :param order: The same with :class:`VisionTransform` - """ - - def __init__( - self, - output_size, - scale_range=(0.08, 1.0), - ratio_range=(3.0 / 4, 4.0 / 3), - interpolation=cv2.INTER_LINEAR, - *, - order=None - ): - super().__init__(order) - if isinstance(output_size, int): - self.output_size = (output_size, output_size) - else: - self.output_size = output_size - assert ( - scale_range[0] <= scale_range[1] - ), "scale_range should be of kind (min, max)" - assert ( - ratio_range[0] <= ratio_range[1] - ), "ratio_range should be of kind (min, max)" - self.scale_range = scale_range - self.ratio_range = ratio_range - self.interpolation = interpolation - - def apply(self, input: Tuple): - self._coord_info = self._get_coord(self._get_image(input)) - return super().apply(input) - - def _apply_image(self, image): - x, y, w, h = self._coord_info - cropped_img = image[y : y + h, x : x + w] - return F.resize(cropped_img, self.output_size, self.interpolation) - - def _apply_coords(self, coords): - x, y, w, h = self._coord_info - coords[:, 0] = (coords[:, 0] - x) * self.output_size[1] / w - coords[:, 1] = (coords[:, 1] - y) * self.output_size[0] / h - return coords - - def _apply_mask(self, mask): - x, y, w, h = self._coord_info - cropped_mask = mask[y : y + h, x : x + w] - return F.resize(cropped_mask, self.output_size, cv2.INTER_NEAREST) - - def _get_coord(self, image, attempts=10): - height, width, _ = image.shape - area = height * width - - for _ in range(attempts): - target_area = np.random.uniform(*self.scale_range) * area - log_ratio = tuple(math.log(x) for x in self.ratio_range) - aspect_ratio = math.exp(np.random.uniform(*log_ratio)) - - w = int(round(math.sqrt(target_area * aspect_ratio))) - h = int(round(math.sqrt(target_area / aspect_ratio))) - - if 0 < w <= width and 0 < h <= height: - x = np.random.randint(0, width - w + 1) - y = np.random.randint(0, height - h + 1) - return x, y, w, h - - # Fallback to central crop - in_ratio = float(width) / float(height) - if in_ratio < min(self.ratio_range): - w = width - h = int(round(w / min(self.ratio_range))) - elif in_ratio > max(self.ratio_range): - h = height - w = int(round(h * max(self.ratio_range))) - else: # whole image - w = width - h = height - x = (width - w) // 2 - y = (height - h) // 2 - return x, y, w, h - - -class CenterCrop(VisionTransform): - r"""Crops the given the input data at the center. - - :param output_size: Target size of output image, with (height, width) shape. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, output_size, *, order=None): - super().__init__(order) - if isinstance(output_size, int): - self.output_size = (output_size, output_size) - else: - self.output_size = output_size - - def apply(self, input: Tuple): - self._coord_info = self._get_coord(self._get_image(input)) - return super().apply(input) - - def _apply_image(self, image): - x, y = self._coord_info - th, tw = self.output_size - return image[y : y + th, x : x + tw] - - def _apply_coords(self, coords): - x, y = self._coord_info - coords[:, 0] -= x - coords[:, 1] -= y - return coords - - def _apply_mask(self, mask): - x, y = self._coord_info - th, tw = self.output_size - return mask[y : y + th, x : x + tw] - - def _get_coord(self, image): - th, tw = self.output_size - h, w, _ = image.shape - assert th <= h and tw <= w, "output size is bigger than image size" - x = int(round((w - tw) / 2.0)) - y = int(round((h - th) / 2.0)) - return x, y - - -class RandomHorizontalFlip(VisionTransform): - r"""Horizontally flip the input data randomly with a given probability. - - :param p: probability of the input data being flipped. Default: 0.5 - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, prob: float = 0.5, *, order=None): - super().__init__(order) - self.prob = prob - - def apply(self, input: Tuple): - self._flipped = np.random.random() < self.prob - self._w = self._get_image(input).shape[1] - return super().apply(input) - - def _apply_image(self, image): - if self._flipped: - return F.flip(image, flipCode=1) - return image - - def _apply_coords(self, coords): - if self._flipped: - coords[:, 0] = self._w - coords[:, 0] - return coords - - def _apply_mask(self, mask): - if self._flipped: - return F.flip(mask, flipCode=1) - return mask - - -class RandomVerticalFlip(VisionTransform): - r"""Vertically flip the input data randomly with a given probability. - - :param p: probability of the input data being flipped. Default: 0.5 - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, prob: float = 0.5, *, order=None): - super().__init__(order) - self.prob = prob - - def apply(self, input: Tuple): - self._flipped = np.random.random() < self.prob - self._h = self._get_image(input).shape[0] - return super().apply(input) - - def _apply_image(self, image): - if self._flipped: - return F.flip(image, flipCode=0) - return image - - def _apply_coords(self, coords): - if self._flipped: - coords[:, 1] = self._h - coords[:, 1] - return coords - - def _apply_mask(self, mask): - if self._flipped: - return F.flip(mask, flipCode=0) - return mask - - -class Normalize(VisionTransform): - r"""Normalize the input data with mean and standard deviation. - Given mean: ``(M1,...,Mn)`` and std: ``(S1,..,Sn)`` for ``n`` channels, - this transform will normalize each channel of the input data. - ``output[channel] = (input[channel] - mean[channel]) / std[channel]`` - - :param mean: Sequence of means for each channel. - :param std: Sequence of standard deviations for each channel. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, mean=0.0, std=1.0, *, order=None): - super().__init__(order) - self.mean = np.array(mean, dtype=np.float32) - self.std = np.array(std, dtype=np.float32) - - def _apply_image(self, image): - return (image - self.mean) / self.std - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class GaussianNoise(VisionTransform): - r"""Add random gaussian noise to the input data. - Gaussian noise is generated with given mean and std. - - :param mean: Gaussian mean used to generate noise. - :param std: Gaussian standard deviation used to generate noise. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, mean=0.0, std=1.0, *, order=None): - super().__init__(order) - self.mean = np.array(mean, dtype=np.float32) - self.std = np.array(std, dtype=np.float32) - - def _apply_image(self, image): - dtype = image.dtype - noise = np.random.normal(self.mean, self.std, image.shape) * 255 - image = image + noise.astype(np.float32) - return np.clip(image, 0, 255).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class BrightnessTransform(VisionTransform): - r"""Adjust brightness of the input data. - - :param value: How much to adjust the brightness. Can be any - non negative number. 0 gives the original image - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, value, *, order=None): - super().__init__(order) - if value < 0: - raise ValueError("brightness value should be non-negative") - self.value = value - - def _apply_image(self, image): - if self.value == 0: - return image - - dtype = image.dtype - image = image.astype(np.float32) - alpha = np.random.uniform(max(0, 1 - self.value), 1 + self.value) - image = image * alpha - return image.clip(0, 255).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class ContrastTransform(VisionTransform): - r"""Adjust contrast of the input data. - - :param value: How much to adjust the contrast. Can be any - non negative number. 0 gives the original image - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, value, *, order=None): - super().__init__(order) - if value < 0: - raise ValueError("contrast value should be non-negative") - self.value = value - - def _apply_image(self, image): - if self.value == 0: - return image - - dtype = image.dtype - image = image.astype(np.float32) - alpha = np.random.uniform(max(0, 1 - self.value), 1 + self.value) - image = image * alpha + F.to_gray(image).mean() * (1 - alpha) - return image.clip(0, 255).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class SaturationTransform(VisionTransform): - r"""Adjust saturation of the input data. - - :param value: How much to adjust the saturation. Can be any - non negative number. 0 gives the original image - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, value, *, order=None): - super().__init__(order) - if value < 0: - raise ValueError("saturation value should be non-negative") - self.value = value - - def _apply_image(self, image): - if self.value == 0: - return image - - dtype = image.dtype - image = image.astype(np.float32) - alpha = np.random.uniform(max(0, 1 - self.value), 1 + self.value) - image = image * alpha + F.to_gray(image) * (1 - alpha) - return image.clip(0, 255).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class HueTransform(VisionTransform): - r"""Adjust hue of the input data. - - :param value: How much to adjust the hue. Can be any number - between 0 and 0.5, 0 gives the original image - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, value, *, order=None): - super().__init__(order) - if value < 0 or value > 0.5: - raise ValueError("hue value should be in [0.0, 0.5]") - self.value = value - - def _apply_image(self, image): - if self.value == 0: - return image - - dtype = image.dtype - image = image.astype(np.uint8) - hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) - h, s, v = cv2.split(hsv_image) - - alpha = np.random.uniform(-self.value, self.value) - h = h.astype(np.uint8) - # uint8 addition take cares of rotation across boundaries - with np.errstate(over="ignore"): - h += np.uint8(alpha * 255) - hsv_image = cv2.merge([h, s, v]) - return cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR_FULL).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask - - -class ColorJitter(VisionTransform): - r"""Randomly change the brightness, contrast, saturation and hue of an image. - - :param brightness: How much to jitter brightness. - Chosen uniformly from [max(0, 1 - brightness), 1 + brightness] - or the given [min, max]. Should be non negative numbers. - :param contrast: How much to jitter contrast. - Chosen uniformly from [max(0, 1 - contrast), 1 + contrast] - or the given [min, max]. Should be non negative numbers. - :param saturation: How much to jitter saturation. - Chosen uniformly from [max(0, 1 - saturation), 1 + saturation] - or the given [min, max]. Should be non negative numbers. - :param hue: How much to jitter hue. - Chosen uniformly from [-hue, hue] or the given [min, max]. - Should have 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5. - :param order: The same with :class:`VisionTransform` - """ - - def __init__(self, brightness=0, contrast=0, saturation=0, hue=0, *, order=None): - super().__init__(order) - transforms = [] - if brightness != 0: - transforms.append(BrightnessTransform(brightness)) - if contrast != 0: - transforms.append(ContrastTransform(contrast)) - if saturation != 0: - transforms.append(SaturationTransform(saturation)) - if hue != 0: - transforms.append(HueTransform(hue)) - self.transforms = Compose( - transforms, - shuffle_indices=[tuple(range(1, len(transforms) + 1))], - order=order, - ) - - def apply(self, input): - return self.transforms.apply(input) - - -class Lighting(VisionTransform): - def __init__(self, scale, *, order=None): - super().__init__(order) - if scale < 0: - raise ValueError("lighting scale should be non-negative") - self.scale = scale - self.eigvec = np.array( - [ - [-0.5836, -0.6948, 0.4203], - [-0.5808, -0.0045, -0.8140], - [-0.5675, 0.7192, 0.4009], - ] - ) # reverse the first dimension for BGR - self.eigval = np.array([0.2175, 0.0188, 0.0045]) - - def _apply_image(self, image): - if self.scale == 0: - return image - - dtype = image.dtype - image = image.astype(np.float32) - alpha = np.random.normal(scale=self.scale, size=3) - image = image + self.eigvec.dot(alpha * self.eigval) - return image.clip(0, 255).astype(dtype) - - def _apply_coords(self, coords): - return coords - - def _apply_mask(self, mask): - return mask diff --git a/python_module/megengine/distributed/__init__.py b/python_module/megengine/distributed/__init__.py deleted file mode 100644 index 1416e82c..00000000 --- a/python_module/megengine/distributed/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .functional import ( - all_gather, - all_reduce_max, - all_reduce_min, - all_reduce_sum, - all_to_all, - bcast_param, - broadcast, - gather, - reduce_scatter_sum, - reduce_sum, - scatter, -) -from .util import ( - get_backend, - get_free_ports, - get_master_ip, - get_master_port, - get_rank, - get_world_size, - group_barrier, - init_process_group, - is_distributed, - synchronized, -) diff --git a/python_module/megengine/distributed/functional.py b/python_module/megengine/distributed/functional.py deleted file mode 100644 index 56ad089f..00000000 --- a/python_module/megengine/distributed/functional.py +++ /dev/null @@ -1,302 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Optional, Union - -import megengine._internal as mgb -from megengine._internal.opr_param_defs import CollectiveComm as Param - -from ..core import Buffer, Parameter, Tensor, wrap_io_tensor -from ..functional import add_update -from .helper import collective_comm_symvar -from .util import get_rank, is_distributed - - -@wrap_io_tensor -def _collective_comm(*args, **kargs): - return collective_comm_symvar(*args, **kargs) - - -def _group_check(*args): - """Return True when arguments are all None or all not None - """ - l = [val is None for val in args] - return len(set(l)) <= 1 - - -def reduce_sum( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, -) -> Tensor: - """Create reduce_sum operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this is a root node - """ - assert _group_check( - key, nr_ranks, is_root - ), "key, nr_ranks, is_root should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.REDUCE_SUM, nr_ranks, is_root, device=tensor.device, - ) - - -def gather( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, - rank: Optional[int] = None, -) -> Tensor: - """Create gather operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this is a root node - :param rank: rank of this node - """ - assert _group_check( - key, nr_ranks, is_root, rank - ), "key, nr_ranks, is_root, rank should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.GATHER, nr_ranks, is_root, rank, device=tensor.device, - ) - - -def broadcast( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, -) -> Tensor: - """Create broadcast operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this is a root node - """ - assert _group_check( - key, nr_ranks, is_root - ), "key, nr_ranks, is_root should be set at the same time" - - if is_root is None: - is_root = get_rank() == 0 - if is_root: - inp = tensor - else: - inp = tensor._symvar.owner_graph - - return _collective_comm( - inp, - key, - Param.Mode.BROADCAST, - nr_ranks, - is_root, - dtype=tensor.dtype, - device=tensor.device, - ) - - -def scatter( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, - rank: Optional[int] = None, -) -> Tensor: - """Create scatter operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this is a root node - :param rank: rank of this node - """ - assert _group_check( - key, nr_ranks, is_root, rank - ), "key, nr_ranks, is_root, rank should be set at the same time" - if key is None: - key = tensor._symvar.name - if is_root is None: - is_root = get_rank() == 0 - - if is_root: - inp = tensor - else: - inp = tensor._symvar.owner_graph - - return _collective_comm( - inp, - key, - Param.Mode.SCATTER, - nr_ranks, - is_root, - rank, - dtype=tensor.dtype, - device=tensor.device, - ) - - -def all_to_all( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - rank: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create all_to_all operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param rank: rank of this node - :param local_grad: whether use local grad - """ - assert _group_check( - key, nr_ranks, rank - ), "key, nr_ranks, rank should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.ALL_TO_ALL, nr_ranks, rank=rank, local_grad=local_grad, - ) - - -def all_gather( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - rank: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create all_gather operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param rank: rank of this node - :param local_grad: whether use local grad - """ - assert _group_check( - key, nr_ranks, rank - ), "key, nr_ranks, rank should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.ALL_GATHER, nr_ranks, rank=rank, local_grad=local_grad - ) - - -def reduce_scatter_sum( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - rank: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create reduce_scatter_sum operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param rank: rank of this node - :param local_grad: whether use local grad - """ - assert _group_check( - key, nr_ranks, rank - ), "key, nr_ranks, rank should be set at the same time" - return _collective_comm( - tensor, - key, - Param.Mode.REDUCE_SCATTER_SUM, - nr_ranks, - rank=rank, - local_grad=local_grad, - ) - - -def all_reduce_sum( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create all_reduce_sum operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param local_grad: whether use local grad - """ - assert _group_check(key, nr_ranks), "key, nr_ranks should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.ALL_REDUCE_SUM, nr_ranks, local_grad=local_grad - ) - - -def all_reduce_max( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create all_reduce_max operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param local_grad: whether use local grad - """ - assert _group_check(key, nr_ranks), "key, nr_ranks should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.ALL_REDUCE_MAX, nr_ranks, local_grad=local_grad - ) - - -def all_reduce_min( - tensor: Tensor, - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - local_grad: Optional[bool] = False, -) -> Tensor: - """Create all_reduce_min operator for collective communication - - :param tensor: input tensor - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param local_grad: whether use local grad - """ - assert _group_check(key, nr_ranks), "key, nr_ranks should be set at the same time" - return _collective_comm( - tensor, key, Param.Mode.ALL_REDUCE_MIN, nr_ranks, local_grad=local_grad - ) - - -def bcast_param( - inp: Union[Buffer, Parameter], - key: Optional[str] = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, -) -> None: - """Broadcast parameters among devices - - :param inp: input Buffer or Parameter to be synchronized - :param key: unique identifier for collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this is a root node - """ - if not is_distributed(): - return - assert _group_check( - key, nr_ranks, is_root - ), "key, nr_ranks, is_root should be set at the same time" - assert isinstance(inp, (Buffer, Parameter)) - bcast_res = broadcast(inp, key, nr_ranks, is_root) - add_update(inp, bcast_res, alpha=0) diff --git a/python_module/megengine/distributed/helper.py b/python_module/megengine/distributed/helper.py deleted file mode 100644 index 7d2d84bd..00000000 --- a/python_module/megengine/distributed/helper.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Optional, Union - -import megengine._internal as mgb -from megengine._internal.opr_param_defs import CollectiveComm as CollParam - -from .util import ( - get_backend, - get_group_id, - get_master_ip, - get_master_port, - get_rank, - get_world_size, -) - - -def collective_comm_symvar( - inp: Union[mgb.SymbolVar, mgb.CompGraph], - key: Optional[str] = None, - op: CollParam.Mode = None, - nr_ranks: Optional[int] = None, - is_root: Optional[bool] = None, - rank: Optional[int] = None, - local_grad: Optional[bool] = False, - dtype: Optional[type] = None, - device: Optional[mgb.CompNode] = None, - comp_graph: Optional[mgb.CompGraph] = None, -) -> mgb.SymbolVar: - """Helper function for creating collective_comm operators - - :param inp: tensor or comp_graph - :param key: unique identifier for collective communication - :param op: mode of collective communication - :param nr_ranks: number of ranks, use util.get_world_size() as default - :param is_root: whether this node is root node - :param rank: rank of this node - :param local_grad: whether use local grad - :param dtype: output data type, use dtype of inp as default - :param device: output comp node, use comp node of inp as default - :param comp_graph: output comp graph, use comp graph of inp as default - """ - return mgb.opr.collective_comm( - inp, - key=key if key is not None else ("collective_comm_" + str(get_group_id())), - nr_devices=nr_ranks if nr_ranks is not None else get_world_size(), - is_root=is_root if is_root is not None else (get_rank() == 0), - rank=rank if rank is not None else get_rank(), - local_grad=local_grad, - server_addr=get_master_ip(), - port=get_master_port(), - param=CollParam(mode=op), - dtype=dtype, - backend=get_backend(), - comp_node=device, - comp_graph=comp_graph, - ) diff --git a/python_module/megengine/distributed/util.py b/python_module/megengine/distributed/util.py deleted file mode 100644 index 5166a9fc..00000000 --- a/python_module/megengine/distributed/util.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import functools -import socket -from typing import Callable, List, Optional - -import megengine._internal as mgb - -from ..core import set_default_device - -_master_ip = None -_master_port = 0 -_world_size = 0 -_rank = 0 -_backend = None -_group_id = 0 - - -def init_process_group( - master_ip: str, - master_port: int, - world_size: int, - rank: int, - dev: int, - backend: Optional[str] = "nccl", -) -> None: - """Initialize the distributed process group, and also specify the device used in the current process. - - :param master_ip: IP address of the master node. - :param master_port: Port available for all processes to communicate. - :param world_size: Total number of processes participating in the job. - :param rank: Rank of the current process. - :param dev: The GPU device id to bind this process to. - :param backend: Communicator backend, currently support 'nccl' and 'ucx' - """ - global _master_ip # pylint: disable=global-statement - global _master_port # pylint: disable=global-statement - global _world_size # pylint: disable=global-statement - global _rank # pylint: disable=global-statement - global _backend # pylint: disable=global-statement - global _group_id # pylint: disable=global-statement - - if not isinstance(master_ip, str): - raise TypeError("Expect type str but got {}".format(type(master_ip))) - if not isinstance(master_port, int): - raise TypeError("Expect type int but got {}".format(type(master_port))) - if not isinstance(world_size, int): - raise TypeError("Expect type int but got {}".format(type(world_size))) - if not isinstance(rank, int): - raise TypeError("Expect type int but got {}".format(type(rank))) - if not isinstance(backend, str): - raise TypeError("Expect type str but got {}".format(type(backend))) - - _master_ip = master_ip - _master_port = master_port - _world_size = world_size - _rank = rank - _backend = backend - _group_id = 0 - - set_default_device(mgb.comp_node("gpu" + str(dev))) - - if rank == 0: - _master_port = mgb.config.create_mm_server("0.0.0.0", master_port) - if _master_port == -1: - raise Exception("Failed to start server on port {}".format(master_port)) - else: - assert master_port > 0, "master_port must be specified for non-zero rank" - - -def is_distributed() -> bool: - """Return True if the distributed process group has been initialized""" - return _world_size is not None and _world_size > 1 - - -def get_master_ip() -> str: - """Get the IP address of the master node""" - return str(_master_ip) - - -def get_master_port() -> int: - """Get the port of the rpc server on the master node""" - return _master_port - - -def get_world_size() -> int: - """Get the total number of processes participating in the job""" - return _world_size - - -def get_rank() -> int: - """Get the rank of the current process""" - return _rank - - -def get_backend() -> str: - """Get the backend str""" - return str(_backend) - - -def get_group_id() -> int: - """Get group id for collective communication""" - global _group_id - _group_id += 1 - return _group_id - - -def group_barrier() -> None: - """Block until all ranks in the group reach this barrier""" - mgb.config.group_barrier(_master_ip, _master_port, _world_size, _rank) - - -def synchronized(func: Callable): - """Decorator. Decorated function will synchronize when finished. - Specifically, we use this to prevent data race during hub.load""" - - @functools.wraps(func) - def wrapper(*args, **kwargs): - if not is_distributed(): - return func(*args, **kwargs) - - ret = func(*args, **kwargs) - group_barrier() - return ret - - return wrapper - - -def get_free_ports(num: int) -> List[int]: - """Get one or more free ports. - """ - socks, ports = [], [] - for i in range(num): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.bind(("", 0)) - socks.append(sock) - ports.append(sock.getsockname()[1]) - for sock in socks: - sock.close() - return ports diff --git a/python_module/megengine/functional/__init__.py b/python_module/megengine/functional/__init__.py deleted file mode 100644 index 6220c599..00000000 --- a/python_module/megengine/functional/__init__.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# pylint: disable=redefined-builtin -from .elemwise import ( - abs, - add, - arccos, - arcsin, - ceil, - clamp, - cos, - divide, - equal, - exp, - floor, - greater, - greater_equal, - isinf, - isnan, - less, - less_equal, - log, - maximum, - minimum, - mod, - multiply, - power, - relu, - round, - sigmoid, - sin, - subtract, - tanh, -) -from .graph import add_extra_vardep, add_update, grad -from .loss import ( - binary_cross_entropy, - cross_entropy, - cross_entropy_with_softmax, - hinge_loss, - l1_loss, - nll_loss, - smooth_l1_loss, - square_loss, - triplet_margin_loss, -) -from .math import ( - argmax, - argmin, - logsumexp, - max, - mean, - min, - norm, - normalize, - prod, - sqrt, - sum, -) -from .nn import ( - assert_equal, - avg_pool2d, - batch_norm2d, - batched_matrix_mul, - conv2d, - conv_transpose2d, - dropout, - embedding, - eye, - flatten, - identity, - indexing_one_hot, - interpolate, - leaky_relu, - linear, - local_conv2d, - matrix_mul, - max_pool2d, - one_hot, - prelu, - remap, - roi_align, - roi_pooling, - softmax, - softplus, - sync_batch_norm, - warp_perspective, -) -from .quantized import conv_bias_activation -from .sort import argsort, sort, top_k -from .tensor import ( - add_axis, - arange, - broadcast_to, - concat, - cond_take, - dimshuffle, - gather, - linspace, - remove_axis, - reshape, - scatter, - shapeof, - transpose, - where, - zeros_like, -) -from .utils import accuracy, zero_grad - -# delete namespace -# pylint: disable=undefined-variable -del elemwise, graph, loss, math, nn, tensor # type: ignore[name-defined] diff --git a/python_module/megengine/functional/debug_param.py b/python_module/megengine/functional/debug_param.py deleted file mode 100644 index b27f4b4b..00000000 --- a/python_module/megengine/functional/debug_param.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os - -_conv_execution_strategy = os.getenv("MEGENGINE_CONV_EXECUTION_STRATEGY", "HEURISTIC") - - -def get_conv_execution_strategy() -> str: - """Returns the execuation strategy of :class:`~.Conv2d`. - - See :func:`~.set_conv_execution_strategy` for possible return values - """ - return _conv_execution_strategy - - -def set_conv_execution_strategy(option: str): - """Sets the execuation strategy of :class:`~.Conv2d`. - - :param option: Decides how :class:`~.Conv2d` algorithm is chosen. - Available values: - - * 'HEURISTIC' uses heuristic to choose the fastest algorithm. - * 'PROFILE' runs possible algorithms on real device to find the best. - * 'PROFILE_HEURISTIC' uses profile result and heuristic to choose the fastest algorithm. - * 'PROFILE_REPRODUCIBLE' uses the fastest of profile result that is also reproducible. - * 'HEURISTIC_REPRODUCIBLE' uses heuristic to choose the fastest algorithm that is also reproducible. - - The default strategy is 'HEURISTIC'. - - It can also be set through the environmental variable 'MEGENGINE_CONV_EXECUTION_STRATEGY'. - """ - valid_option = ( - "HEURISTIC", - "PROFILE", - "PROFILE_HEURISTIC", - "PROFILE_REPRODUCIBLE", - "HEURISTIC_REPRODUCIBLE", - ) - if not option in valid_option: - raise ValueError("Valid option can only be one of {}".format(valid_option)) - - global _conv_execution_strategy # pylint: disable=global-statement - _conv_execution_strategy = option diff --git a/python_module/megengine/functional/elemwise.py b/python_module/megengine/functional/elemwise.py deleted file mode 100644 index 16889652..00000000 --- a/python_module/megengine/functional/elemwise.py +++ /dev/null @@ -1,299 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# pylint: disable=unused-argument,invalid-name,redefined-builtin,arguments-out-of-order -import functools - -import megengine._internal as mgb - -from ..core.graph import _use_default_if_none -from ..core.tensor import Tensor, wrap_io_tensor - -__all__ = [ - "abs", - "arccos", - "add", - "arcsin", - "clamp", - "ceil", - "cos", - "divide", - "equal", - "exp", - "greater", - "greater_equal", - "floor", - "isinf", - "isnan", - "less", - "less_equal", - "log", - "maximum", - "minimum", - "mod", - "multiply", - "power", - "relu", - "round", - "sigmoid", - "sin", - "subtract", - "tanh", -] - - -def _elemwise(mode): # DONT export - """Decorator helps to wrap megbrain element-wise oprs""" - - def elemwise_decorator(func): - @functools.wraps(func) - @wrap_io_tensor - def elemwise_func(*inputs) -> Tensor: - if all(isinstance(i, (int, float)) for i in inputs): - device, comp_graph = _use_default_if_none(None, None) - ret = mgb.opr.elemwise( - *inputs, mode=mode, comp_node=device, comp_graph=comp_graph - ) - return ret.inferred_value[0] - return mgb.opr.elemwise(*inputs, mode=mode) - - return elemwise_func - - return elemwise_decorator - - -@_elemwise("ABS") -def abs(x): - """Calculate the absolute value element-wise.""" - - -@_elemwise("ACOS") -def arccos(x): - """Inverse cosine, element-wise.""" - - -@_elemwise("ADD") -def add(x, y): - """Element-wise addition.""" - - -@_elemwise("ASIN") -def arcsin(x): - """Inverse sine, element-wise.""" - - -@_elemwise("CEIL") -def ceil(x): - """Return the ceil of the input, element-wise.""" - - -@_elemwise("COS") -def cos(x): - """Cosine, element-wise.""" - - -@_elemwise("TRUE_DIV") -def divide(x, y): - """Return (x / y) element-wise.""" - - -@_elemwise("EQ") -def equal(x, y): - """Return (x == y) element-wise.""" - - -@_elemwise("EXP") -def exp(x): - """Calculate the exponential element-wise""" - - -@_elemwise("FLOOR") -def floor(x): - """Return the floor of the input, element-wise""" - - -def greater(x, y): - """Return (x > y) element-wise.""" - return less(y, x) - - -def greater_equal(x, y): - """Return (x >= y) element-wise""" - return less_equal(y, x) - - -@_elemwise("LT") -def less(x, y): - """Return (x < y) element-wise.""" - - -@_elemwise("LEQ") -def less_equal(x, y): - """Return (x =< y) element-wise.""" - - -@_elemwise("LOG") -def log(x): - """Natural logarithm (base `e`), element-wise.""" - - -@_elemwise("MAX") -def maximum(x, y): - """Element-wise maximum of array elements.""" - - -@_elemwise("MIN") -def minimum(x, y): - """Element-wise minimum of array elements.""" - - -@_elemwise("MOD") -def mod(x, y): - """Return element-wise remainder of division.""" - - -@_elemwise("MUL") -def multiply(x, y): - """Element-wise multiplication.""" - - -@_elemwise("POW") -def power(x, y): - """First tensor elements raised to powers from second tensor (x ** y), element-wise.""" - - -@_elemwise("RELU") -def relu(x): - """Return `max(x, 0)` element-wise.""" - - -@_elemwise("ROUND") -def round(x): - """Round tensor to int element-wise.""" - - -@_elemwise("SIGMOID") -def sigmoid(x): - """Return 1 / ( 1 + exp( -x ) ) element-wise.""" - - -@_elemwise("SIN") -def sin(x): - """Sine, element-wise.""" - - -@_elemwise("SUB") -def subtract(x, y): - """Subtract arguments element-wise""" - - -@_elemwise("TANH") -def tanh(x): - """Compute hyperbolic tangent element-wise.""" - - -@wrap_io_tensor -def clamp(inp: Tensor, lower=None, upper=None) -> Tensor: - r""" - Clamp all elements in :attr:`inp` into the range `[` :attr:`lower`, :attr:`upper` `]` and return - a resulting tensor: - - .. math:: - y_i = \begin{cases} - \text{lower} & \text{if } x_i < \text{lower} \\ - x_i & \text{if } \text{lower} \leq x_i \leq \text{upper} \\ - \text{upper} & \text{if } x_i > \text{upper} - \end{cases} - - :param inp: the input tensor. - :param lower: lower-bound of the range to be clamped to - :param upper: upper-bound of the range to be clamped to - - Example: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - a = tensor(np.arange(5).astype(np.int32)) - - print(F.clamp(a, 2, 4).numpy()) - - print(F.clamp(a, lower=3).numpy()) - - print(F.clamp(a, upper=3).numpy()) - - .. testoutput:: - - [2 2 2 3 4] - [3 3 3 3 4] - [0 1 2 3 3] - - """ - assert ( - lower is not None or upper is not None - ), "At least one of 'lower' or 'upper' must not be None" - if lower is not None: - if upper is not None: - assert lower <= upper, "clamp lower bound is bigger that upper bound" - return minimum(maximum(inp, lower), upper) - else: - return maximum(inp, lower) - else: - return minimum(inp, upper) - - -def isnan(inp: Tensor) -> Tensor: - r"""Returns a new tensor representing if each element is NaN or not. - - :param: inp - :return: a new tensor representing if each element in :attr:`inp` is NaN or not. - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - - x = tensor([1, float("nan"), 0]) - - print(F.isnan(x)) - - .. testoutput:: - - Tensor([0 1 0], dtype=uint8) - - """ - return (inp != inp).astype("uint8") - - -def isinf(inp: Tensor) -> Tensor: - r"""Returns a new tensor representing if each element is Inf or not. - - :param: inp - :return: a new tensor representing if each element in :attr:`inp` is Inf or not. - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - - x = tensor([1, float("inf"), 0]) - - print(F.isinf(x)) - - .. testoutput:: - - Tensor([0 1 0], dtype=uint8) - - """ - return (abs(inp) == float("inf")).astype("uint8") diff --git a/python_module/megengine/functional/external.py b/python_module/megengine/functional/external.py deleted file mode 100644 index 6c93d217..00000000 --- a/python_module/megengine/functional/external.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# pylint: disable=too-many-lines -from typing import List - -import megengine._internal as mgb - -from ..core import Tensor, wrap_io_tensor - - -@wrap_io_tensor -def cambricon_subgraph( - inputs: List[Tensor], data: bytes, symbol: str, tensor_dim_mutable: bool, -) -> List[Tensor]: - """Load a serialized Cambricon subgraph (i.e. cnrtModel_t) and - execute the operations defined in the subgraph. - - :param inputs: List of input tensors of the subgraph. - :param data: The serialized subgraph. - :param symbol: The name of the function in the subgraph. - The function is corresponding to a cnmlFusionOp - which is added to the cnmlModel_t/cnrtModel_t. - :param tensor_dim_mutable: Whether the input tensors' shapes are mutalbe - in cnrtModel_t - """ - return mgb.opr.cambricon_runtime( - data, symbol, tuple(map(lambda x: x._symvar, inputs)), tensor_dim_mutable - ) - - -@wrap_io_tensor -def atlas_subgraph(inputs: List[Tensor], data: bytes) -> List[Tensor]: - """Load a serialized Atlas subgraph (i.e. om model) and - execute the operations defined in the subgraph. - - :param inputs: List of input tensors of the subgraph. - :param data: The serialized subgraph. - """ - return mgb.opr.atlas_runtime(tuple(map(lambda x: x._symvar, inputs)), data) - - -@wrap_io_tensor -def extern_opr_subgraph( - inputs, output_shapes: List[tuple], dump_name: str, dump_data: bytes, -) -> List[Tensor]: - """Load a serialized extern opr subgraph and fake execute the operator - - :param inputs: Tensor or list of input tensors. - :param output_shapes: The output shapes. - :param dump_name: The serialized subgraph name. - :param dump_data: The serialized subgraph. - - :return: List of tensors - """ - if not isinstance(inputs, list): - inputs = [inputs] - return mgb.opr.extern_c_opr_placeholder( - inputs, output_shapes, dump_name=dump_name, dump_data=dump_data, - ) diff --git a/python_module/megengine/functional/graph.py b/python_module/megengine/functional/graph.py deleted file mode 100644 index 5dbdadb6..00000000 --- a/python_module/megengine/functional/graph.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -from typing import Iterable, Optional, Union - -import megengine._internal as mgb - -from ..core.graph import get_default_graph -from ..core.tensor import Tensor, wrap_io_tensor -from ..jit import barrier, mark_impure, trace - - -@wrap_io_tensor -def grad( - target: Tensor, - wrt: Union[Tensor, Iterable[Tensor]], - warn_mid_wrt: bool = True, - use_virtual_grad: bool = None, - return_zero_for_nodep: bool = True, -) -> Union[Tensor, Iterable[Optional[Tensor]], None]: - r"""Compute the symbolic gradient of ``target`` with repect to ``wrt``. - - ``wrt`` can either be a single tensor or a sequence of tensors. - - :param target: ``grad`` target tensor - :param wrt: with respect to which to compute the gradient - :param warn_mid_wrt: whether to give warning if ``wrt`` is not endpoint - :param use_virtual_grad: whether to use virtual ``grad`` opr, so fwd graph can - be optimized before applying ``grad``; if ``None`` is given, then virtual - ``grad`` would be used if ``graph_opt_level >= 2`` - :param return_zero_for_nodep: if ``target`` does not depend on ``wrt``, set to True to return - a zero-valued :class:`~.Tensor` rather than ``None``; can't be set to False when using - virtual ``grad`` opr. - :return: :math:`\partial\text{target} / \partial\text{wrt}` - """ - if not isinstance(wrt, mgb.SymbolVar): - assert isinstance(wrt, collections.Iterable) - wrt = [w._symvar for w in wrt] - - return mgb.grad(target, wrt, warn_mid_wrt, use_virtual_grad, return_zero_for_nodep) - - -_add_update_cache = {} # type: dict - -_dummy = mgb.SharedScalar(0) - - -def add_update( - dest: Tensor, - delta: Tensor, - *, - alpha: Union[Tensor, float, int] = 1.0, - beta: Union[Tensor, float, int] = 1.0, - bias: Union[Tensor, float, int] = 0.0 -): - r"""Inplace modify ``dest`` as follows: - - .. math:: - dest = alpha * dest + beta * delta + bias - - :param dest: input data that will be inplace modified. - :param delta: update value that will be added to ``dest``. - :param alpha: weight ratio of ``dest``. Default: 1.0 - :param beta: weight ratio of ``delta``. Default: 1.0 - :param bias: bias value appended to the result. Default: 0.0 - """ - - if isinstance(beta, Tensor) or isinstance(alpha, Tensor): - delta *= beta - beta = 1.0 - if isinstance(alpha, Tensor): - delta += (alpha - 1.0) * dest - alpha = 1.0 - if isinstance(bias, Tensor): - delta += bias - bias = 0.0 - - comp_graph = dest._comp_graph or get_default_graph() - comp_node = dest._comp_node - - if not isinstance(delta, Tensor): - _delta = mgb.make_immutable( - value=delta, comp_node=comp_node, comp_graph=comp_graph - ) - else: - _delta = delta._attach(comp_graph) - - _dest = dest._attach(comp_graph) - - # use (dest, delta) as the key, so we could not add the same delta to dest in static graph - key = (comp_graph._id(), _dest.id, _delta.id) - if key in _add_update_cache: - _alpha, _beta, _bias, config = _add_update_cache[key] - mgb.mgb._mgb.SharedScalar__set(_alpha, alpha) - mgb.mgb._mgb.SharedScalar__set(_beta, beta) - mgb.mgb._mgb.SharedScalar__set(_bias, bias) - else: - _alpha = mgb.SharedScalar(alpha) - _beta = mgb.SharedScalar(beta) - _bias = mgb.SharedScalar(bias) - config = mgb.helper.gen_config(None, comp_node, None) - _add_update_cache[key] = (_alpha, _beta, _bias, config) - - u = mgb.mgb._Opr.add_update( - _dest, barrier(_delta), _alpha, _beta, _bias, _dummy, config - ) - mark_impure(u) - - if trace._active_instance: - dest._override_symvar_during_trace(trace._active_instance, u) - - return Tensor(u) - - -@wrap_io_tensor -def add_extra_vardep(oup: Tensor, dep: Tensor): - r"""Explicitly set the dependency that tensor ``oup`` depends on tensor ``dep``. - """ - return mgb.config.add_extra_vardep(oup, dep) diff --git a/python_module/megengine/functional/loss.py b/python_module/megengine/functional/loss.py deleted file mode 100644 index 0755825d..00000000 --- a/python_module/megengine/functional/loss.py +++ /dev/null @@ -1,391 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import megengine._internal as mgb - -from ..core.tensor import Tensor -from .elemwise import abs, equal, log, maximum, power, relu -from .nn import assert_equal, indexing_one_hot -from .tensor import where -from .utils import zero_grad - - -def l1_loss(pred: Tensor, label: Tensor) -> Tensor: - r""" - Calculates the mean absolute error (MAE) between - each element in the pred :math:`x` and label :math:`y`. - - The mean absolute error can be described as: - - .. math:: \ell(x,y) = mean\left(L \right) - - where - - .. math:: - - L = \{l_1,\dots,l_N\}, \quad - l_n = \left| x_n - y_n \right|, - - :math:`x` and :math:`y` are tensors of arbitrary shapes with a total - of :math:`N` elements each. :math:`N` is the batch size. - - :param pred: The predicted result from model. - :param label: The ground truth to compare. - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.functional as F - ipt = mge.tensor(np.array([3, 3, 3, 3]).astype(np.float32)) - tgt = mge.tensor(np.array([2, 8, 6, 1]).astype(np.float32)) - loss = F.l1_loss(ipt,tgt) - print(loss.numpy()) - - Outputs: - - .. testoutput:: - - [2.75] - - """ - - diff = pred - label - return abs(diff).mean() - - -def square_loss(pred: Tensor, label: Tensor) -> Tensor: - r""" - Calculates the mean squared error (squared L2 norm) between - each element in the pred :math:`x` and label :math:`y`. - - The mean squared error can be described as: - - .. math:: \ell(x, y) = mean\left( L \right) - - where - - .. math:: - - L = \{l_1,\dots,l_N\}, \quad - l_n = \left( x_n - y_n \right)^2, - - :math:`x` and :math:`y` are tensors of arbitrary shapes with a total - of :math:`N` elements each. :math:`N` is the batch size. - - :param pred: The predicted result from model. - :param label: The ground truth to compare. - - Shape: - - pred: :math:`(N, *)` where :math:`*` means any number of additional - dimensions - - label: :math:`(N, *)`. Same shape as ``pred`` - - """ - diff = pred - label - return (diff ** 2).mean() - - -def cross_entropy( - inp: Tensor, target: Tensor, axis: int = 1, ignore_index: int = -1 -) -> Tensor: - r""" - Returns the cross entropy loss in a classification problem. - - .. math:: \textrm{CrossEntropy}(x, y) = - \sum_{i} y_i\log(x_i) - - :param inp: The input tensor representing the predicted probability. - :param label: The input tensor representing the classification label. - :param axis: An axis along which cross_entropy will be applied. Default: 1 - :param ignore_index: Specifies a target value that is ignored and does not contribute to the input gradient. Default: -1 - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data_shape = (1, 2) - label_shape = (1, ) - - pred = tensor(np.array([0.5, 0.5], dtype=np.float32).reshape(data_shape)) - label = tensor(np.ones(label_shape, dtype=np.int32)) - loss = F.cross_entropy(pred, label) - print(loss.numpy()) - - Outputs: - - .. testoutput:: - - [0.69] - - """ - n0 = inp.ndim - n1 = target.ndim - assert n0 == n1 + 1, ( - "target ndim must be one less than input ndim; input_ndim={} " - "target_ndim={}".format(n0, n1) - ) - - if ignore_index != -1: - mask = 1 - equal(target, ignore_index) - target = target * mask - loss = -log(indexing_one_hot(inp, target, axis)) * mask - return loss.sum() / maximum(mask.sum(), 1.0) - else: - return -log(indexing_one_hot(inp, target, axis)).mean() - - -def cross_entropy_with_softmax( - pred: Tensor, label: Tensor, axis: int = 1, label_smooth: float = 0 -) -> Tensor: - r""" - Returns loss after applying :func:`~.softmax` + :func:`~.cross_entropy`. - - It has better numerical stability compared with sequential calls to :func:`~.softmax` and :func:`~.cross_entropy`. - - When using label smoothing, the label distribution is as follows: - - .. math:: y^{LS}_{k}=y_{k}\left(1-\alpha\right)+\alpha/K - - where :math:`y^{LS}` and :math:`y` are new label distribution and origin label distribution respectively. - k is the index of label distribution. :math:`\alpha` is label_smooth and :math:`K` is the number of classes. - - :param pred: The input tensor representing the predicted probability. - :param label: The input tensor representing the classification label. - :param axis: An axis along which softmax will be applied. Default: 1. - :param label_smooth: A label smoothing of parameter that can re-distribute target distribution. Default: 0. - """ - - n0 = pred.ndim - n1 = label.ndim - assert n0 == n1 + 1, ( - "target ndim must be one less than input ndim; input_ndim={} " - "target_ndim={}".format(n0, n1) - ) - - num_classes = pred.shapeof(axis) - - # Denominator of the softmax - offset = zero_grad(pred.max(axis=axis, keepdims=True)) - pred = pred - offset - down = mgb.opr.elem.exp(pred).sum(axis=axis, keepdims=True) - - up = indexing_one_hot(pred, label, axis) - - if label_smooth != 0: - factor = label_smooth / num_classes - up = up * (1 - label_smooth) + pred.sum(axis=axis, keepdims=True) * factor - - return (log(down) - up).mean() - - -def triplet_margin_loss( - anchor: Tensor, positive: Tensor, negative: Tensor, margin: float = 1.0, p: int = 2 -) -> Tensor: - r""" - Creates a criterion that measures the triplet loss given an input tensors. - - .. math:: - - L(a, p, n) = max\left\{d\left(a_{i},p_{i}\right)-d\left(a_{i}, n_{i}\right)+margin, 0\right\},\ - d\left(x_{i},y_{i}\right)=\left\|x_{i}-y_{i}\right\|_{p} - - :param anchor: The input tensor representing the anchor samples. - :param positive: The input tensor representing the positive samples. - :param negative: The input tensor representing the negative samples. - :param margin: Default: 1.0 - :param p: The norm degree for pairwise distance. Default: 2.0 - """ - - s0 = anchor.shapeof() - s1 = positive.shapeof() - s2 = negative.shapeof() - assert_equal(s0, s1) - assert_equal(s1, s2) - - n0 = anchor.ndim - n1 = positive.ndim - n2 = negative.ndim - assert n0 == 2 and n1 == 2 and n2 == 2, ( - "anchor ndim, positive ndim, and negative ndim must be 2; " - "anchor_ndim={} positive_ndim={} negative_ndim={}".format(n0, n1, n2) - ) - assert p > 0, "a margin with a value greater than 0; p={}".format(p) - - diff0 = abs(anchor - positive) - diff1 = abs(anchor - negative) - - d1 = power(power(diff0, p).sum(axis=1, keepdims=True), 1 / p) - d2 = power(power(diff1, p).sum(axis=1, keepdims=True), 1 / p) - - loss = maximum(d1 - d2 + margin, 0) - - return loss.mean() - - -def binary_cross_entropy(pred: Tensor, label: Tensor) -> Tensor: - r"""Function that measures the Binary Cross Entropy between the target and the prediction. - - :param pred: (N,*) where * means, any number of additional dimensions. - :param label: (N,*), same shape as the input. - - """ - s0 = pred.shapeof() - s1 = label.shapeof() - - assert_equal(s0, s1) - - return -1.0 * (label * log(pred) + (1.0 - label) * log(1 - pred)).mean() - - -def nll_loss( - pred: Tensor, label: Tensor, axis: int = 1, ignore_index: int = -1 -) -> Tensor: - r""" - The negative log likelihood loss. - - :param pred: The predicted result from model. - :param label: The ground truth to compare. - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - data_shape = (2, 2) - label_shape = (2, ) - - data = tensor( - np.array([[1, 0.5], [0.3, 1.2]], dtype=np.float32).reshape(data_shape), - ) - label = tensor( - np.ones(label_shape, dtype=np.int32) - ) - pred = F.log(F.softmax(data)) - loss1 = F.nll_loss(pred, label) - loss2 = F.cross_entropy_with_softmax(data, label) - print(loss1.numpy(), loss2.numpy()) - - Outputs: - - .. testoutput:: - - [0.6576154] [0.6576154] - - """ - n0 = pred.ndim - n1 = label.ndim - assert n0 == n1 + 1, ( - "target ndim must be one less than input ndim; input_ndim={} " - "target_ndim={}".format(n0, n1) - ) - - mask = 1.0 - equal(label, ignore_index) - label = label * mask - - loss = indexing_one_hot(pred, label, axis) * mask - - return -1.0 * loss.sum() / maximum(mask.sum(), 1.0) - - -def hinge_loss(pred: Tensor, label: Tensor, norm: str = "L1") -> Tensor: - r""" - Caculate the hinge loss which is often used in SVMs. - - The hinge loss can be described as: - - .. math:: loss(x, y) = \frac{1}{N}\sum_i\sum_j(max(0, 1 - x_{ij}*y_{ij})) - - :param pred: The input tensor representing the predicted probability, shape is (N, C). - :param label: The input tensor representing the binary classification label, shape is (N, C). - :param norm: Specify the norm to caculate the loss, should be "L1" or "L2". - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - - pred = tensor([[0.5, -0.5, 0.1], [-0.6, 0.7, 0.8]]) - label = tensor([[1, -1, -1], [-1, 1, 1]]) - - loss = F.hinge_loss(pred, label) - - print(loss.numpy()) - - Outputs: - - .. testoutput:: - - [1.5] - - """ - assert norm in ["L1", "L2"], "norm must be L1 or L2" - # Converts binary labels to -1/1 labels. - loss = relu(1.0 - pred * label) - if norm == "L1": - return loss.sum(axis=1).mean() - else: - return (loss ** 2).sum(axis=1).mean() - - -def smooth_l1_loss(pred: Tensor, label: Tensor) -> Tensor: - r""" - Caculate the smooth l1 loss proposed in `Fast R-CNN paper by Ross Girshick`. - - The smooth l1 loss can be described as: - - .. math:: - \text{loss}(x, y) = \frac{1}{n} \sum_{i} l_{i} - - where :math:`l_{i}` is given by: - - .. math:: - l_{i} = - \begin{cases} - 0.5 (x_i - y_i)^2, & \text{if } |x_i - y_i| < 1 \\ - |x_i - y_i| - 0.5, & \text{otherwise } - \end{cases} - - :param pred: The predicted result from model. - :param label: The ground truth to compare. - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - - pred = tensor([[0.5, -0.5, 0.1], [-0.6, 0.7, 0.8]]) - label = tensor([[0.4, 1.5, 1.2], [0., 0.1, 2.2]]) - - loss = F.smooth_l1_loss(pred, label) - - print(loss.numpy()) - - Outputs: - - .. testoutput:: - - [0.5608334] - """ - diff = abs(pred - label) - l2_loss = 0.5 * (diff ** 2) - l1_loss = diff - 0.5 - mask = diff < 1 - loss = where(mask, l2_loss, l1_loss) - return loss.mean() diff --git a/python_module/megengine/functional/math.py b/python_module/megengine/functional/math.py deleted file mode 100644 index 06f9cebe..00000000 --- a/python_module/megengine/functional/math.py +++ /dev/null @@ -1,333 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import math -import numbers -from typing import Optional, Sequence, Union - -import megengine._internal as mgb - -from ..core import Tensor, wrap_io_tensor -from .elemwise import clamp, exp, isinf, log -from .tensor import remove_axis, where, zeros_like - - -@wrap_io_tensor -def sum(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - r"""Returns the sum of each row of the ``inp`` tensor in the given ``axis``. - - :param inp: The input tensor. - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. - Default: None - :param keepdims: Whether the output tensor has ``axis`` retained or not. - Default: False - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data = tensor(np.arange(1, 7, dtype=np.int32).reshape(2, 3)) - out = F.sum(data) - print(out.numpy()) - - .. testoutput:: - - [21] - - """ - return mgb.opr.reduce_(inp, "SUM", axis, keepdims) - - -@wrap_io_tensor -def prod(inp: Tensor, axis: Optional[int] = None, keepdims=False) -> Tensor: - r""" - Returns the element product of input tensor along given *axis*. - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: ``None`` - :param keepdims: Whether the output tensor has *axis* retained or not. Default: ``False`` - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data = tensor(np.arange(1, 7, dtype=np.int32).reshape(2, 3)) - out = F.prod(data) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [720] - - """ - return mgb.opr.reduce_(inp, "PRODUCT", axis, keepdims) - - -@wrap_io_tensor -def mean(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - """Returns the mean value of each row of the ``inp`` tensor in - the given ``axis``. If axis is a list of dimensions, - reduce over all of them. - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has ``axis`` retained or not. Default: False - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data = tensor(np.arange(1, 7, dtype=np.int32).reshape(2, 3)) - out = F.mean(data) - print(out.numpy()) - - .. testoutput:: - - [3.5] - - """ - return mgb.opr.mean(inp, axis, keepdims) - - -@wrap_io_tensor -def min(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - r""" - Returns the min value of input tensor along given *axis*. - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has *axis* retained or not. Default: False - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - x = tensor(np.arange(1, 7, dtype=np.int32).reshape(2,3)) - y = F.min(x) - print(y.numpy()) - - Outputs: - - .. testoutput:: - - [1] - - """ - return mgb.opr.reduce_(inp, "MIN", axis, keepdims) - - -@wrap_io_tensor -def max(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - r"""Returns the max value of the input tensor along given *axis*. - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has *axis* retained or not. Default: False - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - x = tensor(np.arange(1, 7, dtype=np.int32).reshape(2,3)) - y = F.max(x) - print(y.numpy()) - - .. testoutput:: - - [6] - - """ - return mgb.opr.reduce_(inp, "MAX", axis, keepdims) - - -@wrap_io_tensor -def sqrt(inp: Tensor) -> Tensor: - """ - Return a new tensor with the square-root of the elements of ``inp`` - - :param inp: The input tensor - :return: The computed tensor - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.functional as F - - data = mge.tensor(np.arange(0, 6, dtype=np.float32).reshape(2, 3)) - out = F.sqrt(data) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[0. 1. 1.4142] - [1.7321 2. 2.2361 ]] - - """ - - return mgb.opr.sqrt(inp) - - -def norm(inp: Tensor, p: int = 2, axis: Optional[int] = None, keepdims=False): - """Calculate ``p``-norm of input tensor along certain axis. - - :param inp: The input tensor - :param p: power of value ``p`` applied to ``inp``. Default: 2 - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has ``axis`` retained or not. Default: False - :return: The output tensor - - """ - if axis is None: - inp = inp.reshape(-1) - return (inp ** p).sum(axis=axis, keepdims=keepdims) ** (1.0 / p) - - -@wrap_io_tensor -def argmin(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - r"""Returns the indices of the minimum values along an axis - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has *axis* retained or not. Default: False - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - x = tensor(np.arange(1, 7, dtype=np.int32).reshape(2,3)) - y = F.argmin(x) - print(y.numpy()) - - .. testoutput:: - - [0] - - """ - return mgb.opr.argmin(inp, axis, keepdims) - - -@wrap_io_tensor -def argmax(inp: Tensor, axis: Optional[int] = None, keepdims: bool = False) -> Tensor: - r"""Returns the indices of the maximum values along an axis - - :param inp: The input tensor - :param axis: The dimension to reduce. If None, all the dimensions will be reduced. Default: None - :param keepdims: Whether the output tensor has *axis* retained or not. Default: False - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - x = tensor(np.arange(1, 7, dtype=np.int32).reshape(2,3)) - y = F.argmax(x) - print(y.numpy()) - - .. testoutput:: - - [5] - - """ - return mgb.opr.argmax(inp, axis, keepdims) - - -def normalize( - inp: Tensor, p: int = 2, axis: Optional[int] = None, eps: float = 1e-12 -) -> Tensor: - r"""Perform :math:`L_p` normalization of input tensor along certain axis. - - For a tensor :attr:`inp` of shape :math:`(n_0, ..., n_{dim}, ..., n_k)`, each - :math:`n_{dim}` -element vector :math:`v` along dimension :attr:`axis` is transformed as: - - .. math:: - v = \frac{v}{\max(\lVert v \rVert_p, \epsilon)}. - - :param inp: the input tensor - :param p: power of value ``p`` applied to ``inp``. Default: 2 - :param axis: The dimension to reduce. If None, all the dimensions will be reduced - to calculate the norm. Default: None - :param eps: a small value to avoid division by zero. Default: 1e-12 - :return: the normalized output tensor - - """ - if axis is None: - return inp / clamp(norm(inp, p), lower=eps) - else: - return inp / clamp(norm(inp, p, axis, keepdims=True), lower=eps) - - -def logsumexp(inp: Tensor, axis: Union[int, Sequence[int]], keepdims: bool = False): - r""" - Compute the log of the sum of exponentials of inputs along the given :attr:`axis`. The computation is numerically stabilized. - - .. math:: - - \mathsf{logsumexp}(x_1, \dots, x_n) = \log(\exp(x_1) + \cdots + \exp(x_n)) - - :param inp: The input tensor. - :param axis: Axis over which the sum is taken. It can be a single axis or a list of axes. - :param keepdims: whether to retain :attr:`axis` or not for the output tensor. - - """ - if isinstance(axis, numbers.Integral): - axis = (axis,) - max_value = inp - for dim in axis: - max_value = max_value.max(axis=dim, keepdims=True) - max_value = where( - isinf(max_value).astype("int32"), zeros_like(max_value), max_value - ) - x = exp(inp - max_value) - for dim in axis: - x = x.sum(axis=dim, keepdims=True) - x = max_value + log(x) - if not keepdims: - axis = sorted(axis, reverse=True) - for i in axis: - x = remove_axis(x, axis=i) - return x diff --git a/python_module/megengine/functional/nn.py b/python_module/megengine/functional/nn.py deleted file mode 100644 index 44438d83..00000000 --- a/python_module/megengine/functional/nn.py +++ /dev/null @@ -1,1234 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# pylint: disable=too-many-lines -from typing import Optional, Tuple, Union - -import megengine._internal as mgb -from megengine._internal import CompGraph, CompNode -from megengine._internal.config import add_extra_vardep -from megengine._internal.opr import add_update -from megengine._internal.opr_param_defs import CollectiveComm as CollParam - -from .. import distributed as dist -from ..core import Tensor, wrap_io_tensor -from ..core.graph import _use_default_if_none -from ..distributed.util import get_group_id -from ..jit import barrier, mark_impure -from ..random import uniform -from ..utils.types import _pair, _pair_nonzero -from .debug_param import get_conv_execution_strategy -from .elemwise import exp, log -from .tensor import where -from .utils import _decide_comp_node_and_comp_graph - - -@wrap_io_tensor -def linear(inp: Tensor, weight: Tensor, bias: Optional[Tensor] = None) -> Tensor: - """Applies a linear transformation to the input. - - Refer to :class:`~.module.linear.Linear` for more information. - - :param inp: the input tensor with shape `(N, in_features)`. - :param weight: the weight with shape `(out_features, in_features)`. - :param bias: the bias with shape `(out_features,)`. - Default: ``None`` - """ - orig_shape = inp.shape - inp = inp.reshape(-1, orig_shape[-1]) - ret = mgb.opr.matrix_mul(inp, weight, transposeB=True) - ret = ret.reshape(orig_shape[:-1], weight.shape[0]) - if bias is not None: - ret += bias.reshape(1, bias.shape[0]) - return ret - - -@wrap_io_tensor -def conv2d( - inp: Tensor, - weight: Tensor, - bias: Optional[Tensor] = None, - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - conv_mode="CROSS_CORRELATION", - compute_mode="DEFAULT", -) -> Tensor: - """2D convolution operation. - - Refer to :class:`~.Conv2d` for more information. - - :param inp: The feature map of the convolution operation - :param weight: The convolution kernel - :param bias: The bias added to the result of convolution (if given) - :param stride: Stride of the 2D convolution operation. Default: 1 - :param padding: Size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param dilation: Dilation of the 2D convolution operation. Default: 1 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``, - and the shape of weight should be ``(groups, out_channel // groups, - in_channels // groups, height, width)``. - :type conv_mode: string or :class:`mgb.opr_param_defs.Convolution.Mode` - :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: - 'CROSS_CORRELATION'. - :type compute_mode: string or - :class:`mgb.opr_param_defs.Convolution.ComputeMode` - :param compute_mode: When set to 'DEFAULT', no special requirements will be - placed on the precision of intermediate results. When set to 'FLOAT32', - Float32 would be used for accumulator and intermediate result, but only - effective when input and output are of Float16 dtype. - - """ - ph, pw = _pair(padding) - sh, sw = _pair_nonzero(stride) - dh, dw = _pair_nonzero(dilation) - Sparse = mgb.opr_param_defs.Convolution.Sparse - sparse_type = Sparse.DENSE if groups == 1 else Sparse.GROUP - res = mgb.opr.convolution( - inp, - weight, - pad_h=ph, - pad_w=pw, - stride_h=sh, - stride_w=sw, - dilate_h=dh, - dilate_w=dw, - format="NCHW", - strategy=get_conv_execution_strategy(), - mode=conv_mode, - compute_mode=compute_mode, - sparse=sparse_type, - ) - if bias is not None: - res += bias - return res - - -@wrap_io_tensor -def conv_transpose2d( - inp: Tensor, - weight: Tensor, - bias: Optional[Tensor] = None, - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - conv_mode="CROSS_CORRELATION", - compute_mode="DEFAULT", -) -> Tensor: - """2D transposed convolution operation. - - Refer to :class:`~.ConvTranspose2d` for more information. - - :param inp: The feature map of the convolution operation - :param weight: The convolution kernel - :param bias: The bias added to the result of convolution (if given) - :param stride: Stride of the 2D convolution operation. Default: 1 - :param padding: Size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param dilation: Dilation of the 2D convolution operation. Default: 1 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``, - and the shape of weight should be ``(groups, out_channel // groups, - in_channels // groups, height, width)``. Default: 1 - :type conv_mode: string or :class:`mgb.opr_param_defs.Convolution.Mode` - :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: - 'CROSS_CORRELATION'. - :type compute_mode: string or - :class:`mgb.opr_param_defs.Convolution.ComputeMode` - :param compute_mode: When set to 'DEFAULT', no special requirements will be - placed on the precision of intermediate results. When set to 'FLOAT32', - Float32 would be used for accumulator and intermediate result, but only - effective when input and output are of Float16 dtype. - - """ - ph, pw = _pair(padding) - sh, sw = _pair_nonzero(stride) - dh, dw = _pair_nonzero(dilation) - Sparse = mgb.opr_param_defs.Convolution.Sparse - sparse_type = Sparse.DENSE if groups == 1 else Sparse.GROUP - res = mgb.opr.deconvolution( - inp, - weight, - pad_h=ph, - pad_w=pw, - stride_h=sh, - stride_w=sw, - dilate_h=dh, - dilate_w=dw, - format="NCHW", - strategy=get_conv_execution_strategy(), - mode=conv_mode, - compute_mode=compute_mode, - sparse=sparse_type, - ) - if bias is not None: - res += bias - return res - - -@wrap_io_tensor -def local_conv2d( - inp: Tensor, - weight: Tensor, - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - conv_mode="CROSS_CORRELATION", -) -> Tensor: - """Applies spatial 2D convolution over an image with untied kernels. - - Refer to :class:`~.LocalConv2d` for more information. - """ - ret = mgb.opr.group_local( - inp, - weight, - pad_h=padding[0], - pad_w=padding[1], - stride_h=stride[0], - stride_w=stride[1], - dilate_h=dilation[0], - dilate_w=dilation[1], - format="NCHW", - mode=conv_mode, - ) - return ret - - -@wrap_io_tensor -def max_pool2d( - inp: Tensor, - kernel_size: Union[int, Tuple[int, int]], - stride: Optional[Union[int, Tuple[int, int]]] = None, - padding: Union[int, Tuple[int, int]] = 0, -) -> Tensor: - """Applies a 2D max pooling over an input. - - Refer to :class:`~.MaxPool2d` for more information. - - :param inp: The input tensor. - :param kernel_size: The size of the window. - :param stride: The stride of the window. If not provided, its value is set to ``kernel_size``. - Default: None - :param padding: Implicit zero padding to be added on both sides. Default: 0 - - """ - - kh, kw = _pair_nonzero(kernel_size) - sh, sw = _pair_nonzero(stride or kernel_size) - ph, pw = _pair(padding) - mode = mgb.opr_param_defs.Pooling.Mode.MAX - return mgb.opr.pooling( - inp, - mode=mode, - format="NCHW", - stride_h=sh, - stride_w=sw, - pad_h=ph, - pad_w=pw, - window_h=kh, - window_w=kw, - ) - - -@wrap_io_tensor -def avg_pool2d( - inp: Tensor, - kernel_size: Union[int, Tuple[int, int]], - stride: Optional[Union[int, Tuple[int, int]]] = None, - padding: Union[int, Tuple[int, int]] = 0, -) -> Tensor: - """ Applies a 2D average pooling over an input. - - Refer to :class:`~.AvgPool2d` for more information. - - :param inp: The input tensor. - :param kernel_size: The size of the window. - :param stride: The stride of the window. If not provided, its value is set to ``kernel_size``. - Default: None - :param padding: Implicit zero padding to be added on both sides. Default: 0 - - """ - kh, kw = _pair_nonzero(kernel_size) - sh, sw = _pair_nonzero(stride or kernel_size) - ph, pw = _pair(padding) - mode = mgb.opr_param_defs.Pooling.Mode.AVERAGE - return mgb.opr.pooling( - inp, - mode=mode, - format="NCHW", - stride_h=sh, - stride_w=sw, - pad_h=ph, - pad_w=pw, - window_h=kh, - window_w=kw, - ) - - -@wrap_io_tensor -def prelu(inp: Tensor, weight: Tensor) -> Tensor: - r""" - Applies the element-wise PReLU function. - - Refer to :class:`~.PReLU` for more information. - """ - - return mgb.opr.elemwise(inp, 0, mode="MAX") + weight * mgb.opr.elemwise( - inp, 0, mode="MIN" - ) - - -@wrap_io_tensor -def leaky_relu(inp: Tensor, negative_slope: float = 0.01) -> Tensor: - r""" - Applies the element-wise leaky_relu function - - Refer to :class:`~.LeakyReLU` for more information. - """ - - return mgb.opr.elemwise(inp, 0, mode="MAX") + negative_slope * mgb.opr.elemwise( - inp, 0, mode="MIN" - ) - - -@wrap_io_tensor -def softplus(inp: Tensor, beta: float = 1, threshold: float = 20) -> Tensor: - r""" - Performs the elementwise function: - - .. math:: - - \mathsf{softplus}(x) = \log(1+\exp(\beta x)) / \beta. - - For numerical stability the identity function is used when :math:`\beta x > \textrm{threshold}`. - - """ - mask = beta * inp <= threshold - out = log(1 + exp(beta * inp)) / beta - out = where(mask, out, inp) - return out - - -@wrap_io_tensor -def flatten(inp: Tensor, start_axis: int = 0, end_axis: int = -1) -> Tensor: - r""" - Reshapes the tensor by flattening the sub-tensor from dimension ``start_axis`` to dimension ``end_axis``. - - :param inp: The input tensor. - :param start_axis: The start dimension that the sub-tensor to be flattened. Default: 0 - :param end_axis: The end dimension that the sub-tensor to be flattened. Default: -1 - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - inp_shape = (2, 2, 3, 3) - inp = tensor( - np.arange(36, dtype=np.int32).reshape(inp_shape), - ) - oup = F.flatten(inp, 2) - print(inp.numpy().shape) - print(oup.numpy().shape) - - Outputs: - - .. testoutput:: - - (2, 2, 3, 3) - (2, 2, 9) - - """ - - target_shape = tuple(inp.shape[i] for i in range(start_axis)) + (-1,) - if end_axis != -1: - target_shape += (inp.shape[end_axis + 1 :],) - return inp.reshape(*target_shape) - - -def _get_softmax_axis(ndim: int) -> int: - if ndim in (0, 1, 3): - return 0 - return 1 - - -@wrap_io_tensor -def softmax(inp: Tensor, axis: Optional[int] = None) -> Tensor: - r""" - Applies a softmax function. Softmax is defined as: - - .. math:: - \text{Softmax}(x_{i}) = \frac{\exp(x_i)}{\sum_j \exp(x_j)} - - It is applied to all elements along axis, and will re-scale them so that - the elements lie in the range `[0, 1]` and sum to 1. - - See :class:`~megengine.module.activation.Softmax` for more details. - - :param inp: The input tensor. - :param axis: An axis along which softmax will be applied. By default, - softmax will apply along the highest ranked axis. - - """ - if axis is None: - axis = _get_softmax_axis(len(inp.imm_shape)) - offset = mgb.opr.zero_grad(inp.max(axis=axis, keepdims=True)) - inp = inp - offset - down = mgb.opr.elem.exp(inp).sum(axis=axis, keepdims=True) - return mgb.opr.elem.exp(inp) / down - - -@wrap_io_tensor -def batch_norm2d( - inp: Tensor, - running_mean: Tensor, - running_var: Tensor, - weight: Optional[Tensor] = None, - bias: Optional[Tensor] = None, - training: bool = False, - momentum: float = 0.9, - eps: float = 1e-5, -) -> Tensor: - """Applies batch normalization to the input. - - Refer to :class:`~.BatchNorm2d` and :class:`~.BatchNorm1d` for more information. - - :param inp: input tensor. - :param running_mean: tensor to store running mean. - :param running_var: tensor to store running variance. - :param weight: scaling tensor in the learnable affine parameters. - See :math:`\gamma` in :class:`~.BatchNorm2d` - :param bias: bias tensor in the learnable affine parameters. - See :math:`\beta` in :class:`~.BatchNorm2d` - :param training: a boolean value to indicate whether batch norm is performed - in traning mode. Default: ``False`` - :param momentum: the value used for the ``running_mean`` and ``running_var`` - computation. - Default: 0.9 - :param eps: a value added to the denominator for numerical stability. - Default: 1e-5. - - """ - - inp = mgb.opr.mark_no_broadcast_elemwise(inp) - _channels = inp.imm_shape[1] - _ndim = len(inp.imm_shape) - _param_shape = (1, _channels) + (1,) * (_ndim - 2) - - assert _ndim == 4, "only 4D tensor supported" - - if weight is not None: - weight = weight.reshape(*_param_shape) - else: - weight = mgb.make_immutable(*_use_default_if_none(None, None), 1.0).broadcast( - *_param_shape - ) - - if bias is not None: - bias = bias.reshape(*_param_shape) - else: - bias = mgb.make_immutable(*_use_default_if_none(None, None), 0.0).broadcast( - *_param_shape - ) - - FwdMode = mgb.opr_param_defs.BN.FwdMode - fwdmode = FwdMode.TRAINING if training else FwdMode.INFERENCE - avg_factor = 1 - momentum - - if running_mean is not None and running_var is not None: - if training: - inp = barrier(inp) - - output = mgb.opr.batch_norm( - inp, - weight, - bias, - running_mean, - running_var, - param_dim="DIM_1C11", - fwd_mode=fwdmode, - epsilon=eps, - avg_factor=avg_factor, - )[-1] - if training: - mark_impure(output) - else: - output = mgb.opr.batch_norm_no_statistic( - inp, - weight, - bias, - param_dim="DIM_1C11", - fwd_mode=fwdmode, - epsilon=eps, - avg_factor=avg_factor, - )[-1] - - return output - - -@wrap_io_tensor -def sync_batch_norm( - input: Tensor, - running_mean: Tensor, - running_var: Tensor, - weight: Optional[Tensor] = None, - bias: Optional[Tensor] = None, - training: bool = False, - momentum: Union[float, Tensor] = 0.9, - eps: float = 1e-5, - eps_mode="ADDITIVE", -) -> Tensor: - """ Applies synchronized batch normalization to the input. - - Refer to :class:`~.BatchNorm2d` and :class:`~.BatchNorm1d` for more information. - - :param inp: input tensor. - :param running_mean: tensor to store running mean. - :param running_var: tensor to store running variance. - :param weight: scaling tensor in the learnable affine parameters. - See :math:`\gamma` in :class:`~.BatchNorm2d` - :param bias: bias tensor in the learnable affine parameters. - See :math:`\beta` in :class:`~.BatchNorm2d` - :param training: a boolean value to indicate whether batch norm is performed - in traning mode. Default: ``False`` - :param momentum: the value used for the ``running_mean`` and ``running_var`` - computation. - Default: 0.9 - :param eps: a value added to the denominator for numerical stability. - Default: 1e-5. - """ - - assert eps_mode in {"MAX", "ADDITIVE"}, "unknown eps_mode: {}".format(eps_mode) - input = mgb.opr.mark_no_broadcast_elemwise(input) - _channels = input.imm_shape[1] - _ndim = len(input.imm_shape) - _param_shape = (1, _channels) + (1,) * (_ndim - 2) - - if training: - - def _sum_on_channel(input): - return mgb.opr.reduce_general([input, _param_shape], mode="sum") - - def _allreduce(stat, key): - return dist.helper.collective_comm_symvar( - stat, key, CollParam.Mode.ALL_REDUCE_SUM - ) - - reduce_size = input.shape[0] - for i in range(2, _ndim): - reduce_size = reduce_size * input.shape[i] - channel_x1s = _sum_on_channel(input) - channel_x2s = _sum_on_channel(input ** 2) - - if dist.is_distributed(): - # reduce all nodes' data to calculate mean and variance - reduce_size = reduce_size.reshape(*(1,) * _ndim) - stat = mgb.opr.concat([reduce_size, channel_x1s, channel_x2s], axis=1) - stat = _allreduce(stat, key="sync_bn_" + str(get_group_id())) - reduce_size = stat[:, :1].reshape(1) - channel_x1s = stat[:, 1 : 1 + _channels] - channel_x2s = stat[:, 1 + _channels :] - - channel_mean = channel_x1s / reduce_size - channel_variance = ( - channel_x1s ** 2 / (-reduce_size * reduce_size) + channel_x2s / reduce_size - ) - else: - assert running_var is not None and running_mean is not None - channel_variance = running_var.reshape(*_param_shape) - channel_mean = running_mean.reshape(*_param_shape) - - invsqrt_channel_variance = ( - mgb.opr.elem.max(channel_variance, eps) - if eps_mode == "MAX" - else mgb.opr.elem.add(channel_variance, eps) - ) ** -0.5 - - if weight is not None: - weight = weight.reshape(*_param_shape) - if bias is not None: - bias = bias.reshape(*_param_shape) - - # outvar = output * weight + bias - # where output = input * invsqrt_channel_variance + ( - # -channel_mean * invsqrt_channel_variance - # ) - # Manually expand output for gopt - - if weight is not None: - inv_var_wt = invsqrt_channel_variance * weight - neg_channel_mean = -channel_mean - if bias is not None: - outvar = input * inv_var_wt + (neg_channel_mean * inv_var_wt + bias) - else: - outvar = input * inv_var_wt + neg_channel_mean * inv_var_wt - else: - outvar = input * invsqrt_channel_variance + ( - -channel_mean * invsqrt_channel_variance - ) - if bias is not None: - outvar = outvar + bias - - if training and running_var is not None and running_mean is not None: - _mean_update = add_update( - running_mean, channel_mean, alpha=momentum, beta=1 - momentum, - ) - channel_variance_unbiased = channel_x1s ** 2 / ( - -reduce_size * (reduce_size - 1) - ) + channel_x2s / (reduce_size - 1) - _variance_update = add_update( - running_var, channel_variance_unbiased, alpha=momentum, beta=1 - momentum - ) - for dep in (_mean_update, _variance_update): - add_extra_vardep(outvar, dep) - - return outvar - - -def one_hot(inp: Tensor, num_classes: int) -> Tensor: - r""" - Perform one-hot encoding for the input tensor. - - :param inp: input tensor - :param num_classes: number of classes denotes the last dimension of the output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - inp = tensor(np.arange(1, 4, dtype=np.int32)) - out = F.one_hot(inp, num_classes=4) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[0 1 0 0] - [0 0 1 0] - [0 0 0 1]] - - """ - comp_node, comp_graph = _decide_comp_node_and_comp_graph(inp) - - zeros = mgb.make_immutable(value=0, comp_node=comp_node, comp_graph=comp_graph) - zeros_symvar = zeros.broadcast(inp.shapeof(), num_classes) - - ones = mgb.make_immutable(value=1, comp_node=comp_node, comp_graph=comp_graph) - ones_symvar = ones.broadcast(inp.shapeof(), 1) - - return Tensor( - mgb.opr.indexing_set_one_hot( - zeros_symvar, axis=len(inp.shapeof()), index=inp, value=ones_symvar - ) - ) - - -@wrap_io_tensor -def warp_perspective( - inp: Tensor, - M: Tensor, - dsize: Union[Tuple[int, int], int, Tensor], - border_mode: str = "REPLICATE", - border_val: float = 0.0, - interp_mode: str = "LINEAR", -): - r""" - Applies perspective transformation to batched 2D images. - - The input images are transformed to the output images by the transformation matrix: - - .. math:: - \text{output}(n, c, h, w) = \text{input} \left( n, c, - \frac{M_{00}h + M_{01}w + M_{02}}{M_{20}h + M_{21}w + M_{22}}, - \frac{M_{10}h + M_{11}w + M_{12}}{M_{20}h + M_{21}w + M_{22}} - \right) - - :param inp: input image - :param M: (batch, 3, 3) transformation matrix - :param dsize: (h, w) size of the output image - :param border_mode: pixel extrapolation method. Default: ``"REPLICATE"`` - :param border_val: value used in case of a constant border. Default: ``0`` - :param interp_mode: interpolation methods. Default: ``"LINEAR"`` - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - inp_shape = (1, 1, 4, 4) - inp = tensor(np.arange(16, dtype=np.float32).reshape(inp_shape)) - M_shape = (1, 3, 3) - # M defines a translation: dst(1, 1, h, w) = rst(1, 1, h+1, w+1) - M = tensor(np.array([[1., 0., 1.], - [0., 1., 1.], - [0., 0., 1.]], dtype=np.float32).reshape(M_shape)) - out = F.warp_perspective(inp, M, (2, 2)) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[[[ 5. 6.] - [ 9. 10.]]]] - - """ - - return mgb.opr.warp_perspective( - inp, - M, - dsize, - bmode=border_mode, - border_val=border_val, - imode=interp_mode, - format="NCHW", - ) - - -@wrap_io_tensor -def remap( - inp: Tensor, - map_xy: Tensor, - border_mode: str = "REPLICATE", - scalar: float = 0.0, - interp_mode: str = "LINEAR", -) -> Tensor: - r""" - Applies remap transformation to batched 2D images. - - The input images are transformed to the output images by the tensor map_xy. - The output's H and W are same as map_xy's H and W. - - :param inp: input image - :param map_xy: (batch, oh, ow, 2) transformation matrix - :param border_mode: pixel extrapolation method. Default: ``"REPLICATE"`` - :param scalar: value used in case of a constant border. Default: ``0`` - :param interp_mode: interpolation methods. Default: ``"LINEAR"`` - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - inp_shape = (1, 1, 4, 4) - inp = tensor(np.arange(16, dtype=np.float32).reshape(inp_shape)) - map_xy_shape = (1, 2, 2, 2) - map_xy = tensor(np.array([[[1., 0.],[0., 1.]], - [[0., 1.],[0., 1.]]], - dtype=np.float32).reshape(map_xy_shape)) - out = F.remap(inp, map_xy) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[[[1. 4.] - [4. 4.]]]] - - """ - - return mgb.opr.remap( - inp, - map_xy, - border_type=border_mode, - scalar=scalar, - imode=interp_mode, - format="NCHW", - ) - - -@wrap_io_tensor -def eye( - n: int, - m: Optional[int] = None, - *, - dtype=None, - device: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None -) -> Tensor: - """ - Returns a 2D tensor with ones on the diagonal and zeros elsewhere. - - :param n: The number of rows - :param m: The number of columns. Default: None - :param dtype: The data type. Default: None - :param device: Compute node of the matrix. Default: None - :param comp_graph: Compute graph of the matrix. Default: None - :return: The eye matrix - - Examples: - - .. testcode:: - - import numpy as np - import megengine.functional as F - - data_shape = (4, 6) - n, m = data_shape - out = F.eye(n, m, dtype=np.float32) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[1. 0. 0. 0. 0. 0.] - [0. 1. 0. 0. 0. 0.] - [0. 0. 1. 0. 0. 0.] - [0. 0. 0. 1. 0. 0.]] - - """ - - device, comp_graph = _use_default_if_none(device, comp_graph) - if m is None: - m = n - return mgb.opr.eye((n, m), dtype=dtype, comp_node=device, comp_graph=comp_graph) - - -@wrap_io_tensor -def matrix_mul(inp1: Tensor, inp2: Tensor) -> Tensor: - """ - Performs a matrix multiplication of the matrices ``inp1`` and ``inp2`` - - :param inp1: The first matrix to be multiplied (a, b) - :param inp2: The second matrix to be multiplied (b, c) - :return: The output tensor (a, c) - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - shape_1 = (2, 3) - shape_2 = (3, 4) - data1 = tensor(np.arange(0, 6, dtype=np.float32).reshape(2, 3)) - data2 = tensor(np.arange(0, 6, dtype=np.float32).reshape(3, 2)) - out = F.matrix_mul(data1, data2) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[10. 13.] - [28. 40.]] - - """ - return mgb.opr.matrix_mul(inp1, inp2) - - -@wrap_io_tensor -def batched_matrix_mul(inp1: Tensor, inp2: Tensor) -> Tensor: - """ - Performs a batched multiplication of th batched matrices ``inp1`` and ``inp2`` - - :param inp1: The first batch matrix to be multiplied (n, a, b) - :param inp2: The second batch matrix to be multiplied (n, b, c) - :return: The output batch (n, a, c) - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - batch_size = 3 - shape_1 = (batch_size, 2, 3) - shape_2 = (batch_size, 3, 4) - data1 = tensor( - np.arange(0, batch_size * 6, dtype=np.float32).reshape(batch_size, 2, 3)) - data2 = tensor( - np.arange(0, batch_size * 12, dtype=np.float32).reshape(batch_size, 3, 4)) - out = F.batched_matrix_mul(data1, data2) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[[ 20. 23. 26. 29.] - [ 56. 68. 80. 92.]] - - [[ 344. 365. 386. 407.] - [ 488. 518. 548. 578.]] - - [[1100. 1139. 1178. 1217.] - [1352. 1400. 1448. 1496.]]] - - """ - return mgb.opr.batched_matrix_mul(inp1, inp2) - - -@wrap_io_tensor -def interpolate( - inp: Tensor, - size: Optional[Union[int, Tuple[int, int]]] = None, - scale_factor: Optional[Union[float, Tuple[float, float]]] = None, - mode: str = "BILINEAR", - align_corners: bool = None, -) -> Tensor: - r""" - Down/up samples the input tensor to either the given :attr:`size` or the given - :attr:`scale_factor` - - :param inp: input tensor - :param size: size of the output tensor. Default: ``None`` - :param scale_factor: scaling factor of the output tensor. Default: ``None`` - :param mode: interpolation methods, acceptable values are: - 'BILINEAR', 'LINEAR'. Default: ``BILINEAR`` - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - from megengine.test import assertTensorClose - - inp = tensor(np.arange(1, 5, dtype=np.float32).reshape(1, 1, 2, 2)) - out = F.interpolate(inp, [4, 4], align_corners=False) - print(out.numpy()) - - out2 = F.interpolate(inp, scale_factor=2.) - assertTensorClose(out.numpy(), out2.numpy()) - - Outputs: - - .. testoutput:: - - [[[[1. 1.25 1.75 2. ] - [1.5 1.75 2.25 2.5 ] - [2.5 2.75 3.25 3.5 ] - [3. 3.25 3.75 4. ]]]] - - """ - mode = mode.upper() - if mode not in ["BILINEAR", "LINEAR"]: - raise ValueError("interpolate only support linear or bilinear mode") - if mode not in ["BILINEAR", "LINEAR"]: - if align_corners is not None: - raise ValueError( - "align_corners option can only be set in the bilinear/linear interpolating mode" - ) - else: - if align_corners is None: - align_corners = False - - if mode == "LINEAR": - inp = mgb.opr.add_axis(inp, 3) - - if len(inp.imm_shape) != 4: - raise ValueError("shape of input tensor must correspond to the operartion mode") - - if size is None: - if scale_factor is None: - raise ValueError("scale_factor must not be None when size is None") - - if isinstance(scale_factor, (float, int)): - scale_factor = float(scale_factor) - if mode == "LINEAR": - scale_factor = (scale_factor, float(1)) - else: - scale_factor = (scale_factor, scale_factor) - else: - if mode == "LINEAR": - raise ValueError( - "under LINEAR mode, scale_factor can only be single value" - ) - - assert len(scale_factor) == 2, "shape of scale_factor must be equal to (2, )" - assert isinstance(scale_factor[0], float) and isinstance( - scale_factor[1], float - ), "scale_factor must be float type" - dsize = tuple( - mgb.opr.elemwise(inp.shape[i + 2] * scale_factor[i], mode="FLOOR") - for i in range(2) - ) - dsize = mgb.opr.concat([dsize[0], dsize[1]], axis=0) - else: - if scale_factor is not None: - raise ValueError("scale_factor must be None when size is provided") - - if isinstance(size, int): - size = (size, 1) - else: - if mode == "LINEAR": - raise ValueError("under LINEAR mode, size can only be single value") - dsize = size - - oh, ow = dsize[0], dsize[1] - ih, iw = inp.shape[2], inp.shape[3] - - if align_corners: - hscale = (ih - 1.0) / (oh - 1.0) - wscale = 1.0 * iw / ow - if mode != "LINEAR": - wscale = (iw - 1.0) / (ow - 1.0) - row0 = mgb.opr.concat([wscale, [0, 0]], axis=0).reshape(1, 3) - row1 = mgb.opr.concat([[0], hscale, [0]], axis=0).reshape(1, 3) - weight = mgb.opr.concat([row0, row1, [[0, 0, 1]]], axis=0).reshape(1, 3, 3) - weight = mgb.opr.broadcast(weight, (inp.shape[0], 3, 3)) - else: - hscale = 1.0 * ih / oh - wscale = 1.0 * iw / ow - row0 = mgb.opr.concat([wscale, [0], 0.5 * wscale - 0.5], axis=0).reshape(1, 3) - row1 = mgb.opr.concat([[0], hscale, 0.5 * hscale - 0.5], axis=0).reshape(1, 3) - weight = mgb.opr.concat([row0, row1, [[0, 0, 1]]], axis=0).reshape(1, 3, 3) - weight = mgb.opr.broadcast(weight, (inp.shape[0], 3, 3)) - - ret = mgb.opr.warp_perspective(inp, weight, dsize, imode="LINEAR", format="NCHW") - if mode == "LINEAR": - ret = mgb.opr.reshape(ret, ret.shape[0:3]) - return ret - - -@wrap_io_tensor -def dropout(inp: Tensor, drop_prob: float, rescale: bool = True) -> Tensor: - """ - Returns a new tensor where each of the elements are randomly set to zero - with probability P = ``drop_prob``. Optionally rescale the output tensor. - - :param inp: The input tensor - :param drop_prob: The probability to drop (set to zero) a single element - :param rescale: The default behavior of ``dropout`` during training is to rescale the output, - then it can be replaced by an :class:`~.Identity` during inference, default to True. - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - - import megengine.functional as F - from megengine import tensor - - data = tensor(np.ones(10, dtype=np.float32)) - out = F.dropout(data, 1./3.) - print(out.numpy()) - - Outputs: - - .. testoutput:: - :options: +SKIP - - [1.5 1.5 0. 1.5 1.5 1.5 1.5 1.5 1.5 1.5] - - """ - assert 0 <= drop_prob < 1 - rv = uniform(inp.shape) - mask = rv > drop_prob - inp *= mask.astype(inp.dtype) - if rescale: - inp *= 1 / (1 - drop_prob) - return inp - - -@wrap_io_tensor -def identity(inp: Tensor) -> Tensor: - """applies an identity transform to the input tensor. - - :param inp: The input tensor - """ - return mgb.opr.identity(inp) - - -@wrap_io_tensor -def embedding( - input: Tensor, - weight: Tensor, - padding_idx: Optional[int] = None, - max_norm: Optional[float] = None, - norm_type: Optional[float] = None, -): - """ - Applies lookup table for embedding. - - :param input: the tensor with indices. - :param weight: the learnable weights which embedding from. - :param padding_idx: should be set to None, not support now. - :param max_norm: should be set to None, not support now. - :param norm_type: should be set to None, not support now. - - - Refer to :class:`~.Embedding` for more information. - """ - if padding_idx is not None: - raise ValueError("Not support padding_idx Now!") - if max_norm is not None or norm_type is not None: - raise ValueError("Not support weight normlization Now!") - - return mgb.opr.advanced_indexing(weight)[input.reshape(-1), :].reshape( - input.shape, weight.shape[-1] - ) - - -@wrap_io_tensor -def roi_pooling( - input: Tensor, - rois: Tensor, - output_shape: Union[int, tuple, list], - mode: str = "max", - scale: float = 1.0, -) -> Tensor: - """ - Apply roi pooling on input feature - - :param input: tensor that represents the input feature, (N, C, H, W) images - :param rois: (K, 5) boxes. First column is the index into N. The other 4 columns are xyxy - :param output_shape: (height, width) of output rois feature - :param mode: "max" or "average", use max/average align just like max/average pooling. Default: ``"max"`` - :param scale: scale the input boxes by this number. Default: 1.0 - :return: (K, C, output_shape[0], output_shape[1]) feature of rois - """ - assert mode in ["max", "average"], "only max/average mode is supported" - if isinstance(output_shape, int): - output_shape = (output_shape, output_shape) - - return mgb.opr.roi_pooling( - input, rois, output_shape, mode=mode.upper(), scale=scale - ) - - -@wrap_io_tensor -def roi_align( - input: Tensor, - rois: Tensor, - output_shape: Union[int, tuple, list], - mode: str = "average", - spatial_scale: float = 1.0, - sample_points: Union[int, tuple, list] = 2, - aligned: bool = True, -) -> Tensor: - """ - Apply roi align on input feature - - :param input: tensor that represents the input feature, (N, C, H, W) images - :param rois: (N, 5) boxes. First column is the index into N. The other 4 columns are xyxy - :param output_shape: (height, width) shape of output rois feature. - :param mode: "max" or "average", use max/average align just like max/average pooling. Default: ``"average"`` - :param spatial_scale: scale the input boxes by this number. Default: 1.0 - :param sample_points: number of inputs samples to take for each output sample. - 0 to take samples densely. Default: 2 - :param aligned: wheather align the input feature, with `aligned=True`, - we first appropriately scale the ROI and then shift it by -0.5. Default: True - """ - assert mode in ["max", "average"], "only max/average mode is supported" - if isinstance(output_shape, int): - output_shape = (output_shape, output_shape) - pooled_height, pooled_width = output_shape - if isinstance(sample_points, int): - sample_points = (sample_points, sample_points) - sample_height, sample_width = sample_points - offset = 0.5 if aligned else 0.0 - - return mgb.opr.roi_align( - input, - rois, - mode=mode.upper(), - spatial_scale=spatial_scale, - offset=offset, - pooled_height=pooled_height, - pooled_width=pooled_width, - sample_height=sample_height, - sample_width=sample_width, - ) - - -@wrap_io_tensor -def assert_equal( - get: Tensor, expect: Tensor, max_err: float = 1e-4, verbose: bool = False -) -> Tensor: - r""" - Asserts that ``get`` equals to ``expect``, and returns value of ``expect``. - - :param get: tensor to be checked. - :param expect: tensor with expected values. - :param max_err: tolerance that two float values are asserted equal. Default: 1e-4 - :param verbose: whether to print details if two tensors are not equal. Default: False - - Examples: - - .. testcode:: - - import megengine.functional as F - from megengine import tensor - - get = tensor([1.0, 2.0]) - max_err = 0.1 - expect = get + max_err / 2.0 - val = F.assert_equal(expect, get, max_err=max_err) - print(val.numpy()) - - Outputs: - - .. testoutput:: - - [1.05 2.05] - - """ - - return mgb.opr.assert_equal(get, expect, maxerr=max_err, verbose=verbose) - - -@wrap_io_tensor -def indexing_one_hot( - src: Tensor, index: Tensor, axis: int = 1, keepdims=False -) -> Tensor: - r""" - One-hot indexing for some axis. - - :param src: input data tensor. - :param index: index tensor. - :param axis: the axis on src for which values in index index. Default: 1 - :param keepdims: whether not to remove the axis in result. Default: ``False`` - - Examples: - - .. testcode:: - - import megengine.functional as F - from megengine import tensor - - src = tensor([[1.0, 2.0]]) - index = tensor([0]) - val = F.indexing_one_hot(src, index) - print(val.numpy()) - - .. testoutput:: - - [1.] - - """ - - return mgb.opr.indexing_one_hot(src, axis, index, keepdims=keepdims) diff --git a/python_module/megengine/functional/quantized.py b/python_module/megengine/functional/quantized.py deleted file mode 100644 index 8cfb4a5b..00000000 --- a/python_module/megengine/functional/quantized.py +++ /dev/null @@ -1,80 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# pylint: disable=too-many-lines -from typing import Tuple, Union - -from .. import _internal as mgb -from ..core import Tensor, wrap_io_tensor -from ..utils.types import _pair, _pair_nonzero -from .debug_param import get_conv_execution_strategy - - -@wrap_io_tensor -def conv_bias_activation( - inp: Tensor, - weight: Tensor, - bias: Tensor, - dtype=None, - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - nonlinear_mode="IDENTITY", - conv_mode="CROSS_CORRELATION", - compute_mode="DEFAULT", -) -> Tensor: - """ convolution bias with activation operation, only for inference. - - :param inp: The feature map of the convolution operation - :param weight: The convolution kernel - :param bias: The bias added to the result of convolution - :param stride: Stride of the 2D convolution operation. Default: 1 - :param padding: Size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param dilation: Dilation of the 2D convolution operation. Default: 1 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``, - and the shape of weight should be ``(groups, out_channel // groups, - in_channels // groups, height, width)``. - :type conv_mode: string or :class:`mgb.opr_param_defs.Convolution.Mode` - :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: - 'CROSS_CORRELATION'. - :param dtype: Support for np.dtype, Default: - np.int8. - :type compute_mode: string or - :class:`mgb.opr_param_defs.Convolution.ComputeMode` - :param compute_mode: When set to 'DEFAULT', no special requirements will be - placed on the precision of intermediate results. When set to 'FLOAT32', - Float32 would be used for accumulator and intermediate result, but only - effective when input and output are of Float16 dtype. - - """ - ph, pw = _pair(padding) - sh, sw = _pair_nonzero(stride) - dh, dw = _pair_nonzero(dilation) - sparse_type = "DENSE" if groups == 1 else "GROUP" - res = mgb.opr.conv_bias_activation( - inp, - weight, - bias, - compute_mode=compute_mode, - dtype=dtype, - strategy=get_conv_execution_strategy(), - nonlineMode=nonlinear_mode, - sparse=sparse_type, - format="NCHW", - pad_h=ph, - pad_w=pw, - stride_h=sh, - stride_w=sw, - dilate_h=dh, - dilate_w=dw, - mode=conv_mode, - ) - return res diff --git a/python_module/megengine/functional/sort.py b/python_module/megengine/functional/sort.py deleted file mode 100644 index 70597d52..00000000 --- a/python_module/megengine/functional/sort.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import functools -from typing import Optional, Tuple, Union - -import megengine._internal as mgb - -from ..core.tensor import Tensor, wrap_io_tensor - -__all__ = ["argsort", "sort", "top_k"] - - -@wrap_io_tensor -def argsort(inp: Tensor, descending: bool = False) -> Tuple[Tensor, Tensor]: - r""" - Sort the target 2d matrix by row, return both the sorted tensor and indices. - - :param inp: The input tensor, if 2d, each row will be sorted - :param descending: Sort in descending order, where the largest comes first. Default: ``False`` - :return: Tuple of two tensors (sorted_tensor, indices_of_int32) - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - data = tensor(np.array([1,2], dtype=np.float32)) - sorted, indices = F.argsort(data) - print(sorted.numpy(), indices.numpy()) - - Outputs: - - .. testoutput:: - - [1. 2.] [0 1] - - """ - assert len(inp.imm_shape) <= 2, "Input should be 1d or 2d" - if descending: - order = mgb.opr_param_defs.Argsort.Order.DESCENDING - else: - order = mgb.opr_param_defs.Argsort.Order.ASCENDING - if len(inp.imm_shape) == 1: - inp = inp.reshape(1, -1) - tns, ind = mgb.opr.argsort(inp, order=order) - return tns[0], ind[0] - return mgb.opr.argsort(inp, order=order) - - -@functools.wraps(argsort) -def sort(*args, **kwargs): - return argsort(*args, **kwargs) - - -@wrap_io_tensor -def top_k( - inp: Tensor, - k: int, - descending: bool = False, - kth_only: bool = False, - no_sort: bool = False, -) -> Tuple[Tensor, Tensor]: - r""" - Selected the Top-K (by default) smallest elements of 2d matrix by row. - - :param inp: The input tensor, if 2d, each row will be sorted - :param k: The number of elements needed - :param descending: If true, return the largest elements instead. Default: ``False`` - :param kth_only: If true, only the k-th element will be returned. Default: ``False`` - :param no_sort: If true, the returned elements can be unordered. Default: ``False`` - :return: Tuple of two tensors (topk_tensor, indices_of_int32) - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - data = tensor(np.array([2, 4, 6, 8, 7, 5, 3, 1], dtype=np.float32)) - top, indices = F.top_k(data, 5) - print(top.numpy(), indices.numpy()) - - Outputs: - - .. testoutput:: - - [1. 2. 3. 4. 5.] [7 0 6 1 5] - - """ - assert len(inp.imm_shape) <= 2, "Input should be 1d or 2d" - if kth_only: - raise NotImplementedError( - "TODO: would enconter:" - "NotImplementedError: SymbolVar var could not be itered" - ) - if descending: - inp = -inp - Mode = mgb.opr_param_defs.TopK.Mode - if kth_only: - mode = Mode.KTH_ONLY - elif no_sort: - mode = Mode.VALUE_IDX_NOSORT - else: - mode = Mode.VALUE_IDX_SORTED - if len(inp.imm_shape) == 1: - inp = inp.reshape(1, -1) - tns, ind = mgb.opr.top_k(inp, k, mode=mode) - tns = tns[0] - ind = ind[0] - else: - tns, ind = mgb.opr.top_k(inp, k, mode=mode) - if descending: - tns = -tns - return tns, ind diff --git a/python_module/megengine/functional/tensor.py b/python_module/megengine/functional/tensor.py deleted file mode 100644 index b9a14ee2..00000000 --- a/python_module/megengine/functional/tensor.py +++ /dev/null @@ -1,667 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import functools -from typing import Iterable, List, Optional, Union - -import numpy as np - -import megengine._internal as mgb -from megengine._internal import CompGraph, CompNode - -from ..core import zeros -from ..core.graph import _use_default_if_none -from ..core.tensor import Tensor, wrap_io_tensor -from .elemwise import ceil -from .utils import _decide_comp_node_and_comp_graph - - -@wrap_io_tensor -def broadcast_to(inp: Tensor, shape: Union[int, Iterable[int]]) -> Tensor: - """ - Broadcast a tensor to ``shape`` - - :param inp: The input tensor - :param shape: The target shape - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data = tensor(np.arange(0, 6, dtype=np.float32).reshape(2, 3)) - out = F.broadcast_to(data, (4, 2, 3)) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[[0. 1. 2.] - [3. 4. 5.]] - - [[0. 1. 2.] - [3. 4. 5.]] - - [[0. 1. 2.] - [3. 4. 5.]] - - [[0. 1. 2.] - [3. 4. 5.]]] - - """ - - if isinstance(shape, int): - shape = (shape,) - return mgb.opr.broadcast(inp, shape) - - -def _get_idx(index, axis): - index_dims = len(index.imm_shape) - idx = [] - comp_node, comp_graph = _decide_comp_node_and_comp_graph(index) - for i in range(index_dims): - if i != axis: - shape = [1] * index_dims - shape[i] = index.axis_shape(i) - arange = mgb.opr.linspace( - 0, - index.axis_shape(i) - 1, - index.axis_shape(i), - comp_node=comp_node, - comp_graph=comp_graph, - ) - arange = ( - arange.reshape(*shape) - .broadcast(index.shape) - .reshape(-1) - .astype(np.int32) - ) - idx.append(arange) - else: - idx.append(index.reshape(-1)) - return tuple(idx) - - -@wrap_io_tensor -def gather(inp: Tensor, axis: int, index: Tensor) -> Tensor: - r""" - Gather data from :attr:`inp` on :attr:`axis` using :attr:`index`. - - For a 3-D tensor, the output is specified by:: - - out[i][j][k] = inp[index[i][j][k]][j][k] # if axis == 0 - out[i][j][k] = inp[i][index[i][j][k]][k] # if axis == 1 - out[i][j][k] = inp[i][j][index[i][j][k]] # if axis == 2 - - if :attr:`inp` is an n-dimensional tensor with size - :math:`(x_0,x_1,...,x_{i-1},x_i,x_{i+1},...,x_{n-1})` and axis=i, - then :attr:`index` must be an n-dimensional tensor with size - :math:`(x_0,x_1,...,x_{i-1},y,x_{i+1},...,x_{n-1})` where :math:`y\ge 1` and - output will have the same size as :attr:`index`. - - - :param inp: the source tensor - :param axis: the axis along which to index - :param index: the indices of elements to gather - - Examples: - - .. testcode:: - - import megengine.functional as F - from megengine.core import tensor - - inp = tensor([ - [1,2], [3,4], [5,6], - ]) - index = tensor([[0,2], [1,0]]) - oup = F.gather(inp, 0, index) - print(oup.numpy()) - - Outputs: - - .. testoutput:: - - [[1 6] - [3 2]] - - """ - - input_shape = inp.imm_shape - index_shape = index.imm_shape - input_dims = len(input_shape) - index_dims = len(index_shape) - if input_dims != index_dims: - raise ValueError( - "The index tensor must have same dimensions as input tensor, " - "But the input dims:{}, the index dims:{}".format(input_dims, index_dims) - ) - - if axis < 0 or axis >= input_dims: - raise ValueError( - "Index axis {} is output of bounds, should in range [0 {})".format( - axis, input_dims - ) - ) - - for i in range(input_dims): - if i != axis and input_shape[i] != index_shape[i]: - raise ValueError( - "The input {} and index {} must have the same size apart from axis {}".format( - input_shape, index_shape, axis - ) - ) - - idx = _get_idx(index, axis) - return mgb.opr.advanced_indexing(inp)[idx].reshape( - index.shape - ) # pylint: disable=no-member - - -@wrap_io_tensor -def concat( - inps: Iterable[Tensor], - axis: int = 0, - device: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None, -) -> Tensor: - r""" - Concat some tensors - - :param inps: Input tensors to concat - :param axis: the dimension over which the tensors are concatenated. Default: 0 - :param device: The comp node output on. Default: None - :param comp_graph: The graph in which output is. Default: None - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - data1 = tensor(np.arange(0, 6, dtype=np.float32).reshape((2, 3))) - data2 = tensor(np.arange(6, 12, dtype=np.float32).reshape((2, 3))) - out = F.concat([data1, data2]) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[ 0. 1. 2.] - [ 3. 4. 5.] - [ 6. 7. 8.] - [ 9. 10. 11.]] - - """ - - # Output buffer not supported - return mgb.opr.concat( - *list(inps), axis=axis, comp_node=device, comp_graph=comp_graph - ) - - -@wrap_io_tensor -def scatter(inp: Tensor, axis: int, index: Tensor, source: Tensor) -> Tensor: - r""" - Writes all values from the tensor :attr:`source` into :attr:`inp` at the indices specified in the :attr:`index` tensor. - - For each value in :attr:`source`, its output index is specified by its index - in :attr:`source` for ``axis != dimension`` and by the corresponding value in - :attr:`index` for ``axis = dimension``. - - For a 3-D tensor, :attr:`inp` is updated as:: - - inp[index[i][j][k]][j][k] = source[i][j][k] # if axis == 0 - inp[i][index[i][j][k]][k] = source[i][j][k] # if axis == 1 - inp[i][j][index[i][j][k]] = source[i][j][k] # if axis == 2 - - :attr:`inp`, :attr:`index` and :attr:`source` should have same number of dimensions. - - It is also required that ``source.shape(d) <= inp.shape(d)`` and ``index.shape(d) == source.shape(d)`` - for all dimensions ``d``. - - Moreover, the values of :attr:`index` must be between ``0`` and ``inp.shape(axis) - 1`` inclusive. - - .. note:: - Please notice that, due to performance issues, the result is uncertain on the GPU device - if scatter difference positions from source to the same destination position - regard to index tensor. - - Show the case using the following examples, the oup[0][2] is maybe - from source[0][2] which value is 0.2256 or source[1][2] which value is 0.5339 - if set the index[1][2] from 1 to 0. - - :param inp: the inp tensor which to be scattered - :param axis: the axis along which to index - :param index: the indices of elements to scatter - :param source: the source element(s) to scatter - - Examples: - - .. testcode:: - - import numpy as np - import megengine.functional as F - from megengine.core import tensor - - inp = tensor(np.zeros(shape=(3,5),dtype=np.float32)) - source = tensor([[0.9935,0.9465,0.2256,0.8926,0.4396],[0.7723,0.0718,0.5939,0.357,0.4576]]) - index = tensor([[0,2,0,2,1],[2,0,1,1,2]]) - oup = F.scatter(inp, 0, index,source) - print(oup.numpy()) - - Outputs: - - .. testoutput:: - - [[0.9935 0.0718 0.2256 0. 0. ] - [0. 0. 0.5939 0.357 0.4396] - [0.7723 0.9465 0. 0.8926 0.4576]] - - """ - - input_shape = inp.imm_shape - index_shape = index.imm_shape - source_shape = source.imm_shape - input_dims = len(input_shape) - index_dims = len(index_shape) - source_dims = len(source_shape) - - if input_dims != index_dims or input_dims != source_dims: - raise ValueError("The input, source and index tensor must have same dimensions") - - if axis < 0 or axis >= input_dims: - raise ValueError( - "Index axis {} is output of bounds, should in range [0 {})".format( - axis, input_dims - ) - ) - - for i in range(source_dims): - if source_shape[i] > input_shape[i]: - raise ValueError( - "The each shape size for source {} must be less than or equal to input {} ".format( - source_shape, input_shape - ) - ) - - for i in range(index_dims): - if index_shape[i] != source_shape[i]: - raise ValueError( - "The each shape size for index {} must be equal to source {} ".format( - index_shape, source_shape - ) - ) - - for i in range(index_dims): - if i != axis and index_shape[i] > input_shape[i]: - raise ValueError( - "The index {} must be less than or equal to input {} size apart from axis {}".format( - index_shape, input_shape, axis - ) - ) - - idx = _get_idx(index, axis) - return mgb.opr.set_advanced_indexing(inp, source.flatten())[idx] - - -@wrap_io_tensor -def where(mask: Tensor, x: Tensor, y: Tensor) -> Tensor: - r""" - Select elements either from Tensor x or Tensor y, according to mask. - - .. math:: - - \textrm{out}_i = x_i \textrm{ if } \textrm{mask}_i \textrm{ is True else } y_i - - :param mask: a mask used for choosing x or y - :param x: the first choice - :param y: the second choice - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - mask = tensor(np.array([[1, 0], [0, 1]], dtype=np.int32)) - x = tensor(np.array([[1, np.inf], [np.nan, 4]], - dtype=np.float32)) - y = tensor(np.array([[5, 6], [7, 8]], dtype=np.float32)) - out = F.where(mask, x, y) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[1. 6.] - [7. 4.]] - """ - v0, index0 = mgb.opr.cond_take( - x, mask, mode=mgb.opr_param_defs.CondTake.Mode.EQ, val=1 - ) - v1, index1 = mgb.opr.cond_take( - y, mask, mode=mgb.opr_param_defs.CondTake.Mode.EQ, val=0 - ) - out = x.flatten() - index = mgb.opr.concat(index0, index1, axis=0) - v = mgb.opr.concat(v0, v1, axis=0) - out = mgb.opr.set_advanced_indexing(out, v)[index] - out = out.reshape(x.shape) - return out - - -@wrap_io_tensor -def cond_take(mask: Tensor, x: Tensor, val=1) -> Tensor: - r""" - Take elements from data if specific condition is satisfied on mask. This operator has two outputs: the first is the elements taken, and the second is the indices corresponding to those elements; they are both 1-dimensional. High-dimension input would first be flattened. - - :param mask: condition param; must be the same shape with data - :param x: input tensor from which to take elements - :param val: value to be compared to by mode - - Examples: - - .. testcode:: - - from megengine import tensor - import megengine.functional as F - mask = tensor(np.array([[1, 0], [0, 1]], dtype=np.int32)) - x = tensor(np.array([[1, np.inf], [np.nan, 4]], - dtype=np.float32)) - v, index = F.cond_take(mask, x, 1) - print(v, index) - - Outputs: - - .. testoutput:: - - Tensor([1. 4.]) Tensor([0 3], dtype=int32) - - """ - - v, index = mgb.opr.cond_take( - x, mask, mode=mgb.opr_param_defs.CondTake.Mode.EQ, val=val - ) - return v, index - - -def shapeof(x: Tensor, axis=None): - r""" - The shape of input tensor. - """ - return x.shapeof(axis=axis) - - -@wrap_io_tensor -def dimshuffle(inp: Tensor, pattern: Iterable[int]) -> Tensor: - r""" - Swap shapes and strides according to given pattern - - :param inp: Input tensor - :param pattern: a list of integers including 0, 1, ... , ``ndim``-1, and any number of ``'x'`` char in dimensions where this tensor should be broadcasted. For examples: - - * (``'x'``) -> make a 0d (scalar) into a 1d vector - * (0, 1) -> identity for 2d vectors - * (1, 0) -> inverts the first and second dimensions - * (``'x'``, 0) -> make a row out of a 1d vector (N to 1xN) - * (0, ``'x'``) -> make a column out of a 1d vector (N to Nx1) - * (2, 0, 1) -> AxBxC to CxAxB - * (0, ``'x'``, 1) -> AxB to Ax1xB - * (1, ``'x'``, 0) -> AxB to Bx1xA - * (1,) -> This remove dimensions 0. It must be a broadcastable dimension (1xA to A) - - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - x = tensor(np.array([[1, 1], [0, 0]], dtype=np.int32)) - out = F.dimshuffle(x, (1, 0)) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[1 0] - [1 0]] - - """ - return mgb.opr.dimshuffle(inp, pattern) - - -@wrap_io_tensor -def reshape(inp: Tensor, target_shape: Iterable[int]) -> Tensor: - r""" - Reshape a tensor to given target shape; total number of logical elements must - remain unchanged - - :param inp: Input tensor - :param target_shape: target shape, the components would be concatenated to form the - target shape, and it can contain an element of -1 representing unspec_axis. - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - x = tensor(np.arange(12, dtype=np.int32)) - out = F.reshape(x, (3, 2, 2)) - print(out.numpy()) - - Outputs: - - .. testoutput:: - - [[[ 0 1] - [ 2 3]] - - [[ 4 5] - [ 6 7]] - - [[ 8 9] - [10 11]]] - - """ - return mgb.opr.reshape(inp, target_shape) - - -def transpose(inp: Tensor, pattern: Iterable[int]) -> Tensor: - r"""Equivalent to :func:`dimshuffle` - """ - return dimshuffle(inp, pattern) - - -@wrap_io_tensor -def add_axis(inp: Tensor, axis: int) -> Tensor: - r""" - Add dimension before given axis. - - :param inp: Input tensor - :param axis: Place of new axes - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - x = tensor([1, 2]) - out = F.add_axis(x, 0) - print(out.shape) - - Outputs: - - .. testoutput:: - - (1, 2) - - """ - if not isinstance(axis, int): - raise ValueError("axis must be int, but got type:{}".format(type(axis))) - return mgb.opr.add_axis(inp, axis) - - -@wrap_io_tensor -def remove_axis(inp: Tensor, axis: int) -> Tensor: - r""" - Remove dimension of shape 1. - - :param inp: Input tensor - :param axis: Place of axis to be removed - :return: The output tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - x = tensor(np.array([1, 2], dtype=np.int32).reshape(1, 1, 2, 1)) - out = F.remove_axis(x, 3) - print(out.shape) - - Outputs: - - .. testoutput:: - - (1, 1, 2) - - """ - if not isinstance(axis, int): - raise ValueError("axis must be int, but got type:{}".format(type(axis))) - return mgb.opr.remove_axis(inp, axis) - - -def linspace( - start: Union[int, float, Tensor], - stop: Union[int, float, Tensor], - num: Union[int, Tensor], - dtype=np.float32, - device: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None, -) -> Tensor: - r""" - Return equally spaced numbers over a specified interval - - :param start: Starting value of the squence, shoule be scalar - :param stop: The last value of the squence, shoule be scalar - :param num: number of values to generate - :param dtype: result data type - :return: The generated tensor - - Examples: - - .. testcode:: - - import numpy as np - import megengine.functional as F - - a = F.linspace(3,10,5) - print(a.numpy()) - - .. testoutput:: - - [ 3. 4.75 6.5 8.25 10. ] - - """ - if dtype is not np.float32: - raise ValueError("linspace is only implemented for float32") - - device, comp_graph = _use_default_if_none(device, comp_graph) - ret = Tensor( - mgb.opr.linspace(start, stop, num, comp_node=device, comp_graph=comp_graph) - ) - return ret.astype(dtype) - - -def arange( - start: Union[int, float, Tensor], - end: Union[int, float, Tensor], - step: Union[int, float, Tensor] = 1, - dtype=np.float32, - device: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None, -) -> Tensor: - r""" - Returns a Tensor with values from `start` to `end` with adjacent interval `step` - - :param start: starting value of the squence, shoule be scalar - :param end: ending value of the squence, shoule be scalar - :param step: the gap between each pair of adjacent values. Default 1 - :param dtype: result data type - :return: The generated tensor - - Examples: - - .. testcode:: - - import numpy as np - import megengine.functional as F - - a = F.arange(1, 5, 1) - print(a.numpy()) - - .. testoutput:: - - [1. 2. 3. 4.] - - """ - if dtype is not np.float32: - raise ValueError("arange is only implemented for float32") - num = ceil((end - start) / step) - stop = start + step * (num - 1) - ret = linspace(start, stop, num, device=device, comp_graph=comp_graph) - return ret - - -def zeros_like(inp: Tensor) -> Tensor: - r""" - Returns a zero tensor with the same shape as input tensor - - :param inp: input tensor - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - inp = tensor(np.arange(1, 7, dtype=np.int32).reshape(2,3)) - out = F.zeros_like(inp) - print(out.numpy()) - - .. testoutput:: - - [[0 0 0] - [0 0 0]] - - """ - return zeros(inp.shapeof()).astype(inp.dtype) diff --git a/python_module/megengine/functional/utils.py b/python_module/megengine/functional/utils.py deleted file mode 100644 index 0ad969ca..00000000 --- a/python_module/megengine/functional/utils.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable, Union - -import megengine._internal as mgb - -from ..core.graph import _use_default_if_none -from ..core.tensor import Tensor, wrap_io_tensor -from .elemwise import equal -from .sort import top_k - - -def _decide_comp_node_and_comp_graph(*args: mgb.SymbolVar): - for i in args: - if isinstance(i, mgb.SymbolVar): - return i.comp_node, i.owner_graph - return _use_default_if_none(None, None) - - -def accuracy( - logits: Tensor, target: Tensor, topk: Union[int, Iterable[int]] = 1 -) -> Union[Tensor, Iterable[Tensor]]: - r""" - Calculate the classification accuracy given predicted logits and ground-truth labels. - - :param logits: Model predictions of shape [batch_size, num_classes], - representing the probability (likelyhood) of each class. - :param target: Ground-truth labels, 1d tensor of int32 - :param topk: Specifies the topk values, could be an int or tuple of ints. Default: 1 - :return: Tensor(s) of classification accuracy between 0.0 and 1.0 - - Examples: - - .. testcode:: - - import numpy as np - from megengine import tensor - import megengine.functional as F - - logits = tensor(np.arange(80, dtype=np.int32).reshape(8,10)) - target = tensor(np.arange(8, dtype=np.int32)) - top1, top5 = F.accuracy(logits, target, (1, 5)) - print(top1.numpy(), top5.numpy()) - - Outputs: - - .. testoutput:: - - [0.] [0.375] - """ - if isinstance(topk, int): - topk = (topk,) - _, pred = top_k(logits, k=max(topk), descending=True) - accs = [] - for k in topk: - correct = equal( - pred[:, :k], target.dimshuffle(0, "x").broadcast(target.shapeof(0), k) - ) - accs.append(correct.sum() / target.shapeof(0)) - if len(topk) == 1: # type: ignore[arg-type] - accs = accs[0] - return accs - - -@wrap_io_tensor -def zero_grad(inp: Tensor) -> Tensor: - r""" - Returns a tensor which is treated as constant during backward gradient calcuation, - i.e. its gradient is zero. - - :param inp: Input tensor. - - See implementation of :func:`~.softmax` for example. - """ - return mgb.opr.zero_grad(inp) diff --git a/python_module/megengine/hub/__init__.py b/python_module/megengine/hub/__init__.py deleted file mode 100644 index f07c3979..00000000 --- a/python_module/megengine/hub/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .hub import ( - help, - import_module, - list, - load, - load_serialized_obj_from_url, - pretrained, -) diff --git a/python_module/megengine/hub/const.py b/python_module/megengine/hub/const.py deleted file mode 100644 index 5f53420b..00000000 --- a/python_module/megengine/hub/const.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -DEFAULT_BRANCH_NAME = "master" -HUBCONF = "hubconf.py" -HUBDEPENDENCY = "dependencies" -DEFAULT_GIT_HOST = "github.com" -ENV_MGE_HOME = "MGE_HOME" -ENV_XDG_CACHE_HOME = "XDG_CACHE_HOME" -DEFAULT_CACHE_DIR = "~/.cache" -DEFAULT_PROTOCOL = "HTTPS" -HTTP_READ_TIMEOUT = 120 diff --git a/python_module/megengine/hub/exceptions.py b/python_module/megengine/hub/exceptions.py deleted file mode 100644 index aab0a134..00000000 --- a/python_module/megengine/hub/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -class FetcherError(Exception): - """Base class for fetch related error.""" - - -class InvalidRepo(FetcherError): - """The repo provided was somehow invalid.""" - - -class InvalidGitHost(FetcherError): - """The git host provided was somehow invalid.""" - - -class GitPullError(FetcherError): - """A git pull error occurred""" - - -class GitCheckoutError(FetcherError): - """A git checkout error occurred""" - - -class InvalidProtocol(FetcherError): - """The protocol provided was somehow invalid""" diff --git a/python_module/megengine/hub/fetcher.py b/python_module/megengine/hub/fetcher.py deleted file mode 100644 index dfbfb0e7..00000000 --- a/python_module/megengine/hub/fetcher.py +++ /dev/null @@ -1,300 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import hashlib -import os -import re -import shutil -import subprocess -from tempfile import NamedTemporaryFile -from typing import Tuple -from zipfile import ZipFile - -import requests -from tqdm import tqdm - -from megengine.utils.http_download import ( - CHUNK_SIZE, - HTTP_CONNECTION_TIMEOUT, - HTTPDownloadError, -) - -from ..distributed.util import is_distributed, synchronized -from ..logger import get_logger -from .const import DEFAULT_BRANCH_NAME, HTTP_READ_TIMEOUT -from .exceptions import GitCheckoutError, GitPullError, InvalidGitHost, InvalidRepo -from .tools import cd - -logger = get_logger(__name__) - -HTTP_TIMEOUT = (HTTP_CONNECTION_TIMEOUT, HTTP_READ_TIMEOUT) - -pattern = re.compile( - r"^(?:[a-z0-9]" # First character of the domain - r"(?:[a-z0-9-_]{0,61}[a-z0-9])?\.)" # Sub domain + hostname - r"+[a-z0-9][a-z0-9-_]{0,61}" # First 61 characters of the gTLD - r"[a-z]$" # Last character of the gTLD -) - - -class RepoFetcherBase: - @classmethod - def fetch( - cls, - git_host: str, - repo_info: str, - use_cache: bool = False, - commit: str = None, - silent: bool = True, - ) -> str: - raise NotImplementedError() - - @classmethod - def _parse_repo_info(cls, repo_info: str) -> Tuple[str, str, str]: - try: - branch_info = DEFAULT_BRANCH_NAME - if ":" in repo_info: - prefix_info, branch_info = repo_info.split(":") - else: - prefix_info = repo_info - repo_owner, repo_name = prefix_info.split("/") - return repo_owner, repo_name, branch_info - except ValueError: - raise InvalidRepo("repo_info: '{}' is invalid.".format(repo_info)) - - @classmethod - def _check_git_host(cls, git_host): - return cls._is_valid_domain(git_host) or cls._is_valid_host(git_host) - - @classmethod - def _is_valid_domain(cls, s): - try: - return pattern.match(s.encode("idna").decode("ascii")) - except UnicodeError: - return False - - @classmethod - def _is_valid_host(cls, s): - nums = s.split(".") - if len(nums) != 4 or any(not _.isdigit() for _ in nums): - return False - return all(0 <= int(_) < 256 for _ in nums) - - @classmethod - def _gen_repo_dir(cls, repo_dir: str) -> str: - return hashlib.sha1(repo_dir.encode()).hexdigest()[:16] - - -class GitSSHFetcher(RepoFetcherBase): - @classmethod - @synchronized - def fetch( - cls, - git_host: str, - repo_info: str, - use_cache: bool = False, - commit: str = None, - silent: bool = True, - ) -> str: - """ - Fetches git repo by SSH protocol - - :param git_host: - host address of git repo. - example: github.com - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - example: ``"brain_sdk/MegBrain[:hub]"`` - :param use_cache: - whether to use locally fetched code or completely re-fetch - :param commit: - commit id on github or gitlab - :param silent: - whether to accept the stdout and stderr of the subprocess with PIPE, instead of - displaying on the screen - :return: - directory where the repo code is stored - """ - if not cls._check_git_host(git_host): - raise InvalidGitHost("git_host: '{}' is malformed.".format(git_host)) - - repo_owner, repo_name, branch_info = cls._parse_repo_info(repo_info) - normalized_branch_info = branch_info.replace("/", "_") - repo_dir_raw = "{}_{}_{}".format( - repo_owner, repo_name, normalized_branch_info - ) + ("_{}".format(commit) if commit else "") - repo_dir = cls._gen_repo_dir(repo_dir_raw) - git_url = "git@{}:{}/{}.git".format(git_host, repo_owner, repo_name) - - if use_cache and os.path.exists(repo_dir): # use cache - logger.debug("Cache Found in %s", repo_dir) - return repo_dir - - if is_distributed(): - logger.warning( - "When using `hub.load` or `hub.list` to fetch git repositories\n" - " in DISTRIBUTED mode for the first time, processes are synchronized to\n" - " ensure that target repository is ready to use for each process.\n" - " Users are expected to see this warning no more than ONCE, otherwise\n" - " (very little chance) you may need to remove corrupt cache\n" - " `%s` and fetch again.", - repo_dir, - ) - - shutil.rmtree(repo_dir, ignore_errors=True) # ignore and clear cache - - logger.debug( - "Git Clone from Repo:%s Branch: %s to %s", - git_url, - normalized_branch_info, - repo_dir, - ) - - kwargs = ( - {"stderr": subprocess.PIPE, "stdout": subprocess.PIPE} if silent else {} - ) - if commit is None: - # shallow clone repo by branch/tag - p = subprocess.Popen( - [ - "git", - "clone", - "-b", - normalized_branch_info, - git_url, - repo_dir, - "--depth=1", - ], - **kwargs, - ) - cls._check_clone_pipe(p) - else: - # clone repo and checkout to commit_id - p = subprocess.Popen(["git", "clone", git_url, repo_dir], **kwargs) - cls._check_clone_pipe(p) - - with cd(repo_dir): - logger.debug("git checkout to %s", commit) - p = subprocess.Popen(["git", "checkout", commit], **kwargs) - _, err = p.communicate() - if p.returncode: - shutil.rmtree(repo_dir, ignore_errors=True) - raise GitCheckoutError( - "Git checkout error, please check the commit id.\n" - + err.decode() - ) - with cd(repo_dir): - shutil.rmtree(".git") - - return repo_dir - - @classmethod - def _check_clone_pipe(cls, p): - _, err = p.communicate() - if p.returncode: - raise GitPullError( - "Repo pull error, please check repo info.\n" + err.decode() - ) - - -class GitHTTPSFetcher(RepoFetcherBase): - @classmethod - @synchronized - def fetch( - cls, - git_host: str, - repo_info: str, - use_cache: bool = False, - commit: str = None, - silent: bool = True, - ) -> str: - """ - Fetches git repo by HTTPS protocol - - :param git_host: - host address of git repo - example: github.com - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - example: ``"brain_sdk/MegBrain[:hub]"`` - :param use_cache: - whether to use locally cached code or completely re-fetch - :param commit: - commit id on github or gitlab - :param silent: - whether to accept the stdout and stderr of the subprocess with PIPE, instead of - displaying on the screen - :return: - directory where the repo code is stored - """ - if not cls._check_git_host(git_host): - raise InvalidGitHost("git_host: '{}' is malformed.".format(git_host)) - - repo_owner, repo_name, branch_info = cls._parse_repo_info(repo_info) - normalized_branch_info = branch_info.replace("/", "_") - repo_dir_raw = "{}_{}_{}".format( - repo_owner, repo_name, normalized_branch_info - ) + ("_{}".format(commit) if commit else "") - repo_dir = cls._gen_repo_dir(repo_dir_raw) - archive_url = cls._git_archive_link( - git_host, repo_owner, repo_name, branch_info, commit - ) - - if use_cache and os.path.exists(repo_dir): # use cache - logger.debug("Cache Found in %s", repo_dir) - return repo_dir - - if is_distributed(): - logger.warning( - "When using `hub.load` or `hub.list` to fetch git repositories " - "in DISTRIBUTED mode for the first time, processes are synchronized to " - "ensure that target repository is ready to use for each process.\n" - "Users are expected to see this warning no more than ONCE, otherwise" - "(very little chance) you may need to remove corrupt hub cache %s and fetch again." - ) - - shutil.rmtree(repo_dir, ignore_errors=True) # ignore and clear cache - - logger.debug("Downloading from %s to %s", archive_url, repo_dir) - cls._download_zip_and_extract(archive_url, repo_dir) - - return repo_dir - - @classmethod - def _download_zip_and_extract(cls, url, target_dir): - resp = requests.get(url, timeout=HTTP_TIMEOUT, stream=True) - if resp.status_code != 200: - raise HTTPDownloadError( - "An error occured when downloading from {}".format(url) - ) - - total_size = int(resp.headers.get("Content-Length", 0)) - _bar = tqdm(total=total_size, unit="iB", unit_scale=True) - - with NamedTemporaryFile("w+b") as f: - for chunk in resp.iter_content(CHUNK_SIZE): - if not chunk: - break - _bar.update(len(chunk)) - f.write(chunk) - _bar.close() - f.seek(0) - with ZipFile(f) as temp_zip_f: - zip_dir_name = temp_zip_f.namelist()[0].split("/")[0] - temp_zip_f.extractall(".") - shutil.move(zip_dir_name, target_dir) - - @classmethod - def _git_archive_link(cls, git_host, repo_owner, repo_name, branch_info, commit): - archive_link = "https://{}/{}/{}/archive/{}.zip".format( - git_host, repo_owner, repo_name, commit or branch_info - ) - - return archive_link diff --git a/python_module/megengine/hub/hub.py b/python_module/megengine/hub/hub.py deleted file mode 100644 index 5342cd8e..00000000 --- a/python_module/megengine/hub/hub.py +++ /dev/null @@ -1,333 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import functools -import hashlib -import os -import sys -import types -from typing import Any, List -from urllib.parse import urlparse - -from megengine.utils.http_download import download_from_url - -from ..core.serialization import load as _mge_load_serialized -from ..distributed import is_distributed -from ..logger import get_logger -from .const import ( - DEFAULT_CACHE_DIR, - DEFAULT_GIT_HOST, - DEFAULT_PROTOCOL, - ENV_MGE_HOME, - ENV_XDG_CACHE_HOME, - HTTP_READ_TIMEOUT, - HUBCONF, - HUBDEPENDENCY, -) -from .exceptions import InvalidProtocol -from .fetcher import GitHTTPSFetcher, GitSSHFetcher -from .tools import cd, check_module_exists, load_module - -logger = get_logger(__name__) - - -PROTOCOLS = { - "HTTPS": GitHTTPSFetcher, - "SSH": GitSSHFetcher, -} - - -def _get_megengine_home() -> str: - """MGE_HOME setting complies with the XDG Base Directory Specification - """ - megengine_home = os.path.expanduser( - os.getenv( - ENV_MGE_HOME, - os.path.join(os.getenv(ENV_XDG_CACHE_HOME, DEFAULT_CACHE_DIR), "megengine"), - ) - ) - return megengine_home - - -def _get_repo( - git_host: str, - repo_info: str, - use_cache: bool = False, - commit: str = None, - protocol: str = DEFAULT_PROTOCOL, -) -> str: - if protocol not in PROTOCOLS: - raise InvalidProtocol( - "Invalid protocol, the value should be one of {}.".format( - ", ".join(PROTOCOLS.keys()) - ) - ) - cache_dir = os.path.expanduser(os.path.join(_get_megengine_home(), "hub")) - with cd(cache_dir): - fetcher = PROTOCOLS[protocol] - repo_dir = fetcher.fetch(git_host, repo_info, use_cache, commit) - return os.path.join(cache_dir, repo_dir) - - -def _check_dependencies(module: types.ModuleType) -> None: - if not hasattr(module, HUBDEPENDENCY): - return - - dependencies = getattr(module, HUBDEPENDENCY) - if not dependencies: - return - - missing_deps = [m for m in dependencies if not check_module_exists(m)] - if len(missing_deps): - raise RuntimeError("Missing dependencies: {}".format(", ".join(missing_deps))) - - -def _init_hub( - repo_info: str, - git_host: str, - use_cache: bool = True, - commit: str = None, - protocol: str = DEFAULT_PROTOCOL, -): - """Imports hubmodule like python import - - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - Example: ``"brain_sdk/MegBrain[:hub]"`` - :param git_host: - host address of git repo - Example: github.com - :param use_cache: - whether to use locally cached code or completely re-fetch - :param commit: - commit id on github or gitlab - :param protocol: - which protocol to use to get the repo, and HTTPS protocol only supports public repo on github. - The value should be one of HTTPS, SSH. - :return: - hubconf.py as a python module - """ - cache_dir = os.path.expanduser(os.path.join(_get_megengine_home(), "hub")) - os.makedirs(cache_dir, exist_ok=True) - absolute_repo_dir = _get_repo( - git_host, repo_info, use_cache=use_cache, commit=commit, protocol=protocol - ) - sys.path.insert(0, absolute_repo_dir) - hubmodule = load_module(HUBCONF, os.path.join(absolute_repo_dir, HUBCONF)) - sys.path.remove(absolute_repo_dir) - - return hubmodule - - -@functools.wraps(_init_hub) -def import_module(*args, **kwargs): - return _init_hub(*args, **kwargs) - - -def list( - repo_info: str, - git_host: str = DEFAULT_GIT_HOST, - use_cache: bool = True, - commit: str = None, - protocol: str = DEFAULT_PROTOCOL, -) -> List[str]: - """Lists all entrypoints available in repo hubconf - - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - Example: ``"brain_sdk/MegBrain[:hub]"`` - :param git_host: - host address of git repo - Example: github.com - :param use_cache: - whether to use locally cached code or completely re-fetch - :param commit: - commit id on github or gitlab - :param protocol: - which protocol to use to get the repo, and HTTPS protocol only supports public repo on github. - The value should be one of HTTPS, SSH. - :return: - all entrypoint names of the model - """ - hubmodule = _init_hub(repo_info, git_host, use_cache, commit, protocol) - - return [ - _ - for _ in dir(hubmodule) - if not _.startswith("__") and callable(getattr(hubmodule, _)) - ] - - -def load( - repo_info: str, - entry: str, - *args, - git_host: str = DEFAULT_GIT_HOST, - use_cache: bool = True, - commit: str = None, - protocol: str = DEFAULT_PROTOCOL, - **kwargs -) -> Any: - """Loads model from github or gitlab repo, with pretrained weights. - - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - Example: ``"brain_sdk/MegBrain[:hub]"`` - :param entry: - an entrypoint defined in hubconf - :param git_host: - host address of git repo - Example: github.com - :param use_cache: - whether to use locally cached code or completely re-fetch - :param commit: - commit id on github or gitlab - :param protocol: - which protocol to use to get the repo, and HTTPS protocol only supports public repo on github. - The value should be one of HTTPS, SSH. - :return: - a single model with corresponding pretrained weights. - """ - hubmodule = _init_hub(repo_info, git_host, use_cache, commit, protocol) - - if not hasattr(hubmodule, entry) or not callable(getattr(hubmodule, entry)): - raise RuntimeError("Cannot find callable {} in hubconf.py".format(entry)) - - _check_dependencies(hubmodule) - - module = getattr(hubmodule, entry)(*args, **kwargs) - return module - - -def help( - repo_info: str, - entry: str, - git_host: str = DEFAULT_GIT_HOST, - use_cache: bool = True, - commit: str = None, - protocol: str = DEFAULT_PROTOCOL, -) -> str: - """This function returns docstring of entrypoint ``entry`` by following steps: - - 1. Pull the repo code specified by git and repo_info - 2. Load the entry defined in repo's hubconf.py - 3. Return docstring of function entry - - :param repo_info: - a string with format ``"repo_owner/repo_name[:tag_name/:branch_name]"`` with an optional - tag/branch. The default branch is ``master`` if not specified. - Example: ``"brain_sdk/MegBrain[:hub]"`` - :param entry: - an entrypoint defined in hubconf.py - :param git_host: - host address of git repo - Example: github.com - :param use_cache: - whether to use locally cached code or completely re-fetch - :param commit: - commit id on github or gitlab - :param protocol: - which protocol to use to get the repo, and HTTPS protocol only supports public repo on github. - The value should be one of HTTPS, SSH. - :return: - docstring of entrypoint ``entry`` - """ - hubmodule = _init_hub(repo_info, git_host, use_cache, commit, protocol) - - if not hasattr(hubmodule, entry) or not callable(getattr(hubmodule, entry)): - raise RuntimeError("Cannot find callable {} in hubconf.py".format(entry)) - - doc = getattr(hubmodule, entry).__doc__ - return doc - - -def load_serialized_obj_from_url(url: str, model_dir=None) -> Any: - """Loads MegEngine serialized object from the given URL. - - If the object is already present in ``model_dir``, it's deserialized and - returned. If no ``model_dir`` is specified, it will be ``MGE_HOME/serialized``. - - :param url: url to serialized object - :param model_dir: dir to cache target serialized file - - :return: loaded object - """ - if model_dir is None: - model_dir = os.path.join(_get_megengine_home(), "serialized") - os.makedirs(model_dir, exist_ok=True) - - parts = urlparse(url) - filename = os.path.basename(parts.path) - - # use hash as prefix to avoid filename conflict from different urls - sha256 = hashlib.sha256() - sha256.update(url.encode()) - digest = sha256.hexdigest()[:6] - filename = digest + "_" + filename - - cached_file = os.path.join(model_dir, filename) - logger.info( - "load_serialized_obj_from_url: download to or using cached %s", cached_file - ) - if not os.path.exists(cached_file): - if is_distributed(): - logger.warning( - "Downloading serialized object in DISTRIBUTED mode\n" - " File may be downloaded multiple times. We recommend\n" - " users to download in single process first." - ) - download_from_url(url, cached_file, HTTP_READ_TIMEOUT) - - state_dict = _mge_load_serialized(cached_file) - return state_dict - - -class pretrained: - r""" - Decorator which helps to download pretrained weights from the given url. - - For example, we can decorate a resnet18 function as follows - - .. code-block:: - - @hub.pretrained("https://url/to/pretrained_resnet18.pkl") - def resnet18(**kwargs): - return ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) - - When decorated function is called with ``pretrained=True``, MegEngine will automatically - download and fill the returned model with pretrained weights. - """ - - def __init__(self, url): - self.url = url - - def __call__(self, func): - @functools.wraps(func) - def pretrained_model_func( - pretrained=False, **kwargs - ): # pylint: disable=redefined-outer-name - model = func(**kwargs) - if pretrained: - weights = load_serialized_obj_from_url(self.url) - model.load_state_dict(weights) - return model - - return pretrained_model_func - - -__all__ = [ - "list", - "load", - "help", - "load_serialized_obj_from_url", - "pretrained", - "import_module", -] diff --git a/python_module/megengine/hub/tools.py b/python_module/megengine/hub/tools.py deleted file mode 100644 index 0bf9c98c..00000000 --- a/python_module/megengine/hub/tools.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import importlib.util -import os -import types -from contextlib import contextmanager -from typing import Iterator - - -def load_module(name: str, path: str) -> types.ModuleType: - """ - Loads module specified by name and path - - :param name: module name - :param path: module path - """ - spec = importlib.util.spec_from_file_location(name, path) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - return module - - -def check_module_exists(module: str) -> bool: - """Checks whether python module exists or not - - :param module: name of module - """ - return importlib.util.find_spec(module) is not None - - -@contextmanager -def cd(target: str) -> Iterator[None]: - """Changes current directory to target - - :param target: target directory - """ - prev = os.getcwd() - os.chdir(os.path.expanduser(target)) - try: - yield - finally: - os.chdir(prev) diff --git a/python_module/megengine/jit/__init__.py b/python_module/megengine/jit/__init__.py deleted file mode 100644 index d610388b..00000000 --- a/python_module/megengine/jit/__init__.py +++ /dev/null @@ -1,570 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import contextlib -import functools -import itertools -import os -from typing import Callable, Tuple, Union - -import numpy as np - -import megengine._internal as mgb -from megengine._internal.plugin import CompGraphProfiler - -from ..core import Tensor, graph, tensor -from .sublinear_memory_config import SublinearMemoryConfig - - -def sideeffect(f): - # during eager tracing, wrapped function is called with proxy inputs - # during static tracing, wrapped function will not be called at all - @functools.wraps(f) - def wrapper(*args, **kwargs): # pylint: disable=inconsistent-return-statements - if not trace._active_instance: - return f(*args, **kwargs) - - tensors = {} - for i, x in itertools.chain(enumerate(args), kwargs.items()): - if isinstance(x, Tensor): - tensors[i] = x - if tensors: - _keys, tensors = zip(*tensors.items()) - else: - _keys, tensors = (), () - - def callback(*tensors, f=f, keys=_keys, args=args, kwargs=kwargs): - replace = dict(zip(keys, tensors)) - args = tuple(replace.get(i, x) for i, x in enumerate(args)) - kwargs = {i: replace.get(i, x) for i, x in kwargs.items()} - if f(*args, **kwargs) is not None: - raise TypeError("a sideeffect function should return None") - # TODO: clear memory - - trace._active_instance._register_callback(callback, tensors) - - return wrapper - - -def mark_impure(x): - if not trace._active_instance: - return x - return trace._active_instance._mark_impure(x) - - -def barrier(x): - if not trace._active_instance: - return x - return trace._active_instance._insert_barrier(x) - - -def _dummy(): - return mgb.make_immutable(*graph._use_default_if_none(None, None), 0) - - -class unset: - pass - - -class trace: - """ - Wrap a callable and provide: - - * tracing via :meth:`.trace` and :meth:`.dump` - * accelerated evalutaion via :meth:`.__call__` - - :param func: Positional only argument. - :param symbolic: Whether to use symbolic tensor. Default: False - :param opt_level: Optimization level for compiling trace. - :param log_level: Log level. - :param sublinear_memory_config: Configuration for sublinear memory optimization. - If not None, it enables sublinear memory optimization with given setting. - :param allreduce_pack_max_size: Maximum size of an allreduce pack in MB. - If not None, multiple gradients will be packed and synchronized together - :param profiling: Whether to profile compiled trace. Default: False - """ - - _active_instance = None - enabled = not os.getenv("MGE_DISABLE_TRACE") - - _UNSTARTED = "unstarted" - _STARTED = "started" - _FINISHED = "finished" - - def __new__(cls, *args, **kwargs): - if not args: - return functools.partial(cls, **kwargs) - return super().__new__(cls) - - def __init__( - self, - func: Callable[..., Union[None, Tensor, Tuple[Tensor]]], - *, - symbolic: bool = False, - opt_level: int = None, - log_level: int = None, - sublinear_memory_config: SublinearMemoryConfig = None, - allreduce_pack_max_size: int = None, - profiling: bool = False - ): - self.__wrapped__ = func - self._symbolic = symbolic - self._graph_opt_level = opt_level - self._log_level = log_level - self._sublinear_memory_config = sublinear_memory_config - self._allreduce_pack_max_size = allreduce_pack_max_size - self._status = self._UNSTARTED - self._args = None - self._kwargs = None - self._outputs = unset - self._sym_outputs = unset - self._outspec = None - self._checkpoint = None - self._compiled_func = None - self._profiling = profiling - self._profiler = None - - @property - def _active(self): - c1 = self._status == self._STARTED - c2 = type(self)._active_instance is self - assert c1 == c2 - return c1 - - def _register_callback(self, f, args=()): - assert self._active - assert isinstance(args, (tuple, list)) - proxies = self._make_proxies(args) - self._forward(args, proxies, checkpoint=True) - # NOTE: under eager graph callback will fire immediately - job = mgb.opr.callback_injector( - self._insert_barrier(_dummy()), lambda _: f(*proxies) - ) - self._insert_checkpoint(job) - self._outspec.append(job) - - def _insert_barrier(self, x): - assert self._active - if self._checkpoint is None: - return x - if isinstance(x, Tensor): - x = x._symvar - wrap = True - else: - wrap = False - if not isinstance(x, mgb.SymbolVar): - raise TypeError - x = mgb.opr.virtual_dep([x, self._checkpoint]) - if wrap: - x = Tensor(x) - return x - - def _insert_checkpoint(self, *args, no_barrier=False): - assert self._active - if not args: - return - args = tuple(x._symvar if isinstance(x, Tensor) else x for x in args) - for x in args: - if not isinstance(x, mgb.SymbolVar): - raise TypeError - if not no_barrier and self._checkpoint is not None: - # normally no need to _insert_barrier here, but if - # someone forget to call _insert_barrier beforehand, - # this can make things less broken - args += (self._checkpoint,) - if len(args) == 1: - self._checkpoint = args[0] - else: - self._checkpoint = mgb.opr.virtual_dep(args) - - def _mark_impure(self, x): - assert self._active - ret = x - if isinstance(x, Tensor): - x = x._symvar - if not isinstance(x, mgb.SymbolVar): - raise TypeError - self._outspec.append(x) - self._insert_checkpoint(x) - return ret - - def _make_proxies(self, args): - assert isinstance(args, (tuple, list)) - for x in args: - assert isinstance(x, Tensor) - return tuple(tensor(dtype=x.dtype, device=x.device) for x in args) - - def _forward(self, srcs, dests, checkpoint=True): - # pseudo-op: does not run under static graph; traced - # TODO: use shared memory - assert len(srcs) == len(dests) - if not self._active: - for s, d in zip(srcs, dests): - d.set_value(s, share=False) - return - jobs = [] - for s, d in zip(srcs, dests): - - def callback(value, dest=d): - dest.set_value(value, share=False) - - s = self._insert_barrier(s._symvar) - # NOTE: callback immediately fire in eager graph - jobs.append(mgb.opr.callback_injector(s, callback)) - self._outspec.extend(jobs) - if checkpoint: - self._insert_checkpoint(*jobs, no_barrier=True) - - def _forward_inputs(self, *args, **kwargs): - if self._kwargs is None: - self._kwargs = kwargs - elif self._kwargs != kwargs: - raise ValueError("kwargs must not change between invocations") - - if self._args is None: - self._args = [] - for i in args: - if isinstance(i, Tensor): - self._args.append(tensor(dtype=i.dtype, device=i.device)) - self._args[-1].set_value(i, share=False) - else: - self._args.append(tensor(i)) - else: - if not len(args) == len(self._args): - raise TypeError - for i, proxy in zip(args, self._args): - proxy.set_value(i, share=False) - # XXX: sync? - - def _make_outputs(self, outputs): - if outputs is None: - self._outputs = None - return - if isinstance(outputs, Tensor): - # no one is able to call barrier after this, so no need to checkpoint - # but checkpoint do little harm anyway - (self._outputs,) = self._make_proxies([outputs]) - return - if not isinstance(outputs, (tuple, list)): - raise TypeError("should return (tuple of) tensor") - for i in outputs: - if not isinstance(i, Tensor): - raise TypeError("should return (tuple of) tensor") - self._outputs = self._make_proxies(outputs) - - def _foward_outputs(self, outputs): - # pseudo-op: does not run under static graph; traced - if self._outputs is unset: - self._make_outputs(outputs) - if self._outputs is None: - if outputs is not None: - raise TypeError("should return None") - elif isinstance(self._outputs, Tensor): - if not isinstance(outputs, Tensor): - raise TypeError("should return a tensor") - self._forward([outputs], [self._outputs]) - else: - assert isinstance(self._outputs, tuple) - - def check(): - if not isinstance(outputs, (tuple, list)): - return False - if len(self._outputs) != len(outputs): - return False - for x in outputs: - if not isinstance(x, Tensor): - return False - return True - - if not check(): - raise TypeError( - "should return tuple of %d tensors" % len(self._outputs) - ) - self._forward(outputs, self._outputs) - - def _apply_graph_options(self, cg): - # graph opt level - if self._graph_opt_level is not None: - cg.set_option("graph_opt_level", self._graph_opt_level) - # log level - if self._log_level is not None: - cg.set_option("log_level", self._log_level) - # sublinear - if self._sublinear_memory_config is not None: - cg.set_option("enable_sublinear_memory_opt", True) - cg.set_option( - "sublinear_mem_config.lb_memory", - self._sublinear_memory_config.lb_memory, - ) - cg.set_option( - "sublinear_mem_config.genetic_nr_iter", - self._sublinear_memory_config.genetic_nr_iter, - ) - cg.set_option( - "sublinear_mem_config.genetic_pool_size", - self._sublinear_memory_config.genetic_pool_size, - ) - cg.set_option( - "sublinear_mem_config.thresh_nr_try", - self._sublinear_memory_config.thresh_nr_try, - ) - cg.set_option( - "sublinear_mem_config.num_worker", - self._sublinear_memory_config.num_worker, - ) - # pack allreduce - if self._allreduce_pack_max_size is not None: - cg.set_option("allreduce_pack_max_size", self._allreduce_pack_max_size) - # profile - if self._profiling: - self._profiler = CompGraphProfiler(cg) - - def _get_graph(self, eager): - - if eager: - if not hasattr(self, "_eager_graph"): - # pylint: disable=attribute-defined-outside-init - self._eager_graph = graph.Graph(eager_evaluation=True) - self._apply_graph_options(self._eager_graph) - return self._eager_graph - else: - if not hasattr(self, "_static_graph"): - # pylint: disable=attribute-defined-outside-init - self._static_graph = graph.Graph(eager_evaluation=False) - self._apply_graph_options(self._static_graph) - return self._static_graph - - @contextlib.contextmanager - def _prepare(self, args, kwargs, enable): - # prepare for execution - self._forward_inputs(*args, **kwargs) - if not enable: - # XXX: use our own graph here? - cg = None - elif self._status == self._FINISHED: - cg = None - elif self._symbolic: - cg = self._get_graph(eager=False) - else: - cg = self._get_graph(eager=True) - try: - # NOTE: always trace in a new graph, so capturing an undetached tensor - # will never work (would work if tracing in default graph) - if cg is None: - yield - else: - with cg: - yield - finally: - # XXX: properly release memory - if cg: - cg.clear_device_memory() - - @contextlib.contextmanager - def _activate(self): - # prepare for tracing - if self._status != self._UNSTARTED: - raise RuntimeError("cannot trace a second time") - if type(self)._active_instance is not None: - raise RuntimeError("nested trace is unsupported") - self._status = self._STARTED - type(self)._active_instance = self - self._user_cache = {} - try: - yield - finally: - self._status = self._FINISHED - self._user_cache = None - type(self)._active_instance = None - - def _run_wrapped(self): - outputs = self.__wrapped__(*self._args, **self._kwargs) - self._foward_outputs(outputs) - return outputs - - def _do_trace(self): - with self._activate(): - self._outspec = [] - outputs = self._run_wrapped() - if outputs is None: - self._sym_outputs = None - else: - if isinstance(outputs, Tensor): - outputs = [outputs] - # _run_wrapped has checked validity of outputs - self._sym_outputs = tuple(i._symvar for i in outputs) - mgb.comp_graph_tools.set_priority_to_id(self._outspec) - self._compiled_func = graph.get_default_graph().compile(None, self._outspec) - - def trace(self, *args: Tensor, **kwargs): - """ - Trace wrapped callable with provided arguments. - """ - with self._prepare(args, kwargs, enable=True): - self._do_trace() - return self - - def __call__(self, *args: Tensor, **kwargs): - """ - Evaluate on provided arguments, using compiled trace - instead of the original callable if applicable. - - :return: ``None`` or :class:`~.Tensor` or tuple of :class:`~.Tensor`, depending on the - return value of wrapped callable. - """ - with self._prepare(args, kwargs, enable=self.enabled): - if not self.enabled: - self._run_wrapped() - elif self._status == self._FINISHED: - self._compiled_func() - else: - if self._status == self._UNSTARTED: - self._do_trace() - if self._symbolic: - self._compiled_func() - return self._outputs - - def dump( - self, - fpath, - *, - arg_names=None, - append=False, - optimize_for_inference=False, - output_names=None, - **kwargs - ): - """ - Serialize trace to file system. - - :param fpath: positional only argument. Path of output file. - :param arg_names: names of the input tensors in the traced function. - :param append: whether output is appended to ``fpath``. - :param optimize_for_inference: whether to enable optimize_for_inference - pass before dump. - :param output_names: names of the output tensors in the traced function, - will use the default name if does not specify. - - :param enable_io16xc32: whether to use float16 for I/O between oprs and use - float32 as internal computation precision. Note the output var would be - changed to float16. - :param enable_ioc16: whether to use float16 for both I/O and computation - precision. - - :param enable_hwcd4: whether to use NHWCD4 data layout. This is faster on some - OpenCL backend. - :param enable_nchw88: whether to use NCHW88 data layout. it currently - used in X86 AVX backend. - :param enable_nchw44: whether to use NCHW44 data layout. it currently - used in arm backend. - :param enable_nchw44_dot: whether to use NCHW44_dot data layout. it currently - used in armv8.2+dotprod backend. - :param enable_nchw4: whether to use NCHW4 data layout. it currently - used in nvidia backend(based on cudnn). - :param enable_nchw32: whether to use NCHW32 data layout. it currently - used in nvidia backend with tensorcore(based on cudnn). - :param enable_chwn4: whether to use CHWN4 data layout. it currently - used in nvidia backend with tensorcore. - - :param enable_fuse_conv_bias_nonlinearity: whether to fuse conv+bias+nonlinearty - into one opr. - :param enable_fuse_conv_bias_with_z: whether to fuse conv_bias with z - input for inference on nvidia backend(this optimization pass will - result in mismatch of the precision of output of training and - inference) - """ - if self._status != self._FINISHED: - raise ValueError("not traced") - assert isinstance(self._sym_outputs, (tuple, type(None))) - if not self._sym_outputs: - raise ValueError("not outputs") - if arg_names is None: - arg_names = ["arg_%d" % i for i in range(len(self._args))] - elif len(arg_names) != len(self._args): - raise ValueError( - "len(arg_names) should be {}, got {}".format( - len(self._args), len(arg_names) - ) - ) - if isinstance(output_names, str): - output_names = [output_names] - if output_names is None: - output_names = [var.name for var in self._sym_outputs] - elif len(output_names) != len(self._sym_outputs): - raise ValueError( - "len(output_names) should be {}, got {}".format( - len(self._sym_outputs), len(output_names) - ) - ) - - optimize_for_inference_args_map = { - "enable_io16xc32": "f16_io_f32_comp", - "enable_ioc16": "f16_io_comp", - "enable_hwcd4": "use_nhwcd4", - "enable_nchw4": "use_nchw4", - "enable_nchw88": "use_nchw88", - "enable_nchw32": "use_nchw32", - "enable_nchw44": "use_nchw44", - "enable_nchw44_dot": "use_nchw44_dot", - "enable_chwn4": "use_chwn4", - "enable_fuse_conv_bias_nonlinearity": "fuse_conv_bias_nonlinearity", - "enable_fuse_conv_bias_with_z": "fuse_conv_bias_with_z", - } - if optimize_for_inference: - optimize_for_inference_kwargs = {} - for k, v in optimize_for_inference_args_map.items(): - if kwargs.pop(k, False): - optimize_for_inference_kwargs[v] = True - else: - for k in optimize_for_inference_args_map: - if kwargs.get(k, False): - raise ValueError( - "cannot set %s when optimize_for_inference is not set" % k - ) - if kwargs: - raise ValueError("unknown options: %s" % list(kwargs)) - - cg = self._sym_outputs[0].owner_graph - replace = {} - for t, name in zip(self._args, arg_names): - # relies on symvar dedup - s = t.__mgb_symvar__(comp_graph=cg) - replace[s] = mgb.make_arg( - t.device, cg, dtype=t.dtype, shape=t.shape, name=name - ) - # Convert VolatileSharedDeviceTensor to SharedDeviceTensor, - # otherwise some optimizations would not work. The conversion is - # safe because there simply is no way (using builtin ops) to make - # a VolatileSharedDeviceTensor actually volatile. - for s in mgb.cgtools.get_dep_vars( - self._sym_outputs, "VolatileSharedDeviceTensor" - ): - if s in replace: - continue # is an input - replace[s] = mgb.SharedND._from_symvar(s).symvar( - cg, name=s.name, volatile=False - ) - sym_outputs = mgb.cgtools.replace_vars(self._sym_outputs, replace) - sym_outputs = list(sym_outputs) - if optimize_for_inference: - sym_outputs = mgb.optimize_for_inference( - sym_outputs, **optimize_for_inference_kwargs - ) - for var, name in zip(sym_outputs, output_names): - var.rename(name) - mgb.serialize_comp_graph_to_file(fpath, sym_outputs, append=append) - - def get_profile(self): - """ - Get profiling result for compiled trace. - - :return: a json compatible object. - """ - if not self._profiler: - raise RuntimeError("trace is not set with profiling=True") - return self._profiler.get() diff --git a/python_module/megengine/jit/sublinear_memory_config.py b/python_module/megengine/jit/sublinear_memory_config.py deleted file mode 100644 index fc3e46dd..00000000 --- a/python_module/megengine/jit/sublinear_memory_config.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -from ..core.device import get_device_count - - -class SublinearMemoryConfig: - r""" - Configuration for sublinear memory optimization. - - :param thresh_nr_try: number of samples both for searching in linear space - and around current thresh in sublinear memory optimization. Default: 10. - It can also be set through the environmental variable 'MGB_SUBLINEAR_MEMORY_THRESH_NR_TRY'. - :param genetic_nr_iter: number of iterations to find the best checkpoints in genetic algorithm. - Default: 0. - It can also be set through the environmental variable 'MGB_SUBLINEAR_MEMORY_GENETIC_NR_ITER'. - :param genetic_pool_size: number of samples for the crossover random selection - during genetic optimization. Default: 20. - It can also be set through the environmental variable 'MGB_SUBLINEAR_MEMORY_GENETIC_POOL_SIZE'. - :param lb_memory: memory lower bound of bottleneck size in MB for sublinear memory optimization. - It can be used to perform manual tradeoff between memory and speed. Default: 0. - It can also be set through the environmental variable 'MGB_SUBLINEAR_MEMORY_LOWER_BOUND_MB'. - :param num_worker: number of thread workers to search the optimum checkpoints - in sublinear memory optimization. Default: half of cpu number in the system. - Note: the value must be greater or equal to one. - It can also be set through the environmental variable 'MGB_SUBLINEAR_MEMORY_WORKERS'. - - Note that the environmental variable MGB_COMP_GRAPH_OPT must be set to 'enable_sublinear_memory_opt=1' - in order for the above environmental variable to be effective. - """ - - def __init__( - self, - thresh_nr_try: int = 10, - genetic_nr_iter: int = 0, - genetic_pool_size: int = 20, - lb_memory: int = 0, - num_worker: int = max(1, get_device_count("cpu") // 2), - ): - assert thresh_nr_try >= 0, "thresh_nr_try must be greater or equal to zero" - self.thresh_nr_try = thresh_nr_try - assert genetic_nr_iter >= 0, "genetic_nr_iter must be greater or equal to zero" - self.genetic_nr_iter = genetic_nr_iter - assert ( - genetic_pool_size >= 0 - ), "genetic_pool_size must be greater or equal to zero" - self.genetic_pool_size = genetic_pool_size - self.lb_memory = lb_memory - assert num_worker > 0, "num_worker must be greater or equal to one" - self.num_worker = num_worker diff --git a/python_module/megengine/logger.py b/python_module/megengine/logger.py deleted file mode 100644 index 5cca95bd..00000000 --- a/python_module/megengine/logger.py +++ /dev/null @@ -1,231 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import contextlib -import logging -import os -import sys - -_all_loggers = [] -_default_level_name = os.getenv("MEGENGINE_LOGGING_LEVEL", "INFO") -_default_level = logging.getLevelName(_default_level_name.upper()) - - -def set_log_file(fout, mode="a"): - r"""Sets log output file. - - :type fout: str or file-like - :param fout: file-like object that supports write and flush, or string for - the filename - :type mode: str - :param mode: specify the mode to open log file if *fout* is a string - """ - if isinstance(fout, str): - fout = open(fout, mode) - MegEngineLogFormatter.log_fout = fout - - -class MegEngineLogFormatter(logging.Formatter): - log_fout = None - date_full = "[%(asctime)s %(lineno)d@%(filename)s:%(name)s] " - date = "%(asctime)s " - msg = "%(message)s" - max_lines = 256 - - def _color_exc(self, msg): - r"""Sets the color of message as the execution type. - """ - return "\x1b[34m{}\x1b[0m".format(msg) - - def _color_dbg(self, msg): - r"""Sets the color of message as the debugging type. - """ - return "\x1b[36m{}\x1b[0m".format(msg) - - def _color_warn(self, msg): - r"""Sets the color of message as the warning type. - """ - return "\x1b[1;31m{}\x1b[0m".format(msg) - - def _color_err(self, msg): - r"""Sets the color of message as the error type. - """ - return "\x1b[1;4;31m{}\x1b[0m".format(msg) - - def _color_omitted(self, msg): - r"""Sets the color of message as the omitted type. - """ - return "\x1b[35m{}\x1b[0m".format(msg) - - def _color_normal(self, msg): - r"""Sets the color of message as the normal type. - """ - return msg - - def _color_date(self, msg): - r"""Sets the color of message the same as date. - """ - return "\x1b[32m{}\x1b[0m".format(msg) - - def format(self, record): - if record.levelno == logging.DEBUG: - mcl, mtxt = self._color_dbg, "DBG" - elif record.levelno == logging.WARNING: - mcl, mtxt = self._color_warn, "WRN" - elif record.levelno == logging.ERROR: - mcl, mtxt = self._color_err, "ERR" - else: - mcl, mtxt = self._color_normal, "" - - if mtxt: - mtxt += " " - - if self.log_fout: - self.__set_fmt(self.date_full + mtxt + self.msg) - formatted = super(MegEngineLogFormatter, self).format(record) - nr_line = formatted.count("\n") + 1 - if nr_line >= self.max_lines: - head, body = formatted.split("\n", 1) - formatted = "\n".join( - [ - head, - "BEGIN_LONG_LOG_{}_LINES{{".format(nr_line - 1), - body, - "}}END_LONG_LOG_{}_LINES".format(nr_line - 1), - ] - ) - self.log_fout.write(formatted) - self.log_fout.write("\n") - self.log_fout.flush() - - self.__set_fmt(self._color_date(self.date) + mcl(mtxt + self.msg)) - formatted = super(MegEngineLogFormatter, self).format(record) - - if record.exc_text or record.exc_info: - # handle exception format - b = formatted.find("Traceback ") - if b != -1: - s = formatted[b:] - s = self._color_exc(" " + s.replace("\n", "\n ")) - formatted = formatted[:b] + s - - nr_line = formatted.count("\n") + 1 - if nr_line >= self.max_lines: - lines = formatted.split("\n") - remain = self.max_lines // 2 - removed = len(lines) - remain * 2 - if removed > 0: - mid_msg = self._color_omitted( - "[{} log lines omitted (would be written to output file " - "if set_log_file() has been called;\n" - " the threshold can be set at " - "MegEngineLogFormatter.max_lines)]".format(removed) - ) - formatted = "\n".join(lines[:remain] + [mid_msg] + lines[-remain:]) - - return formatted - - if sys.version_info.major < 3: - - def __set_fmt(self, fmt): - self._fmt = fmt - - else: - - def __set_fmt(self, fmt): - self._style._fmt = fmt - - -def get_logger(name=None, formatter=MegEngineLogFormatter): - r"""Gets megengine logger with given name. - """ - - logger = logging.getLogger(name) - if getattr(logger, "_init_done__", None): - return logger - logger._init_done__ = True - logger.propagate = False - logger.setLevel(_default_level) - handler = logging.StreamHandler() - handler.setFormatter(formatter(datefmt="%d %H:%M:%S")) - handler.setLevel(0) - del logger.handlers[:] - logger.addHandler(handler) - _all_loggers.append(logger) - return logger - - -def set_log_level(level, update_existing=True): - """Sets default logging level. - - :type level: int e.g. logging.INFO - :param level: loggin level given by python :mod:`logging` module - :param update_existing: whether to update existing loggers - """ - global _default_level # pylint: disable=global-statement - _default_level = level - if update_existing: - for i in _all_loggers: - i.setLevel(level) - - -_logger = get_logger(__name__) - -try: - if sys.version_info.major < 3: - raise ImportError() - - from megengine._internal.logconf import set_logger as _set_mgb_logger - - class MegBrainLogFormatter(MegEngineLogFormatter): - date = "%(asctime)s[mgb] " - - def _color_date(self, msg): - return "\x1b[33m{}\x1b[0m".format(msg) - - _megbrain_logger = get_logger("megbrain", MegBrainLogFormatter) - _set_mgb_logger(_megbrain_logger) - - def set_mgb_log_level(level): - r"""Sets megbrain log level - - :type level: int e.g. logging.INFO - :param level: new log level - :return: original log level - """ - logger = _megbrain_logger - rst = logger.getEffectiveLevel() - logger.setLevel(level) - return rst - - -except ImportError as exc: - - def set_mgb_log_level(level): - raise NotImplementedError("megbrain has not been imported") - - -@contextlib.contextmanager -def replace_mgb_log_level(level): - r"""Replaces megbrain log level in a block and restore after exiting. - - :type level: int e.g. logging.INFO - :param level: new log level - """ - old = set_mgb_log_level(level) - try: - yield - finally: - set_mgb_log_level(old) - - -def enable_debug_log(): - r"""Sets logging level to debug for all components. - """ - set_log_level(logging.DEBUG) - set_mgb_log_level(logging.DEBUG) diff --git a/python_module/megengine/module/__init__.py b/python_module/megengine/module/__init__.py deleted file mode 100644 index c2b3db8a..00000000 --- a/python_module/megengine/module/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .activation import LeakyReLU, PReLU, ReLU, Sigmoid, Softmax -from .batchnorm import BatchNorm1d, BatchNorm2d, SyncBatchNorm -from .concat import Concat -from .conv import Conv2d, ConvRelu2d, ConvTranspose2d, LocalConv2d -from .conv_bn import ConvBn2d, ConvBnRelu2d -from .dropout import Dropout -from .elemwise import Elemwise -from .embedding import Embedding -from .identity import Identity -from .linear import Linear -from .module import Module -from .parampack import ParamPack -from .pooling import AvgPool2d, MaxPool2d -from .quant_dequant import DequantStub, QuantStub -from .sequential import Sequential diff --git a/python_module/megengine/module/activation.py b/python_module/megengine/module/activation.py deleted file mode 100644 index b80c10a7..00000000 --- a/python_module/megengine/module/activation.py +++ /dev/null @@ -1,231 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from ..core import Parameter -from ..functional import leaky_relu, prelu, relu, sigmoid, softmax -from .module import Module - - -class Softmax(Module): - r""" - Applies a softmax function. Softmax is defined as: - - .. math:: - \text{Softmax}(x_{i}) = \frac{exp(x_i)}{\sum_j exp(x_j)} - - It is applied to an n-dimensional input Tensor and rescaling them so that the elements of the - n-dimensional output Tensor lie in the range of `[0, 1]` and sum to 1. - - :param axis: An axis along which softmax will be applied. By default, - softmax will apply along the highest ranked axis. - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - - data = mge.tensor(np.array([-2,-1,0,1,2]).astype(np.float32)) - softmax = M.Softmax() - output = softmax(data) - with np.printoptions(precision=6): - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [0.011656 0.031685 0.086129 0.234122 0.636409] - - """ - - def __init__(self, axis=None): - super().__init__() - self.axis = axis - - def forward(self, inputs): - return softmax(inputs, self.axis) - - -class Sigmoid(Module): - r""" - Applies the element-wise function: - - .. math:: - \text{Sigmoid}(x) = \frac{1}{1 + \exp(-x)} - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - - data = mge.tensor(np.array([-2,-1,0,1,2,]).astype(np.float32)) - sigmoid = M.Sigmoid() - output = sigmoid(data) - with np.printoptions(precision=6): - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [0.119203 0.268941 0.5 0.731059 0.880797] - - """ - - def forward(self, inputs): - return sigmoid(inputs) - - -class ReLU(Module): - r""" - Applies the element-wise function: - - .. math:: - \text{ReLU}(x) = \max(x, 0) - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - data = mge.tensor(np.array([-2,-1,0,1,2,]).astype(np.float32)) - relu = M.ReLU() - output = relu(data) - with np.printoptions(precision=6): - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [0. 0. 0. 1. 2.] - - """ - - def forward(self, x): - return relu(x) - - -class PReLU(Module): - r""" - Applies the element-wise function: - - .. math:: - \text{PReLU}(x) = \max(0,x) + a * \min(0,x) - - or - - .. math:: - \text{PReLU}(x) = - \begin{cases} - x, & \text{ if } x \geq 0 \\ - ax, & \text{ otherwise } - \end{cases} - - Here :math:`a` is a learnable parameter. When called without arguments, `PReLU()` uses - a single paramter :math:`a` across all input channel. If called with `PReLU(num_of_channels)`, - a seperate :math:`a` is used for each input channle. - - :param num_parameters: number of :math:`a` to learn, there is only two - values are legitimate: 1, or the number of channels at input. Default: 1 - :param init: the initial value of :math:`a`. Default: 0.25 - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - data = mge.tensor(np.array([-1.2, -3.7, 2.7]).astype(np.float32)) - prelu = M.PReLU() - output = prelu(data) - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [-0.3 -0.925 2.7 ] - - """ - - def __init__(self, num_parameters: int = 1, init: float = 0.25): - super().__init__() - self.num_parameters = num_parameters - if num_parameters > 1: - # Assume format is NCHW - self.weight = Parameter( - value=np.full((1, num_parameters, 1, 1), init, dtype=np.float32) - ) - else: - self.weight = Parameter(value=[init]) - - def forward(self, inputs): - assert self.weight.shape == (1,) or self.weight.shape == ( - 1, - int(inputs.shape[1]), - 1, - 1, - ), "invalid weight's shape" - return prelu(inputs, self.weight) - - -class LeakyReLU(Module): - r""" - Applies the element-wise function: - - .. math:: - \text{LeakyReLU}(x) = \max(0,x) + negative\_slope \times \min(0,x) - - or - - .. math:: - \text{LeakyReLU}(x) = - \begin{cases} - x, & \text{ if } x \geq 0 \\ - negative\_slope \times x, & \text{ otherwise } - \end{cases} - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - data = mge.tensor(np.array([-8, -12, 6, 10]).astype(np.float32)) - - leakyrelu = M.LeakyReLU(0.01) - output = leakyrelu(data) - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [-0.08 -0.12 6. 10. ] - - """ - - def __init__(self, negative_slope: float = 0.01): - super().__init__() - self.negative_slope = negative_slope - - def forward(self, inputs): - return leaky_relu(inputs, self.negative_slope) diff --git a/python_module/megengine/module/batchnorm.py b/python_module/megengine/module/batchnorm.py deleted file mode 100644 index ba755616..00000000 --- a/python_module/megengine/module/batchnorm.py +++ /dev/null @@ -1,257 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from ..core import Buffer, Parameter -from ..core.device import get_default_device -from ..functional import batch_norm2d, sync_batch_norm -from . import init -from .module import Module - - -class _BatchNorm(Module): - def __init__( - self, - num_features, - eps=1e-5, - momentum=0.9, - affine=True, - track_running_stats=True, - ): - super(_BatchNorm, self).__init__() - self.num_features = num_features - self.eps = eps - self.momentum = momentum - self.affine = affine - self.track_running_stats = track_running_stats - if self.affine: - self.weight = Parameter(np.ones(num_features, dtype=np.float32)) - self.bias = Parameter(np.zeros(num_features, dtype=np.float32)) - else: - self.weight = None - self.bias = None - - tshape = (1, self.num_features, 1, 1) - - if self.track_running_stats: - self.running_mean = Buffer(np.zeros(tshape, dtype=np.float32)) - self.running_var = Buffer(np.ones(tshape, dtype=np.float32)) - else: - self.running_mean = None - self.running_var = None - - def reset_running_stats(self) -> None: - if self.track_running_stats: - init.zeros_(self.running_mean) - init.ones_(self.running_var) - - def reset_parameters(self) -> None: - self.reset_running_stats() - if self.affine: - init.ones_(self.weight) - init.zeros_(self.bias) - - def _check_input_ndim(self, inp): - raise NotImplementedError - - def forward(self, inp): - self._check_input_ndim(inp) - - _ndims = len(inp.shape) - if _ndims != 4: - origin_shape = inp.shapeof() - if _ndims == 2: - n, c = inp.shapeof(0), inp.shapeof(1) - new_shape = (n, c, 1, 1) - elif _ndims == 3: - n, c, h = inp.shapeof(0), inp.shapeof(1), inp.shapeof(2) - new_shape = (n, c, h, 1) - - inp = inp.reshape(new_shape) - - if self.training and self.track_running_stats: - exponential_average_factor = self.momentum - else: - exponential_average_factor = 0.0 # useless - - # FIXME currently rocm does not support real bn opr so we just use - # sync_batch_norm(as implemented by elemwise) here, - # we will fix it in the next version - if get_default_device() == "rocmx": - output = sync_batch_norm( - inp, - self.running_mean, - self.running_var, - self.weight, - self.bias, - self.training or not self.track_running_stats, - exponential_average_factor, - self.eps, - ) - else: - output = batch_norm2d( - inp, - self.running_mean, - self.running_var, - self.weight, - self.bias, - self.training or not self.track_running_stats, - exponential_average_factor, - self.eps, - ) - - if _ndims != 4: - output = output.reshape(origin_shape) - - return output - - -class SyncBatchNorm(_BatchNorm): - r""" - Applies Synchronization Batch Normalization. - """ - - def _check_input_ndim(self, inp): - if len(inp.shape) not in {2, 3, 4}: - raise ValueError( - "expected 2D, 3D or 4D input (got {}D input)".format(len(inp.shape)) - ) - - def forward(self, inp): - self._check_input_ndim(inp) - - _ndims = len(inp.shape) - if _ndims != 4: - origin_shape = inp.shapeof() - if _ndims == 2: - n, c = inp.shapeof(0), inp.shapeof(1) - new_shape = (n, c, 1, 1) - elif _ndims == 3: - n, c, h = inp.shapeof(0), inp.shapeof(1), inp.shapeof(2) - new_shape = (n, c, h, 1) - - inp = inp.reshape(new_shape) - - if self.training and self.track_running_stats: - exponential_average_factor = self.momentum - else: - exponential_average_factor = 0.0 # useless - - output = sync_batch_norm( - inp, - self.running_mean, - self.running_var, - self.weight, - self.bias, - self.training or not self.track_running_stats, - exponential_average_factor, - self.eps, - ) - - if _ndims != 4: - output = output.reshape(origin_shape) - - return output - - -class BatchNorm1d(_BatchNorm): - r""" - Applies Batch Normalization over a 2D/3D tensor. - - Refer to :class:`~.BatchNorm2d` for more information. - """ - - def _check_input_ndim(self, inp): - if len(inp.shape) not in {2, 3}: - raise ValueError( - "expected 2D or 3D input (got {}D input)".format(len(inp.shape)) - ) - - -class BatchNorm2d(_BatchNorm): - r""" - Applies Batch Normalization over a 4D tensor. - - .. math:: - - y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta - - The mean and standard-deviation are calculated per-dimension over - the mini-batches and :math:`\gamma` and :math:`\beta` are learnable - parameter vectors. - - By default, during training this layer keeps running estimates of its - computed mean and variance, which are then used for normalization during - evaluation. The running estimates are kept with a default :attr:`momentum` - of 0.9. - - If :attr:`track_running_stats` is set to ``False``, this layer will not - keep running estimates, and batch statistics are instead used during - evaluation time. - - .. note:: - This :attr:`momentum` argument is different from one used in optimizer - classes and the conventional notion of momentum. Mathematically, the - update rule for running statistics here is - :math:`\hat{x}_\text{new} = \text{momentum} \times \hat{x} + (1 - \text{momentum}) \times x_t`, - where :math:`\hat{x}` is the estimated statistic and :math:`x_t` is the - new observed value. - - Because the Batch Normalization is done over the `C` dimension, computing - statistics on `(N, H, W)` slices, it's common terminology to call this - Spatial Batch Normalization. - - :type num_features: int - :param num_features: usually the :math:`C` from an input of size - :math:`(N, C, H, W)` or the highest ranked dimension of an input with - less than 4D. - :type eps: float - :param eps: a value added to the denominator for numerical stability. - Default: 1e-5. - :type momentum: float - :param momentum: the value used for the `running_mean` and `running_var` - computation. - Default: 0.9 - :type affine: bool - :param affine: a boolean value that when set to ``True``, this module has - learnable affine parameters. Default: ``True`` - :type track_running_stats: bool - :param track_running_stats: when set to ``True``, this module tracks the - running mean and variance. When set to ``False``, this module does not - track such statistics and always uses batch statistics in both training - and eval modes. Default: ``True``. - - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - - # With Learnable Parameters - m = M.BatchNorm2d(4) - inp = mge.tensor(np.random.rand(1, 4, 3, 3).astype("float32")) - oup = m(inp) - print(m.weight, m.bias) - # Without Learnable Parameters - m = M.BatchNorm2d(4, affine=False) - oup = m(inp) - print(m.weight, m.bias) - - .. testoutput:: - - Tensor([1. 1. 1. 1.]) Tensor([0. 0. 0. 0.]) - None None - """ - - def _check_input_ndim(self, inp): - if len(inp.shape) != 4: - raise ValueError("expected 4D input (got {}D input)".format(len(inp.shape))) diff --git a/python_module/megengine/module/concat.py b/python_module/megengine/module/concat.py deleted file mode 100644 index 453f951b..00000000 --- a/python_module/megengine/module/concat.py +++ /dev/null @@ -1,22 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable - -from .. import functional as F -from ..core.tensor import Tensor -from .module import Module - - -class Concat(Module): - r""" - A :class:`~.Module` to do functional concat. Could be replaced with :class:`~.QATModule` - version :class:`~.qat.concat.Concat` using :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inps: Iterable[Tensor], axis: int = 0): - return F.concat(inps, axis) diff --git a/python_module/megengine/module/conv.py b/python_module/megengine/module/conv.py deleted file mode 100644 index 02165b89..00000000 --- a/python_module/megengine/module/conv.py +++ /dev/null @@ -1,392 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import abstractmethod -from typing import Tuple, Union - -import numpy as np - -import megengine._internal as mgb - -from .. import functional as F -from ..core import Parameter -from ..utils.types import _pair, _pair_nonzero -from . import init -from .module import Module - - -class _ConvNd(Module): - """base class for convolution modules, including transposed conv""" - - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]], - padding: Union[int, Tuple[int, int]], - dilation: Union[int, Tuple[int, int]], - groups: int, - bias: bool = True, - ): - super().__init__() - if in_channels % groups != 0: - raise ValueError("in_channels must be divisible by groups") - if out_channels % groups != 0: - raise ValueError("out_channels must be divisible by groups") - self.in_channels = in_channels - self.out_channels = out_channels - self.kernel_size = kernel_size - self.stride = stride - self.padding = padding - self.dilation = dilation - self.groups = groups - - self.weight = Parameter(np.zeros(self._infer_weight_shape(), dtype=np.float32)) - self.bias = None - if bias: - self.bias = Parameter(np.zeros(self._infer_bias_shape(), dtype=np.float32)) - self.reset_parameters() - - @abstractmethod - def _get_fanin(self): - pass - - def reset_parameters(self) -> None: - fanin = self._get_fanin() - std = np.sqrt(1 / fanin) - init.normal_(self.weight, 0.0, std) - if self.bias is not None: - init.zeros_(self.bias) - - @abstractmethod - def _infer_weight_shape(self): - pass - - @abstractmethod - def _infer_bias_shape(self): - pass - - -class Conv2d(_ConvNd): - r"""Applies a 2D convolution over an input tensor. - - For instance, given an input of the size :math:`(N, C_{\text{in}}, H, W)`, - this layer generates an output of the size - :math:`(N, C_{\text{out}}, H_{\text{out}}, W_{\text{out}})` through the - process described as below: - - .. math:: - \text{out}(N_i, C_{\text{out}_j}) = \text{bias}(C_{\text{out}_j}) + - \sum_{k = 0}^{C_{\text{in}} - 1} \text{weight}(C_{\text{out}_j}, k) \star \text{input}(N_i, k) - - where :math:`\star` is the valid 2D cross-correlation operator, - :math:`N` is a batch size, :math:`C` denotes a number of channels, - :math:`H` is a height of input planes in pixels, and :math:`W` is - width in pixels. - - When ``groups == in_channels`` and ``out_channels == K * in_channels``, - where `K` is a positive integer, this operation is also known as depthwise - convolution. - - In other words, for an input of size :math:`(N, C_{in}, H_{in}, W_{in})`, - a depthwise convolution with a depthwise multiplier `K`, can be constructed - by arguments :math:`(in\_channels=C_{in}, out\_channels=C_{in} \times K, ..., groups=C_{in})`. - - :param in_channels: number of input channels. - :param out_channels: number of output channels. - :param kernel_size: size of weight on spatial dimensions. If ``kernel_size`` is - an :class:`int`, the actual kernel size would be - ``(kernel_size, kernel_size)``. Default: 1 - :param stride: stride of the 2D convolution operation. Default: 1 - :param padding: size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param dilation: dilation of the 2D convolution operation. Default: 1 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``, - and there would be an extra dimension at the beginning of the weight's - shape. Specifically, the shape of weight would be ``(groups, - out_channel // groups, in_channels // groups, *kernel_size)``. - :param bias: whether to add a bias onto the result of convolution. Default: - True - :param conv_mode: Supports `CROSS_CORRELATION` or `CONVOLUTION`. Default: - `CROSS_CORRELATION`. - :param compute_mode: When set to `DEFAULT`, no special requirements will be - placed on the precision of intermediate results. When set to `FLOAT32`, - float32 would be used for accumulator and intermediate result, but only - effective when input and output are of float16 dtype. - """ - - _conv_mode_type = mgb.opr_param_defs.Convolution.Mode - _compute_mode_type = mgb.opr_param_defs.Convolution.ComputeMode - - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - bias: bool = True, - conv_mode: str = "CROSS_CORRELATION", - compute_mode: str = "DEFAULT", - ): - kernel_size = _pair_nonzero(kernel_size) - stride = _pair_nonzero(stride) - padding = _pair(padding) - dilation = _pair_nonzero(dilation) - self.conv_mode = self._conv_mode_type.convert(conv_mode) - self.compute_mode = self._compute_mode_type.convert(compute_mode) - super().__init__( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - groups, - bias, - ) - - def _get_fanin(self): - kh, kw = self.kernel_size - ic = self.in_channels - return kh * kw * ic - - def _infer_weight_shape(self): - group = self.groups - ichl = self.in_channels - ochl = self.out_channels - kh, kw = self.kernel_size - if group == 1: - # Assume format is NCHW - return (ochl, ichl, kh, kw) - - assert ( - ichl % group == 0 and ochl % group == 0 - ), "invalid config: input_channels={} output_channels={} group={}".format( - ichl, ochl, group - ) - # Assume format is NCHW - return (group, ochl // group, ichl // group, kh, kw) - - def _infer_bias_shape(self): - # Assume format is NCHW - return (1, self.out_channels, 1, 1) - - def calc_conv(self, inp, weight, bias): - return F.conv2d( - inp, - weight, - bias, - self.stride, - self.padding, - self.dilation, - self.groups, - self.conv_mode, - self.compute_mode, - ) - - def forward(self, inp): - return self.calc_conv(inp, self.weight, self.bias) - - -class ConvTranspose2d(_ConvNd): - r"""Applies a 2D transposed convolution over an input tensor. - - This module is also known as a deconvolution or a fractionally-strided convolution. - :class:`ConvTranspose2d` can ben seen as the gradient of :class:`Conv2d` operation - with respect to its input. - - Convolution usually reduces the size of input, while transposed convolution works - the opposite way, transforming a smaller input to a larger output while preserving the - connectivity pattern. - - :param in_channels: number of input channels. - :param out_channels: number of output channels. - :param kernel_size: size of weight on spatial dimensions. If ``kernel_size`` is - an :class:`int`, the actual kernel size would be - ``(kernel_size, kernel_size)``. Default: 1 - :param stride: stride of the 2D convolution operation. Default: 1 - :param padding: size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param dilation: dilation of the 2D convolution operation. Default: 1 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``, - and there would be an extra dimension at the beginning of the weight's - shape. Specifically, the shape of weight would be ``(groups, - out_channels // groups, in_channels // groups, *kernel_size)``. Default: 1 - :param bias: wether to add a bias onto the result of convolution. Default: - True - :param conv_mode: Supports `CROSS_CORRELATION` or `CONVOLUTION`. Default: - `CROSS_CORRELATION`. - :param compute_mode: When set to `DEFAULT`, no special requirements will be - placed on the precision of intermediate results. When set to `FLOAT32`, - float32 would be used for accumulator and intermediate result, but only - effective when input and output are of float16 dtype. - """ - - _conv_mode_type = mgb.opr_param_defs.Convolution.Mode - _compute_mode_type = mgb.opr_param_defs.Convolution.ComputeMode - - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - bias: bool = True, - conv_mode: str = "CROSS_CORRELATION", - compute_mode: str = "DEFAULT", - ): - kernel_size = _pair_nonzero(kernel_size) - stride = _pair_nonzero(stride) - padding = _pair(padding) - dilation = _pair_nonzero(dilation) - self.conv_mode = self._conv_mode_type.convert(conv_mode) - self.compute_mode = self._compute_mode_type.convert(compute_mode) - super().__init__( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - groups, - bias, - ) - - def _get_fanin(self): - kh, kw = self.kernel_size - oc = self.out_channels - return kh * kw * oc - - def _infer_weight_shape(self): - group = self.groups - ichl = self.in_channels - ochl = self.out_channels - kh, kw = self.kernel_size - if group == 1: - # Assume format is NCHW - return (ichl, ochl, kh, kw) - - assert ( - ichl % group == 0 and ochl % group == 0 - ), "invalid config: input_channels={} output_channels={} group={}".format( - ichl, ochl, group - ) - # Assume format is NCHW - return (group, ichl // group, ochl // group, kh, kw) - - def _infer_bias_shape(self): - # Assume format is NCHW - return (1, self.out_channels, 1, 1) - - def forward(self, inp): - return F.conv_transpose2d( - inp, - self.weight, - self.bias, - self.stride, - self.padding, - self.dilation, - self.groups, - self.conv_mode, - self.compute_mode, - ) - - -class LocalConv2d(Conv2d): - r"""Applies a spatial convolution with untied kernels over an input 4D tensor. - It is also known as the locally connected layer. - - :param in_channels: number of input channels. - :param out_channels: number of output channels. - :param input_height: the height of the input images. - :param input_width: the width of the input images. - :param kernel_size: size of weight on spatial dimensions. If ``kernel_size`` is - an :class:`int`, the actual kernel size would be - ``(kernel_size, kernel_size)``. Default: 1 - :param stride: stride of the 2D convolution operation. Default: 1 - :param padding: size of the paddings added to the input on both sides of its - spatial dimensions. Only zero-padding is supported. Default: 0 - :param groups: number of groups to divide input and output channels into, - so as to perform a "grouped convolution". When ``groups`` is not 1, - ``in_channels`` and ``out_channels`` must be divisible by ``groups``. - The shape of weight is ``(groups, output_height, output_width, - in_channels // groups, *kernel_size, out_channels // groups)``. - """ - - _conv_mode_type = mgb.opr_param_defs.Convolution.Mode - - def __init__( - self, - in_channels: int, - out_channels: int, - input_height: int, - input_width: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - conv_mode: str = "CROSS_CORRELATION", - ): - self.input_height = input_height - self.input_width = input_width - super().__init__( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - groups, - bias=False, - ) - - def _infer_weight_shape(self): - group = self.groups - output_height = ( - self.input_height + self.padding[0] * 2 - self.kernel_size[0] - ) // self.stride[0] + 1 - output_width = ( - self.input_width + self.padding[1] * 2 - self.kernel_size[1] - ) // self.stride[1] + 1 - # Assume format is NCHW - return ( - group, - output_height, - output_width, - self.in_channels // group, - self.kernel_size[0], - self.kernel_size[1], - self.out_channels // group, - ) - - def forward(self, inp): - return F.local_conv2d( - inp, self.weight, self.stride, self.padding, self.dilation, self.conv_mode - ) - - -class ConvRelu2d(Conv2d): - r""" - A fused :class:`~.Module` including Conv2d and relu. Could be replaced - with :class:`~.QATModule` version :class:`~.qat.conv.ConvRelu2d` using - :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inp): - return F.relu(self.calc_conv(inp, self.weight, self.bias)) diff --git a/python_module/megengine/module/conv_bn.py b/python_module/megengine/module/conv_bn.py deleted file mode 100644 index 76713b0f..00000000 --- a/python_module/megengine/module/conv_bn.py +++ /dev/null @@ -1,69 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Tuple, Union - -from ..functional import relu -from .batchnorm import BatchNorm2d -from .conv import Conv2d -from .module import Module - - -class _ConvBnActivation2d(Module): - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - bias: bool = True, - conv_mode: str = "CROSS_CORRELATION", - compute_mode: str = "DEFAULT", - eps=1e-5, - momentum=0.9, - affine=True, - track_running_stats=True, - ): - super().__init__() - self.conv = Conv2d( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - groups, - bias, - conv_mode, - compute_mode, - ) - self.bn = BatchNorm2d(out_channels, eps, momentum, affine, track_running_stats) - - -class ConvBn2d(_ConvBnActivation2d): - r""" - A fused :class:`~.Module` including Conv2d, BatchNorm2d. Could be replaced - with :class:`~.QATModule` version :class:`~.qat.conv_bn.ConvBn2d` using - :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inp): - return self.bn(self.conv(inp)) - - -class ConvBnRelu2d(_ConvBnActivation2d): - r""" - A fused :class:`~.Module` including Conv2d, BatchNorm2d and relu. Could be replaced - with :class:`~.QATModule` version :class:`~.qat.conv_bn.ConvBnRelu2d` using - :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inp): - return relu(self.bn(self.conv(inp))) diff --git a/python_module/megengine/module/dropout.py b/python_module/megengine/module/dropout.py deleted file mode 100644 index 146eba24..00000000 --- a/python_module/megengine/module/dropout.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ..functional import dropout -from .module import Module - - -class Dropout(Module): - r"""Randomly set input elements to zeros with the probability :math:`drop\_prob` during training. Commonly used in large networks to prevent overfitting. - Note that we perform dropout only during training, we also rescale(multiply) the output tensor - by :math:`\frac{1}{1 - drop\_prob}`. During inference :class:`~.Dropout` is equal to :class:`~.Identity`. - - :param drop_prob: The probability to drop (set to zero) each single element - """ - - def __init__(self, drop_prob=0.0): - super().__init__() - self.drop_prob = drop_prob - - def forward(self, inputs): - if self.training: - return dropout(inputs, self.drop_prob, rescale=True) - else: - return inputs diff --git a/python_module/megengine/module/elemwise.py b/python_module/megengine/module/elemwise.py deleted file mode 100644 index d1947b5e..00000000 --- a/python_module/megengine/module/elemwise.py +++ /dev/null @@ -1,90 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .. import _internal as mgb -from ..core import Tensor, wrap_io_tensor -from ..core.graph import _use_default_if_none -from .module import Module - - -@wrap_io_tensor -def _elemwise_func(mode, *inputs, **kwargs) -> Tensor: - if all(isinstance(i, (int, float)) for i in inputs): - device, comp_graph = _use_default_if_none(None, None) - ret = mgb.opr.elemwise( - *inputs, mode=mode, comp_node=device, comp_graph=comp_graph, **kwargs - ) - return ret.inferred_value[0] - return mgb.opr.elemwise(*inputs, mode=mode, **kwargs) - - -class Elemwise(Module): - r""" - A :class:`~.Module` to do elemwise operator. Could be replaced with :class:`~.QATModule` - version :class:`~.qat.elemwise.Elemwise` using :func:`~.quantize.quantize_qat`. - - :param method: the elemwise method, support the following string. - It will do the normal elemwise operator for float. - - * "ADD": a + b - * "FUSE_ADD_RELU": max(x+y, 0) - * "MUL": x * y - * "MIN": min(x, y) - * "MAX": max(x, y) - * "SUB": x - y - * "TRUE_DIV": x / y - * "FUSE_ADD_SIGMOID": sigmoid(x + y) - * "FUSE_ADD_TANH": tanh(x + y) - * "RELU": x > 0 ? x : 0 - * "ABS": x > 0 ? x : -x - * "SIGMOID": sigmoid(x) - * "EXP": exp(x) - * "TANH": tanh(x) - * "FUSE_MUL_ADD3": x * y + z - * "FAST_TANH": fast_tanh(x) - * "NEGATE": -x - * "ACOS": acos(x) - * "ASIN": asin(x) - * "CEIL": ceil(x) - * "COS": cos(x) - * "EXPM1": expm1(x) - * "FLOOR": floor(x) - * "LOG": log(x) - * "LOG1P": log1p(x) - * "SIN": sin(x) - * "ROUND": round(x) - * "ERF": erf(x) - * "ERFINV": erfinv(x) - * "ERFC": erfc(x) - * "ERFCINV": erfcinv(x) - * "ABS_GRAD": abs_grad - * "FLOOR_DIV": floor_div - * "MOD": mod - * "SIGMOID_GRAD": sigmoid_grad - * "SWITCH_GT0": switch_gt0 - * "TANH_GRAD": tanh_grad - * "LT": lt - * "LEQ": leq - * "EQ": eq - * "POW": pow - * "LOG_SUM_EXP": log_sum_exp - * "FAST_TANH_GRAD": fast_tanh_grad - * "ATAN2": atan2 - * "COND_LEQ_MOV": cond_leq_mov - * "H_SWISH": h_swish - * "FUSE_ADD_H_SWISH": h_swish(x+y) - * "H_SWISH_GRAD": h_swish_grad - """ - - _elemwise_mode_type = mgb.opr_param_defs.Elemwise.Mode - - def __init__(self, method): - super().__init__() - self.method = self._elemwise_mode_type.convert(method) - - def forward(self, *inps): - return _elemwise_func(self.method, *inps) diff --git a/python_module/megengine/module/embedding.py b/python_module/megengine/module/embedding.py deleted file mode 100644 index 976ac125..00000000 --- a/python_module/megengine/module/embedding.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Optional - -import numpy as np - -from ..core import Parameter -from ..functional import embedding as embedding_func -from . import init -from .module import Module - - -class Embedding(Module): - r""" - A simple lookup table that stores embeddings of a fixed dictionary and size. - - This module is often used to store word embeddings and retrieve them using indices. - The input to the module is a list of indices, and the output is the corresponding word embeddings. - The indices should less than num_embeddings. - - :param num_embeddings: size of embedding dictionary. - :param embedding_dim: size of each embedding vector. - :param padding_idx: should be set to None, not support now. - :param max_norm: should be set to None, not support now. - :param norm_type: should be set to None, not support now. - :param initial_weight: the learnable weights of the module of shape (num_embeddings, embedding_dim). - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - weight = mge.tensor(np.array([(1.2,2.3,3.4,4.5,5.6),(0.1,1.1,2.1,3.1,4.1)], dtype=np.float32)) - data = mge.tensor(np.array([(0,1,1),(1,0,1),(0,0,1)], dtype=np.int32)) - - embedding = M.Embedding(2, 5, initial_weight=weight) - output = embedding(data) - with np.printoptions(precision=6): - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [[[1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1] - [0.1 1.1 2.1 3.1 4.1]] - - [[0.1 1.1 2.1 3.1 4.1] - [1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1]] - - [[1.2 2.3 3.4 4.5 5.6] - [1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1]]] - - """ - - def __init__( - self, - num_embeddings: int, - embedding_dim: int, - padding_idx: Optional[int] = None, - max_norm: Optional[float] = None, - norm_type: Optional[float] = None, - initial_weight: Parameter = None, - ): - super().__init__() - if padding_idx is not None: - raise ValueError("Not support padding index now.") - if max_norm is not None or norm_type is not None: - raise ValueError("Not support weight normalize now.") - self.padding_idx = padding_idx - self.max_norm = max_norm - self.norm_type = norm_type - self.num_embeddings = num_embeddings - self.embedding_dim = embedding_dim - if initial_weight is None: - self.weight = Parameter( - np.random.uniform( - size=(self.num_embeddings, self.embedding_dim) - ).astype(np.float32) - ) - self.reset_parameters() - else: - if initial_weight.shape != (num_embeddings, embedding_dim): - raise ValueError( - "The weight shape should match num_embeddings and embedding_dim" - ) - self.weight = Parameter(initial_weight.numpy()) - - def reset_parameters(self) -> None: - init.normal_(self.weight) - - def forward(self, inputs): - return embedding_func(inputs, self.weight) - - @classmethod - def from_pretrained( - cls, - embeddings: Parameter, - freeze: Optional[bool] = True, - padding_idx: Optional[int] = None, - max_norm: Optional[float] = None, - norm_type: Optional[float] = None, - ): - r""" - Creates Embedding instance from given 2-dimensional FloatTensor. - - :param embeddings: Tensor contained weight for the embedding. - :param freeze: If ``True``, the weight does not get updated during the learning process. Default: ``True``. - :param padding_idx: should be set to None, not support Now. - :param max_norm: should be set to None, not support Now. - :param norm_type: should be set to None, not support Now. - - Examples: - - .. testcode:: - - import numpy as np - import megengine as mge - import megengine.module as M - weight = mge.tensor(np.array([(1.2,2.3,3.4,4.5,5.6),(0.1,1.1,2.1,3.1,4.1)], dtype=np.float32)) - data = mge.tensor(np.array([(0,1,1),(1,0,1),(0,0,1)], dtype=np.int32)) - - embedding = M.Embedding.from_pretrained(weight, freeze=False) - output = embedding(data) - print(output.numpy()) - - Outputs: - - .. testoutput:: - - [[[1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1] - [0.1 1.1 2.1 3.1 4.1]] - - [[0.1 1.1 2.1 3.1 4.1] - [1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1]] - - [[1.2 2.3 3.4 4.5 5.6] - [1.2 2.3 3.4 4.5 5.6] - [0.1 1.1 2.1 3.1 4.1]]] - - - """ - embeddings_shape = embeddings.shape - embeddings_dim = len(embeddings_shape) - if embeddings_dim != 2: - raise ValueError("Embeddings parameter is expected to be 2-dimensional") - rows = embeddings_shape[0] - cols = embeddings_shape[1] - embedding = cls( - num_embeddings=rows, - embedding_dim=cols, - initial_weight=embeddings, - padding_idx=padding_idx, - max_norm=max_norm, - norm_type=norm_type, - ) - embedding.weight.requires_grad = not freeze - return embedding diff --git a/python_module/megengine/module/external.py b/python_module/megengine/module/external.py deleted file mode 100644 index 962754e8..00000000 --- a/python_module/megengine/module/external.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from ..functional.external import ( - atlas_subgraph, - cambricon_subgraph, - extern_opr_subgraph, -) -from .module import Module - - -class CambriconSubgraph(Module): - r"""Load a serialized Cambricon subgraph. - - See :func:`~.cambricon_subgraph` for more details. - """ - - def __init__( - self, data, symbol, tensor_dim_mutable, - ): - super(CambriconSubgraph, self).__init__() - self._data = data - self.symbol = symbol - self.tensor_dim_mutable = tensor_dim_mutable - - @property - def data(self): - return self._data.tobytes() - - @data.setter - def data(self, val): - self._data = np.frombuffer(val, dtype=np.uint8) - - def forward(self, inputs): - outputs = cambricon_subgraph( - inputs, self._data, self.symbol, self.tensor_dim_mutable, - ) - return outputs - - -class AtlasSubgraph(Module): - r"""Load a serialized Atlas subgraph. - - See :func:`~.atlas_subgraph` for more details. - """ - - def __init__(self, data): - super(AtlasSubgraph, self).__init__() - self._data = data - - @property - def data(self): - return self._data.tobytes() - - @data.setter - def data(self, val): - self._data = np.frombuffer(val, dtype=np.uint8) - - def forward(self, inputs): - outputs = atlas_subgraph(inputs, self._data) - return outputs - - -class ExternOprSubgraph(Module): - r"""Load a serialized extern opr subgraph. - """ - - def __init__(self, data, name, output_shapes): - super(ExternOprSubgraph, self).__init__() - self.data = data - self.name = name - self.output_shapes = output_shapes - - def forward(self, inputs): - outputs = extern_opr_subgraph(inputs, self.output_shapes, self.name, self.data,) - return outputs diff --git a/python_module/megengine/module/identity.py b/python_module/megengine/module/identity.py deleted file mode 100644 index 51b31e50..00000000 --- a/python_module/megengine/module/identity.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ..functional import identity -from .module import Module - - -class Identity(Module): - r"""A placeholder identity operator that will ignore any argument.""" - - def forward(self, x): - return identity(x) diff --git a/python_module/megengine/module/init.py b/python_module/megengine/module/init.py deleted file mode 100644 index 8c39443e..00000000 --- a/python_module/megengine/module/init.py +++ /dev/null @@ -1,264 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import math -from functools import reduce -from typing import Optional, Tuple, Union - -import numpy as np - -from ..core import Graph, Tensor -from ..random import gaussian, uniform - - -def fill_(tensor: Tensor, val: Union[float, int]) -> None: - """Fill the given ``tensor`` with value ``val``. - - :param tensor: An n-dimentional tensor to be initialized - :param val: The value to be filled throughout the tensor - """ - tensor.set_value(np.full(tensor.shape, val, tensor.dtype)) - - -def zeros_(tensor: Tensor) -> None: - """Fill the given ``tensor`` with scalar value `0`. - - :param tensor: An n-dimentional tensor to be initialized - """ - fill_(tensor, 0) - - -def ones_(tensor: Tensor) -> None: - """Fill the given ``tensor`` with the scalar value `1`. - - :param tensor: An n-dimentional tensor to be initialized - """ - fill_(tensor, 1) - - -def uniform_(tensor: Tensor, a: float = 0.0, b: float = 1.0) -> None: - r"""Fill the given ``tensor`` with random value sampled from uniform distribution - :math:`\mathcal{U}(\text{a}, \text{b})`. - - :param tensor: An n-dimentional tensor to be initialized - :param a: Lower bound of the sampling interval - :param b: Upper bound of the sampling interval - """ - with Graph(eager_evaluation=True): - tensor.set_value((b - a) * uniform(tensor.shape) + a) - - -def normal_(tensor: Tensor, mean: float = 0.0, std: float = 1.0) -> None: - r"""Fill the given ``tensor`` with random value sampled from normal distribution - :math:`\mathcal{N}(\text{mean}, \text{std}^2)`. - - :param tensor: An n-dimentional tensor to be initialized - :param mean: The mean of the normal distribution - :param std: The standard deviation of the normal distribution - """ - with Graph(eager_evaluation=True): - tensor.set_value(gaussian(tensor.shape, mean=mean, std=std)) - - -def calculate_gain( - nonlinearity: str, param: Optional[Union[int, float]] = None -) -> float: - r"""Return a recommended gain value (see the table below) for the given nonlinearity - function. - - ================= ==================================================== - nonlinearity gain - ================= ==================================================== - Linear / Identity :math:`1` - Conv{1,2,3}D :math:`1` - Sigmoid :math:`1` - Tanh :math:`\frac{5}{3}` - ReLU :math:`\sqrt{2}` - Leaky Relu :math:`\sqrt{\frac{2}{1 + \text{negative_{slope}}^2}}` - ================= ==================================================== - - :param nonlinearity: Name of the non-linear function - :param param: Optional parameter for leaky_relu. Only effective when - ``nonlinearity`` is "leaky_relu". - - """ - linear_fns = [ - "linear", - "conv1d", - "conv2d", - "conv3d", - "conv_transpose1d", - "conv_transpose2d", - "conv_transpose3d", - ] - if nonlinearity in linear_fns or nonlinearity == "sigmoid": - return 1 - if nonlinearity == "tanh": - return 5.0 / 3 - if nonlinearity == "relu": - return math.sqrt(2.0) - if nonlinearity == "leaky_relu": - if param is None: - negative_slope = 0.01 - elif ( - not isinstance(param, bool) - and isinstance(param, int) - or isinstance(param, float) - ): - # True/False are instances of int, hence check above - negative_slope = param - else: - raise ValueError("negative_slope {} not a valid number".format(param)) - return math.sqrt(2.0 / (1 + negative_slope ** 2)) - raise ValueError("Unsupported nonlinearity {}".format(nonlinearity)) - - -def calculate_fan_in_and_fan_out(tensor: Tensor) -> Tuple[float, float]: - """ - Calculate fan_in / fan_out value for given weight tensor. This function assumes - input tensor is stored in NCHW format. - - :param tensor: Weight tensor in NCHW format - """ - shape = tensor.shape - ndim = len(shape) - if ndim < 2: - raise ValueError( - "fan_in and fan_out can not be computed for tensor with fewer than 2 " - "dimensions" - ) - - if ndim == 2: # Linear - fan_in = shape[1] - fan_out = shape[0] - else: - num_input_fmaps = shape[1] - num_output_fmaps = shape[0] - receptive_field_size = 1 - if ndim > 2: - receptive_field_size = reduce(lambda x, y: x * y, shape[2:], 1) - fan_in = num_input_fmaps * receptive_field_size - fan_out = num_output_fmaps * receptive_field_size - return fan_in, fan_out - - -def calculate_correct_fan(tensor: Tensor, mode: str) -> float: - """ - Calculate fan_in or fan_out value for given weight tensor, depending on given - ``mode``. - - See :func:`calculate_fan_in_and_fan_out` for details. - - :param tensor: Weight tensor in NCHW format - :param mode: ``'fan_in'`` or ``'fan_out'`` - """ - mode = mode.lower() - valid_modes = ["fan_in", "fan_out"] - if mode not in valid_modes: - raise ValueError( - "Mode {} not supported, please use one of {}".format(mode, valid_modes) - ) - - fan_in, fan_out = calculate_fan_in_and_fan_out(tensor) - return fan_in if mode == "fan_in" else fan_out - - -def xavier_uniform_(tensor: Tensor, gain: float = 1.0) -> None: - r"""Fill ``tensor`` with random values sampled from :math:`\mathcal{U}(-a, a)` - where - - .. math:: - a = \text{gain} \times \sqrt{\frac{6}{\text{fan_in} + \text{fan_out}}} - - Also known as Glorot initialization. Detailed information can be retrieved from - `"Understanding the difficulty of training deep feedforward neural networks" `_. - - - :param tensor: An n-dimentional tensor to be initialized - :param gain: Scaling factor for :math:`a`. - """ - fan_in, fan_out = calculate_fan_in_and_fan_out(tensor) - std = gain * math.sqrt(2.0 / float(fan_in + fan_out)) - a = math.sqrt(3.0) * std - uniform_(tensor, -a, a) - - -def xavier_normal_(tensor: Tensor, gain: float = 1.0) -> None: - r"""Fill ``tensor`` with random values sampled from - :math:`\mathcal{N}(0, \text{std}^2)` where - - .. math:: - \text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan_in} + \text{fan_out}}} - - Also known as Glorot initialization. Detailed information can be retrieved from - `"Understanding the difficulty of training deep feedforward neural networks" `_. - - :param tensor: An n-dimentional tensor to be initialized - :param gain: Scaling factor for :math:`std`. - """ - fan_in, fan_out = calculate_fan_in_and_fan_out(tensor) - std = gain * math.sqrt(2.0 / float(fan_in + fan_out)) - normal_(tensor, 0.0, std) - - -def msra_uniform_( - tensor: Tensor, a: float = 0, mode: str = "fan_in", nonlinearity: str = "leaky_relu" -) -> None: - r"""Fill ``tensor`` wilth random values sampled from - :math:`\mathcal{U}(-\text{bound}, \text{bound})` where - - .. math:: - \text{bound} = \sqrt{\frac{6}{(1 + a^2) \times \text{fan_in}}} - - Detailed information can be retrieved from - `"Delving deep into rectifiers: Surpassing human-level performance on ImageNet - classification" `_. - - - :param tensor: An n-dimentional tensor to be initialized - :param a: Optional parameter for calculating gain for leaky_relu. See - :func:`calculate_gain` for details. - :param mode: ``'fan_in'`` or ``'fan_out'``, used to calculate :math:`gain`, the - scaling factor for :math:`bound`. See :func:`calculate_fan_in_and_fan_out` for - details. - :param nonlinearity: Name of the non-linear function used to calculate :math:`gain`. - See :func:`calculate_gain` for details. - """ - fan = calculate_correct_fan(tensor, mode) - gain = calculate_gain(nonlinearity, a) - std = gain / math.sqrt(fan) - bound = math.sqrt(3.0) * std - uniform_(tensor, -bound, bound) - - -def msra_normal_( - tensor: Tensor, a: float = 0, mode: str = "fan_in", nonlinearity: str = "leaky_relu" -) -> None: - r"""Fill ``tensor`` wilth random values sampled from - :math:`\mathcal{N}(0, \text{std}^2)` where - - .. math:: - \text{std} = \sqrt{\frac{2}{(1 + a^2) \times \text{fan_in}}} - - Detailed information can be retrieved from - `"Delving deep into rectifiers: Surpassing human-level performance on ImageNet - classification" `_. - - :param tensor: An n-dimentional tensor to be initialized - :param a: Optional parameter for calculating gain for leaky_relu. See - :func:`calculate_gain` for details. - :param mode: ``'fan_in'`` or ``'fan_out'``, used to calculate :math:`gain`, the - scaling factor for :math:`gain`. See :func:`calculate_fan_in_and_fan_out` for - details. - :param nonlinearity: Name of the non-linear function used to calculate :math:`gain`. - See :func:`calculate_gain` for details. - """ - fan = calculate_correct_fan(tensor, mode) - gain = calculate_gain(nonlinearity, a) - std = gain / math.sqrt(fan) - normal_(tensor, 0, std) diff --git a/python_module/megengine/module/linear.py b/python_module/megengine/module/linear.py deleted file mode 100644 index 30f8ea82..00000000 --- a/python_module/megengine/module/linear.py +++ /dev/null @@ -1,61 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from .. import functional as F -from ..core import Parameter -from . import init -from .module import Module - - -class Linear(Module): - r"""Applies a linear transformation to the input. For instance, if input - is x, then output y is: - - .. math:: - - y = xW^T + b - - where :math:`y_i= \sum_j W_{ij} x_j + b_i` - - :param in_features: size of each input sample. - :param out_features: size of each output sample. - :param bias: If set to ``False``, the layer will not learn an additive bias. - Default: ``True`` - - """ - - def __init__( - self, in_features: int, out_features: int, bias: bool = True, **kwargs - ): - super().__init__(**kwargs) - self.out_features = out_features - self.in_features = in_features - w_shape = (out_features, in_features) - self.weight = Parameter(np.zeros(w_shape, dtype=np.float32)) - self.bias = None - if bias: - b_shape = (out_features,) - self.bias = Parameter(np.zeros(b_shape, dtype=np.float32)) - self.reset_parameters() - - def _get_fanin(self): - return self.in_features - - def reset_parameters(self) -> None: - fanin = self._get_fanin() - std = np.sqrt(1 / fanin) - init.normal_(self.weight, 0.0, std) - if self.bias is not None: - init.zeros_(self.bias) - - def _calc_linear(self, x, weight, bias): - return F.linear(x, weight, bias) - - def forward(self, x): - return self._calc_linear(x, self.weight, self.bias) diff --git a/python_module/megengine/module/module.py b/python_module/megengine/module/module.py deleted file mode 100644 index b999fb12..00000000 --- a/python_module/megengine/module/module.py +++ /dev/null @@ -1,507 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import ABCMeta, abstractmethod -from collections import OrderedDict -from typing import Any, Callable, Iterable, Optional, Set, Tuple, Union - -import numpy as np - -from .._internal.dtype import is_quantize -from ..core import Buffer, Parameter, Tensor -from ..logger import get_logger -from ..utils.hook import HookHandler - -logger = get_logger(__name__) - - -def _expand_structure(key, obj): - if isinstance(obj, (Tensor, Module)): - return [(key, obj)] - elif isinstance(obj, (list, tuple, dict)): - ret = [] - if isinstance(obj, dict): - targets = ((k, obj[k]) for k in sorted(obj)) - else: - targets = ((str(k), v) for k, v in enumerate(obj)) - for k, o in targets: - sub_ret = _expand_structure(k, o) - if sub_ret and not isinstance(k, str): - raise AssertionError( - "keys for Tensor and Module must be str, error key: {}".format(k) - ) - for kt, vt in sub_ret: - ret.extend([(key + "." + kt, vt)]) - return ret - else: - return [] - - -def _is_parameter(obj): - return isinstance(obj, Parameter) - - -def _is_buffer(obj): - return isinstance(obj, Buffer) - - -def _is_module(obj): - return isinstance(obj, Module) - - -class Module(metaclass=ABCMeta): - """Base Module class. - """ - - def __init__(self): - # runtime attributes - self.training = True - self.quantize_disabled = False - - # hooks - self._forward_pre_hooks = OrderedDict() - self._forward_hooks = OrderedDict() - - @abstractmethod - def forward(self, inputs): - pass - - def register_forward_pre_hook(self, hook: Callable) -> HookHandler: - """Register a hook to handle forward inputs. `hook` should be a function - - Note that `inputs` keyword inputs - - :param hook: a function that receive `module` and `inputs`, then return - a modified `inputs` or `None`. - :return: a handler with :meth:`~.HookHandler.remove` interface to delete the hook. - """ - return HookHandler(self._forward_pre_hooks, hook) - - def register_forward_hook(self, hook: Callable) -> HookHandler: - """Register a hook to handle forward results. `hook` should be a function that - receive `module`, `inputs` and `outputs`, then return a modified `outputs` or `None`. - - This method return a handler with :meth:`~.HookHandler.remove` interface to delete the hook. - """ - return HookHandler(self._forward_hooks, hook) - - def __call__(self, *inputs, **kwargs): - for hook in self._forward_pre_hooks.values(): - modified_inputs = hook(self, inputs) - if modified_inputs is not None: - if not isinstance(modified_inputs, tuple): - modified_inputs = (modified_inputs,) - inputs = modified_inputs - - outputs = self.forward(*inputs, **kwargs) - - for hook in self._forward_hooks.values(): - modified_outputs = hook(self, inputs, outputs) - if modified_outputs is not None: - outputs = modified_outputs - return outputs - - def _flatten( - self, - *, - recursive: bool = True, - with_key: bool = False, - with_parent: bool = False, - prefix: Optional[str] = None, - predicate: Callable[[Any], bool] = lambda _: True, - seen: Optional[Set[int]] = None - ) -> Union[Iterable[Any], Iterable[Tuple[str, Any]]]: - """Scans the module object and returns an iterable for the :class:`~.Tensor` - and :class:`~.Module` attributes that agree with the ``predicate``. For multiple - calls of this function with same arguments, the order of objects within the - returned iterable is guaranteed to be identical, as long as all the involved - module objects' ``__dict__`` does not change thoughout those calls. - - :param recursive: Whether to recursively scan all the submodules. - :param with_key: Whether to yield keys along with yielded objects. - :param with_parent: Whether to yield ``self`` along with yielded objects. - :param prefix: The prefix appended to the yielded keys. - :param predicate: The predicate function applied to scanned objects. - :param seen: A dict that records whether a module has been traversed yet. - """ - if seen is None: - seen = set([id(self)]) - - module_dict = vars(self) - _prefix = "" if prefix is None else prefix + "." - - for key in sorted(module_dict): - for expanded_key, leaf in _expand_structure(key, module_dict[key]): - leaf_id = id(leaf) - if leaf_id in seen: - continue - seen.add(leaf_id) - - if predicate(leaf): - if with_key and with_parent: - yield _prefix + expanded_key, leaf, self - elif with_key: - yield _prefix + expanded_key, leaf - elif with_parent: - yield leaf, self - else: - yield leaf - - if recursive and isinstance(leaf, Module): - yield from leaf._flatten( - recursive=recursive, - with_key=with_key, - with_parent=with_parent, - prefix=_prefix + expanded_key if with_key else None, - predicate=predicate, - seen=seen, - ) - - def parameters( - self, requires_grad: Optional[bool] = None, recursive: bool = True, **kwargs - ) -> Iterable[Parameter]: - r"""Returns an iterable for the :class:`~.Parameter` of the module. - - :param requires_grad: Limitation over the :attr:`~.Parameter.requires_grad` - attribute of returned :class:`.Parameter`. ``None`` for no limitation. - :param recursive: If ``True``, returns all :class:`~.Parameter` within this - module, else only returns :class:`~.Parameter` that are direct attributes - of this module. - """ - - def predicate(obj) -> bool: - return _is_parameter(obj) and ( - requires_grad is None or obj.requires_grad == requires_grad - ) - - yield from self._flatten( - with_key=False, predicate=predicate, recursive=recursive, **kwargs - ) - - def named_parameters( - self, - requires_grad: Optional[bool] = None, - prefix: Optional[str] = None, - recursive: bool = True, - **kwargs - ) -> Iterable[Tuple[str, Parameter]]: - """Returns an iterable for key :class:`~.Parameter` pairs of the module, where - ``key`` is the dotted path from this module to the :class:`~.Parameter` . - - :param requires_grad: Limitation over the :attr:`~.Parameter.requires_grad` - attribute of returned :class:`~.Parameter` . ``None`` for no limitation. - :param prefix: The prefix prepended to the keys. - :param recursive: If ``True``, returns all :class:`~.Parameter` within this - module, else only returns :class:`~.Parameter` that are direct attributes - of this module. - """ - - def predicate(obj) -> bool: - return _is_parameter(obj) and ( - requires_grad is None or obj.requires_grad == requires_grad - ) - - yield from self._flatten( - with_key=True, - prefix=prefix, - predicate=predicate, - recursive=recursive, - **kwargs, - ) - - def buffers(self, recursive: bool = True, **kwargs) -> Iterable[Buffer]: - """Returns an iterable for the :class:`~.Buffer` of the module. - - :param recursive: If ``True``, returns all :class:`~.Buffer` within this - module, else only returns :class:`~.Buffer` that are direct attributes - of this module. - """ - yield from self._flatten( - with_key=False, predicate=_is_buffer, recursive=recursive, **kwargs - ) - - def named_buffers( - self, prefix: Optional[str] = None, recursive: bool = True, **kwargs - ) -> Iterable[Tuple[str, Buffer]]: - """Returns an iterable for key :class:`~.Buffer` pairs of the module, where - ``key`` is the dotted path from this module to the :class:`~.Buffer` . - - :param prefix: The prefix prepended to the keys. - :param recursive: If ``True``, returns all :class:`~.Buffer` within this - module, else only returns :class:`~.Buffer` that are direct attributes - of this module. - """ - yield from self._flatten( - with_key=True, - prefix=prefix, - predicate=_is_buffer, - recursive=recursive, - **kwargs, - ) - - def children(self, **kwargs) -> "Iterable[Module]": - """Returns an iterable for all the submodules that are direct attributes of this - module. - """ - yield from self._flatten( - with_key=False, predicate=_is_module, recursive=False, **kwargs - ) - - def named_children(self, **kwargs) -> "Iterable[Tuple[str, Module]]": - """Returns an iterable of key-submodule pairs for all the submodules that are - direct attributes of this module, where 'key' is the attribute name of - submodules. - """ - yield from self._flatten( - with_key=True, predicate=_is_module, recursive=False, **kwargs - ) - - def modules(self, **kwargs) -> "Iterable[Module]": - """Returns an iterable for all the modules within this module, including itself. - """ - if "with_parent" in kwargs and kwargs["with_parent"]: - yield self, None - else: - yield self - yield from self._flatten(with_key=False, predicate=_is_module, **kwargs) - - def named_modules( - self, prefix: Optional[str] = None, **kwargs - ) -> "Iterable[Tuple[str, Module]]": - """Returns an iterable of key-module pairs for all the modules within this - module, including itself, where 'key' is the dotted path from this module to the - submodules. - - :param prefix: The prefix prepended to the path. - """ - if "with_parent" in kwargs and kwargs["with_parent"]: - yield ("" if prefix is None else prefix), self, None - else: - yield ("" if prefix is None else prefix), self - yield from self._flatten( - with_key=True, prefix=prefix, predicate=_is_module, **kwargs - ) - - def apply(self, fn: "Callable[[Module], Any]") -> None: - """Apply function ``fn`` to all the modules within this module, including - itself. - - :param fn: The function to be applied on modules. - """ - for it in self.modules(): - fn(it) - - def zero_grad(self) -> None: - """Set all parameters' grads to zero - """ - for param in self.parameters(): - if param.grad is not None: - param.grad.reset_zero() - - def train(self, mode: bool = True, recursive: bool = True) -> None: - """Set training mode of all the modules within this module (including itself) to - ``mode``. This effectively sets the ``training`` attributes of those modules - to ``mode``, but only has effect on certain modules (e.g. - :class:`~.BatchNorm2d`, :class:`~.Dropout`, :class:`~.Observer`) - - :param mode: the training mode to be set on modules. - :param recursive: whether to recursively call submodules' ``train()``. - """ - if not recursive: - self.training = mode - return - - def fn(module: Module) -> None: - module.train(mode, recursive=False) - - self.apply(fn) - - def eval(self) -> None: - """Set training mode of all the modules within this module (including itself) to - ``False``. See :meth:`~.Module.train` for details. - """ - self.train(False) - - def disable_quantize(self, value=True): - r""" - Set ``module``'s ``quantize_disabled`` attribute and return ``module``. - Could be used as a decorator. - """ - - def fn(module: Module) -> None: - module.quantize_disabled = value - - self.apply(fn) - - def replace_param( - self, params: dict, start_pos: int, seen: Optional[Set[int]] = None - ): - """Replace module's parameters with `params`, used by :class:`~.ParamPack` to - speedup multimachine training. - """ - offset = 0 - if seen is None: - seen = set([id(self)]) - module_dict = vars(self) - for key in sorted(module_dict): - hash_id = id(module_dict[key]) - if hash_id in seen: - continue - seen.add(hash_id) - if isinstance(module_dict[key], Parameter): - if start_pos + offset in params: - assert module_dict[key].shape == params[start_pos + offset].shape - module_dict[key] = params[start_pos + offset] - offset += 1 - if isinstance(module_dict[key], Module): - offset += module_dict[key].replace_param( - params, start_pos + offset, seen - ) - return offset - - def state_dict(self, rst=None, prefix="", keep_var=False): - r"""Returns a dictionary containing whole states of the module. - """ - - def is_state(obj): - return _is_parameter(obj) or _is_buffer(obj) - - if rst is None: - rst = OrderedDict() - - for k, v in self._flatten(recursive=False, with_key=True, predicate=is_state): - assert prefix + k not in rst, "duplicated state: {}".format(k) - if keep_var: - rst[prefix + k] = v - else: - rst[prefix + k] = v.numpy() - - for k, submodule in self._flatten( - recursive=False, - with_key=True, - predicate=lambda obj: isinstance(obj, Module), - ): - submodule.state_dict(rst, prefix + k + ".", keep_var) - - return rst - - def load_state_dict( - self, - state_dict: Union[dict, Callable[[str, Tensor], Optional[np.ndarray]]], - strict=True, - ): - r"""Load a given dictionary created by :func:`state_dict` into this module. - If ``strict`` is ``True``, the keys of :func:`state_dict` must exactly match the keys - returned by :func:`state_dict`. - - Users can also pass a closure: `Function[key: str, var: Tensor] -> Optional[np.ndarray]` - as a `state_dict`, in order to handle complex situations. For example, load everything - except for the final linear classifier: - - .. code-block:: - - state_dict = {...} # Dict[str, np.ndarray] - model.load_state_dict({ - k: None if k.startswith('fc') else v - for k, v in state_dict.items() - }, strict=False) - - Here returning `None` means skipping parameter `k`. - - To prevent shape mismatch (e.g. load PyTorch weights), we can reshape before loading: - - .. code-block:: - - state_dict = {...} - def reshape_accordingly(k, v): - return state_dict[k].reshape(v.shape) - model.load_state_dict(reshape_accordingly) - - We can also perform inplace re-initialization or pruning: - - .. code-block:: - - def reinit_and_pruning(k, v): - if 'bias' in k: - M.init.zero_(v) - if 'conv' in k: - return v.numpy() * (np.abs(v.numpy()) > 1e-3).astype("float32) - model.load_state_dict(reinit_and_pruning, strict=False) - """ - unused = [] - if isinstance(state_dict, dict): - unused = state_dict.keys() - - def closure(k, _): # var unused - return state_dict[k] if k in state_dict else None - - elif callable(state_dict): - closure = state_dict - else: - raise ValueError( - "`state_dict` must load a dict or callable, got {}".format( - type(state_dict) - ) - ) - - loaded, skipped = self._load_state_dict_with_closure(closure) - unused = set(unused) - loaded - - if len(unused) != 0: - if strict: - raise KeyError( - "Unused params violate `strict=True`, unused={}".format(unused) - ) - else: - logger.warning( - "Unused params in `strict=False` mode, unused={}".format(unused) - ) - - if len(skipped) != 0: - if strict: - raise KeyError( - "Missing params violate `strict=True`, missing={}".format(skipped) - ) - else: - logger.warning( - "Missing params in `strict=False` mode, missing={}".format(skipped) - ) - - def _load_state_dict_with_closure(self, closure): - """Advance state_dict load through callable `closure` whose signature is - - `closure(key: str, var: Tensor) -> Union[np.ndarry, None]` - """ - assert callable(closure), "closure must be a function" - - loaded = [] - skipped = [] - - local_state_dict = self.state_dict(keep_var=True) - for k, var in local_state_dict.items(): - to_be_load = closure(k, var) - if to_be_load is None: - skipped.append(k) - continue - assert isinstance( - to_be_load, np.ndarray - ), "closure should return a `np.ndarray`, now `{}` get {}".format( - k, to_be_load - ) - assert ( - var.shape == to_be_load.shape - ), "param `{}` shape mismatch, should be {}, get {}".format( - k, var.shape, to_be_load.shape - ) - # For quantized dtype, the initialized dtype - # scale/zero_points maybe invalid, use pretrained dtype instead. - if is_quantize(to_be_load.dtype) and is_quantize(var.dtype): - var.dtype = to_be_load.dtype - var.set_value(to_be_load) - loaded.append(k) - - return set(loaded), set(skipped) diff --git a/python_module/megengine/module/parampack.py b/python_module/megengine/module/parampack.py deleted file mode 100644 index c020a41d..00000000 --- a/python_module/megengine/module/parampack.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -from typing import Callable, Iterable, Optional, Tuple - -import numpy as np - -from .._internal.opr import param_pack_split -from ..core import Parameter, Tensor -from .module import Module - - -class ParamPack(Module): - r"""Pack module's parameters by gathering their memory to continuous address. - Using (device, dtype, requires_grad) as key, for example ('gpu0', float32, True), - parameters with same key will be packed togather. - It helps a lot for multimachine training by speeding up allreduce gradients. - - :param model: the module you want to pack parameters. - :param nr_ignore_first: how many parameters will be unpacked at first. - :param max_size_per_group: upper bound of packed parameters' size in MB. - :param max_nr_params_per_group: upper bound of the number of parameters of each group. - - """ - - def __init__( - self, - model: Module, - nr_ignore_first: int = 8, - max_size_per_group: int = 10, - max_nr_params_per_group: int = 100, - group_func: Callable = lambda name, param: 0, - ): - super().__init__() - self._model = model - self._nr_ignore_first = nr_ignore_first - self._max_size_per_group = max_size_per_group - self._max_nr_params_per_group = max_nr_params_per_group - self._group_func = group_func - self._grouped_params = [] - self._packed_params = [] - - params = model.named_parameters() - self._pack_params(params) - - def parameters(self, requires_grad: Optional[bool] = None) -> Iterable[Parameter]: - for param in self._packed_params: - if requires_grad is None or param.requires_grad == requires_grad: - yield param - - def named_parameters( - self, requires_grad: Optional[bool] = None - ) -> Iterable[Tuple[str, Parameter]]: - for idx, param in enumerate(self._packed_params): - if requires_grad is None or param.requires_grad == requires_grad: - yield "packed_param_" + str(idx), param - - def _pack_params(self, params: Iterable[Tuple[str, Parameter]]): - groups = collections.defaultdict(list) - ignored = 0 - param_id = 0 - for name, param in params: - if self._nr_ignore_first > ignored: - ignored += 1 - self._grouped_params.append([{"shape": param.shape, "id": param_id}]) - param.pack_group_key = self._group_func(name, param) - self._packed_params.append(param) - else: - key = ( - param.dtype, - param.device, - param.requires_grad, - self._group_func(name, param), - ) - groups[key].append({"tensor": param, "id": param_id}) - param_id += 1 - for (dtype, device, requires_grad, group_key) in groups.keys(): - dtype_sz = np.dtype(dtype).itemsize - align = device.mem_align - if align < dtype_sz: - align = 1 - else: - assert align % dtype_sz == 0 - align //= dtype_sz - - group = groups[(dtype, device, requires_grad, group_key)] - while group: - aligned_pos = [] - offset = 0 - params = [] - idx = 0 - while idx < len(group): - param = group[idx] - assert param["tensor"].device == device - padding = (align - (offset & (align - 1))) & (align - 1) - offset += padding - aligned_pos.append(offset) - params.append(param) - offset += int(np.prod(param["tensor"].shape)) - idx += 1 - - if ( - offset * dtype_sz >= self._max_size_per_group * 1024 * 1024 - or idx >= self._max_nr_params_per_group - ): - break - group = group[idx:] - if idx == 1: - # ignore param packs with only one item - params[0]["tensor"].pack_group_key = group_key - self._packed_params.append(params[0]["tensor"]) - self._grouped_params.append( - [{"shape": params[0]["tensor"].shape, "id": params[0]["id"]}] - ) - continue - - packed_value = np.zeros((offset,), dtype=dtype) - for param, pos in zip(params, aligned_pos): - val = param["tensor"].numpy() - packed_value[pos : pos + val.size] = val.flatten() - new_param = Parameter( - value=packed_value, - device=device, - dtype=dtype, - requires_grad=requires_grad, - ) - new_param.pack_group_key = group_key - self._packed_params.append(new_param) - self._grouped_params.append( - [{"shape": i["tensor"].shape, "id": i["id"]} for i in params] - ) - - def forward(self, *args, **kwargs): - replace_param = dict() - for i in range(len(self._packed_params)): - packed_param = self._packed_params[i] - grouped_params = self._grouped_params[i] - if len(grouped_params) == 1: - continue - split = param_pack_split( - packed_param._symvar, [i["shape"] for i in grouped_params] - ) - split = [ - Parameter(Tensor(i, requires_grad=packed_param.requires_grad)) - for i in split - ] - for j in range(len(split)): - replace_param[grouped_params[j]["id"]] = split[j] - self._model.replace_param(replace_param, 0) - - return self._model.forward(*args, **kwargs) diff --git a/python_module/megengine/module/pooling.py b/python_module/megengine/module/pooling.py deleted file mode 100644 index 8126ddc1..00000000 --- a/python_module/megengine/module/pooling.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import abstractmethod -from typing import Tuple, Union - -from ..functional import avg_pool2d, max_pool2d -from .module import Module - - -class _PoolNd(Module): - def __init__( - self, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = None, - padding: Union[int, Tuple[int, int]] = 0, - ): - super(_PoolNd, self).__init__() - self.kernel_size = kernel_size - self.stride = stride or kernel_size - self.padding = padding - - @abstractmethod - def forward(self, inp): - pass - - -class MaxPool2d(_PoolNd): - r"""Applies a 2D max pooling over an input. - - For instance, given an input of the size :math:`(N, C, H, W)` and - :attr:`kernel_size` :math:`(kH, kW)`, this layer generates the output of - the size :math:`(N, C, H_{out}, W_{out})` through a process described as: - - .. math:: - \begin{aligned} - out(N_i, C_j, h, w) ={} & \max_{m=0, \ldots, kH-1} \max_{n=0, \ldots, kW-1} - \text{input}(N_i, C_j, \text{stride[0]} \times h + m, - \text{stride[1]} \times w + n) - \end{aligned} - - If :attr:`padding` is non-zero, then the input is implicitly zero-padded on - both sides for :attr:`padding` number of points. - - :param kernel_size: the size of the window to take a max over. - :param stride: the stride of the window. Default value is ``kernel_size``. - :param padding: implicit zero padding to be added on both sides. - """ - - def forward(self, inp): - return max_pool2d(inp, self.kernel_size, self.stride, self.padding) - - -class AvgPool2d(_PoolNd): - r"""Applies a 2D average pooling over an input. - - For instance, given an input of the size :math:`(N, C, H, W)` and - :attr:`kernel_size` :math:`(kH, kW)`, this layer generates the output of - the size :math:`(N, C, H_{out}, W_{out})` through a process described as: - - .. math:: - - out(N_i, C_j, h, w) = \frac{1}{kH * kW} \sum_{m=0}^{kH-1} \sum_{n=0}^{kW-1} - input(N_i, C_j, stride[0] \times h + m, stride[1] \times w + n) - - If :attr:`padding` is non-zero, then the input is implicitly zero-padded on - both sides for :attr:`padding` number of points. - - :param kernel_size: the size of the window. - :param stride: the stride of the window. Default value is ``kernel_size``. - :param padding: implicit zero padding to be added on both sides. - """ - - def forward(self, inp): - return avg_pool2d(inp, self.kernel_size, self.stride, self.padding) diff --git a/python_module/megengine/module/pytorch/__init__.py b/python_module/megengine/module/pytorch/__init__.py deleted file mode 100644 index 5902d9c3..00000000 --- a/python_module/megengine/module/pytorch/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .pytorch import PyTorchModule diff --git a/python_module/megengine/module/pytorch/pytorch.py b/python_module/megengine/module/pytorch/pytorch.py deleted file mode 100644 index 81548a50..00000000 --- a/python_module/megengine/module/pytorch/pytorch.py +++ /dev/null @@ -1,451 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import copy -import functools -import os -from typing import Any, Callable, List, Optional, Tuple - -import torch -from torch.utils.cpp_extension import load as load_torch_extension - -import megengine._internal as mgb -from megengine._internal import CompGraph -from megengine._internal.mgb import CompGraphCallbackValueProxy - -from ...core import Parameter, Tensor, get_default_device -from ..module import Module -from .utils import device_to_torch_device, torch_dtype_to_numpy_dtype - -# A global dict to map opr during graph copy -_copy_dict = {} - - -@functools.lru_cache(None) -def _get_torch_mem_fwd_lib(): - source_file = os.path.join(os.path.dirname(__file__), "torch_mem_fwd.cpp") - return load_torch_extension( - "torch_mem_fwd", - [source_file], - extra_include_paths=[mgb.config.get_include_path()], - ) - - -def inp_mem_fwd(pubapi_dev_tensor_ptr: int) -> torch.Tensor: - """Forward a MegBrain tensor to torch tensor - - :param pubapi_dev_tensor_ptr: pointer to MegBrain tensor - """ - return _get_torch_mem_fwd_lib().inp_mem_fwd(pubapi_dev_tensor_ptr) - - -def oup_mem_fwd( - pubapi_dev_tensor_ptr: int, tensor: torch.Tensor, keep_data_ptr: bool = True -) -> None: - """Forward a torch tensor to a contiguous MegBrain tensor - - :param pubapi_dev_tensor_ptr: Pointer to the MegBrain tensor - :param tensor: The input torch tensor - :param keep_data_ptr: if True, memory copy is not allowed here, - thus the input torch tensor must be contiguous also. - defaults to True - """ - _get_torch_mem_fwd_lib().oup_mem_fwd(pubapi_dev_tensor_ptr, tensor, keep_data_ptr) - - -def torch_param_to_mge( - name: str, param: torch.nn.Parameter, device, comp_graph: CompGraph -) -> Parameter: - """Convert a torch parameter to a megengine parameter - - :param name: parametr name - :param param: torch parameter - :param device: the device on which the megengine parameter is, - should be physically the same as the one on torch parameter - :param comp_graph: the owner graph of megengine parameter - :return: megengine parameter - """ - assert isinstance(param, torch.nn.Parameter) - dtype = torch_dtype_to_numpy_dtype(param.dtype) - mge_param = Parameter(None, dtype=dtype) - shared_nd = mge_param._Tensor__val - oup_mem_fwd(shared_nd.pubapi_dev_tensor_ptr, param.data, True) - return mge_param - - -class _PyTorchSubgraphGradOpr(mgb.craniotome.CraniotomeBase): - __nr_inputs__ = None - __nr_outputs__ = None - __allow_duplicate__ = False - __disable_sys_mem_alloc__ = True - __is_dynamic_output_shape__ = True - _forward_opr = None # type: PyTorchSubgraphImplOpr - _shape_infer_func = None - _condensed_out_grad_idx = None # type: List[Optional[int]] - - _forward_input_cnt = None - _forward_output_cnt = None - _output_grad_cnt = None - _param_cnt = None - - def setup( - self, forward_opr, condensed_out_grad_idx: List[Optional[int]], infer_shape=None - ): - self._forward_opr = forward_opr - self._forward_input_cnt = forward_opr.input_cnt - self._forward_output_cnt = forward_opr.output_cnt - self._param_cnt = forward_opr.param_cnt - self._output_grad_cnt = sum([idx is not None for idx in condensed_out_grad_idx]) - self.__nr_inputs__ = ( - self._forward_input_cnt - + self._param_cnt - + self._forward_output_cnt - + self._output_grad_cnt - ) - self.__nr_outputs__ = self._forward_input_cnt + self._param_cnt - self._forward_opr = forward_opr - self._condensed_out_grad_idx = condensed_out_grad_idx - self._shape_infer_func = infer_shape - if infer_shape is not None: - type(self).__is_dynamic_output_shape__ = False - - def execute( - self, - inputs: Tuple[CompGraphCallbackValueProxy, ...], - outputs: Tuple[mgb.SharedND, ...], - ): - assert self._forward_opr._last_forward_inputs is not None - assert self._forward_opr._last_forward_outputs is not None - if self._forward_opr._last_forward_outputs is None: - self._forward_opr.execute(inputs[: self.__nr_outputs__], None) - - out_grads = [ - inp_mem_fwd(inputs[idx].pubapi_dev_tensor_ptr) if idx else None - for idx in self._condensed_out_grad_idx - ] - - grads = torch.autograd.grad( - self._forward_opr._last_forward_outputs, - self._forward_opr._last_forward_inputs - + self._forward_opr._last_forward_params, - out_grads, # type: ignore - only_inputs=True, - allow_unused=True, - ) - for ovar, oten in zip(outputs, grads): - oup_mem_fwd(ovar.pubapi_dev_tensor_ptr, oten) - - def grad(self, wrt_idx, inputs, outputs, out_grad): - raise NotImplementedError("Apply grad to a grad opr is not supported") - - def infer_shape(self, inp_shapes): - if callable(self._shape_infer_func): - return self._shape_infer_func(inp_shapes) - raise NotImplementedError( - "No shape inference function specified on PyTorchSubgraphImplOpr" - ) - - def copy(self): - - ret = type(self)() - d0 = self.__dict__.copy() - d0.pop("this") - d0.pop("_forward_opr") - - later_copy = self._forward_opr in _copy_dict - if later_copy: - assert len(_copy_dict) == 1 - forward_opr_copy = _copy_dict[self._forward_opr] - else: - forward_opr_copy = self._forward_opr - ret.__dict__["_forward_opr"] = forward_opr_copy - - ret.__dict__.update(copy.deepcopy(d0)) - _copy_dict[self] = ret - if later_copy: - forward_opr_copy._grad_opr = ret - _copy_dict.clear() - - return ret - - -class PyTorchSubgraphImplOpr(mgb.craniotome.CraniotomeBase): - # pylint: disable=abstract-method - """This is a pytorch module wrapper to operator""" - - __nr_inputs__ = None # type: int - __nr_outputs__ = None # type: int - __allow_duplicate__ = False - __disable_sys_mem_alloc__ = True - __is_dynamic_output_shape__ = True - - _grad_opr = None - _func = None # type: Callable[[Any], Any] - input_cnt = None # type: int - output_cnt = None # type: int - param_cnt = None # type: int - _shape_infer_func = None - - _last_forward_inputs = None - _last_forward_outputs = None # type: List[torch.Tensor] - _last_forward_params = None # type: List[torch.Tensor] - - def setup(self, *, input_cnt, output_cnt, func, params, infer_shape=None): - """Setup the operator by accepted kwargs - - :param input_cnt: input count of torch module - :param output_cnt: output count of torch module - :param func: a callable object accept inputs and returns outputs - usually a torch module itself - :param params: parameters of the torch module - :param infer_shape: a callable infers output shapes from input shapes, - defaults to None - """ - param_cnt = len(params) - self.input_cnt = input_cnt - self.output_cnt = output_cnt - self.param_cnt = param_cnt - self.__nr_inputs__ = input_cnt + param_cnt - self.__nr_outputs__ = output_cnt - self._func = func - self._shape_infer_func = infer_shape - if infer_shape is not None: - type(self).__is_dynamic_output_shape__ = False - self._last_forward_params = params - - def execute( - self, - inputs: Tuple[CompGraphCallbackValueProxy, ...], - outputs: Optional[Tuple[mgb.SharedND, ...]], - ): - """execute the operator, read values from *inputs*, - forward them to torch tensor and do execution by self.func - and forward results to outputs - - :param inputs: values for each input var - :param outputs: values for each output var - """ - input_value_proxys = inputs[: self.input_cnt] - - input_torch_tensors = [ - inp_mem_fwd(ivar.pubapi_dev_tensor_ptr).requires_grad_() - for ivar in input_value_proxys - ] - - output_torch_tensors = self._func(*input_torch_tensors) - - if isinstance(output_torch_tensors, torch.Tensor): - output_torch_tensors = [output_torch_tensors] - - # `execute` may be called in _PyTorchSubgraphGradOp with None as outputs - if outputs: - for ovar, oten in zip(outputs, output_torch_tensors): - oup_mem_fwd(ovar.pubapi_dev_tensor_ptr, oten) - - # Retain input / output tensors for backward - self._last_forward_inputs = input_torch_tensors - self._last_forward_outputs = output_torch_tensors - - def grad( - self, - wrt_idx, - inputs: Tuple[mgb.SymbolVar, ...], - outputs: Tuple[mgb.SymbolVar, ...], - out_grads: Tuple[mgb.SymbolVar, ...], - ): - """generate a grad opr which calculates grad by torch.autograd.grad and cache it - - :param wrt_idx: the input var with respect to which the gradient should - be computed - :param inputs: operator inputs - :param outputs: operator outputs - :param out_grads: gradients of each output var - :return: an initialized grad opr - """ - if self._grad_opr is None: - condensed_out_grad = [] - condensed_out_grad_idx = [] # type: List[Optional[int]] - idx = self.__nr_inputs__ + len(outputs) - for out_grad in out_grads: - if out_grad is None: - condensed_out_grad_idx.append(None) - else: - condensed_out_grad.append(out_grad) - condensed_out_grad_idx.append(idx) - idx += 1 - self._grad_opr = _PyTorchSubgraphGradOpr.make( - *(inputs + outputs + tuple(condensed_out_grad)), - forward_opr=self, - condensed_out_grad_idx=condensed_out_grad_idx, - ) - return self._grad_opr - - def infer_shape(self, inp_shapes): - """infer output shape from input shapes - - :param inp_shapes: input shapes as tuple - :return: output shapes - """ - if callable(self._shape_infer_func): - return self._shape_infer_func(inp_shapes) - raise NotImplementedError( - "No shape inference function specified on PyTorchSubgraphImplOpr" - ) - - def copy(self): - ret = type(self)() - d0 = self.__dict__.copy() - d0.pop("this") - - ret.__dict__["_last_forward_inputs"] = d0.pop("_last_forward_inputs") - ret.__dict__["_last_forward_outputs"] = d0.pop("_last_forward_outputs") - ret.__dict__["_last_forward_params"] = d0.pop("_last_forward_params") - ret.__dict__["_func"] = d0.pop("_func") - - d0.pop("_grad_opr") - later_copy = self._grad_opr in _copy_dict - if later_copy: - assert len(_copy_dict) == 1 - grad_opr_copy = _copy_dict[self._grad_opr] - else: - grad_opr_copy = self._grad_opr - ret.__dict__["_grad_opr"] = grad_opr_copy - - ret.__dict__.update(copy.deepcopy(d0)) - _copy_dict[self] = ret - if later_copy: - grad_opr_copy._forward_opr = ret - _copy_dict.clear() - - return ret - - -class PyTorchModule(Module): - """Wrap a pytorch module as megengine module - - :param torch_module: torch module to be wrapped - :param device: target device this module would be in - :param output_cnt: output count of this module - :param input_shape: input shape inferrer - :param comp_graph: target comp_graph on which this module would be in - """ - - __torch_module = None # type: torch.nn.Module - __output_cnt = None - __infer_shape = None - __comp_graph = None - __device = None - _torch_params = None - _param_inputs = None - _name_param_list = None # type: List[Tuple[str, Parameter]] - - def __init__( - self, - torch_module, - device=None, - output_cnt=1, - *, - infer_shape=None, - comp_graph=None - ): - super().__init__() - if not isinstance(torch_module, torch.nn.Module): - raise TypeError( - "torch_module should either be an instance of torch.nn.Module " - "or its subclass" - ) - self.__torch_module = torch_module - - if not isinstance(output_cnt, int): - raise TypeError("output_cnt must be int") - if output_cnt <= 0: - raise ValueError("output_cnt must be greater than zero") - self.__output_cnt = output_cnt - - if infer_shape and not callable(infer_shape): - raise TypeError("infer_shape should either be None or a callable object") - self.__infer_shape = infer_shape - - if comp_graph and not isinstance(comp_graph, mgb.CompGraph): - raise TypeError("comp_graph shoud eighter be None or a mgb.CompGraph") - self.__comp_graph = comp_graph - - self._torch_params = [] - self._param_inputs = [] - self._name_param_list = [] - - if device is None: - device = get_default_device() - - if isinstance(device, str): - device = mgb.comp_node(device) - self.device = device - - def init_params(self): - """forward torch parameters to megengine parameters and store, - would be called in constructor and setter of device - """ - self._torch_params = [] - self._param_inputs = [] - self._name_param_list = [] - - for name, torch_param in self.__torch_module.named_parameters(recurse=True): - formated_name = "_torch_{}_{}".format(id(self.__torch_module), name) - mge_param = torch_param_to_mge( - formated_name, torch_param, self.device, self.__comp_graph - ) - self._param_inputs.append(mge_param) - self._torch_params.append(torch_param) - self._name_param_list.append((name, mge_param)) - - def get_param_by_name(self, param_name: str) -> Parameter: - """find parameter by its name - - :param param_name: name of parameter - :return: the parameter - """ - for name, param in self._name_param_list: - if param_name == name: - return param - raise KeyError("Cannot find param: {}".format(param_name)) - - def forward(self, *inputs): - """apply the module on given inputs - - :return: output vars - """ - param_inputs = [param._symvar for param in self._param_inputs] - - inputs = [tensor._symvar for tensor in list(inputs)] + param_inputs - - out = PyTorchSubgraphImplOpr.make( - *inputs, - input_cnt=len(inputs) - len(param_inputs), - output_cnt=self.__output_cnt, - func=self.__torch_module.forward, - params=self._torch_params, - infer_shape=self.__infer_shape, - ) - if isinstance(out, mgb.SymbolVar): - return Tensor(out) - assert isinstance(out, collections.Iterable) - return [Tensor(sym) for sym in out] - - def get_device(self): - """get the device this module belongs to""" - return self.__device - - def set_device(self, device: mgb.CompNode): - """set the device and move torch module to corresponding device""" - touch_device = device_to_torch_device(device) - self.__torch_module.to(device=touch_device) - self.__device = device - self.init_params() - - device = property(get_device, set_device) diff --git a/python_module/megengine/module/pytorch/torch_mem_fwd.cpp b/python_module/megengine/module/pytorch/torch_mem_fwd.cpp deleted file mode 100644 index dfcbe8f3..00000000 --- a/python_module/megengine/module/pytorch/torch_mem_fwd.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/** - * \file python_module/megengine/module/pytorch/torch_mem_fwd.cpp - * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") - * - * Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - */ -#include "torch/extension.h" -#include "megbrain_pubapi.h" - -using MGBTensor = mgb::pubapi::DeviceTensor; - -torch::Tensor mgb_to_torch(const MGBTensor *src) { - - mgb::pubapi::CallbackOnce deleter; - void* tensor_raw_ptr; - src->forward_to(&tensor_raw_ptr, &deleter); - auto deleter_wrap = [deleter](void*) mutable { - deleter.consume(); - }; - - // TODO: support non-contiguous layout - std::vector sizes; - for (size_t i = 0; i < src->desc.ndim; ++ i) { - sizes.push_back(src->desc.shape[i]); - } - - torch::TensorOptions options; - switch (src->desc.dtype) { -#define map_dtype(mgb_dtype, torch_dtype) \ - case MGBTensor::DataType::mgb_dtype: \ - options = options.dtype(caffe2::TypeMeta::Make()); \ - break; - map_dtype(FLOAT32, float); - map_dtype(FLOAT16, torch::Half); - map_dtype(INT32, int); - map_dtype(INT16, int16_t); - map_dtype(INT8, int8_t); - map_dtype(UINT8, uint8_t); -#undef map_dtype - default: - throw std::runtime_error("bad case for data type."); - } - - // TODO: Maybe we should impl copy on different devices? - switch (src->desc.type) { - case MGBTensor::Type::CUDA: { - int device_id = src->desc.cuda_ctx.device; - if (device_id >= 0) { - options = options.device(torch::DeviceType::CUDA, device_id); - } else { - throw std::runtime_error("bad case for device(cuda) id."); - } - // TODO: consider cuda synchronization here - // Maybe all tasks issued on cuda_ctx(device, stream) should be done? - break; - } - case MGBTensor::Type::CPU: - options = options.device(torch::DeviceType::CPU); - // Torch's API are all synchronous. - src->sync(); - break; - default: - throw std::runtime_error("bad case for device type."); - } - - auto tensor = torch::from_blob(tensor_raw_ptr, sizes, deleter_wrap, options); - return tensor; -} - -void torch_to_mgb(MGBTensor* dst, torch::Tensor src) { - MGBTensor::Desc desc; - - desc.dev_ptr = src.data_ptr(); - - // src is contiguous torch tensor here, so no strides needed - std::vector shape; - // desc.shape is the pointer to a size array used to construct - // an inner-mgb tensor, which should be valid until calling of - // forward_other_memory return - for (auto &&i : src.sizes()) { - shape.push_back(i); - } - desc.shape = shape.data(); - desc.ndim = shape.size(); - - switch (src.scalar_type()) { -#define map_dtype(mgb_dtype, torch_dtype) \ - case torch::ScalarType::torch_dtype: \ - desc.dtype = MGBTensor::DataType::mgb_dtype; \ - break; - map_dtype(FLOAT32, Float); - map_dtype(FLOAT16, Half); - map_dtype(INT32, Int); - map_dtype(INT16, Short); - map_dtype(INT8, Char); - map_dtype(UINT8, Byte); -#undef map_dtype - default: - throw std::runtime_error("bad case for data type."); - } - - // TODO: cuda setting and synchronization like mgb_to_torch - if (src.device().type() == torch::DeviceType::CUDA) { - desc.type = MGBTensor::Type::CUDA; - desc.cuda_ctx.device = src.get_device(); - desc.cuda_ctx.stream = nullptr; - } else { - assert(src.device().type() == torch::DeviceType::CPU); - desc.type = MGBTensor::Type::CUDA; - } - - mgb::pubapi::CallbackOnce deleter; - deleter.user_data = new torch::Tensor(src); - deleter.fptr = [](void* ptr) { - delete static_cast(ptr); - }; - dst->forward_other_memory(desc, deleter); -} - -torch::Tensor inp_mem_fwd(uintptr_t dv_ptr) { - // construct torch Tensor from mgb DeviceTensor stored in dv_ptr. - return mgb_to_torch(reinterpret_cast(dv_ptr)); -} - -void oup_mem_fwd(uintptr_t dv_ptr, torch::Tensor src, - bool keep_data_ptr=false) { - // forward storage in torch Tensor to mgb DeviceTensor - // keep_data_ptr: set to True to ensure forwarding data_ptr under \p src - // to megbrain, or it maybe copy src to a new contiguous tensor storage. - - // which would return src itself if tensor is contiguous - auto src_contig = src.contiguous(); - - if (keep_data_ptr && src_contig.data_ptr() != src.data_ptr()) { - throw std::runtime_error("should keep tensor data ptr, but it changed"); - } - torch_to_mgb(reinterpret_cast(dv_ptr), src_contig); -} - -PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { - m.def("inp_mem_fwd", &inp_mem_fwd, "Forward mgb DeviceTensor ptr into torch Tensor as network input."); - m.def("oup_mem_fwd", &oup_mem_fwd, "Forward torch network Tensor to corresponding mgb VarNode.", - py::arg("dv_ptr"), py::arg("src"), py::arg("keep_data_ptr") = false); -} diff --git a/python_module/megengine/module/pytorch/utils.py b/python_module/megengine/module/pytorch/utils.py deleted file mode 100644 index fea87bfb..00000000 --- a/python_module/megengine/module/pytorch/utils.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import torch - -import megengine._internal as mgb - -_TORCH_NUMPY_MAPPING = { - torch.float16: np.float16, - torch.float32: np.float32, - torch.float64: np.float64, - torch.int8: np.int8, - torch.int16: np.int16, - torch.int32: np.int32, -} - - -def torch_dtype_to_numpy_dtype(torch_dtype: torch.dtype): - """map torch dtype to numpy dtype - - :param torch_dtype: torch dtype - :return: numpy dtype - """ - if not isinstance(torch_dtype, torch.dtype): - raise TypeError("Argument `torch_dtype` should be an instance of torch.dtype") - if torch_dtype not in _TORCH_NUMPY_MAPPING: - raise ValueError("Unknown PyTorch dtype: {}".format(torch_dtype)) - return _TORCH_NUMPY_MAPPING[torch_dtype] - - -def torch_device_to_device(device: torch.device): - """map torch device to device - - :param device: torch device - :return: device - """ - if not isinstance(device, torch.device): - raise TypeError("Argument `device` should be an instance of torch.device") - index = device.index - if index is None: - index = "x" - if device.type == "cpu": - return "cpu{}".format(index) - elif device.type == "cuda": - return "gpu{}".format(index) - raise ValueError("Unknown PyTorch device: {}".format(device)) - - -def device_to_torch_device(device: mgb.CompNode): - """map device to torch device - - :param device: megbrain compute node - :return: corresponding torch device - """ - t, d, _ = device.locator_physical - if t == "CUDA": - return torch.device("cuda", d) - elif t == "CPU": - return torch.device("cpu", d) - else: - raise Exception("Unsupported device type: {}".format(t)) diff --git a/python_module/megengine/module/qat/__init__.py b/python_module/megengine/module/qat/__init__.py deleted file mode 100644 index b6adab4d..00000000 --- a/python_module/megengine/module/qat/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .concat import Concat -from .conv import Conv2d, ConvRelu2d -from .conv_bn import ConvBn2d, ConvBnRelu2d -from .elemwise import Elemwise -from .linear import Linear -from .module import QATModule -from .quant_dequant import DequantStub, QuantStub diff --git a/python_module/megengine/module/qat/concat.py b/python_module/megengine/module/qat/concat.py deleted file mode 100644 index 893b1ad0..00000000 --- a/python_module/megengine/module/qat/concat.py +++ /dev/null @@ -1,30 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable - -from ...core.tensor import Tensor -from .. import concat as Float -from .module import QATModule - - -class Concat(Float.Concat, QATModule): - r""" - A :class:`~.QATModule` to do functional concat with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - """ - - def forward(self, inps: Iterable[Tensor], axis: int = 0): - return self.apply_quant_activation(super().forward(inps, axis)) - - @classmethod - def from_float_module(cls, float_module): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - return cls() diff --git a/python_module/megengine/module/qat/conv.py b/python_module/megengine/module/qat/conv.py deleted file mode 100644 index 315da839..00000000 --- a/python_module/megengine/module/qat/conv.py +++ /dev/null @@ -1,59 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ... import functional as F -from ...quantization.utils import fake_quant_bias -from .. import conv as Float -from .module import QATModule - - -class Conv2d(Float.Conv2d, QATModule): - r""" - A :class:`~.QATModule` Conv2d with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - """ - - def calc_conv_qat(self, inp): - w_qat = self.apply_quant_weight(self.weight) - b_qat = fake_quant_bias(self.bias, inp, w_qat) - conv = self.calc_conv(inp, w_qat, b_qat) - return conv - - @classmethod - def from_float_module(cls, float_module: Float.Conv2d): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - qat_module = cls( - float_module.in_channels, - float_module.out_channels, - float_module.kernel_size, - float_module.stride, - float_module.padding, - float_module.dilation, - float_module.groups, - float_module.bias is not None, - float_module.conv_mode.name, - float_module.compute_mode.name, - ) - qat_module.weight = float_module.weight - qat_module.bias = float_module.bias - return qat_module - - def forward(self, inp): - return self.apply_quant_activation(self.calc_conv_qat(inp)) - - -class ConvRelu2d(Conv2d): - r""" - A :class:`~.QATModule` include Conv2d and Relu with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - """ - - def forward(self, inp): - return self.apply_quant_activation(F.relu(self.calc_conv_qat(inp))) diff --git a/python_module/megengine/module/qat/conv_bn.py b/python_module/megengine/module/qat/conv_bn.py deleted file mode 100644 index 9ed6ebab..00000000 --- a/python_module/megengine/module/qat/conv_bn.py +++ /dev/null @@ -1,196 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ...core import ones, zeros -from ...functional import add_update, relu, sqrt, sum, zero_grad -from ...quantization.utils import fake_quant_bias -from .. import conv_bn as Float -from .module import QATModule - - -class _ConvBnActivation2d(Float._ConvBnActivation2d, QATModule): - def get_batch_mean_var(self, inp): - def _sum_channel(inp, axis=0, keepdims=True): - if isinstance(axis, int): - out = sum(inp, axis=axis, keepdims=keepdims) - elif isinstance(axis, tuple): - for idx, elem in enumerate(axis): - out = sum(inp if idx == 0 else out, axis=elem, keepdims=keepdims) - return out - - sum1 = _sum_channel(inp, (0, 2, 3)) - sum2 = _sum_channel(inp ** 2, (0, 2, 3)) - reduce_size = inp.shapeof().prod() / inp.shapeof(1) - batch_mean = sum1 / reduce_size - batch_var = (sum2 - sum1 ** 2 / reduce_size) / reduce_size - return batch_mean, batch_var - - def fold_weight_bias(self, bn_mean, bn_var): - # get fold bn conv param - # bn_istd = 1 / bn_std - # w_fold = gamma / bn_std * W - # b_fold = gamma * (b - bn_mean) / bn_std + beta - gamma = self.bn.weight - if gamma is None: - gamma = ones((self.bn.num_features), dtype="float32") - gamma = gamma.reshape(1, -1, 1, 1) - beta = self.bn.bias - if beta is None: - beta = zeros((self.bn.num_features), dtype="float32") - beta = beta.reshape(1, -1, 1, 1) - - if bn_mean is None: - bn_mean = zeros((1, self.bn.num_features, 1, 1), dtype="float32") - if bn_var is None: - bn_var = ones((1, self.bn.num_features, 1, 1), dtype="float32") - - conv_bias = self.conv.bias - if conv_bias is None: - conv_bias = zeros(self.conv._infer_bias_shape(), dtype="float32") - - bn_istd = 1.0 / sqrt(bn_var + self.bn.eps) - # bn_istd = 1 / bn_std - # w_fold = gamma / bn_std * W - scale_factor = gamma * bn_istd - if self.conv.groups == 1: - w_fold = self.conv.weight * scale_factor.reshape(-1, 1, 1, 1) - else: - w_fold = self.conv.weight * scale_factor.reshape( - self.conv.groups, -1, 1, 1, 1 - ) - - w_fold = self.apply_quant_weight(w_fold) - # b_fold = gamma * (b - bn_mean) / bn_std + beta - b_fold = beta + gamma * (conv_bias - bn_mean) * bn_istd - return w_fold, b_fold - - def update_running_mean_and_running_var( - self, bn_mean, bn_var, num_elements_per_channel - ): - # update running mean and running var. no grad, use unbiased bn var - bn_mean = zero_grad(bn_mean) - bn_var = ( - zero_grad(bn_var) - * num_elements_per_channel - / (num_elements_per_channel - 1) - ) - exponential_average_factor = 1 - self.bn.momentum - add_update( - self.bn.running_mean, - delta=bn_mean, - alpha=1 - exponential_average_factor, - beta=exponential_average_factor, - ) - add_update( - self.bn.running_var, - delta=bn_var, - alpha=1 - exponential_average_factor, - beta=exponential_average_factor, - ) - - def calc_conv_bn_qat(self, inp, approx=True): - if self.training and not approx: - conv = self.conv(inp) - bn_mean, bn_var = self.get_batch_mean_var(conv) - num_elements_per_channel = conv.shapeof().prod() / conv.shapeof(1) - self.update_running_mean_and_running_var( - bn_mean, bn_var, num_elements_per_channel - ) - else: - bn_mean, bn_var = self.bn.running_mean, self.bn.running_var - - # get gamma and beta in BatchNorm - gamma = self.bn.weight - if gamma is None: - gamma = ones((self.bn.num_features), dtype="float32") - gamma = gamma.reshape(1, -1, 1, 1) - beta = self.bn.bias - if beta is None: - beta = zeros((self.bn.num_features), dtype="float32") - beta = beta.reshape(1, -1, 1, 1) - # conv_bias - conv_bias = self.conv.bias - if conv_bias is None: - conv_bias = zeros(self.conv._infer_bias_shape(), dtype="float32") - - bn_istd = 1.0 / sqrt(bn_var + self.bn.eps) - # bn_istd = 1 / bn_std - # w_fold = gamma / bn_std * W - scale_factor = gamma * bn_istd - if self.conv.groups == 1: - w_fold = self.conv.weight * scale_factor.reshape(-1, 1, 1, 1) - else: - w_fold = self.conv.weight * scale_factor.reshape( - self.conv.groups, -1, 1, 1, 1 - ) - b_fold = None - if not (self.training and approx): - # b_fold = gamma * (conv_bias - bn_mean) / bn_std + beta - b_fold = beta + gamma * (conv_bias - bn_mean) * bn_istd - - w_qat = self.apply_quant_weight(w_fold) - b_qat = fake_quant_bias(b_fold, inp, w_qat) - conv = self.conv.calc_conv(inp, w_qat, b_qat) - if not (self.training and approx): - return conv - - # rescale conv to get original conv output - orig_conv = conv / scale_factor.reshape(1, -1, 1, 1) - if self.conv.bias is not None: - orig_conv = orig_conv + self.conv.bias - # calculate batch norm - bn_mean, bn_var = self.get_batch_mean_var(orig_conv) - bn_istd = 1.0 / sqrt(bn_var + self.bn.eps) - conv = gamma * bn_istd * (orig_conv - bn_mean) + beta - num_elements_per_channel = conv.shapeof().prod() / conv.shapeof(1) - self.update_running_mean_and_running_var( - bn_mean, bn_var, num_elements_per_channel - ) - return conv - - @classmethod - def from_float_module(cls, float_module: Float._ConvBnActivation2d): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - qat_module = cls( - float_module.conv.in_channels, - float_module.conv.out_channels, - float_module.conv.kernel_size, - float_module.conv.stride, - float_module.conv.padding, - float_module.conv.dilation, - float_module.conv.groups, - float_module.conv.bias is not None, - float_module.conv.conv_mode.name, - float_module.conv.compute_mode.name, - ) - qat_module.conv.weight = float_module.conv.weight - qat_module.conv.bias = float_module.conv.bias - qat_module.bn = float_module.bn - return qat_module - - -class ConvBn2d(_ConvBnActivation2d): - r""" - A fused :class:`~.QATModule` including Conv2d, BatchNorm2d with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - """ - - def forward(self, inp): - return self.apply_quant_activation(self.calc_conv_bn_qat(inp)) - - -class ConvBnRelu2d(_ConvBnActivation2d): - r""" - A fused :class:`~.QATModule` including Conv2d, BatchNorm2d and relu with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - """ - - def forward(self, inp): - return self.apply_quant_activation(relu(self.calc_conv_bn_qat(inp))) diff --git a/python_module/megengine/module/qat/elemwise.py b/python_module/megengine/module/qat/elemwise.py deleted file mode 100644 index f99583bd..00000000 --- a/python_module/megengine/module/qat/elemwise.py +++ /dev/null @@ -1,31 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .. import elemwise as Float -from .module import QATModule - - -class Elemwise(Float.Elemwise, QATModule): - r""" - A :class:`~.QATModule` to do elemwise operator with QAT support. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - - :param method: the elemwise method, see :class:`~.module.elemwise.Elemwise` for detail. - """ - - with_weight = False - - def forward(self, *inps): - return self.apply_quant_activation(super().forward(*inps)) - - @classmethod - def from_float_module(cls, float_module: Float.Elemwise): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - return cls(float_module.method.name) diff --git a/python_module/megengine/module/qat/linear.py b/python_module/megengine/module/qat/linear.py deleted file mode 100644 index 4067d51c..00000000 --- a/python_module/megengine/module/qat/linear.py +++ /dev/null @@ -1,39 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ...quantization.utils import fake_quant_bias -from .. import linear as Float -from .module import QATModule - - -class Linear(Float.Linear, QATModule): - r""" - A :class:`~.QATModule` version of :class:`~.module.linear.Linear`. - Could be applied with :class:`~.Observer` and :class:`~.FakeQuantize`. - - :param in_features: size of each input sample. - :param out_features: size of each output sample. - :param bias: If set to ``False``, the layer will not learn an additive bias. - Default: ``True`` - - """ - - def forward(self, x): - w_qat = self.apply_quant_weight(self.weight) - b_qat = fake_quant_bias(self.bias, x, w_qat) - return self.apply_quant_activation(self._calc_linear(x, w_qat, b_qat)) - - @classmethod - def from_float_module(cls, float_module: Float.Linear): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - qmod = cls(float_module.in_features, float_module.out_features) - qmod.weight = float_module.weight - qmod.bias = float_module.bias - return qmod diff --git a/python_module/megengine/module/qat/module.py b/python_module/megengine/module/qat/module.py deleted file mode 100644 index c7cb80cb..00000000 --- a/python_module/megengine/module/qat/module.py +++ /dev/null @@ -1,154 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import abstractmethod - -from ...core import Tensor -from ...quantization import FakeQuantize, Observer, QConfig -from ..module import Module - - -class QATModule(Module): - r""" - Base class of quantized-float related Module, basically for QAT and Calibration. - - Use :meth:`~.QATModule.from_float_module` to generate a instance from float :class:`~.Module`. - Or use :func:`~.quantize.quantize_qat` to do it recursively and automatically. - - Can also be converted to :class:`~.QuantizedModule` for deployment using - :func:`~.quantize.quantize` further. - """ - - with_weight = True - with_act = True - - def __init__(self): - super().__init__() - - self.weight_observer = None # type: Observer - self.act_observer = None # type: Observer - - self.weight_fake_quant = None # type: FakeQuantize - self.act_fake_quant = None # type: FakeQuantize - - def set_qconfig(self, qconfig: QConfig): - r""" - Set quantization related configs with ``qconfig``, including - observer and fake_quant for weight and activation. - """ - - def safe_call(func): - return func() if func is not None else None - - if self.with_act: - self.act_observer = safe_call(qconfig.act_observer) - self.act_fake_quant = safe_call(qconfig.act_fake_quant) - if self.with_weight: - self.weight_observer = safe_call(qconfig.weight_observer) - self.weight_fake_quant = safe_call(qconfig.weight_fake_quant) - - def _enable_exec(self, with_module, func, enable): - if not with_module or not func: - return - if enable: - func.enable() - else: - func.disable() - - def set_fake_quant(self, enable): - self._enable_exec(self.with_act, self.act_fake_quant, enable) - self._enable_exec(self.with_weight, self.weight_fake_quant, enable) - - def set_observer(self, enable): - self._enable_exec(self.with_act, self.act_observer, enable) - self._enable_exec(self.with_weight, self.weight_observer, enable) - - def _apply_fakequant_with_observer( - self, target: Tensor, fake_quant: FakeQuantize, observer: Observer - ): - # do observer - if observer is None: - oup = target - q_dict = None - else: - oup = observer(target) - q_dict = observer.get_qparams() - # do fake quant - if fake_quant is not None: - oup = fake_quant(oup, q_dict) - # use qparams of fake_quant if have. - if hasattr(fake_quant, "get_qparams"): - q_dict = fake_quant.get_qparams() - # set to tensor qparams. - if q_dict is not None: - oup.q_dict.update(q_dict) - return oup - - def apply_quant_weight(self, target: Tensor): - r""" - Apply weight's observer and fake_quant from ``qconfig`` on ``target``. - """ - return self._apply_fakequant_with_observer( - target, self.weight_fake_quant, self.weight_observer - ) - - def apply_quant_activation(self, target: Tensor): - r""" - Apply weight's observer and fake_quant from ``qconfig`` on ``target``. - """ - return self._apply_fakequant_with_observer( - target, self.act_fake_quant, self.act_observer - ) - - def _get_method_result( - self, method: str, fake_quant: FakeQuantize, observer: Observer - ): - if hasattr(fake_quant, method): - return getattr(fake_quant, method)() - elif hasattr(observer, method): - return getattr(observer, method)() - return None - - def get_weight_dtype(self): - r""" - Get weight's quantization dtype as the method from ``qconfig``. - """ - return self._get_method_result( - "get_dtype", self.weight_fake_quant, self.weight_observer - ) - - def get_activation_dtype(self): - r""" - Get activation's quantization dtype as the method from ``qconfig``. - """ - return self._get_method_result( - "get_dtype", self.act_fake_quant, self.act_observer - ) - - def get_weight_qparams(self): - r""" - Get weight's quantization parameters. - """ - return self._get_method_result( - "get_qparams", self.weight_fake_quant, self.weight_observer - ) - - def get_activation_qparams(self): - r""" - Get activation's quantization parameters. - """ - return self._get_method_result( - "get_qparams", self.act_fake_quant, self.act_observer - ) - - @classmethod - @abstractmethod - def from_float_module(cls, float_module: Module): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ diff --git a/python_module/megengine/module/qat/quant_dequant.py b/python_module/megengine/module/qat/quant_dequant.py deleted file mode 100644 index 0baa3e1c..00000000 --- a/python_module/megengine/module/qat/quant_dequant.py +++ /dev/null @@ -1,50 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .. import quant_dequant as Float -from .module import QATModule - - -class QuantStub(Float.QuantStub, QATModule): - r""" - A helper QATModule simply return input, but will quantize - input after converted to :class:`~.QuantizedModule`. - """ - - with_weight = False - - def forward(self, inp): - return self.apply_quant_activation(inp) - - @classmethod - def from_float_module(cls, float_module: Float.QuantStub): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - return cls() - - -class DequantStub(Float.DequantStub, QATModule): - r""" - A helper QATModule simply return input, but will de-quantize - input after converted to :class:`~.QuantizedModule`. - """ - - with_weight = False - with_act = False - - def forward(self, inp): - return inp - - @classmethod - def from_float_module(cls, float_module: Float.DequantStub): - r""" - Return a :class:`~.QATModule` instance converted from - a float :class:`~.Module` instance. - """ - return cls() diff --git a/python_module/megengine/module/quant_dequant.py b/python_module/megengine/module/quant_dequant.py deleted file mode 100644 index aaf2b0cc..00000000 --- a/python_module/megengine/module/quant_dequant.py +++ /dev/null @@ -1,28 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .module import Module - - -class QuantStub(Module): - r""" - A helper :class:`~.Module` simply returning input. Could be replaced with :class:`~.QATModule` - version :class:`~.qat.QuantStub` using :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inp): - return inp - - -class DequantStub(Module): - r""" - A helper :class:`~.Module` simply returning input. Could be replaced with :class:`~.QATModule` - version :class:`~.qat.DequantStub` using :func:`~.quantize.quantize_qat`. - """ - - def forward(self, inp): - return inp diff --git a/python_module/megengine/module/quantized/__init__.py b/python_module/megengine/module/quantized/__init__.py deleted file mode 100644 index e641476d..00000000 --- a/python_module/megengine/module/quantized/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .concat import Concat -from .conv import Conv2d, ConvRelu2d -from .conv_bn import ConvBn2d, ConvBnRelu2d -from .elemwise import Elemwise -from .linear import Linear -from .module import QuantizedModule -from .quant_dequant import DequantStub, QuantStub diff --git a/python_module/megengine/module/quantized/concat.py b/python_module/megengine/module/quantized/concat.py deleted file mode 100644 index f9ef05d9..00000000 --- a/python_module/megengine/module/quantized/concat.py +++ /dev/null @@ -1,35 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable - -from ... import functional as F -from ...core.tensor import Tensor -from ..qat import concat as QAT -from .module import QuantizedModule - - -class Concat(QuantizedModule): - r""" - A :class:`~.QuantizedModule` to do quantized concat, inference only. - """ - - def __init__(self, dtype=None): - super().__init__() - self.output_dtype = dtype - - def forward(self, inps: Iterable[Tensor], axis: int = 0): - new_inps = (x.astype(self.output_dtype) for x in inps) - return F.concat(new_inps, axis) - - @classmethod - def from_qat_module(cls, qat_module: QAT.Concat): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - return cls(qat_module.get_activation_dtype()) diff --git a/python_module/megengine/module/quantized/conv.py b/python_module/megengine/module/quantized/conv.py deleted file mode 100644 index 3118451d..00000000 --- a/python_module/megengine/module/quantized/conv.py +++ /dev/null @@ -1,108 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Tuple, Union - -import numpy as np - -import megengine._internal as mgb - -from ... import module as Float -from ...core import Parameter -from ...functional import conv_bias_activation -from ..qat import conv as QAT -from .module import QuantizedModule - - -class Conv2d(Float.Conv2d, QuantizedModule): - r"""quantized version of :class:`~.qat.conv.Conv2d`.""" - r"""Applies a 2D convolution over an quantized input tensor, inference only. - - The parameter is same with :class: `~.Conv2d` - """ - - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: Union[int, Tuple[int, int]], - stride: Union[int, Tuple[int, int]] = 1, - padding: Union[int, Tuple[int, int]] = 0, - dilation: Union[int, Tuple[int, int]] = 1, - groups: int = 1, - conv_mode: str = "CROSS_CORRELATION", - compute_mode: str = "DEFAULT", - dtype=None, - ): - super().__init__( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - groups, - True, - conv_mode, - compute_mode, - ) - self.output_dtype = dtype - - def calc_conv_quantized(self, inp, nonlinear_mode="IDENTITY"): - inp_scale = mgb.dtype.get_scale(inp.dtype) - w_scale = mgb.dtype.get_scale(self.weight.dtype) - bias_scale = inp_scale * w_scale - return conv_bias_activation( - inp, - self.weight, - self.bias.astype(mgb.dtype.qint32(bias_scale)), - self.output_dtype, - self.stride, - self.padding, - self.dilation, - self.groups, - conv_mode=self.conv_mode, - compute_mode=self.compute_mode, - nonlinear_mode=nonlinear_mode, - ) - - @classmethod - def from_qat_module(cls, qat_module: QAT.Conv2d): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - output_dtype = qat_module.get_activation_dtype() - qconv = cls( - qat_module.in_channels, - qat_module.out_channels, - qat_module.kernel_size, - qat_module.stride, - qat_module.padding, - qat_module.dilation, - qat_module.groups, - dtype=output_dtype, - ) - weight = qat_module.weight.astype(qat_module.get_weight_dtype()) - qconv.weight = Parameter(weight.numpy()) - if qat_module.bias is not None: - qconv.bias = Parameter(qat_module.bias.numpy()) - else: - qconv.bias = Parameter( - np.zeros(qat_module._infer_bias_shape(), dtype=np.float32) - ) - return qconv - - def forward(self, inp): - return self.calc_conv_quantized(inp, nonlinear_mode="IDENTITY") - - -class ConvRelu2d(Conv2d): - r"""quantized version of :class:`~.qat.conv.ConvRelu2d`.""" - - def forward(self, inp): - return self.calc_conv_quantized(inp, nonlinear_mode="RELU") diff --git a/python_module/megengine/module/quantized/conv_bn.py b/python_module/megengine/module/quantized/conv_bn.py deleted file mode 100644 index ceb36d13..00000000 --- a/python_module/megengine/module/quantized/conv_bn.py +++ /dev/null @@ -1,56 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ...core import Parameter -from ..qat import conv_bn as QAT -from .conv import Conv2d - - -class _ConvBnActivation2d(Conv2d): - r"""Applies a 2D convolution over an quantized input tensor, inference only. - - The parameter is same with :class: `~.Conv2d` - """ - - @classmethod - def from_qat_module(cls, qat_module: QAT._ConvBnActivation2d): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - output_dtype = qat_module.get_activation_dtype() - qconv = cls( - qat_module.conv.in_channels, - qat_module.conv.out_channels, - qat_module.conv.kernel_size, - qat_module.conv.stride, - qat_module.conv.padding, - qat_module.conv.dilation, - qat_module.conv.groups, - dtype=output_dtype, - ) - w_fold, b_fold = qat_module.fold_weight_bias( - qat_module.bn.running_mean, qat_module.bn.running_var - ) - weight = w_fold.astype(qat_module.get_weight_dtype()) - qconv.weight = Parameter(weight.numpy()) - qconv.bias = Parameter(b_fold.numpy()) - return qconv - - -class ConvBn2d(_ConvBnActivation2d): - r"""quantized version of :class:`~.qat.conv_bn.ConvBn2d`.""" - - def forward(self, inp): - return self.calc_conv_quantized(inp, nonlinear_mode="IDENTITY") - - -class ConvBnRelu2d(_ConvBnActivation2d): - r"""quantized version of :class:`~.qat.conv_bn.ConvBnRelu2d`.""" - - def forward(self, inp): - return self.calc_conv_quantized(inp, nonlinear_mode="RELU") diff --git a/python_module/megengine/module/quantized/elemwise.py b/python_module/megengine/module/quantized/elemwise.py deleted file mode 100644 index db04ed65..00000000 --- a/python_module/megengine/module/quantized/elemwise.py +++ /dev/null @@ -1,47 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ... import _internal as mgb -from ...core import Tensor, wrap_io_tensor -from ...core.graph import _use_default_if_none -from ..qat import elemwise as QAT -from .module import QuantizedModule - - -@wrap_io_tensor -def _elemwise_multi_type(mode, *inputs, **kwargs) -> Tensor: - if all(isinstance(i, (int, float)) for i in inputs): - device, comp_graph = _use_default_if_none(None, None) - ret = mgb.opr.elemwise_multi_type( - *inputs, mode=mode, comp_node=device, comp_graph=comp_graph, **kwargs, - ) - return ret.inferred_value[0] - return mgb.opr.elemwise_multi_type(*inputs, mode=mode, **kwargs) - - -class Elemwise(QuantizedModule): - r"""quantized version of :class:`~.qat.elemwise.Elemwise`.""" - - _elemwise_multi_type_mode = mgb.opr_param_defs.ElemwiseMultiType.Mode - - def __init__(self, method, dtype=None): - super().__init__() - self.method = self._elemwise_multi_type_mode.convert("Q" + method) - self.output_dtype = dtype - - def forward(self, *inps): - if self.training: - raise ValueError("quantized module only support inference.") - return _elemwise_multi_type(self.method, *inps, dtype=self.output_dtype) - - @classmethod - def from_qat_module(cls, qat_module: QAT.Elemwise): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - return cls(qat_module.method.name, qat_module.get_activation_dtype()) diff --git a/python_module/megengine/module/quantized/linear.py b/python_module/megengine/module/quantized/linear.py deleted file mode 100644 index a6e61a6e..00000000 --- a/python_module/megengine/module/quantized/linear.py +++ /dev/null @@ -1,55 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine._internal as mgb - -from ... import functional as F -from ...core import Parameter -from ..qat import linear as QAT -from .module import QuantizedModule - - -class Linear(QuantizedModule): - r"""quantized version of :class:`~.qat.linear.Linear`.""" - - def __init__( - self, dtype: np.dtype = None, - ): - super().__init__() - self.weight = None - self.bias = None - self.output_dtype = dtype - - def forward(self, inp): - if self.training: - raise ValueError("quantized module only support inference.") - inp_scale = mgb.dtype.get_scale(inp.dtype) - w_scale = mgb.dtype.get_scale(self.weight.dtype) - bias_dtype = mgb.dtype.qint32(inp_scale * w_scale) - ret = F.linear( - inp, - self.weight, - None if self.bias is None else self.bias.astype(bias_dtype), - ) - ret = ret if self.output_dtype is None else ret.astype(self.output_dtype) - return ret - - @classmethod - def from_qat_module(cls, qat_module: QAT.Linear): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - output_dtype = qat_module.get_activation_dtype() - qmod = cls(dtype=output_dtype) - weight = qat_module.weight.astype(qat_module.get_weight_dtype()) - qmod.weight = Parameter(weight.numpy()) - if qat_module.bias is not None: - qmod.bias = Parameter(qat_module.bias.numpy()) - return qmod diff --git a/python_module/megengine/module/quantized/module.py b/python_module/megengine/module/quantized/module.py deleted file mode 100644 index 4fccdbfa..00000000 --- a/python_module/megengine/module/quantized/module.py +++ /dev/null @@ -1,31 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import abstractmethod - -from ..module import Module -from ..qat import QATModule - - -class QuantizedModule(Module): - r""" - Base class of quantized Module, which should be converted from QATModule - and not support traning. - """ - - def __call__(self, *inputs, **kwargs): - if self.training: - raise ValueError("quantized module only support inference.") - return super().__call__(*inputs, **kwargs) - - @classmethod - @abstractmethod - def from_qat_module(cls, qat_module: QATModule): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ diff --git a/python_module/megengine/module/quantized/quant_dequant.py b/python_module/megengine/module/quantized/quant_dequant.py deleted file mode 100644 index 0c245011..00000000 --- a/python_module/megengine/module/quantized/quant_dequant.py +++ /dev/null @@ -1,49 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from ..qat import quant_dequant as QAT -from .module import QuantizedModule - - -class QuantStub(QuantizedModule): - r""" - quantized version of :class:`~.qat.quant_dequant.QuantStub`, - will convert input to quantized dtype. - """ - - def __init__(self, dtype=None): - super().__init__() - self.output_dtype = dtype - - def forward(self, inp): - return inp.astype(self.output_dtype) - - @classmethod - def from_qat_module(cls, qat_module: QAT.QuantStub): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - return cls(qat_module.get_activation_dtype()) - - -class DequantStub(QuantizedModule): - r""" - quantized version of :class:`~.qat.quant_dequant.DequantStub`, - will restore quantized input to float32 dtype. - """ - - def forward(self, inp): - return inp.astype("float32") - - @classmethod - def from_qat_module(cls, qat_module: QAT.DequantStub): - r""" - return a :class:`~.QuantizedModule` instance converted from a - :class:`~.QATModule` instance. - """ - return cls() diff --git a/python_module/megengine/module/sequential.py b/python_module/megengine/module/sequential.py deleted file mode 100644 index 01291e98..00000000 --- a/python_module/megengine/module/sequential.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from collections import OrderedDict - -from .module import Module - - -class Sequential(Module): - r"""A sequential container. - Modules will be added to it in the order they are passed in the constructor. - Alternatively, an ordered dict of modules can also be passed in. - - To make it easier to understand, here is a small example: - - .. testcode:: - from collections import OrderedDict - import numpy as np - import megengine.functional as F - from megengine.module import Sequential, Linear - from megengine import tensor - - batch_size = 64 - data = tensor(np.zeros((batch_size, 1, 28, 28)), dtype=np.float32) - label = tensor(np.zeros(batch_size,), dtype=np.int32) - - data = data.reshape(batch_size, -1) - - net0 = Sequential( - Linear(28 * 28, 320), - Linear(320, 10) - ) - - pred0 = net0(data) - - modules = OrderedDict() - modules["fc0"] = Linear(28 * 28, 320) - modules["fc1"] = Linear(320, 10) - net1 = Sequential(modules) - - pred1 = net1(data) - """ - - def __init__(self, *args): - super().__init__() - self.layer_keys = [] - if len(args) == 1 and isinstance(args[0], OrderedDict): - for key, module in args[0].items(): - # self.add_module(key, module) - setattr(self, key, module) - self.layer_keys.append(key) - else: - for idx, module in enumerate(args): - # self.add_module(str(idx), module) - setattr(self, str(idx), module) - self.layer_keys.append(str(idx)) - - def __getitem__(self, idx): - if isinstance(idx, slice): - return self.__class__( - OrderedDict(zip(self.layer_keys[idx], self.layer_values[idx])) - ) - else: - return getattr(self, self.layer_keys[idx]) - - def __setitem__(self, idx, module): - key = self.layer_keys[idx] - return setattr(self, key, module) - - def __delitem__(self, idx): - if isinstance(idx, slice): - for key in self.layer_keys[idx]: - delattr(self, key) - del self.layer_keys[idx] - else: - delattr(self, self.layer_keys[idx]) - del self.layer_keys[idx] - - def __len__(self): - return len(self.layer_keys) - - def __iter__(self): - return iter(self.layer_values) - - @property - def layer_values(self): - return [getattr(self, key) for key in self.layer_keys] - - def forward(self, inp): - for layer in self.layer_values: - inp = layer(inp) - return inp diff --git a/python_module/megengine/optimizer/__init__.py b/python_module/megengine/optimizer/__init__.py deleted file mode 100644 index ad783e06..00000000 --- a/python_module/megengine/optimizer/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .adadelta import Adadelta -from .adagrad import Adagrad -from .adam import Adam -from .lr_scheduler import LRScheduler -from .multi_step_lr import MultiStepLR -from .optimizer import Optimizer -from .sgd import SGD diff --git a/python_module/megengine/optimizer/adadelta.py b/python_module/megengine/optimizer/adadelta.py deleted file mode 100644 index 7d793608..00000000 --- a/python_module/megengine/optimizer/adadelta.py +++ /dev/null @@ -1,78 +0,0 @@ -from typing import Iterable, Union - -import numpy as np - -from ..core import Buffer, Parameter -from ..functional import sqrt -from .internal import add_update_fastpath as add_update -from .optimizer import Optimizer - - -class Adadelta(Optimizer): - r"""Implements Adadelta algorithm. - - It has been proposed in `"ADADELTA: An Adaptive Learning Rate Method" `_. - - :param params: iterable of parameters to optimize or dicts defining - parameter groups. - :param lr: coefficient that scale delta before it is applied - to the parameters (default: 1.0). - :param rho: coefficient used for computing a running average - of squared gradients (default: 0.9). - :param eps: term added to the denominator to improve - numerical stability (default: 1e-6). - :param weight_decay: weight decay (L2 penalty) (default: 0). - """ - - def __init__( - self, - params: Union[Iterable[Parameter], dict], - lr: float = 1.0, - rho: float = 0.9, - eps: float = 1e-6, - weight_decay: float = 0.0, - ): - assert lr >= 0.0, "Invalid learning rate: {}".format(lr) - assert rho >= 0.0 and rho <= 1.0, "Invalid rho value: {}".format(rho) - assert eps >= 0.0, "Invalid epsilon value: {}".format(eps) - assert weight_decay >= 0.0, "Invalid weight_decay value: {}".format( - weight_decay - ) - - defaults = dict(lr=lr, rho=rho, eps=eps, weight_decay=weight_decay) - super().__init__(params, defaults) - - def _create_state(self, param_group): - for param in param_group["params"]: - self._add_state(param, "square_avg") - self._add_state(param, "acc_delta") - self._add_state(param, "step", initializer=0.0) - - def _updates(self, param_group): - lr = param_group["lr"] - weight_decay = param_group["weight_decay"] - rho = param_group["rho"] - eps = param_group["eps"] - - for param in param_group["params"]: - if not isinstance(param.grad, Buffer): - raise TypeError( - "grad must be a Buffer, maybe you forget to call backward()?" - ) - - if not param.requires_grad: - continue - - step = self._state[param]["step"] - step = add_update(step, 1) - grad = param.grad - if weight_decay != 0.0: - grad = add_update(grad, param, beta=weight_decay) - - square_avg = self._state[param]["square_avg"] - acc_delta = self._state[param]["acc_delta"] - square_avg = add_update(square_avg, grad ** 2, alpha=rho, beta=1 - rho) - std = sqrt(square_avg + eps) - delta = sqrt(acc_delta + eps) / std * grad - add_update(param, delta, beta=-lr) - acc_delta = add_update(acc_delta, delta ** 2, alpha=rho, beta=1 - rho) diff --git a/python_module/megengine/optimizer/adagrad.py b/python_module/megengine/optimizer/adagrad.py deleted file mode 100644 index 4683fa10..00000000 --- a/python_module/megengine/optimizer/adagrad.py +++ /dev/null @@ -1,75 +0,0 @@ -from typing import Iterable, Union - -import numpy as np - -from ..core import Buffer, Parameter -from ..functional import sqrt -from .internal import add_update_fastpath as add_update -from .optimizer import Optimizer - - -class Adagrad(Optimizer): - r"""Implements Adagrad algorithm. - - It has been proposed in `"Adaptive Subgradient Methods for Online Learning - and Stochastic Optimization" `_. - - :param params: iterable of parameters to optimize or dicts defining - parameter groups. - :param lr: coefficient that scale delta before it is applied - to the parameters (default: 1e-2). - :param lr_decay: learning rate decay (default: 0) - :param eps: term added to the denominator to improve - numerical stability (default: 1e-10). - :param weight_decay: weight decay (L2 penalty) (default: 0). - """ - - def __init__( - self, - params: Union[Iterable[Parameter], dict], - lr: float = 1e-2, - lr_decay: float = 0.0, - eps: float = 1e-10, - weight_decay: float = 0.0, - ): - assert lr >= 0.0, "Invalid learning rate: {}".format(lr) - assert lr_decay >= 0, "Invalid learning rate decay: {}".format(lr_decay) - assert eps >= 0.0, "Invalid epsilon value: {}".format(eps) - assert weight_decay >= 0.0, "Invalid weight_decay value: {}".format( - weight_decay - ) - - defaults = dict(lr=lr, lr_decay=lr_decay, eps=eps, weight_decay=weight_decay) - super().__init__(params, defaults) - - def _create_state(self, param_group): - for param in param_group["params"]: - self._add_state(param, "square_avg") - self._add_state(param, "step", initializer=0.0) - - def _updates(self, param_group): - lr = param_group["lr"] - lr_decay = param_group["lr_decay"] - weight_decay = param_group["weight_decay"] - eps = param_group["eps"] - - for param in param_group["params"]: - if not isinstance(param.grad, Buffer): - raise TypeError( - "grad must be a Buffer, maybe you forget to call backward()?" - ) - - if not param.requires_grad: - continue - - step = self._state[param]["step"] - step = add_update(step, 1) - grad = param.grad - if weight_decay != 0.0: - grad = add_update(grad, param, beta=weight_decay) - - square_avg = self._state[param]["square_avg"] - square_avg = add_update(square_avg, grad ** 2) - delta = grad / sqrt(square_avg + eps) - clr = lr / (1 + (step - 1) * lr_decay) - add_update(param, delta, beta=-clr) diff --git a/python_module/megengine/optimizer/adam.py b/python_module/megengine/optimizer/adam.py deleted file mode 100644 index 6f264d3b..00000000 --- a/python_module/megengine/optimizer/adam.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable, Tuple, Union - -from ..core import Buffer, Parameter -from .internal import add_update_fastpath as add_update -from .optimizer import Optimizer - - -class Adam(Optimizer): - r"""Implements Adam algorithm proposed in `"Adam: A Method for Stochastic Optimization" `_. - - :param params: iterable of parameters to optimize or dicts defining - parameter groups. - :param lr: learning rate. - :param betas: coefficients used for computing running averages of gradient - and its square. Default: (0.9, 0.999) - :param eps: term added to the denominator to improve numerical stability - Default: 1e-8 - :param weight_decay: weight decay (L2 penalty). Default: 0 - """ - - def __init__( - self, - params: Union[Iterable[Parameter], dict], - lr: float, - betas: Tuple[float, float] = (0.9, 0.999), - eps: float = 1e-8, - weight_decay: float = 0.0, - ): - if lr < 0.0: - raise ValueError("Invalid learning rate: {}".format(lr)) - if weight_decay < 0.0: - raise ValueError("Invalid weight_decay value: {}".format(weight_decay)) - if not 0.0 <= betas[0] < 1.0: - raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0])) - if not 0.0 <= betas[1] < 1.0: - raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1])) - - defaults = dict(lr=lr, weight_decay=weight_decay, betas=betas, eps=eps) - super().__init__(params, defaults) - - def _create_state(self, param_group): - for param in param_group["params"]: - self._add_state(param, "exp_avg") - self._add_state(param, "exp_avg_sq") - self._add_state(param, "step", initializer=0.0) - - def _updates(self, param_group): - lr = param_group["lr"] - weight_decay = param_group["weight_decay"] - eps = param_group["eps"] - beta0, beta1 = param_group["betas"] - - for param in param_group["params"]: - if not param.requires_grad: - continue - - step = self._state[param]["step"] - step = add_update(step, 1) - if not isinstance(param.grad, Buffer): - raise TypeError( - "grad must be a Buffer, maybe you forget to call backward()?" - ) - grad = param.grad - if weight_decay != 0.0: - grad = add_update(grad, param, beta=weight_decay) - exp_avg = self._state[param]["exp_avg"] - exp_avg_sq = self._state[param]["exp_avg_sq"] - exp_avg = add_update(exp_avg, grad, alpha=beta0, beta=1 - beta0) - exp_avg_sq = add_update( - exp_avg_sq, grad * grad, alpha=beta1, beta=1 - beta1 - ) - add_update( - param, - exp_avg - / (1 - beta0 ** step) - / (exp_avg_sq.sqrt() / (1 - beta1 ** step).sqrt() + eps), - beta=-lr, - ) diff --git a/python_module/megengine/optimizer/internal.py b/python_module/megengine/optimizer/internal.py deleted file mode 100644 index 0483af9a..00000000 --- a/python_module/megengine/optimizer/internal.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Union - -import megengine._internal as mgb - -from ..core.tensor import Tensor, tensor - - -def add_update_fastpath( - dest: Tensor, - delta: Tensor, - *, - alpha: Union[Tensor, float, int] = 1.0, - beta: Union[Tensor, float, int] = 1.0, - bias: Union[Tensor, float, int] = 0.0 -): - """a fast-path ONLY used to update parameters in optimizer, since it - would bypass computing graph and launch dnn/add_update kernel directly, - it is more efficient than functional/add_update. - """ - - if isinstance(beta, Tensor) or isinstance(alpha, Tensor): - delta *= beta - beta = 1.0 - if isinstance(alpha, Tensor): - delta += (alpha - 1.0) * dest - alpha = 1.0 - if isinstance(bias, Tensor): - delta += bias - bias = 0.0 - - if not isinstance(delta, Tensor): - delta = tensor(delta, device=dest.device, dtype=dest.dtype) - - def get_v(x): - if x._Tensor__val is None: - assert isinstance(x._Tensor__sym, mgb.SymbolVar) - return x._Tensor__sym.eager_val - else: - assert isinstance(x._Tensor__val, mgb.SharedND) - return x._Tensor__val - - mgb.mgb._add_update_fastpath(get_v(dest), get_v(delta), alpha, beta, bias) - return dest diff --git a/python_module/megengine/optimizer/lr_scheduler.py b/python_module/megengine/optimizer/lr_scheduler.py deleted file mode 100644 index 7cdb6d9b..00000000 --- a/python_module/megengine/optimizer/lr_scheduler.py +++ /dev/null @@ -1,65 +0,0 @@ -from abc import ABCMeta - -from .optimizer import Optimizer - - -class LRScheduler(metaclass=ABCMeta): - r"""Base class for all learning rate based schedulers. - - :param optimizer: Wrapped optimizer. - :param current_epoch: The index of current epoch. Default: -1 - """ - - def __init__( # pylint: disable=too-many-branches - self, optimizer: Optimizer, current_epoch: int = -1 - ): - if not isinstance(optimizer, Optimizer): - raise TypeError( - "optimizer argument given to the lr_scheduler should be Optimizer" - ) - self.optimizer = optimizer - self.current_epoch = current_epoch - if current_epoch == -1: - for group in self.optimizer.param_groups: - group.setdefault("initial_lr", group["lr"]) - else: - for i, group in enumerate(optimizer.param_groups): - if "initial_lr" not in group: - raise KeyError( - "param 'initial_lr' is not specified in " - "param_groups[{}] when resuming an optimizer".format(i) - ) - self.base_lrs = list( - map(lambda group: group["initial_lr"], self.optimizer.param_groups) - ) - - self.step() - - def state_dict(self): - r"""Returns the state of the scheduler as a :class:`dict`. - It contains an entry for every variable in self.__dict__ which - is not the optimizer. - """ - raise NotImplementedError - - def load_state_dict(self, state_dict): - r"""Loads the schedulers state. - - :param state_dict (dict): scheduler state. - """ - raise NotImplementedError - - def get_lr(self): - r""" Compute current learning rate for the scheduler. - """ - raise NotImplementedError - - def step(self, epoch=None): - if epoch is None: - self.current_epoch += 1 - else: - self.current_epoch = epoch - - values = self.get_lr() - for param_group, lr in zip(self.optimizer.param_groups, values): - param_group["lr"] = lr diff --git a/python_module/megengine/optimizer/multi_step_lr.py b/python_module/megengine/optimizer/multi_step_lr.py deleted file mode 100644 index e6ac5ca0..00000000 --- a/python_module/megengine/optimizer/multi_step_lr.py +++ /dev/null @@ -1,67 +0,0 @@ -from bisect import bisect_right -from typing import Iterable as Iter - -from .lr_scheduler import LRScheduler -from .optimizer import Optimizer - - -class MultiStepLR(LRScheduler): - r"""Decays the learning rate of each parameter group by gamma once the - number of epoch reaches one of the milestones. - - :param optimizer: Wrapped optimizer. - :param milestones (list): List of epoch indices. Must be increasing. - :param gamma (float): Multiplicative factor of learning rate decay. Default: 0.1. - :param current_epoch: The index of current epoch. Default: -1. - """ - - def __init__( - self, - optimizer: Optimizer, - milestones: Iter[int], - gamma: float = 0.1, - current_epoch: int = -1, - ): - if not list(milestones) == sorted(milestones): - raise ValueError( - "Milestones should be a list of increasing integers. Got {}".format( - milestones - ) - ) - - self.milestones = milestones - self.gamma = gamma - super().__init__(optimizer, current_epoch) - - def state_dict(self): - r"""Returns the state of the scheduler as a :class:`dict`. - It contains an entry for every variable in self.__dict__ which - is not the optimizer. - """ - return { - key: value - for key, value in self.__dict__.items() - if key in ["milestones", "gamma", "current_epoch"] - } - - def load_state_dict(self, state_dict): - r"""Loads the schedulers state. - - :param state_dict (dict): scheduler state. - """ - tmp_dict = {} - for key in ["milestones", "gamma", "current_epoch"]: - if not key in state_dict.keys(): - raise KeyError( - "key '{}'' is not specified in " - "state_dict when loading state dict".format(key) - ) - tmp_dict[key] = state_dict[key] - - self.__dict__.update(tmp_dict) - - def get_lr(self): - return [ - base_lr * self.gamma ** bisect_right(self.milestones, self.current_epoch) - for base_lr in self.base_lrs - ] diff --git a/python_module/megengine/optimizer/optimizer.py b/python_module/megengine/optimizer/optimizer.py deleted file mode 100644 index 2596d26a..00000000 --- a/python_module/megengine/optimizer/optimizer.py +++ /dev/null @@ -1,307 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from abc import ABCMeta, abstractmethod -from collections import Iterable -from typing import Dict -from typing import Iterable as Iter -from typing import Union - -import numpy as np - -from .._internal.config import opr_priority_scope -from ..core import Buffer, Parameter, Tensor, TensorDict -from ..core.graph import get_default_graph -from ..distributed import ( - all_reduce_sum, - bcast_param, - get_rank, - get_world_size, - is_distributed, -) -from ..distributed.util import get_group_id -from ..functional import add_update -from ..functional import grad as grad_func -from ..jit import sideeffect - - -class _RequiredParameter: - def __repr__(self): - return "" - - -required = _RequiredParameter() - - -class Optimizer(metaclass=ABCMeta): - r"""Base class for all optimizers. - - :param params: specifies what Tensors should be optimized. - :param defaults: a dict of default parameters of Optimizer, like learning rate or momentum. - :param bcast_period: interval time between two broadcast of distributed training. Default: 500 - """ - - def __init__( # pylint: disable=too-many-branches - self, - params: Union[Iter[Parameter], dict], - defaults: dict, - bcast_period: int = 500, - ): - self._state = TensorDict() - self._defaults = defaults - self._bcast_iter = 0 - self._bcast_period = bcast_period - - if isinstance(params, (Parameter, dict)): - params = [params] - else: - if not isinstance(params, Iterable): - raise TypeError( - "params argument given to the optimizer should be " - "Parameter or dict, or Iterable of them" - ) - - self.param_groups = [] # type: list - - param_groups = list(params) - if len(param_groups) == 0: - raise ValueError("optimizer got an empty parameter list") - - param_type = type(param_groups[0]) - for param in param_groups: - if not isinstance(param, param_type): - raise TypeError( - "types of params argument given to the optimizer shoud be same" - ) - - if not isinstance(param_groups[0], dict): - param_groups = [{"params": param_groups}] - - for group in param_groups: - self.add_param_group(group) - - for group in self.param_groups: - self._create_state(group) - - if is_distributed() and bcast_period != -1: - self.bcast_param() - - def add_param_group(self, param_group: dict): - r"""Add a param group to ``param_groups`` of the :class:`~megengine.optim.optimizer.Optimizer`. - - This can be useful when fine tuning a pre-trained network as frozen layers can be made - trainable and added to the :class:`~megengine.optim.optimizer.Optimizer` as training progresses. - - :param param_group: specifies what tensors should be optimized along with group. - - """ - assert isinstance(param_group, dict), "param group must be a dict" - - if isinstance(param_group["params"], Parameter): - param_group["params"] = [param_group["params"]] - else: - param_group["params"] = list(param_group["params"]) - - for param in param_group["params"]: - if not isinstance(param, Parameter): - raise TypeError( - "optimizer can only optimize Parameters, but one of the params is " - + type(param) - ) - if not param.requires_grad: - raise ValueError( - "optimizer can only optimize Parameters with requires_grad=True" - ) - - for name, default in self._defaults.items(): - if default is required and name not in param_group: - raise ValueError( - "parameter group didn't specify a value of " - "required optimization parameter " + name - ) - param_group.setdefault(name, default) - - param_set = set() - - for group in self.param_groups: - param_set.update(set(map(id, group["params"]))) - - assert param_set.isdisjoint( - set(map(id, param_group["params"])) - ), "some parameters appear in more than one parameter group" - - self.param_groups.append(param_group) - - def _add_state(self, param, state_name, initializer=None): - if initializer is None: - initializer = np.zeros(param.shape, dtype=np.float32) - state_dict = self._state.setdefault(param, {}) - assert state_name not in state_dict - state = Buffer(value=initializer) - state_dict[state_name] = state - - @abstractmethod - def _create_state(self, param_group): - pass - - @abstractmethod - def _updates(self, param_group): - pass - - def backward(self, loss: Tensor): - """Computes the back-propagation of the network given loss. - - :param loss: The obtained loss tensor - """ - rst = [] - params = [] - for group in self.param_groups: - for param in group["params"]: - if param.grad is None: - param.grad = Buffer( - value=np.zeros(shape=param.shape, dtype=np.float32) - ) - - params.append(param) - assert hasattr(param, "grad"), "param has no grad" - assert isinstance(param.grad, Buffer), "grad must be a buffer" - - cg = get_default_graph() - grads = grad_func(loss, params, use_virtual_grad=not cg.is_eager()) - if not isinstance(grads, list): - grads = [grads] - assert len(grads) == len(params) - - for param, grad in zip(params, grads): - if is_distributed() and param.replica_mode: - with opr_priority_scope(cg, -(2 ** 30)): - # always run all_reduce_mean first except add_update - grad = ( - all_reduce_sum( - grad, "grad_" + str(get_group_id()), get_world_size() - ) - / get_world_size() - ) - with opr_priority_scope(cg, -(2 ** 31)): - # always run add_update first - grad_update = add_update(param.grad, grad) - else: - grad_update = add_update(param.grad, grad) - rst.append(grad_update) - - return rst - - @sideeffect - def step(self): - r"""Performs a single optimization step. - - """ - for group in self.param_groups: - if isinstance(group["params"], set): - raise TypeError( - "optimized parameters need to be organized in ordered collections, " - "but the ordering of parameters in sets will change between runs. " - "Please use a list instead." - ) - self._updates(group) - - if is_distributed() and self._bcast_period != -1: - self._bcast_iter += 1 - if self._bcast_iter == self._bcast_period: - self.bcast_param() - self._bcast_iter = 0 - - @sideeffect - def zero_grad(self): - r"""Reset the grad to zeros. - - """ - for param_group in self.param_groups: - for param in param_group["params"]: - if param.grad is not None: - param.grad.reset_zero() - - def bcast_param(self): - key = 0 - for group in self.param_groups: - for param in group["params"]: - if param.replica_mode: - bcast_param( - param, - "bcast_param_" + str(key), - get_world_size(), - get_rank() == 0, - ) - key += 1 - - def state_dict(self) -> Dict: - r"""Export the optimizer state. - - :return: optimizer state. Can be loaded by :meth:`load_state_dict`. - """ - param_groups = [] - state = dict() - param2id = TensorDict() - - cur_id = 0 - for group in self.param_groups: - for param in group["params"]: - if param not in param2id: - param2id[param] = cur_id - cur_id += 1 - - for param, st in self._state.items(): - state[param2id[param]] = st - - for group in self.param_groups: - param_group = {k: v for k, v in group.items() if k != "params"} - param_group["params"] = [param2id[param] for param in group["params"]] - param_groups.append(param_group) - - return {"param_groups": param_groups, "state": state} - - def load_state_dict(self, state: dict): - r"""Loads the optimizer state. - - :param state: optimizer state. Should be an object returned - from a call to :meth:`state_dict`. - """ - if len(self.param_groups) != len(state["param_groups"]): - raise ValueError( - "loaded state dict has a different number of parameter groups" - ) - parameter_map = dict() # type: Dict - for group_new, group_saved in zip(self.param_groups, state["param_groups"]): - if len(group_new["params"]) != len(group_saved["params"]): - raise ValueError( - "loaded state dict contains a parameter group that " - "doesn't match the size of optimizer's group" - ) - for param_new, param_saved in zip( - group_new["params"], group_saved["params"] - ): - p = param_new - self._state[p] = state["state"][param_saved].copy() - for k, v in self._state[p].items(): - if isinstance(v, Buffer) and v._comp_graph != p._comp_graph: - self._state[p][k] = Buffer(v.numpy()) - - if set(group_new.keys()) != set(group_saved.keys()): - raise ValueError( - "loaded state dict contains a parameter group that " - "doesn't match the keys of optimizer's group" - ) - for key in group_new.keys(): - if key != "params": - group_new[key] = group_saved[key] - - if len(self._state.keys()) != len(state["state"].keys()): - raise ValueError( - "loaded state dict contains a state that doesn't match " - "the size of optimizer's state" - ) diff --git a/python_module/megengine/optimizer/sgd.py b/python_module/megengine/optimizer/sgd.py deleted file mode 100644 index a1f807b3..00000000 --- a/python_module/megengine/optimizer/sgd.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable, Union - -from ..core import Buffer, Parameter -from .internal import add_update_fastpath as add_update -from .optimizer import Optimizer - - -class SGD(Optimizer): - r"""Implements stochastic gradient descent. - - Nesterov momentum is based on the formula from - `"On the importance of initialization and momentum in deep learning" `_ . - - :param params: iterable of parameters to optimize or dicts defining - parameter groups. - :param lr: learning rate. - :param momentum: momentum factor. Default: 0.0 - :param weight_decay: weight decay (L2 penalty). Default: 0.0 - """ - - def __init__( - self, - params: Union[Iterable[Parameter], dict], - lr: float, - momentum: float = 0.0, - weight_decay: float = 0.0, - ): - assert lr >= 0.0, "Invalid learning rate: {}".format(lr) - assert momentum >= 0.0, "Invalid momentum value: {}".format(momentum) - assert weight_decay >= 0.0, "Invalid weight_decay value: {}".format( - weight_decay - ) - - defaults = dict(lr=lr, momentum=momentum, weight_decay=weight_decay) - super().__init__(params, defaults) - - def _create_state(self, param_group): - if param_group["momentum"] != 0.0: - for param in param_group["params"]: - self._add_state(param, "momentum_buffer") - - def _updates(self, param_group): - lr = param_group["lr"] - weight_decay = param_group["weight_decay"] - momentum = param_group["momentum"] - - for param in param_group["params"]: - if not isinstance(param.grad, Buffer): - raise TypeError( - "grad must be a Buffer, maybe you forget to call backward()?" - ) - - if not param.requires_grad: - continue - - grad = param.grad - if weight_decay != 0.0: - grad = add_update(grad, param, beta=weight_decay) - - if momentum: - v = self._state[param]["momentum_buffer"] - update_v = add_update(v, grad, alpha=momentum) - add_update(param, update_v, beta=-lr) - else: - add_update(param, grad, beta=-lr) diff --git a/python_module/megengine/quantization/__init__.py b/python_module/megengine/quantization/__init__.py deleted file mode 100644 index 9c8a0e0d..00000000 --- a/python_module/megengine/quantization/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -from .fake_quant import FakeQuantize -from .internal_fake_quant import * -from .observer import HistogramObserver, Observer -from .qconfig import ( - QConfig, - calibration_qconfig, - ema_fakequant_qconfig, - ema_lowbit_fakequant_qconfig, - min_max_fakequant_qconfig, - tqt_quant_qconfig, -) -from .utils import QuantMode diff --git a/python_module/megengine/quantization/fake_quant.py b/python_module/megengine/quantization/fake_quant.py deleted file mode 100644 index 7260b9db..00000000 --- a/python_module/megengine/quantization/fake_quant.py +++ /dev/null @@ -1,145 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy -import math - -import numpy as np - -from .. import functional as F -from .._internal.dtype import _metadata_dict, get_quantized_dtype -from ..core import Buffer, Function, Parameter -from ..jit import sideeffect -from ..module import Module -from .utils import QuantMode, Round, fake_quant_tensor, get_qparam_dict - - -class _FakeQuantize(Module): - r""" - A Basic Fake Quant module. - - :param dtype: A string indicating the target quantization type of input. - :param narrow_range: Whether the absolute value of ``qmin`` is the same as ``qmax``, - instead of 1 greater. Usually True for weight and False for activation. - :param enable: Whether do ``normal_forward`` or ``fake_quant_forward``. - """ - - def __init__(self, dtype: str, narrow_range: bool = False, enable: bool = True): - super().__init__() - if not dtype in _metadata_dict.keys(): - raise ValueError( - "unknown dtype: {}, only support {}".format( - dtype, _metadata_dict.keys() - ) - ) - self.dtype = dtype - self.narrow_range = narrow_range - self.qmin = ( - -_metadata_dict[dtype].qmax if narrow_range else _metadata_dict[dtype].qmin - ) - self.qmax = _metadata_dict[dtype].qmax - self.enabled = enable - - def enable(self): - self.enabled = True - - def disable(self): - self.enabled = False - - def fake_quant_forward(self, inp, q_dict=None): - return inp - - def normal_foward(self, inp, q_dict=None): - return inp - - def forward(self, inp, q_dict=None): - if self.enabled: - return self.fake_quant_forward(inp, q_dict=q_dict) - else: - return self.normal_foward(inp, q_dict=q_dict) - - -class TQT_Function(Function): - def __init__(self, lowerbound, upperbound): - super().__init__() - self.lowerbound = lowerbound - self.upperbound = upperbound - - def forward(self, inp, scale): - t = 2 ** scale - # t = F.maximum(t, 1e-4) - inp_scaled = inp / t - inp_clipped = F.maximum(F.minimum(inp_scaled, self.upperbound), self.lowerbound) - inp_rounded = F.round(inp_clipped) - inp_flq = inp_rounded * t - self.save_for_backward(inp_scaled, inp_rounded, t) - return inp_flq - - def backward(self, grad_inp_flq): - (inp_scaled, inp_rounded, t) = self.saved_tensors - mask_clip = (inp_scaled < -0.5 + self.lowerbound) + ( - inp_scaled > self.upperbound + 0.5 - ) # mask for accumulating the gradients of |data_scaled|>L - mask_quant = F.abs( - mask_clip - 1 - ) # mask for accumulating the gradients with |data_scaled|<=L - grad_quant = ( - grad_inp_flq * mask_quant * (inp_rounded - inp_scaled) - ) # gradient within |data_scaled|<=L - grad_clip = ( - grad_inp_flq * mask_clip * inp_rounded - ) # gradient with | data_scaled|>L - grad_s = grad_clip.sum() + grad_quant.sum() - # dL/ds = dL/dt * t * ln(2) - grad_s = grad_s * t * math.log(2) - grad_inp = grad_inp_flq * mask_quant - return grad_inp, grad_s - - -class TQT(_FakeQuantize): - r""" - TQT: https://arxiv.org/abs/1903.08066 Trained Quantization Thresholds - for Accurate and Efficient Fixed-Point Inference of Deep Neural Networks. - """ - - def __init__(self, dtype: str, narrow_range: bool = False, enable: bool = True): - super().__init__(dtype, narrow_range, enable) - self.scale = Parameter(0.0, dtype=np.float32) - - def fake_quant_forward(self, inp, q_dict=None): - # when enable, TQT will do fakequant forward, finetune the scale - return TQT_Function(self.qmin, self.qmax)(inp, self.scale) - - def normal_foward(self, inp, q_dict=None): - if q_dict["enable_observer"]: - # when disable, TQT will do normal forward, initialize scale weight - tmp_scale = F.maximum(F.abs(q_dict["min_val"]), F.abs(q_dict["max_val"])) - tmp_scale = F.log(tmp_scale / 127) / F.log(2) - F.add_update(self.scale, tmp_scale, alpha=0.0, beta=1.0, bias=0.0) - return inp - - def get_qparams(self): - q_dict = get_qparam_dict(QuantMode.TQT) - q_dict["scale"] = 2 ** self.scale - return q_dict - - def get_dtype(self): - q_dict = self.get_qparams() - scale = None if "scale" not in q_dict else q_dict["scale"].numpy()[0] - zero_point = ( - None if "zero_point" not in q_dict else q_dict["zero_point"].numpy()[0] - ) - return get_quantized_dtype(self.dtype, scale, zero_point) - - -class FakeQuantize(_FakeQuantize): - r""" - A module to do quant and dequant according to observer's scale and zero_point. - """ - - def fake_quant_forward(self, inp, q_dict=None): - return fake_quant_tensor(inp, self.qmin, self.qmax, q_dict) diff --git a/python_module/megengine/quantization/internal_fake_quant.py b/python_module/megengine/quantization/internal_fake_quant.py deleted file mode 100644 index df15a916..00000000 --- a/python_module/megengine/quantization/internal_fake_quant.py +++ /dev/null @@ -1,19 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy -import math -from functools import partial - -import numpy as np - -from .. import functional as F -from ..core import Function -from .fake_quant import _FakeQuantize -from .observer import MinMaxObserver -from .qconfig import QConfig - diff --git a/python_module/megengine/quantization/observer.py b/python_module/megengine/quantization/observer.py deleted file mode 100644 index 6aa3a406..00000000 --- a/python_module/megengine/quantization/observer.py +++ /dev/null @@ -1,422 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import math -from abc import abstractmethod -from enum import Enum - -import numpy as np - -from .. import functional as F -from .._internal.dtype import _metadata_dict, get_quantized_dtype -from ..core import Buffer -from ..jit import sideeffect -from ..module import Module -from .utils import QuantMode, Round, get_qparam_dict - - -class Observer(Module): - r""" - A base class for Observer Module. - - :param dtype: a string indicating to collect scale and zero_point of which dtype - :param narrow_range: Whether the absolute value of ``qmin`` is the same as ``qmax``, - instead of 1 greater. Usually True for weight and False for activation. - """ - - def __init__(self, dtype: str, narrow_range: bool = False): - super().__init__() - if dtype not in _metadata_dict.keys(): - raise ValueError( - "unknown dtype: {}, only support {}".format( - dtype, _metadata_dict.keys() - ) - ) - self.dtype = dtype - self.narrow_range = narrow_range - self.qmin = ( - -_metadata_dict[dtype].qmax if narrow_range else _metadata_dict[dtype].qmin - ) - self.qmax = _metadata_dict[dtype].qmax - self.enabled = True - - def get_dtype(self): - q_dict = self.get_qparams() - numpy_scale = None if "scale" not in q_dict else q_dict["scale"].numpy()[0] - numpy_zero_point = ( - None if "zero_point" not in q_dict else q_dict["zero_point"].numpy()[0] - ) - return get_quantized_dtype(self.dtype, numpy_scale, numpy_zero_point) - - def enable(self): - self.enabled = True - - def disable(self): - self.enabled = False - - def train(self, mode: bool = True, recursive: bool = True) -> None: - super().train(mode, recursive) - if mode: - self.enable() - else: - self.disable() - - @abstractmethod - def forward(self, x): - pass - - @abstractmethod - def get_qparams(self, **kwargs): - pass - - -class MinMaxObserver(Observer): - def __init__( - self, - mode=QuantMode.SYMMERTIC, - eps=0.00001, - dtype="qint8", - narrow_range: bool = False, - ): - super().__init__(dtype, narrow_range) - self.mode = mode - self.min_val = Buffer(np.finfo(np.float32).max, dtype=np.float32) - self.max_val = Buffer(np.finfo(np.float32).min, dtype=np.float32) - self.scale_limit = eps - - def _calculate_qparams(self, inp_min_val, inp_max_val): - min_val = F.minimum(0.0, inp_min_val) - max_val = F.maximum(0.0, inp_max_val) - q_dict = get_qparam_dict(self.mode) - q_dict["min_val"] = inp_min_val - q_dict["max_val"] = inp_max_val - q_dict["enable_observer"] = self.enable - if self.mode == QuantMode.SYMMERTIC: - symmetric_max_vals = F.maximum(-min_val, max_val) - # use maximun to avoid scale too small at the begin - q_dict["scale"] = F.maximum( - symmetric_max_vals / ((self.qmax - self.qmin) / 2), self.scale_limit - ) - # zero_point = self.zero_point - else: - # use maximun to avoid scale too small at the begin - q_dict["scale"] = F.maximum( - (max_val - min_val) / (self.qmax - self.qmin), self.scale_limit, - ) - # caculate zero_point - q_dict["zero_point"] = self.qmin - Round()((min_val / q_dict["scale"])) - - return q_dict - - def get_qparams(self): - return self._calculate_qparams(self.min_val, self.max_val) - - def forward(self, x_orig): - if self.enabled: - # stop gradient - x = F.zero_grad(x_orig) - # find max and min - F.add_update( - self.min_val, - F.minimum(self.min_val, x.min()), - alpha=0.0, - beta=1.0, - bias=0.0, - ) - F.add_update( - self.max_val, - F.maximum(self.max_val, x.max()), - alpha=0.0, - beta=1.0, - bias=0.0, - ) - return x_orig - - -class ExponentialMovingAverageObserver(MinMaxObserver): - def __init__( - self, - momentum=0.9, - mode=QuantMode.SYMMERTIC, - eps=0.00001, - dtype="qint8", - narrow_range: bool = False, - ): - super().__init__(mode, eps, dtype, narrow_range) - self.momentum = Buffer(momentum) - self.runtime_momentum = Buffer(0.0) - - def set_momentum(self, momentum): - self.momentum.set_value(momentum) - - def forward(self, x_orig): - if self.enabled: - # stop gradient - x = F.zero_grad(x_orig) - # Exponential Moving Average - tmp_min = ( - self.min_val * self.runtime_momentum - + (1 - self.runtime_momentum) * x.min() - ) - tmp_max = ( - self.max_val * self.runtime_momentum - + (1 - self.runtime_momentum) * x.max() - ) - F.add_update(self.min_val, tmp_min, alpha=0.0, beta=1.0, bias=0.0) - F.add_update(self.max_val, tmp_max, alpha=0.0, beta=1.0, bias=0.0) - F.add_update( - self.runtime_momentum, self.momentum, alpha=0.0, beta=1.0, bias=0.0 - ) - return x_orig - - -class HistogramObserver(MinMaxObserver): - def __init__( - self, - bins=2048, - upsample_rate=128, - mode=QuantMode.SYMMERTIC, - eps=0.00001, - dtype="qint8", - narrow_range: bool = False, - ): - super().__init__(mode, eps, dtype, narrow_range) - self.bins = bins - self.upsample_rate = upsample_rate - self.dst_nbins = _metadata_dict[dtype].qmax - _metadata_dict[dtype].qmin + 1 - self.histogram = Buffer([-1] + [0.0] * (bins - 1)) - - def _non_linear_param_search(self): - r"""Non-linear parameter search. - An approximation for L2 error minimization for selecting min/max. - By selecting new min/max, we filter out outliers in input distribution. - """ - - np_min_val = self.min_val.numpy()[0] - np_max_val = self.max_val.numpy()[0] - np_histogram = self.histogram.numpy() - assert len(np_histogram) == self.bins, "bins mistmatch" - bin_width = (np_max_val - np_min_val) / self.bins - - def _get_norm(delta_begin, delta_end, density, norm_type): - r""" - Compute the norm of the values uniformaly distributed between - delta_begin and delta_end. - norm = density * (integral_{begin, end} x^2) - = density * (end^3 - begin^3) / 3 - """ - assert norm_type == "L2", "Only L2 norms are currently supported" - norm = 0.0 - if norm_type == "L2": - norm = ( - delta_end * delta_end * delta_end - - delta_begin * delta_begin * delta_begin - ) / 3 - return density * norm - - def _compute_quantization_error(next_start_bin, next_end_bin, norm_type): - r""" - Compute the quantization error if we use start_bin to end_bin as the - min and max to do the quantization. - """ - - norm = 0.0 - dst_bin_width = ( - bin_width * (next_end_bin - next_start_bin + 1) / self.dst_nbins - ) - if dst_bin_width == 0.0: - return 0.0 - for src_bin in range(self.bins): - # distances from the beginning of first dst_bin to the beginning and - # end of src_bin - src_bin_begin = (src_bin - next_start_bin) * bin_width - src_bin_end = src_bin_begin + bin_width - - # which dst_bins the beginning and end of src_bin belong to? - dst_bin_of_begin = min( - self.dst_nbins - 1, - max(0.0, math.floor(src_bin_begin / dst_bin_width)), - ) - dst_bin_of_end = min( - self.dst_nbins - 1, - max(0.0, math.floor(src_bin_end / dst_bin_width)), - ) - dst_bin_of_begin_center = ( - dst_bin_of_begin * dst_bin_width + dst_bin_width / 2 - ) - - density = np_histogram[src_bin] / bin_width - if dst_bin_of_begin == dst_bin_of_end: - # if src_bin is entirely within 1 dst_bin - delta_begin = src_bin_begin - dst_bin_of_begin_center - delta_end = src_bin_end - dst_bin_of_begin_center - norm = norm + _get_norm(delta_begin, delta_end, density, norm_type) - else: - delta_begin = src_bin_begin - dst_bin_of_begin_center - delta_end = dst_bin_width / 2 - norm = norm + _get_norm(delta_begin, delta_end, density, norm_type) - - norm = norm + (dst_bin_of_end - dst_bin_of_begin - 1) * _get_norm( - -dst_bin_width / 2, dst_bin_width / 2, density, norm_type - ) - - dst_bin_of_end_center = ( - dst_bin_of_end * dst_bin_width + dst_bin_width / 2 - ) - - delta_begin = -dst_bin_width / 2 - delta_end = src_bin_end - dst_bin_of_end_center - norm = norm + _get_norm(delta_begin, delta_end, density, norm_type) - return norm - - # cumulative sum - total = sum(np_histogram) - cSum = np.cumsum(np_histogram, axis=0) - - stepsize = 1e-5 # granularity - alpha = 0.0 # lower bound - beta = 1.0 # upper bound - start_bin = 0 - end_bin = self.bins - 1 - norm_min = float("inf") - - while alpha < beta: - # Find the next step - next_alpha = alpha + stepsize - next_beta = beta - stepsize - - # find the left and right bins between the quantile bounds - l = start_bin - r = end_bin - while l < end_bin and cSum[l] < next_alpha * total: - l = l + 1 - while r > start_bin and cSum[r] > next_beta * total: - r = r - 1 - - # decide the next move - next_start_bin = start_bin - next_end_bin = end_bin - if (l - start_bin) > (end_bin - r): - # move the start bin - next_start_bin = l - alpha = next_alpha - else: - # move the end bin - next_end_bin = r - beta = next_beta - - if next_start_bin == start_bin and next_end_bin == end_bin: - continue - - # calculate the quantization error using next_start_bin and next_end_bin - norm = _compute_quantization_error(next_start_bin, next_end_bin, "L2") - - if norm > norm_min: - break - norm_min = norm - start_bin = next_start_bin - end_bin = next_end_bin - - new_min = self.min_val + bin_width * start_bin - new_max = self.min_val + bin_width * (end_bin + 1) - return new_min, new_max - - def get_qparams(self): - new_min, new_max = self._non_linear_param_search() - return self._calculate_qparams(new_min, new_max) - - def _combine_histograms( - self, orig_hist, new_hist, upsample_rate, downsample_rate, start_idx, Nbins - ): - # First up-sample the histogram with new data by a factor of L - # This creates an approximate probability density thats piecwise constant - upsampled_histogram = new_hist.repeat(upsample_rate) - # Now insert the upsampled histogram into the output - # histogram, which is initialized with zeros. - # The offset at which the histogram is introduced is determined - # by the start index as the output histogram can cover a wider range - histogram_with_output_range = np.zeros((Nbins * downsample_rate)) - histogram_with_output_range[ - start_idx : Nbins * upsample_rate + start_idx - ] = upsampled_histogram - # Compute integral histogram, double precision is needed to ensure - # that there are no overflows - integral_histogram = np.cumsum(histogram_with_output_range, 0)[ - downsample_rate - 1 :: downsample_rate - ] - # Finally perform interpolation - shifted_integral_histogram = np.zeros((Nbins)) - shifted_integral_histogram[1:Nbins] = integral_histogram[0:-1] - interpolated_histogram = ( - integral_histogram - shifted_integral_histogram - ) / upsample_rate - orig_hist = orig_hist + interpolated_histogram - return orig_hist - - def _adjust_min_max(self, combined_min, combined_max, upsample_rate): - # We ensure that: - # (combined_max - combined_min)/(downsample_rate*Nbins) = (max - min)/(upsample_rate*Nbins) - # This allows us to have a common grid of resolution s, where we can align - # the input histogram - # start_idx maps min_val to the histogram bin index. - np_min_val = self.min_val.numpy()[0] - np_max_val = self.max_val.numpy()[0] - - hist_bin_width = (np_max_val - np_min_val) / (self.bins * upsample_rate) - downsample_rate = int( - np.ceil((combined_max - combined_min) / (self.bins * hist_bin_width)) - ) - e = downsample_rate * (self.bins * hist_bin_width) - ( - combined_max - combined_min - ) - combined_max = combined_max + e / 2 - combined_min = combined_min - e / 2 - start_idx = int(np.round((np_min_val - combined_min) / hist_bin_width)) - - return combined_min, combined_max, downsample_rate, start_idx - - @sideeffect - def sideeffect_forward(self, x_orig): - x = x_orig.numpy() - min_val = self.min_val.numpy()[0] - max_val = self.max_val.numpy()[0] - histogram = self.histogram.numpy() - new_min = x.min() - new_max = x.max() - if histogram[0] == -1: - new_histogram, _ = np.histogram(x, self.bins, (new_min, new_max)) - else: - new_min = min(new_min, min_val) - new_max = max(new_max, max_val) - # combine the existing histogram and new histogram into 1 histogram - # We do this by first upsampling the histogram to a dense grid - # and then downsampling the histogram efficiently - (new_min, new_max, downsample_rate, start_idx,) = self._adjust_min_max( - new_min, new_max, self.upsample_rate - ) - - new_histogram, _ = np.histogram(x, self.bins, (new_min, new_max)) - new_histogram = new_histogram.astype(np.float64) - if new_min == min_val and new_max == max_val: - new_histogram += histogram - else: - new_histogram = self._combine_histograms( - new_histogram, - histogram, - self.upsample_rate, - downsample_rate, - start_idx, - self.bins, - ) - - self.histogram.set_value(new_histogram) - self.min_val.set_value(new_min) - self.max_val.set_value(new_max) - - def forward(self, x_orig): - self.sideeffect_forward(x_orig) - return x_orig diff --git a/python_module/megengine/quantization/qconfig.py b/python_module/megengine/quantization/qconfig.py deleted file mode 100644 index 6606c1a5..00000000 --- a/python_module/megengine/quantization/qconfig.py +++ /dev/null @@ -1,109 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -#' -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from functools import partial - -from ..module import Module -from .fake_quant import TQT, FakeQuantize -from .observer import ( - ExponentialMovingAverageObserver, - HistogramObserver, - MinMaxObserver, -) - - -class QConfig: - r""" - A config class indicating how to do quantize toward :class:`~.QATModule`'s - ``activation`` and ``weight``. See :meth:`~.QATModule.set_qconfig` for detail usage. - - :param weight_observer: interface to instantiate an :class:`~.Observer` indicating - how to collect scales and zero_point of wegiht. - :param act_observer: similar to ``weight_observer`` but toward activation. - :param weight_fake_quant: interface to instantiate a :class:`~.FakeQuantize` indicating - how to do fake_quant calculation. - :param act_observer: similar to ``weight_fake_quant`` but toward activation. - - Examples: - - .. code-block:: - - # Default EMA QConfig for QAT. - ema_fakequant_qconfig = QConfig( - weight_observer=partial(MinMaxObserver, dtype="qint8", narrow_range=True), - act_observer=partial(ExponentialMovingAverageObserver, dtype="qint8", narrow_range=False), - weight_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=True), - act_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=False), - ) - - Each parameter is a ``class`` rather than an instance. And we recommand using ``functools.partial`` - to add initialization parameters of the ``class``, so that don't need to provide parameters in - :meth:`~.QATModule.set_qconfig`. - - Usually we set ``narrow_range`` of weight related paramters to ``True`` and of activation related - parameters to ``False``. For the result of multiplication and addition as ``a * b + c * d``, if - four variables are all -128 of dtype ``qint8``, then the result will be ``2^15`` and cause overflow. - Weights are commonly calculated in this way, so needed to narrow the range. - """ - - def __init__( - self, weight_observer, act_observer, weight_fake_quant, act_fake_quant - ): - if isinstance(act_observer, Module) or isinstance(weight_observer, Module): - raise ValueError( - "QConfig must not receive observer instance, please pass observer" - " class generator using `partial(Observer, ...)` instead. Use" - " partial(MyObserver, x=1) to override arguments to constructor if needed" - ) - self.weight_observer = weight_observer - self.act_observer = act_observer - self.weight_fake_quant = weight_fake_quant - self.act_fake_quant = act_fake_quant - - -tqt_quant_qconfig = QConfig( - weight_observer=partial( - ExponentialMovingAverageObserver, dtype="qint8", narrow_range=True - ), - act_observer=partial( - ExponentialMovingAverageObserver, dtype="qint8", narrow_range=False - ), - weight_fake_quant=partial(TQT, dtype="qint8", narrow_range=True), - act_fake_quant=partial(TQT, dtype="qint8", narrow_range=False), -) - -min_max_fakequant_qconfig = QConfig( - weight_observer=partial(MinMaxObserver, dtype="qint8", narrow_range=True), - act_observer=partial(MinMaxObserver, dtype="qint8", narrow_range=False), - weight_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=True), - act_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=False), -) - -ema_fakequant_qconfig = QConfig( - weight_observer=partial(MinMaxObserver, dtype="qint8", narrow_range=True), - act_observer=partial( - ExponentialMovingAverageObserver, dtype="qint8", narrow_range=False - ), - weight_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=True), - act_fake_quant=partial(FakeQuantize, dtype="qint8", narrow_range=False), -) - -ema_lowbit_fakequant_qconfig = QConfig( - weight_observer=partial(MinMaxObserver, dtype="qint4", narrow_range=False), - act_observer=partial( - ExponentialMovingAverageObserver, dtype="qint4", narrow_range=False - ), - weight_fake_quant=partial(FakeQuantize, dtype="qint4", narrow_range=False), - act_fake_quant=partial(FakeQuantize, dtype="qint4", narrow_range=False), -) - -calibration_qconfig = QConfig( - weight_observer=partial(MinMaxObserver, dtype="qint8", narrow_range=True), - act_observer=partial(HistogramObserver, dtype="qint8", narrow_range=False), - weight_fake_quant=None, - act_fake_quant=None, -) diff --git a/python_module/megengine/quantization/quantize.py b/python_module/megengine/quantization/quantize.py deleted file mode 100644 index 5dab2ae4..00000000 --- a/python_module/megengine/quantization/quantize.py +++ /dev/null @@ -1,191 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from copy import copy, deepcopy -from typing import Callable, Dict, Tuple - -from .. import module as Float -from ..module import Module -from ..module import qat as QAT -from ..module import quantized as Quantized -from ..module.qat import QATModule -from ..module.quantized import QuantizedModule -from .fake_quant import TQT -from .qconfig import QConfig, ema_fakequant_qconfig - - -def _get_quantable_module_names(): - def is_quantable(key: str): - value = getattr(Quantized, key) - return ( - isinstance(value, type) - and issubclass(value, QuantizedModule) - and value != QuantizedModule - ) - - # source should have all quantable modules' names - quantable_module_names = [key for key in dir(Quantized) if is_quantable(key)] - return quantable_module_names - - -def _get_convert_dict() -> Tuple[ - Dict[Module, QATModule], Dict[QATModule, QuantizedModule] -]: - quantable_module_names = _get_quantable_module_names() - - quantable_modules = [getattr(Float, key) for key in quantable_module_names] - qat_modules = [getattr(QAT, key) for key in quantable_module_names] - quantized_modules = [getattr(Quantized, key) for key in quantable_module_names] - - float2qat_dict = dict(zip(quantable_modules, qat_modules)) - qat2quantized_dict = dict(zip(qat_modules, quantized_modules)) - return float2qat_dict, qat2quantized_dict - - -_float2qat_dict, _qat2quantized_dict = _get_convert_dict() - - -def quantize(module: Module, inplace: bool = True, mapping: dict = None): - r""" - Recursively convert :class:`~.QATModule` to :class:`~.QuantizedModule` - through :meth:`~.Module.apply`. - - :param module: root module to do convert recursively. - :param inplace: whether to convert submodules in-place. - :param mapping: a dict indicating how to convert custom modules from QATModule to - QuantizedModule. Will be combined with internal default convert mapping dict. - """ - - if not inplace: - module = deepcopy(module) - - convert_dict = copy(_qat2quantized_dict) - if mapping is not None: - convert_dict.update(mapping) - qat_modules = tuple(convert_dict.keys()) - - def is_qat(mod: Module): - return isinstance(mod, qat_modules) - - # must use list to avoid replacement influencing successor modules - for key, submodule, parent in list( - module._flatten(with_key=True, with_parent=True, predicate=is_qat) - ): - new_mod = convert_dict[type(submodule)].from_qat_module(submodule) - if isinstance(parent, Float.Sequential): - # cannnot use setattr to be compatible with Sequential's ``__setitem__`` - parent[int(key.split(".")[-1])] = new_mod - else: - setattr(parent, key.split(".")[-1], new_mod) - - return module - - -def quantize_qat( - module: Module, - inplace: bool = True, - qconfig: QConfig = ema_fakequant_qconfig, - mapping: dict = None, -): - r""" - Recursively convert float :class:`~.Module` to :class:`~.QATModule` - through :meth:`~.Module.apply` and set qconfig relatively. - - :param module: root module to do convert recursively. - :param inplace: whether to convert submodules in-place. - :param qconfig: an instance of :class:`~.QConfig` to be set as submodules' qconfig. - default is ``ema_fakequant_qconfig``. - :param mapping: a dict indicating how to convert custom modules from Module to QATModule. - Will be combined with internal default convert mapping dict. - """ - - if not inplace: - module = deepcopy(module) - - convert_dict = copy(_float2qat_dict) - if mapping is not None: - convert_dict.update(mapping) - quantable_modules = tuple(convert_dict.keys()) - - def is_quantable(mod: Module): - return isinstance(mod, quantable_modules) - - # must use list to avoid replacement influencing successor modules - for key, submodule, parent in list( - module._flatten(with_key=True, with_parent=True, predicate=is_quantable) - ): - # only convert top quantable module. - if is_quantable(parent) or submodule.quantize_disabled: - continue - - new_mod = convert_dict[type(submodule)].from_float_module(submodule) - if isinstance(parent, Float.Sequential): - # cannnot use setattr to be compatible with Sequential's ``__setitem__`` - parent[int(key.split(".")[-1])] = new_mod - else: - setattr(parent, key.split(".")[-1], new_mod) - - propagate_qconfig(module, qconfig) - return module - - -def _propagate(module: Module, func_str: str, *args, **kargs): - def fn(mod: Module): - if isinstance(mod, QATModule): - getattr(mod, func_str)(*args, **kargs) - - module.apply(fn) - - -def propagate_qconfig(module: QATModule, qconfig: QConfig): - r""" - Recursively set ``module``'s qconfig through :meth:`~.Module.apply`. - - :param module: root module to traverse recursively. - :param qconfig: a instance of :class:`~.QConfig` to be set as submodules' qconfig. - """ - _propagate(module, "set_qconfig", qconfig) - - -def disable_fake_quant(module: Module): - r""" - Recursively disable ``module`` fake quantization in QATModule through :meth:`~.Module.apply` - - :param module: root module to do disable fake quantization recursively. - """ - - _propagate(module, "set_fake_quant", False) - - -def disable_observer(module: Module): - r""" - Recursively disable ``module`` observer in QATModule through :meth:`~.Module.apply` - - :param module: root module to do disable observer recursively. - """ - - _propagate(module, "set_observer", False) - - -def enable_fake_quant(module: Module): - r""" - Recursively enable ``module`` fake quantization in QATModule through :meth:`~.Module.apply` - - :param module: root module to do enable fake quantization recursively. - """ - - _propagate(module, "set_fake_quant", True) - - -def enable_observer(module: Module): - r""" - Recursively enable ``module`` observer in QATModule through :meth:`~.Module.apply` - - :param module: root module to do enable observer recursively. - """ - - _propagate(module, "set_observer", True) diff --git a/python_module/megengine/quantization/utils.py b/python_module/megengine/quantization/utils.py deleted file mode 100644 index 2b940c9d..00000000 --- a/python_module/megengine/quantization/utils.py +++ /dev/null @@ -1,116 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -from enum import Enum -from functools import partial, update_wrapper, wraps -from typing import Dict - -from .. import functional as F -from .._internal.dtype import _metadata_dict -from ..core import Function, Tensor - - -class Round(Function): - """ - The functional round have no grad and can not use for quantization-aware-training. - We use Function and STE(Straight-Through Estimator) to implement backward propagation. - """ - - def forward(self, x): - return x.round() - - def backward(self, output_grads): - return output_grads - - -def register_method_to_class(cls): - def decorator(func): - @wraps(func) - def wrapper(self, *args, **kwargs): - return func(self, *args, **kwargs) - - if isinstance(func, partial): - update_wrapper(func, func.func) - setattr(cls, func.__name__, wrapper) - return func - - return decorator - - -class QuantMode(Enum): - """Quantization mode enumerate class. - """ - - SYMMERTIC = 1 - ASYMMERTIC = 2 - TQT = 3 - - -qparam_dict = { - QuantMode.SYMMERTIC: {"mode": QuantMode.SYMMERTIC, "scale": None,}, - QuantMode.ASYMMERTIC: { - "mode": QuantMode.ASYMMERTIC, - "scale": None, - "zero_point": None, - }, - QuantMode.TQT: {"mode": QuantMode.TQT, "scale": None,}, -} - - -def get_qparam_dict(mode: QuantMode): - """Return the quantization parameters dictory according to the mode. - """ - return qparam_dict.get(mode, None) - - -def fake_quant_tensor(inp: Tensor, qmin: int, qmax: int, q_dict: Dict) -> Tensor: - """Apply fake quantization to the inp tensor. - - :param inp: the input tensor which need to be faked. - :param qmin: the minimum value which the integer limit to. - :param qmax: the maximum value which the integer limit to. - :param q_dict: the quantization parameter dict. - - """ - scale = q_dict["scale"] - zero_point = 0 - if q_dict["mode"] == QuantMode.ASYMMERTIC: - zero_point = q_dict["zero_point"] - # Quant - oup = Round()(inp / scale) + zero_point - # Clip - oup = F.minimum(F.maximum(oup, qmin), qmax) - # Dequant - oup = (oup - zero_point) * scale - return oup - - -def fake_quant_bias(bias: Tensor, inp: Tensor, w_qat: Tensor) -> Tensor: - """Apply fake quantization to bias, the special scale from input tensor - and weight tensor, the quantized type set to qint32 also. - - :param bias: the bias tensor which need to be faked. - :param inp: the input tensor which contain the quantization parameters. - :param qmax: the weight tensor which contain the quantization parameters. - - .. warning:: - Only work for symmetric quantization method now. - - """ - b_qat = bias - if hasattr(inp, "q_dict") and b_qat is not None: - if inp.q_dict["scale"] is not None and w_qat.q_dict["scale"] is not None: - # use the same mode with weight. - b_dict = get_qparam_dict(w_qat.q_dict["mode"]) - b_dict["scale"] = inp.q_dict["scale"] * w_qat.q_dict["scale"] - # TODO: add zero_point for ASYMMERTIC mode. - qmax = _metadata_dict["qint32"].qmax - qmin = _metadata_dict["qint32"].qmin - b_qat = fake_quant_tensor(b_qat, qmin, qmax, b_dict) - - return b_qat diff --git a/python_module/megengine/random/__init__.py b/python_module/megengine/random/__init__.py deleted file mode 100644 index 86c8d797..00000000 --- a/python_module/megengine/random/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from .distribution import gaussian, uniform -from .rng import manual_seed - -# pylint: disable=undefined-variable -del distribution, rng # type: ignore[name-defined] diff --git a/python_module/megengine/random/distribution.py b/python_module/megengine/random/distribution.py deleted file mode 100644 index 55977f9c..00000000 --- a/python_module/megengine/random/distribution.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import Iterable, Optional - -import megengine._internal as mgb -from megengine._internal import CompGraph, CompNode - -from ..core.graph import _use_default_if_none -from ..core.tensor import Tensor, wrap_io_tensor -from .rng import _random_seed_generator - -__all__ = ["gaussian", "uniform"] - - -@wrap_io_tensor -def gaussian( - shape: Iterable[int], - mean: float = 0, - std: float = 1, - comp_node: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None, -) -> Tensor: - r"""Random variable with Gaussian distribution $N(\mu, \sigma)$ - - :param shape: Output tensor shape - :param mean: The mean or expectation of the distribution - :param std: The standard deviation of the distribution (variance = $\sigma ^ 2$) - :param comp_node: The comp node output on, default to None - :param comp_graph: The graph in which output is, default to None - :return: The output tensor - - Examples: - - .. testcode:: - - import megengine as mge - import megengine.random as rand - - x = rand.gaussian((2, 2), mean=0, std=1) - print(x.numpy()) - - .. testoutput:: - :options: +SKIP - - [[-0.20235455 -0.6959438 ] - [-1.4939808 -1.5824696 ]] - - """ - comp_node, comp_graph = _use_default_if_none(comp_node, comp_graph) - seed = _random_seed_generator().__next__() - return mgb.opr.gaussian_rng( - shape, seed=seed, mean=mean, std=std, comp_node=comp_node, comp_graph=comp_graph - ) - - -@wrap_io_tensor -def uniform( - shape: Iterable[int], - low: float = 0, - high: float = 1, - comp_node: Optional[CompNode] = None, - comp_graph: Optional[CompGraph] = None, -) -> Tensor: - r"""Random variable with uniform distribution $U(0, 1)$ - - :param shape: Output tensor shape - :param low: Lower range - :param high: Upper range - :param comp_node: The comp node output on, default to None - :param comp_graph: The graph in which output is, default to None - :return: The output tensor - - Examples: - - .. testcode:: - - import megengine as mge - import megengine.random as rand - - x = rand.uniform((2, 2)) - print(x.numpy()) - - .. testoutput:: - :options: +SKIP - - [[0.76901674 0.70496535] - [0.09365904 0.62957656]] - - """ - assert low < high, "Uniform is not defined when low >= high" - - comp_node, comp_graph = _use_default_if_none(comp_node, comp_graph) - seed = _random_seed_generator().__next__() - return low + (high - low) * mgb.opr.uniform_rng( - shape, seed=seed, comp_node=comp_node, comp_graph=comp_graph - ) diff --git a/python_module/megengine/random/rng.py b/python_module/megengine/random/rng.py deleted file mode 100644 index 54da30bd..00000000 --- a/python_module/megengine/random/rng.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import time - -from numpy.random import MT19937 - -_rng = None - - -def _random_seed_generator(): - if _rng is None: - from ..distributed.util import get_rank - - manual_seed(seed=int(time.time()) + get_rank()) - while True: - yield _rng.random_raw() - - -def manual_seed(seed: int): - global _rng # pylint: disable=global-statement - _rng = MT19937(seed=seed) diff --git a/python_module/megengine/test/__init__.py b/python_module/megengine/test/__init__.py deleted file mode 100644 index 44ed54c2..00000000 --- a/python_module/megengine/test/__init__.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - - -def assertTensorClose( - v0, v1, *, max_err: float = 1e-6, allow_special_values: bool = False, name=None -): - """ - :param allow_special_values: whether to allow :attr:`v0` and :attr:`v1` to contain inf and nan values. - :param max_err: relative error - """ - __tracebackhide__ = True # pylint: disable=unused-variable - - assert ( - v0.dtype == v1.dtype - ), "Two Tensor must have same dtype, but the inputs are {} and {}".format( - v0.dtype, v1.dtype - ) - v0 = np.ascontiguousarray(v0, dtype=np.float32).copy() - v1 = np.ascontiguousarray(v1, dtype=np.float32).copy() - if allow_special_values: - # check nan and rm it - v0_nan_mask = np.isnan(v0) - if np.any(v0_nan_mask): - assert np.array_equiv(v0_nan_mask, np.isnan(v1)), (v0, v1) - v0[v0_nan_mask] = 0 - v1[v0_nan_mask] = 0 - # check inf and rm it - v0_inf_mask = v0 == float("inf") - if np.any(v0_inf_mask): - assert np.array_equiv(v0_inf_mask, v1 == float("inf")), (v0, v1) - v0[v0_inf_mask] = 0 - v1[v0_inf_mask] = 0 - # check -inf and rm it - v0_inf_mask = v0 == float("-inf") - if np.any(v0_inf_mask): - assert np.array_equiv(v0_inf_mask, v1 == float("-inf")), (v0, v1) - v0[v0_inf_mask] = 0 - v1[v0_inf_mask] = 0 - else: - assert np.isfinite(v0.sum()) and np.isfinite(v1.sum()), (v0, v1) - - assert v0.shape == v1.shape, "Two tensor must have same shape({} v.s. {})".format( - v0.shape, v1.shape - ) - vdiv = np.max([np.abs(v0), np.abs(v1), np.ones_like(v0)], axis=0) - err = np.abs(v0 - v1) / vdiv - check = err > max_err - if check.sum(): - idx = tuple(i[0] for i in np.nonzero(check)) - if name is None: - name = "tensor" - else: - name = "tensor {}".format(name) - raise AssertionError( - "{} not equal: " - "shape={} nonequal_idx={} v0={} v1={} err={}".format( - name, v0.shape, idx, v0[idx], v1[idx], err[idx] - ) - ) diff --git a/python_module/megengine/utils/__init__.py b/python_module/megengine/utils/__init__.py deleted file mode 100644 index 6b7b2d3a..00000000 --- a/python_module/megengine/utils/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -from megengine._internal.plugin import load_tensor_binary - - -def prod(iterable): - result = 1 - for i in iterable: - result *= i - return result diff --git a/python_module/megengine/utils/hook.py b/python_module/megengine/utils/hook.py deleted file mode 100644 index 9864a94a..00000000 --- a/python_module/megengine/utils/hook.py +++ /dev/null @@ -1,23 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import weakref - - -class HookHandler: - hook_num = 0 - - def __init__(self, source_dict, hook): - self.id = HookHandler.hook_num - HookHandler.hook_num += 1 - source_dict[self.id] = hook - self.source_ref = weakref.ref(source_dict) - - def remove(self): - source_dict = self.source_ref() - if source_dict is not None and self.id in source_dict: - del source_dict[self.id] diff --git a/python_module/megengine/utils/http_download.py b/python_module/megengine/utils/http_download.py deleted file mode 100644 index add2a649..00000000 --- a/python_module/megengine/utils/http_download.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import hashlib -import os -import shutil -from tempfile import NamedTemporaryFile - -import requests -from tqdm import tqdm - -from ..logger import get_logger - -logger = get_logger(__name__) - -CHUNK_SIZE = 1024 -HTTP_CONNECTION_TIMEOUT = 5 - - -class HTTPDownloadError(BaseException): - """The class that represents http request error""" - - -def download_from_url(url: str, dst: str, http_read_timeout=120): - """ - Downloads file from given url to ``dst`` - - :param url: source URL - :param dst: saving path - :param http_read_timeout: how many seconds to wait for data before giving up - """ - dst = os.path.expanduser(dst) - dst_dir = os.path.dirname(dst) - - resp = requests.get( - url, timeout=(HTTP_CONNECTION_TIMEOUT, http_read_timeout), stream=True - ) - if resp.status_code != 200: - raise HTTPDownloadError("An error occured when downloading from {}".format(url)) - - md5 = hashlib.md5() - total_size = int(resp.headers.get("Content-Length", 0)) - bar = tqdm( - total=total_size, unit="iB", unit_scale=True, ncols=80 - ) # pylint: disable=blacklisted-name - try: - with NamedTemporaryFile("w+b", delete=False, suffix=".tmp", dir=dst_dir) as f: - logger.info("Download file to temp file %s", f.name) - for chunk in resp.iter_content(CHUNK_SIZE): - if not chunk: - break - bar.update(len(chunk)) - f.write(chunk) - md5.update(chunk) - bar.close() - shutil.move(f.name, dst) - finally: - # ensure tmp file is removed - if os.path.exists(f.name): - os.remove(f.name) - return md5.hexdigest() diff --git a/python_module/megengine/utils/max_recursion_limit.py b/python_module/megengine/utils/max_recursion_limit.py deleted file mode 100644 index d7bce6e8..00000000 --- a/python_module/megengine/utils/max_recursion_limit.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import platform -import sys -import threading - -# Windows do not imp resource package -if platform.system() != "Windows": - import resource - - -class AlternativeRecursionLimit: - r"""A reentrant context manager for setting global recursion limits. - """ - - def __init__(self, new_py_limit): - self.new_py_limit = new_py_limit - self.count = 0 - self.lock = threading.Lock() - - self.orig_py_limit = 0 - self.orig_rlim_stack_soft = 0 - self.orig_rlim_stack_hard = 0 - - def __enter__(self): - with self.lock: - if self.count == 0: - self.orig_py_limit = sys.getrecursionlimit() - if platform.system() != "Windows": - ( - self.orig_rlim_stack_soft, - self.orig_rlim_stack_hard, - ) = resource.getrlimit(resource.RLIMIT_STACK) - # FIXME: https://bugs.python.org/issue34602, python3 release version - # on Macos always have this issue, not all user install python3 from src - try: - resource.setrlimit( - resource.RLIMIT_STACK, - (self.orig_rlim_stack_hard, self.orig_rlim_stack_hard), - ) - except ValueError as exc: - if platform.system() != "Darwin": - raise exc - - # increase recursion limit - sys.setrecursionlimit(self.new_py_limit) - self.count += 1 - - def __exit__(self, type, value, traceback): - with self.lock: - self.count -= 1 - if self.count == 0: - sys.setrecursionlimit(self.orig_py_limit) - - if platform.system() != "Windows": - try: - resource.setrlimit( - resource.RLIMIT_STACK, - (self.orig_rlim_stack_soft, self.orig_rlim_stack_hard), - ) - except ValueError as exc: - if platform.system() != "Darwin": - raise exc - - -_max_recursion_limit_context_manager = AlternativeRecursionLimit(2 ** 31 - 1) - - -def max_recursion_limit(): - r"""Sets recursion limit to the max possible value - """ - return _max_recursion_limit_context_manager diff --git a/python_module/megengine/utils/net_stats.py b/python_module/megengine/utils/net_stats.py deleted file mode 100644 index fa35d114..00000000 --- a/python_module/megengine/utils/net_stats.py +++ /dev/null @@ -1,279 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from functools import partial - -import numpy as np -import tabulate - -import megengine as mge -import megengine._internal as mgb -import megengine.module as m -import megengine.module.qat as qatm -import megengine.module.quantized as qm - -try: - mge.logger.MegEngineLogFormatter.max_lines = float("inf") -except AttributeError as e: - raise ValueError("set logger max lines failed") - -logger = mge.get_logger(__name__) - - -CALC_FLOPS = {} - - -def _register_modules(*modules): - def callback(impl): - for module in modules: - CALC_FLOPS[module] = impl - return impl - - return callback - - -@_register_modules( - m.Conv2d, - m.ConvTranspose2d, - m.LocalConv2d, - qm.Conv2d, - qm.ConvRelu2d, - qm.ConvBn2d, - qm.ConvBnRelu2d, - qatm.Conv2d, - qatm.ConvRelu2d, - qatm.ConvBn2d, - qatm.ConvBnRelu2d, -) -def count_convNd(module, input, output): - bias = 1 if module.bias is not None else 0 - group = module.groups - ic = input[0].shape[1] - oc = output[0].shape[1] - goc = oc // group - gic = ic // group - N = output[0].shape[0] - HW = np.prod(output[0].shape[2:]) - # N x Cout x H x W x (Cin x Kw x Kh + bias) - return N * HW * goc * (gic * np.prod(module.kernel_size) + bias) - - -@_register_modules(m.ConvTranspose2d) -def count_deconvNd(module, input, output): - return np.prod(input[0].shape) * output[0].shape[1] * np.prod(module.kernel_size) - - -@_register_modules(m.Linear, qatm.Linear, qm.Linear) -def count_linear(module, input, output): - return np.prod(output[0].shape) * module.in_features - - -# does not need import qat and quantized module since they inherit from float module. -hook_modules = ( - m.Conv2d, - m.ConvTranspose2d, - m.LocalConv2d, - m.BatchNorm2d, - m.Linear, -) - - -def net_stats(model, input_size, bar_length_max=20, log_params=True, log_flops=True): - def dict2table(list_of_dict, header): - table_data = [header] - for d in list_of_dict: - row = [] - for h in header: - v = "" - if h in d: - v = d[h] - row.append(v) - table_data.append(row) - return table_data - - def sizeof_fmt(num, suffix="B"): - for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]: - if abs(num) < 1024.0: - return "{:3.3f} {}{}".format(num, unit, suffix) - num /= 1024.0 - sign_str = "-" if num < 0 else "" - return "{}{:.1f} {}{}".format(sign_str, num, "Yi", suffix) - - def get_byteswidth(tensor): - dtype = tensor.dtype - if mgb.dtype.is_quantize(dtype): - return 1 - elif mgb.dtype.is_bfloat16(dtype): - return 2 - else: - return 4 - - def print_flops_stats(flops): - flops_list = [i["flops_num"] for i in flops] - max_flops_num = max(flops_list + [0]) - # calc total flops and set flops_cum - total_flops_num = 0 - for d in flops: - total_flops_num += int(d["flops_num"]) - d["flops_cum"] = sizeof_fmt(total_flops_num, suffix="OPs") - - for i in flops: - f = i["flops_num"] - i["flops"] = sizeof_fmt(f, suffix="OPs") - r = i["ratio"] = f / total_flops_num - i["percentage"] = "{:.2f}%".format(r * 100) - bar_length = int(f / max_flops_num * bar_length_max) - i["bar"] = "#" * bar_length - - header = [ - "name", - "class_name", - "input_shapes", - "output_shapes", - "flops", - "flops_cum", - "percentage", - "bar", - ] - - total_flops_str = sizeof_fmt(total_flops_num, suffix="OPs") - total_var_size = sum(sum(s[1] for s in i["output_shapes"]) for i in flops) - flops.append( - dict(name="total", flops=total_flops_str, output_shapes=total_var_size) - ) - - logger.info( - "flops stats: \n" + tabulate.tabulate(dict2table(flops, header=header)) - ) - - return total_flops_num - - def print_params_stats(params): - total_param_dims, total_param_size = 0, 0 - for d in params: - total_param_dims += int(d["param_dim"]) - total_param_size += int(d["size"]) - d["size"] = sizeof_fmt(d["size"]) - d["size_cum"] = sizeof_fmt(total_param_size) - - for d in params: - ratio = d["param_dim"] / total_param_dims - d["ratio"] = ratio - d["percentage"] = "{:.2f}%".format(ratio * 100) - - # construct bar - max_ratio = max([d["ratio"] for d in params]) - for d in params: - bar_length = int(d["ratio"] / max_ratio * bar_length_max) - d["size_bar"] = "#" * bar_length - - param_size = sizeof_fmt(total_param_size) - params.append(dict(name="total", param_dim=total_param_dims, size=param_size,)) - - header = [ - "name", - "shape", - "mean", - "std", - "param_dim", - "bits", - "size", - "size_cum", - "percentage", - "size_bar", - ] - - logger.info( - "param stats: \n" + tabulate.tabulate(dict2table(params, header=header)) - ) - - return total_param_size - - def net_stats_hook(module, input, output, name=""): - class_name = str(module.__class__).split(".")[-1].split("'")[0] - - flops_fun = CALC_FLOPS.get(type(module)) - if callable(flops_fun): - flops_num = flops_fun(module, input, output) - - if not isinstance(output, (list, tuple)): - output = [output] - - flops.append( - dict( - name=name, - class_name=class_name, - input_shapes=[i.shape for i in input], - output_shapes=[o.shape for o in output], - flops_num=flops_num, - flops_cum=0, - ) - ) - - if hasattr(module, "weight") and module.weight is not None: - w = module.weight - value = w.numpy() - param_dim = np.prod(w.shape) - param_bytes = get_byteswidth(w) - params.append( - dict( - name=name + "-w", - shape=w.shape, - param_dim=param_dim, - bits=param_bytes * 8, - size=param_dim * param_bytes, - size_cum=0, - mean="{:.2g}".format(value.mean()), - std="{:.2g}".format(value.std()), - ) - ) - - if hasattr(module, "bias") and module.bias is not None: - b = module.bias - value = b.numpy() - param_dim = np.prod(b.shape) - param_bytes = get_byteswidth(b) - params.append( - dict( - name=name + "-b", - shape=b.shape, - param_dim=param_dim, - bits=param_bytes * 8, - size=param_dim * param_bytes, - size_cum=0, - mean="{:.2g}".format(value.mean()), - std="{:.2g}".format(value.std()), - ) - ) - - # multiple inputs to the network - if not isinstance(input_size[0], tuple): - input_size = [input_size] - - params = [] - flops = [] - hooks = [] - - for (name, module) in model.named_modules(): - if isinstance(module, hook_modules): - hooks.append( - module.register_forward_hook(partial(net_stats_hook, name=name)) - ) - - inputs = [mge.zeros(in_size, dtype=np.float32) for in_size in input_size] - model.eval() - model(*inputs) - for h in hooks: - h.remove() - - total_flops, total_params = 0, 0 - if log_params: - total_params = print_params_stats(params) - if log_flops: - total_flops = print_flops_stats(flops) - - return total_params, total_flops diff --git a/python_module/megengine/utils/profile_analyze.py b/python_module/megengine/utils/profile_analyze.py deleted file mode 100755 index 8041c0d8..00000000 --- a/python_module/megengine/utils/profile_analyze.py +++ /dev/null @@ -1,424 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import argparse -import collections -import json -import re -import textwrap - -import numpy as np -from tabulate import tabulate - -from megengine.utils.profile_analyzer import ( - NonExistNum, - ProfileAnalyzer, - TimeFuncHelper, -) - - -def _tabulate_ml(tab, **kwargs): - """Tabulate profile output with multi-line support.""" - new_tab = [] - new_tab_is_row = [] - for row in tab: - col_lines = [str(i).split("\n") for i in row] - max_nr_line = max(map(len, col_lines)) - new_tab_is_row.append(True) - if max_nr_line > 1: - new_tab_is_row.extend([False] * (max_nr_line - 1)) - for i in col_lines: - if len(i) < max_nr_line: - i.extend([""] * (max_nr_line - len(i))) - new_tab.extend(zip(*col_lines)) - else: - new_tab.append(row) - - assert len(new_tab_is_row) == len(new_tab) - ret = [i + "\n" for i in tabulate(new_tab, **kwargs).split("\n")] - for idx, val in enumerate(new_tab_is_row): - if not val: - ret[idx * 2 + 2] = "" - return "".join(ret)[:-1] - - -def _tabulate_confluence(tab, **kwargs): - """Tabulate profile output.""" - kwargs.pop("tablefmt", None) - s = tabulate(tab, tablefmt="orgtbl", **kwargs) - lines = s.split("\n") - lines[1] = lines[1].replace("+", "|") - return "\n".join(lines) - - -def main(passed_args=None): # pylint: disable=too-many-statements - """Analyses profile info from :mod:`~.utils.profile_analyzer` . - - Run this file with ``--help`` to get more usage. - """ - parser = argparse.ArgumentParser( - description="analyze analyzer result", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - parser.add_argument("dump") - parser.add_argument( - "-t", - "--top", - type=int, - default=3, - help="number of most time-consuming operators to print", - ) - parser.add_argument( - "--type", action="append", help="filter oprs in the top list by type" - ) - parser.add_argument( - "--aggregate-by", - default=None, - choices=["type"], - help="aggragate profiling result by", - ) - parser.add_argument( - "--opr-name", help="filter oprs in the top list by regex of name" - ) - parser.add_argument( - "--input-dtype", type=str, help="filter oprs in the top list by input dtype" - ) - parser.add_argument( - "--top-end-key", - default="end", - choices=["end", "kern"], - help="how time in top is calculated; end corresponds " - "to total device time, and kern corresponds to only " - "wait time", - ) - parser.add_argument( - "--aggregate", - default=None, - help="aggregate operations", - choices=["max", "min", "sum", "mean"], - ) - parser.add_argument( - "--order-by", - default="time", - help="sort result according to given column; the param can be " - " or +, meaning sorting in descending or " - "ascending order respectively", - ) - parser.add_argument( - "--copy-time", action="store_true", help="show copy time related result" - ) - parser.add_argument( - "--min-time", - type=float, - default=float("-inf"), - help="minimal time of a result to be printed", - ) - parser.add_argument( - "--max-time", - type=float, - default=float("inf"), - help="maximal time of a result to be printed", - ) - parser.add_argument( - "--show-host", action="store_true", help="show host profiling info" - ) - parser.add_argument( - "--dump-only-opr", - action="store_true", - help="only dump operator info as plaintext; useful " - "for diff between two filtered profile results", - ) - parser.add_argument( - "--confluence", - "--wiki", - action="store_true", - help="output confluence-markdown-compatible table", - ) - parser.add_argument( - "--print-only", - choices={"summary", "device", "host"}, - help="print only chosen info", - ) - - args = parser.parse_args(passed_args) - - opr_filters = [] - if args.type: - opr_filters.append(lambda o, a, b: o["type"] in args.type) - if args.opr_name: - opr_filters.append( - lambda o, a, b, r=re.compile(args.opr_name): r.match(o["name"]) - ) - if args.input_dtype: - opr_filters.append( - lambda o, a, b: any( - [i["mem_plan"]["layout"]["dtype"] == args.input_dtype for i in a] - ) - ) - if not opr_filters: - - def opr_filter(o, a, b): # pylint: disable=unused-argument - return True - - else: - - def opr_filter(o, a, b): - return all(i(o, a, b) for i in opr_filters) - - with open(args.dump) as fin: - dump = json.load(fin) - - analyzer = ProfileAnalyzer(dump, opr_filter) - analyzer_tot = ProfileAnalyzer(dump, lambda _, __, ___: True) - - def summary(): - device_end_func = TimeFuncHelper.eval_time_func("device", "end", np.max) - device_kern_func = TimeFuncHelper.eval_time_func("device", "kern", np.max) - host_end_func = TimeFuncHelper.eval_time_func("host", "end", np.max) - - def get_tot_time(func): - rec = analyzer_tot.select(func, aggregate=np.sum) - if not rec: - return "N/A" - rec = rec[0] - return rec.time - - tab = [] - tot_dev_time = get_tot_time(device_end_func) - tot_host_time = get_tot_time(host_end_func) - tab.append(("total device time", tot_dev_time)) - tab.append(("total host time", tot_host_time)) - if args.copy_time: - - def fmt(a, b): - a = a[0] - b = b[0] - return "tot={:.4f} avg={:.4f}".format(a.time, b.time) - - tab.append( - ( - "copy time", - fmt( - analyzer.select( - device_end_func, - lambda opr: opr.opr_info["type"] == "Copy", - aggregate=np.sum, - ), - analyzer.select( - device_end_func, - lambda opr: opr.opr_info["type"] == "Copy", - aggregate=np.mean, - ), - ), - ) - ) - tab.append( - ( - "copy wait time", - fmt( - analyzer.select( - device_kern_func, - lambda opr: opr.opr_info["type"] == "Copy", - aggregate=np.sum, - ), - analyzer.select( - device_kern_func, - lambda opr: opr.opr_info["type"] == "Copy", - aggregate=np.mean, - ), - ), - ) - ) - - if args.confluence: - tab_str = _tabulate_confluence(tab, headers=["name", "value"]) - else: - tab_str = tabulate(tab) - - return tab_str, tot_dev_time, tot_host_time - - def prof_details(prof_type, tot_time): - tab = [] - - def func( - opr, - *, - f0=TimeFuncHelper.eval_time_func(prof_type, args.top_end_key, np.max) - ): - t = f0(opr) - if t is not None and (t < args.min_time or t > args.max_time): - return None - return t - - records = analyzer.select( - func, - aggregate=args.aggregate, - aggregate_by=args.aggregate_by, - top_k=args.top, - sort_by=args.order_by, - ) - - if args.dump_only_opr: - ret = [] - for i in records: - ret.append(" ".join(i.info.values())) - return "\n".join(ret) - - def format_shapes(shapes, layouts=None, sep="\n"): - if isinstance(shapes, NonExistNum) or shapes is None: - return repr(shapes) - if layouts is None: - layouts = [None] * len(shapes) - - comp = [] - for i, j in zip(shapes, layouts): - i = "{" + ",".join(map(str, i)) + "}" - if j: - i += "\n -[" + ",".join(map(str, j)) + "]" - comp.append(i) - return sep.join(comp) - - def fix_num_and_find_unit(x, base): - if isinstance(x, NonExistNum) or ( - isinstance(x, float) and not np.isfinite(x) - ): - return x, "" - unit = iter(["", "K", "M", "G", "T", "P"]) - while x >= base: - x /= base - next(unit) - return x, next(unit) - - def get_number_with_unit(num, unit, base, sep="\n"): - num, unit_prefix = fix_num_and_find_unit(num, base) - if isinstance(unit, list): - unit = unit[int(unit_prefix != "")] - return ("{:.2f}" + sep + "{}{}").format(num, unit_prefix, unit) - - if args.confluence: - rows = [] - cum_time = 0 - - max_time = max([r.time for r in records]) - max_bandwidth = max([r.bandwidth for r in records]) - max_flops = max( - [r.flops for r in records if not isinstance(r.flops, NonExistNum)] - ) - - bar_length = 15 - for idx, record in enumerate(records): - cum_time += record.time - - opr_info = [("opr " + k, v) for k, v in record.info.items()] - - row = collections.OrderedDict( - [ - ("#", idx), - ("time", "{:.3}".format(record.time)), - ("ratio", "{:.1f}%".format(record.time / tot_time * 100)), - ("time bar", "#" * int(record.time / max_time * bar_length)), - ("cum-time", cum_time), - ("cum-time ratio", cum_time / tot_time), - ] - + opr_info - + [ - ( - "computation (MFLO)", - "{:.1f}".format(record.computation / 1000 ** 2), - ), - ("MFLOPS", "{:.1f}".format(record.flops / 1000 ** 2)), - ( - "MFLOPS-bar", - "" - if isinstance(record.flops, NonExistNum) - else ("#" * int(record.flops / max_flops * bar_length)), - ), - ("memory (MB)", "{:.1f}".format(record.memory / 1024 ** 2)), - ( - "bandwidth (MiB/s)", - "{:.1f}".format(record.bandwidth / 1024 ** 2), - ), - ( - "bandwidth bar", - "#" * int(record.bandwidth / max_bandwidth * bar_length), - ), - ( - "in_shapes", - format_shapes( - record.in_shapes, record.in_layouts, sep=", " - ), - ), - ("out_shapes", format_shapes(record.out_shapes, sep=", ")), - ] - ) - rows.append(row) - headers = list(rows[0].keys()) - tab = [[row[i] for i in headers] for row in rows] - - return _tabulate_confluence(tab, headers=headers) - - else: - cum_time = 0 - for idx, record in enumerate(records): - cum_time += record.time - tab.append( - ( - "#{}\n{:.3}\n{:.1f}%".format( - idx, record.time, record.time / tot_time * 100 - ), - "{:.3}\n{:.1f}%".format(cum_time, cum_time / tot_time * 100), - "\n".join( - "\n- ".join(textwrap.wrap(str(i), width=30)) - for i in record.info.values() - ), - get_number_with_unit(record.computation, "FLO", 1000), - get_number_with_unit(record.flops, "FLOPS", 1000), - get_number_with_unit(record.memory, ["byte", "iB"], 1024), - get_number_with_unit( - record.bandwidth, ["byte/s", "iB/s"], 1024 - ), - format_shapes(record.in_shapes, record.in_layouts), - format_shapes(record.out_shapes), - ) - ) - return _tabulate_ml( - tab, - headers=[ - "{} self time".format(prof_type), - "cumulative", - "operator info", - "computation", - "FLOPS", - "memory", - "bandwidth", - "in_shapes", - "out_shapes", - ], - tablefmt="fancy_grid", - ) - - summary_tab, tot_dev_time, tot_host_time = summary() - if args.print_only: - print( - { - "summary": lambda: summary_tab, - "device": lambda: prof_details("device", tot_dev_time), - "host": lambda: prof_details("host", tot_host_time), - }[args.print_only]() - ) - else: - print(summary_tab) - print() - print(prof_details("device", tot_dev_time)) - if args.show_host: - print() - print(prof_details("host", tot_host_time)) - - -if __name__ == "__main__": - main() diff --git a/python_module/megengine/utils/profile_analyzer.py b/python_module/megengine/utils/profile_analyzer.py deleted file mode 100644 index 75cc0c0c..00000000 --- a/python_module/megengine/utils/profile_analyzer.py +++ /dev/null @@ -1,401 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import copy -import functools -from typing import Callable, List, Optional, Union - -import numpy as np - - -class NonExistNum: - """An object that behaves like a number but means a field does not exist; It is - always greater than any real number - """ - - def __truediv__(self, _): - return self - - def __add__(self, rhs): - return rhs - - def __radd__(self, lhs): - return lhs - - def __neg__(self): - return self - - def __gt__(self, rhs): - if isinstance(rhs) is NonExistNum: - return id(self) > id(rhs) - return True - - def __ge__(self, rhs): - return self > rhs or self == rhs - - def __lt__(self, rhs): - if isinstance(rhs) is NonExistNum: - return id(self) < id(rhs) - return False - - def __le__(self, rhs): - return self < rhs or self == rhs - - def __eq__(self, rhs): - return self is rhs - - def __format__(self, spec): - return "N/A" - - def __repr__(self): - return "N/A" - - -class OprProfRst: - """Opr profiling result dumped from megengine profiler.""" - - opr_info = None - """A dict containing operator info: name, id and type.""" - - time_dict = None - """A mapping from ``"host"`` or ``"device"`` to list of profiling - results.""" - - footprint = None - """A mapping from ``"memory"`` or ``"computation"`` to the actual number - of corresponding operations""" - - def __init__(self, entry: dict): - """Opr profiling initialization, which sets up name, type and id of opr_info. - - :param entry: profiling json exec_graph items - """ - assert isinstance(entry, dict) - self.opr_info = collections.OrderedDict() - for key in ["name", "type", "id"]: - self.opr_info[key] = entry[key] - self.time_dict = collections.defaultdict(list) - self.footprint = collections.defaultdict(NonExistNum) - - def update_device_prof_info(self, dev_time: dict): - """Updates device profiling info - - :param dev_time: device time for single opr, - is an attribute of profiling result. - """ - assert isinstance(dev_time, dict) - self.time_dict["device"].append(copy.deepcopy(dev_time)) - - def update_host_prof_info(self, host_time: dict): - """Updates host profiling info - - :param host_time: host time for single opr, - is an attribute of profiling result. - """ - assert isinstance(host_time, dict) - self.time_dict["host"].append(copy.deepcopy(host_time)) - - def update_footprint(self, footprint: dict): - """Updates opr footprint - - :param footprint: footprint for single opr, - is an attribute of profiling result. - """ - assert isinstance(footprint, dict) - self.footprint.update(footprint) - - -class Record: - """A record of analyzing result""" - - __slot__ = [ - "time", - "info", - "computation", - "memory", - "in_shapes", - "in_layouts", - "out_shapes", - "flops", - "bandwidth", - "opr_id", - ] - - def __init__(self, time: float, info: dict, footprint: dict): - """Initializes single record - - :param time: opr running time, evaluated by applying users providing - function to OprProfRst. - :param info: opr information, could be original opr information or - aggregate infomation if aggregating enabled. - :param footprint: contains footprint information, for now, we have - ``"computation"``, ``"memory"``, ``"in_shapes"``, ``"out_shapes"``. - """ - - assert isinstance(footprint, dict) - self.time = time - self.info = collections.OrderedDict(copy.deepcopy(info)) - self.computation = footprint["computation"] or NonExistNum() - self.memory = footprint["memory"] - self.in_shapes = footprint["in_shapes"] - self.in_layouts = footprint.get("in_layouts") - self.out_shapes = footprint["out_shapes"] - self.flops = self.computation / self.time - self.bandwidth = self.memory / self.time - self.opr_id = info.get("id") - if isinstance(self.opr_id, str) and self.opr_id != "N/A": - self.opr_id = int(self.opr_id) - - def get_column_by_name(self, name: str = None): - """extracts column value by its column name - - :param name: column name, None for time. - """ - - if name is None: - name = "time" - return getattr(self, name) - - -class ProfileAnalyzer: - def __init__(self, obj: dict, opr_filter: Callable = lambda opr, inp, out: True): - """Initializes ProfileAnalyzer - - :param obj: dict dumped from json str. - :param opr_filter: function that filter oprs. - """ - self._opr_set = dict() # type: dict - assert isinstance(obj, dict) - varz = obj["graph_exec"]["var"] - for opr_id, entry in obj["graph_exec"]["operator"].items(): - inp = [varz[i] for i in entry["input"]] - out = [varz[i] for i in entry["output"]] - if opr_filter(entry, inp, out): - self._opr_set[opr_id] = OprProfRst(entry) - - for opr_id, entry in obj["profiler"]["device"].items(): - if opr_id not in self._opr_set: - continue - opr = self._opr_set[opr_id] - for _, time in entry.items(): - opr.update_device_prof_info(time) - - for opr_id, entry in obj["profiler"]["host"].items(): - if opr_id not in self._opr_set: - continue - opr = self._opr_set[opr_id] - for _, time in entry.items(): - opr.update_host_prof_info(time) - - for opr_id, entry in obj["profiler"].get("opr_footprint", {}).items(): - if opr_id not in self._opr_set: - continue - opr = self._opr_set[opr_id] - opr.update_footprint(entry) - - def _aggregate( - self, records: List[Record], aop: Union[str, Callable], atype: Optional[str] - ) -> List[Record]: - """Aggregate operation - - :param records: selected records - :param aop: aggregate operation, if aop is str, we would replace it - with associated numpy function wth aop name" - :param atype: the type aggregated by, None for aggregating all into single - record. - """ - if aop is None: - assert atype is None, "must specify aggregate op" - return records - if isinstance(aop, str): - aop = getattr(np, aop) - type2stat = collections.defaultdict(lambda: [[], [], []]) # type: dict - for item in records: - if atype == "type": - d = type2stat[item.info["type"]] - else: - d = type2stat["all"] - d[0].append(item.time) - d[1].append(item.computation) - d[2].append(item.memory) - - rst = [] - for opr_type in type2stat.keys(): - time, computation, memory = type2stat[opr_type] - nr_oprs = len(time) - time_rst = aop(time) - comp_rst = aop(computation) - mem_rst = aop(memory) - - item = Record( - time_rst, - {"type": opr_type, "count": nr_oprs, "id": "N/A"}, - { - "computation": comp_rst, - "memory": mem_rst, - "in_shapes": None, - "out_shapes": None, - }, - ) - rst.append(item) - return rst - - def _sort(self, records: List[Record], sort_by: str) -> List[Record]: - """sort operation - - :param records: the records after aggregate operation. - :param sort_by: keyword for sorting the list - """ - if sort_by is None: - return records - if sort_by.startswith("+"): - sort_by = sort_by[1:] - key = lambda record: record.get_column_by_name(sort_by) - else: - key = lambda record: -record.get_column_by_name(sort_by) - records.sort(key=key) - return records - - def select( - self, - time_func: Callable, - opr_filter: Callable = lambda opr: True, - aggregate: Callable = None, - aggregate_by: str = None, - sort_by: str = None, - top_k: int = 0, - ) -> List[Record]: - """Select operation - - :param time_func: time_func provided by user, would apply to every - OprProfRst - :param opr_filter: filter satisfied operatiors. - :param aggregate: function that apply to list of records which are - aggregated by atype - :param aggregate_by: the type aggregated by - :param sort_by: keyword for sorting all records. - :param top_k: specify the maximum number of records. - :return: the records that go through select, aggregate, sort. - """ - - records = [] - for opr in self._opr_set.values(): - if opr_filter(opr): - time = time_func(opr) - if time is None: - continue - item = Record(time, opr.opr_info, opr.footprint) - records.append(item) - - records = self._aggregate(records, aggregate, aggregate_by) - if not records: - return records - return self._sort(records, sort_by)[0 : len(records) if top_k == 0 else top_k] - - -class TimeFuncHelper: - """Time Function Helper for users.""" - - @staticmethod - def _eval_time(prof_type, end_key, func, opr_prof): - """Eval time - - :type prof_type: str - :param prof_type: 'host' or 'device' - :type end_key: str - :param end_key: 'kern' or 'end' - :type func: function - :param func: apply to list of all ``thread`` of ``gpu`` time. - :type opr_prof: `class OprProfRst` - :param opr_prof: operator profiling result - :rtype: float - :return: time - """ - - if prof_type not in opr_prof.time_dict: - return None - time = [time[end_key] - time["start"] for time in opr_prof.time_dict[prof_type]] - return func(time) - - @staticmethod - def eval_time_func(prof_type: str, end_key: str, func: Callable) -> float: - """Eval oprerator profile time. - - :param prof_type: 'host' or 'device' - :param end_key: 'kern' or 'end' - :param func: apply to list of all ``thread`` of ``gpu`` time. - :return: Eval time results - """ - return functools.partial(TimeFuncHelper._eval_time, prof_type, end_key, func) - - @staticmethod - def _min_start( - prof_type, end_key, func, opr_prof - ): # pylint: disable=unused-argument - """Eval minimum start time - - :type prof_type: str - :param prof_type: 'host' or 'device' - :type end_key: str - :param end_key: 'kern' or 'end' - :type func: function - :param func: apply to list of all ``thread`` of ``gpu`` time. - :type opr_prof: `class OprProfRst` - :param opr_prof: operator profiling result - :rtype: float - :return: time - """ - if prof_type not in opr_prof.time_dict: - return None - time = [time["start"] for time in opr_prof.time_dict[prof_type]] - return np.min(time) - - @staticmethod - def min_start_func( - prof_type: str, end_key: str, func: Callable - ) -> float: # pylint: disable=unused-argument - """Eval oprerator profile min start time - - :param prof_type: 'host' or 'device' - :param end_key: 'kern' or 'end' - :param func: apply to list of all ``thread`` of ``gpu`` time. - :return: Eval time results - """ - return functools.partial(TimeFuncHelper._min_start, prof_type, end_key, func) - - @staticmethod - def _max_end(prof_type, end_key, func, opr_prof): # pylint: disable=unused-argument - """Eval maximum end time - - :type prof_type: str - :param prof_type: 'host' or 'device' - :type end_key: str - :param end_key: 'kern' or 'end' - :type func: function - :param func: apply to list of all ``thread`` of ``gpu`` time. - :type opr_prof: `class OprProfRst` - :param opr_prof: operator profiling result - :rtype: float - :return: time - """ - if prof_type not in opr_prof.time_dict: - return None - time = [time["end"] for time in opr_prof.time_dict[prof_type]] - return np.max(time) - - @staticmethod - def max_end_func(prof_type: str, end_key: str, func: Callable) -> float: - """Eval oprerator profile max end time - - :param prof_type: 'host' or 'device' - :param end_key: 'kern' or 'end' - :param func: apply to list of all ``thread`` of ``gpu`` time. - :return: Eval time results - """ - return functools.partial(TimeFuncHelper._max_end, prof_type, end_key, func) diff --git a/python_module/megengine/utils/types.py b/python_module/megengine/utils/types.py deleted file mode 100644 index 465ca03c..00000000 --- a/python_module/megengine/utils/types.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import collections -import functools - - -def get_ndtuple(value, *, n, allow_zero=True): - r"""Converts possibly 1D tuple to nd tuple - - :type allow_zero: bool - :param allow_zero: whether to allow zero tuple value""" - if not isinstance(value, collections.Iterable): - value = int(value) - value = tuple([value for i in range(n)]) - else: - assert len(value) == n, "tuple len is not equal to n: {}".format(value) - spatial_axis = map(int, value) - value = tuple(spatial_axis) - if allow_zero: - minv = 0 - else: - minv = 1 - assert min(value) >= minv, "invalid value: {}".format(value) - return value - - -_single = functools.partial(get_ndtuple, n=1, allow_zero=True) -_pair = functools.partial(get_ndtuple, n=2, allow_zero=True) -_pair_nonzero = functools.partial(get_ndtuple, n=2, allow_zero=False) -_triple = functools.partial(get_ndtuple, n=3, allow_zero=True) -_quadruple = functools.partial(get_ndtuple, n=4, allow_zero=True) diff --git a/python_module/megengine/version.py b/python_module/megengine/version.py deleted file mode 100644 index 3d187266..00000000 --- a/python_module/megengine/version.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.5.0" diff --git a/python_module/requires-style.txt b/python_module/requires-style.txt deleted file mode 100644 index 899aac52..00000000 --- a/python_module/requires-style.txt +++ /dev/null @@ -1,4 +0,0 @@ -black==19.10b0 -isort==4.3.21 -pylint==2.4.3 -mypy==0.750 diff --git a/python_module/requires-test.txt b/python_module/requires-test.txt deleted file mode 100644 index 9e732684..00000000 --- a/python_module/requires-test.txt +++ /dev/null @@ -1,3 +0,0 @@ -pytest==5.3.0 -pytest-sphinx>=0.2.2 -pytest-json-report>=1.2.1 diff --git a/python_module/requires.txt b/python_module/requires.txt deleted file mode 100644 index 5ebb52a3..00000000 --- a/python_module/requires.txt +++ /dev/null @@ -1,7 +0,0 @@ -numpy>=1.17 -opencv-python -pyarrow -requests -tabulate -tqdm -redispy diff --git a/python_module/setup.py b/python_module/setup.py deleted file mode 100644 index 414f4fcf..00000000 --- a/python_module/setup.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of MegBrain. -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - -import os -import re -import pathlib -import platform -from distutils.file_util import copy_file -from setuptools import setup, find_packages, Extension -from setuptools.command.build_ext import build_ext as _build_ext - -class PrecompiledExtesion(Extension): - def __init__(self, name): - super().__init__(name, sources=[]) - -class build_ext(_build_ext): - - def build_extension(self, ext): - if not isinstance(ext, PrecompiledExtesion): - return super().build_extension(ext) - - if not self.inplace: - fullpath = self.get_ext_fullpath(ext.name) - extdir = pathlib.Path(fullpath) - extdir.parent.mkdir(parents=True, exist_ok=True) - - modpath = self.get_ext_fullname(ext.name).split('.') - if platform.system() == "Windows": - modpath[-1] += '.pyd' - else: - modpath[-1] += '.so' - modpath = str(pathlib.Path(*modpath).resolve()) - - copy_file(modpath, fullpath, verbose=self.verbose, dry_run=self.dry_run) - -package_name = 'MegEngine' - -v = {} -with open("megengine/version.py") as fp: - exec(fp.read(), v) -__version__ = v['__version__'] - -email = 'megengine@megvii.com' -local_version = os.environ.get('LOCAL_VERSION') -if local_version: - __version__ = '{}+{}'.format(__version__, local_version) - -packages = find_packages(exclude=['test']) -package_data = [ - str(f.relative_to('megengine')) - for f in pathlib.Path('megengine', '_internal', 'include').glob('**/*') -] -package_data += [ - str(f.relative_to('megengine')) - for f in pathlib.Path('megengine', '_internal', 'lib').glob('**/*') -] -package_data += [ - os.path.join('module', 'pytorch', 'torch_mem_fwd.cpp') -] - -with open('requires.txt') as f: - requires = f.read().splitlines() -with open('requires-style.txt') as f: - requires_style = f.read().splitlines() -with open('requires-test.txt') as f: - requires_test = f.read().splitlines() - -setup_kwargs = dict( - name=package_name, - version=__version__, - description='Framework for numerical evaluation with ' - 'auto-differentiation', - author='Megvii Engine Team', - author_email=email, - packages=packages, - package_data={ - 'megengine': package_data, - }, - ext_modules=[PrecompiledExtesion('megengine._internal._mgb')], - install_requires=requires, - extras_require={ - 'dev': requires_style + requires_test, - 'ci': requires_test, - }, - cmdclass={'build_ext': build_ext}, -) - - -setup_kwargs.update(dict( - classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'Intended Audience :: Education', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: C++', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Mathematics', - 'Topic :: Scientific/Engineering :: Artificial Intelligence', - 'Topic :: Software Development', - 'Topic :: Software Development :: Libraries', - 'Topic :: Software Development :: Libraries :: Python Modules', - ], - license='Apache 2.0', - keywords='megengine deep learning', - data_files = [("megengine", [ - "../LICENSE", - "../ACKNOWLEDGMENTS", - ])] -)) - -setup(**setup_kwargs) diff --git a/python_module/src/cpp/bfloat16.cpp b/python_module/src/cpp/bfloat16.cpp deleted file mode 100644 index 712e5219..00000000 --- a/python_module/src/cpp/bfloat16.cpp +++ /dev/null @@ -1,296 +0,0 @@ -/** - * \file python_module/src/cpp/bfloat16.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief numpy dtypes for bfloat16 - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "megbrain/common.h" -#include "megbrain/dtype.h" - -#include -#include - -#define NO_IMPORT_ARRAY 1 -#include "./numpy_incl.h" - -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" - -namespace { - -struct BFloat16Type { - static int npy_typenum; - mgb::dt_bfloat16 value; - - struct PyObj; - struct NpyType; - - template - struct NpyCast; -}; - -int BFloat16Type::npy_typenum; - -/* ==================== BFloat16Type::NpyCast ==================== */ - -template -struct BFloat16Type::NpyCast { - static void apply(void* from_, void* to_, npy_intp n, void* /*fromarr*/, - void* /*toarr*/) { - auto from = static_cast(from_); - auto to = static_cast(to_); - for (npy_intp i = 0; i < n; ++i) { - float cur = static_cast(from[i]); - to[i].value = cur; - } - } -}; - -template -struct BFloat16Type::NpyCast { - static void apply(void* from_, void* to_, npy_intp n, void* /*fromarr*/, - void* /*toarr*/) { - auto from = static_cast(from_); - auto to = static_cast(to_); - for (npy_intp i = 0; i < n; ++i) { - to[i] = from[i].value; - } - } -}; - -/* ==================== BFloat16Type::PyObj ==================== */ -struct BFloat16Type::PyObj { - PyObject_HEAD BFloat16Type obj; - - static PyTypeObject py_type; - - static PyObject* from_bfloat16(BFloat16Type val) { - auto p = reinterpret_cast(py_type.tp_alloc(&py_type, 0)); - p->obj.value = val.value; - return reinterpret_cast(p); - } - - static PyObject* py_new(PyTypeObject* type, PyObject* args, PyObject* kwds); - static PyObject* py_repr(PyObject* obj); - static PyObject* py_richcompare(PyObject* a, PyObject* b, int op); -}; -PyTypeObject BFloat16Type::PyObj::py_type; - -PyObject* BFloat16Type::PyObj::py_new(PyTypeObject* type, PyObject* args, - PyObject* kwds) { - PyObj* self; - Py_ssize_t size; - - self = (PyObj*)type->tp_alloc(type, 0); - - size = PyTuple_GET_SIZE(args); - if (size > 1) { - PyErr_SetString(PyExc_TypeError, "BFloat16Type Only has 1 parameter"); - return NULL; - } - PyObject* x = PyTuple_GET_ITEM(args, 0); - if (PyObject_IsInstance(x, (PyObject*)&py_type)) { - Py_INCREF(x); - return x; - } - - if (!PyFloat_Check(x)) { - PyErr_SetString(PyExc_TypeError, - "BFloat16Type must be initialized wit float"); - return NULL; - } - - const float s = PyFloat_AsDouble(x); - - self->obj.value = s; - - return (PyObject*)self; -} - -PyObject* BFloat16Type::PyObj::py_repr(PyObject* obj) { - float fval = static_cast(((PyObj*)obj)->obj.value); - return PyUnicode_FromString(mgb::ssprintf("%f", fval).c_str()); -} - -PyObject* BFloat16Type::PyObj::py_richcompare(PyObject* a, PyObject* b, - int op) { - mgb_assert(PyObject_IsInstance(a, (PyObject*)&py_type)); - auto bval = PyFloat_AsDouble(b); - if (bval == -1 && PyErr_Occurred()) { - return NULL; - } - double aval = ((PyObj*)a)->obj.value; -#define OP(py, op) \ - case py: { \ - if (aval op bval) { \ - Py_RETURN_TRUE; \ - } else { \ - Py_RETURN_FALSE; \ - } \ - } - switch (op) { - OP(Py_LT, <) - OP(Py_LE, <=) - OP(Py_EQ, ==) - OP(Py_NE, !=) - OP(Py_GT, >) - OP(Py_GE, >=) - }; -#undef OP - return Py_NotImplemented; -} - -/* ==================== BFloat16Type::NpyType ==================== */ -struct BFloat16Type::NpyType { - static PyArray_ArrFuncs funcs; - static PyArray_Descr descr; - - static bool init(); - - static void copyswap(void* dst, void* src, int swap, void* /*arr*/) { - if (src) { - mgb_assert(!swap); - memcpy(dst, src, sizeof(BFloat16Type)); - } - } - static PyObject* getitem(void* data, void* ap) { - return BFloat16Type::PyObj::from_bfloat16( - *static_cast(data)); - } - static int setitem(PyObject* op, void* ov, void* ap); -}; - -PyArray_ArrFuncs BFloat16Type::NpyType::funcs; -PyArray_Descr BFloat16Type::NpyType::descr; - -int BFloat16Type::NpyType::setitem(PyObject* op, void* ov, void* ap) { - if (PyLong_Check(op)) { - int a = PyLong_AsLong(op); - static_cast(ov)->value = a; - } else if (PyFloat_Check(op)) { - float a = PyFloat_AsDouble(op); - static_cast(ov)->value = a; - } else if (PyObject_IsInstance( - op, (PyObject*)(&(BFloat16Type::PyObj::py_type)))) { - static_cast(ov)->value = ((PyObj*)op)->obj.value; - } else { - PyErr_SetString(PyExc_ValueError, - "input type must be int/float/bfloat16"); - return -1; - } - return 0; -} - -bool BFloat16Type::NpyType::init() { - descr = {PyObject_HEAD_INIT(0) & BFloat16Type::PyObj::py_type, - 'V', // kind - 'f', // type - '=', // byteorder - NPY_NEEDS_PYAPI | NPY_USE_GETITEM | NPY_USE_SETITEM, - 1, // type num - sizeof(BFloat16Type), - alignof(BFloat16Type), - NULL, - NULL, - NULL, - &funcs}; - Py_TYPE(&descr) = &PyArrayDescr_Type; - PyArray_InitArrFuncs(&funcs); - funcs.copyswap = copyswap; - funcs.getitem = getitem; - funcs.setitem = setitem; - npy_typenum = PyArray_RegisterDataType(&descr); - -#define REGISTER_CAST(From, To, From_descr, To_typenum, safe) \ - { \ - PyArray_Descr* from_descr = (From_descr); \ - if (PyArray_RegisterCastFunc(from_descr, (To_typenum), \ - NpyCast::apply) < 0) { \ - return false; \ - } \ - if (safe && PyArray_RegisterCanCast(from_descr, (To_typenum), \ - NPY_NOSCALAR) < 0) { \ - return false; \ - } \ - } -#define REGISTER_INT_CASTS(bits) \ - REGISTER_CAST(npy_int##bits, BFloat16Type, \ - PyArray_DescrFromType(NPY_INT##bits), \ - BFloat16Type::npy_typenum, 1) \ - REGISTER_CAST(BFloat16Type, npy_int##bits, &descr, NPY_INT##bits, 0) \ - REGISTER_CAST(npy_uint##bits, BFloat16Type, \ - PyArray_DescrFromType(NPY_UINT##bits), \ - BFloat16Type::npy_typenum, 1) \ - REGISTER_CAST(BFloat16Type, npy_uint##bits, &descr, NPY_UINT##bits, 0) - - REGISTER_INT_CASTS(8) - REGISTER_INT_CASTS(16) - REGISTER_INT_CASTS(32) - REGISTER_INT_CASTS(64) - REGISTER_CAST(BFloat16Type, float, &descr, NPY_FLOAT, 0) - REGISTER_CAST(float, BFloat16Type, PyArray_DescrFromType(NPY_FLOAT), - BFloat16Type::npy_typenum, 0) - REGISTER_CAST(BFloat16Type, double, &descr, NPY_DOUBLE, 1) - REGISTER_CAST(double, BFloat16Type, PyArray_DescrFromType(NPY_DOUBLE), - BFloat16Type::npy_typenum, 0) - return true; -} - -} // anonymous namespace - -bool init_pytype_bfloat16() { - auto& py_type = BFloat16Type::PyObj::py_type; - py_type = {PyVarObject_HEAD_INIT(NULL, 0)}; - py_type.tp_name = "megbrain._mgb.pybfloat16"; - py_type.tp_basicsize = sizeof(BFloat16Type::PyObj); - py_type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE; - py_type.tp_doc = "bfloat16 type"; - py_type.tp_new = BFloat16Type::PyObj::py_new; - py_type.tp_str = BFloat16Type::PyObj::py_repr; - py_type.tp_repr = BFloat16Type::PyObj::py_repr; - py_type.tp_richcompare = BFloat16Type::PyObj::py_richcompare; - py_type.tp_base = &PyGenericArrType_Type; - return PyType_Ready(&py_type) >= 0; -} - -void register_pytype_bfloat16(PyObject* d, PyObject* m) { - Py_INCREF(&BFloat16Type::PyObj::py_type); - PyDict_SetItemString(d, "bfloat16_pytype", - (PyObject*)&BFloat16Type::PyObj::py_type); - PyModule_AddObject(m, "bfloat16_pytype", - (PyObject*)&BFloat16Type::PyObj::py_type); -} - -//! called from swig init -void _init_bfloat16_types(PyObject* m) { - if (m == NULL) - return; - PyObject* d = PyModule_GetDict(m); - PyArray_Descr* dtype; - if (!init_pytype_bfloat16()) - return; - if (!BFloat16Type::NpyType::init()) - return; - dtype = PyArray_DescrFromType(BFloat16Type::npy_typenum); - if (!dtype) - return; - { - PyObject* pytype = (PyObject*)(&BFloat16Type::PyObj::py_type); - Py_INCREF(pytype); - PyDict_SetItemString(d, "pybfloat16", pytype); - } - Py_INCREF(dtype); - PyDict_SetItemString(d, "bfloat16", (PyObject*)dtype); - register_pytype_bfloat16(d, m); - return; -} - -int mgb::npy_num_bfloat16() { - return BFloat16Type::npy_typenum; -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/craniotome.cpp b/python_module/src/cpp/craniotome.cpp deleted file mode 100644 index af9d17b0..00000000 --- a/python_module/src/cpp/craniotome.cpp +++ /dev/null @@ -1,435 +0,0 @@ -/** - * \file python_module/src/cpp/craniotome.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./craniotome.h" -#include "./python_helper.h" -#include "megbrain/comp_node_env.h" -#include "megbrain/graph/grad_impl.h" -#include "megbrain/serialization/sereg.h" - -using namespace mgb; -using namespace opr; - -MGB_DYN_TYPE_OBJ_FINAL_IMPL(CraniotomeDesc); -MGB_DYN_TYPE_OBJ_FINAL_IMPL(Craniotome); - - -bool CraniotomeDesc::is_same_st(const mgb::Hashable &rhs) const { - auto rp = static_cast(rhs).py_self(); - size_t ref0 = rp->ob_refcnt; - bool ret; - { - PYTHON_GIL; - Py_INCREF(rp); - ret = _is_same(rp); - } - size_t ref1 = rp->ob_refcnt; - mgb_assert(ref0 == ref1, - "reference count changed from %zu to %zu", - ref0, ref1); - return ret; -} - -size_t CraniotomeDesc::hash() const { - return _hash(); -} - - -PyObject* CraniotomeDesc::py_self() const { - if (!m_py_self) { - PYTHON_GIL; - PyObject* dst = PyList_New(0); - mgb_assert(dst); - PyObjRefKeeper dst_ref{dst}; - - Py_INCREF(dst); - _setup_self(dst); - mgb_assert(dst->ob_refcnt == 1); - - mgb_assert(PyList_Size(dst) == 1); - m_py_self = PyList_GetItem(dst, 0); - } - - return m_py_self; -} - -class Craniotome::FuncDelCallbackInvoker final - : public UserDataContainer::UserData { - MGB_TYPEINFO_OBJ_DECL; - SmallVector m_oprs; - -public: - ~FuncDelCallbackInvoker() { - Craniotome* cur_opr = nullptr; - MGB_MARK_USED_VAR(cur_opr); - MGB_TRY { - std::vector arr; - for (auto i : m_oprs) { - cur_opr = i; - mgb_assert(i->m_on_graph_compile_called); - i->m_desc->_on_graph_compile_or_func_del(arr); - i->m_on_graph_compile_called = false; - } - } - MGB_HANDLE_EXCEPTION_DTOR( - ssprintf("craniotome opr %s", cur_opr->cname()).c_str()); - } - void add(Craniotome* opr) { m_oprs.push_back(opr); } -}; -MGB_TYPEINFO_OBJ_IMPL(Craniotome::FuncDelCallbackInvoker); - -Craniotome::Craniotome( - mgb::ComputingGraph *graph, std::unique_ptr desc, - const VarNodeArray &inputs, const OperatorNodeConfig &config): - Super{graph, config, desc->_get_opr_type_name().c_str(), inputs}, - m_node_flag{desc->_node_flag()}, - m_desc{std::move(desc)} -{ - for (auto i: inputs) - add_input({i}); - m_nr_dev_value_inp = input().size() - m_desc->_get_nr_dev_comp_order_deps(); - m_desc->_get_all_io_vars = [this]() { - SymbolVarArray ret; - ret.reserve(input().size() + output().size()); - for (auto i: input()) - ret.push_back(i); - for (auto i: output()) - ret.push_back(i); - return ret; - }; - - auto nr_out = m_desc->_get_nr_outputs(); - if (nr_out > 1) { - for (size_t i = 0, it = nr_out; i < it; ++ i) - add_output(ssprintf("o%zu", i)); - } else { - mgb_assert(nr_out == 1, - "could not create an operator with %zu outputs: %s", - nr_out, cname()); - add_output(None); - } - if (output_no_sys_mem_alloc()) { - for (auto i: output()) - i->add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC); - } - if (m_node_flag & NodeFlag::ALLOW_EMPTY_OUTPUT) { - for (auto i: output()) - i->add_flag(VarNode::Flag::ALLOW_EMPTY_SHAPE); - } - add_equivalence_component(m_desc.get()); - - // init comp node early because desc may access it - this->init_output_comp_node(); - m_desc->owner_opr = this; -} - -Craniotome::~Craniotome() noexcept { - if (m_on_graph_compile_called) { - m_desc->_on_graph_compile_or_func_del({}); - m_on_graph_compile_called = false; - } -} - -Craniotome::NodeProp* Craniotome::do_make_node_prop() const { - auto ret = Super::do_make_node_prop(); - if (m_node_flag & NodeFlag::DISALLOW_DUPLICATE) { - ret->add_flag(NodeProp::Flag::NO_AUTOMATIC_DUP); - } - if (m_nr_dev_value_inp < input().size()) { - using DT = NodeProp::DepType; - SmallVector
dep_types(input().size(), DT::DEV_VALUE); - for (size_t i = m_nr_dev_value_inp; i < dep_types.size(); ++i) { - dep_types[i] = DT::DEV_COMP_ORDER; - } - ret->reset_dep_type(input(), dep_types); - } - return ret; -} - -void Craniotome::scn_do_execute() { - m_prev_inferred_shape.invalidate(); - auto &&env = CompNodeEnv::from_comp_node(comp_node()); - env.activate(); - std::vector inpval(m_nr_dev_value_inp); - std::vector outval(output().size()); - auto dest_cn = comp_node(); - for (size_t i = 0; i < inpval.size(); ++ i) { - auto ivar = input(i); - if (ivar->comp_node() == dest_cn) { - inpval[i].setup(input(i)->dev_tensor(), false); - } else { - auto tensor = input(i)->dev_tensor(); - tensor.comp_node(dest_cn); - inpval[i].setup(tensor, false); - } - } - - TensorShapeArray orig_shape; - std::vector orig_ptr; - if (output_no_sys_mem_alloc()) { - for (size_t i = 0; i < outval.size(); ++ i) - outval[i].assign(output(i)); - } else { - for (size_t i = 0; i < outval.size(); ++ i) { - outval[i].assign(output(i)->dev_tensor()); - orig_shape.push_back(output(i)->shape()); - orig_ptr.push_back(output(i)->dev_tensor().raw_ptr()); - } - } - m_desc->_execute(inpval, outval); - mgb_assert(outval.size() == output().size()); - if (!output_no_sys_mem_alloc()) { - for (size_t i = 0; i < outval.size(); ++ i) { - mgb_assert(output(i)->shape().eq_shape(orig_shape[i]) && - orig_ptr[i] == output(i)->dev_tensor().raw_ptr(), - "%s: shape or ptr of output %zu changed", - cname(), i); - } - } -} - -void Craniotome::get_output_var_shape(const TensorShapeArray &inp_shape, - TensorShapeArray &out_shape) const { - TensorShapeVec cvt_ishp(inp_shape.size()); - for (size_t i = 0; i < cvt_ishp.size(); ++ i) - cvt_ishp[i] = npy::shape2vec(inp_shape[i]); - auto cvt_oshp = m_desc->_infer_shape(cvt_ishp); - mgb_assert(cvt_oshp.size() == output().size()); - out_shape.resize(cvt_oshp.size()); - for (size_t i = 0; i < cvt_oshp.size(); ++ i) - out_shape[i] = npy::vec2shape(cvt_oshp[i]); -} - -MGB_IMPL_OPR_GRAD(Craniotome) { - if (wrt_idx >= opr.nr_dev_value_inp()) { - return nullptr; - } - SymbolVarArray isv(opr.nr_dev_value_inp()), osv(opr.output().size()), - ogsv(out_grad.size()); - for (size_t i = 0; i < isv.size(); ++i) - isv[i] = opr.input(i); - for (size_t i = 0; i < osv.size(); ++i) - osv[i] = opr.output(i); - for (size_t i = 0; i < out_grad.size(); ++i) - ogsv[i] = out_grad[i]; - - auto ret = cg::to_var_node_array(const_cast(opr.desc()) - ._grad(wrt_idx, isv, osv, ogsv)); - - auto update_shape = [&opr](size_t i, VarNode* var) { - auto inp = opr.input(i); - if (var && cg::is_static_var_shape(inp) && - !cg::is_static_var_shape(var)) { - var = SymbolVar{var}.reshape(SymbolVar{inp}.symshape()).node(); - } - return var; - }; - if (ret.size() != 1) { - mgb_assert(ret.size() == opr.input().size()); - for (size_t i = 0; i < ret.size(); ++i) { - ret[i] = update_shape(i, ret[i]); - } - return ret; - } - return update_shape(wrt_idx, ret[0]); -} - -void Craniotome::add_input_layout_constraint() { - for (auto i : input()) - i->add_layout_constraint_contiguous(); - - if (!m_on_graph_compile_called) { - // check used outputs and call _on_graph_compile - auto graph = owner_graph(); - auto&& out = output(); - std::vector used_outputs; - used_outputs.reserve(out.size()); - for (size_t i = 0; i < out.size(); ++i) { - if (!graph->var_receiver_in_current_comp_seq(out[i]).empty()) { - used_outputs.push_back(i); - } - } - mgb_assert(!used_outputs.empty()); - m_desc->_on_graph_compile_or_func_del(used_outputs); - auto seq = graph->current_comp_seq(); - if (seq) { - seq->user_data() - .get_user_data_or_create() - ->add(this); - } else { - mgb_assert(graph->options().eager_evaluation); - } - m_on_graph_compile_called = true; - } -} - -SymbolVarArray Craniotome::make( - std::unique_ptr desc, - const SymbolVarArray &inputs, - const OperatorNodeConfig &config) { - VarNodeArray inp_vn(inputs.size()); - for (size_t i = 0; i < inputs.size(); ++ i) - inp_vn[i] = inputs[i].node(); - ComputingGraph *graph; - if (!inputs.empty()) { - graph = inp_vn[0]->owner_graph(); - } else { - graph = &desc->_get_comp_graph().get(); - mgb_assert(graph); - } - auto opr = graph->insert_opr( - std::make_unique( - graph, std::move(desc), inp_vn, config)); - SymbolVarArray rst; - for (auto i: opr->output()) - rst.push_back(i); - return rst; -} - -void Craniotome::init_output_static_infer_desc() { - if (!(m_node_flag & NodeFlag::DYNAMIC_OUTPUT_SHAPE)) { - Super::init_output_static_infer_desc(); - } else if (input().empty()) { - using namespace cg::static_infer; - auto &&mgr = owner_graph()->static_infer_manager(); - for (size_t idx = 0; idx < output().size(); ++ idx) { - auto infer = [this, idx](TensorShape &dest, const InpVal &) { - if (!m_prev_inferred_shape.valid()) { - auto &&shp = m_prev_inferred_shape.emplace(); - shp.resize(output().size()); - get_output_var_shape({}, shp); - } - dest = m_prev_inferred_shape->at(idx); - return true; - }; - mgr.register_shape_infer(output(idx), - {SourceType::MUTABLE, {}, infer}); - } - } -} - -void Craniotome::init_output_dtype() { - PYTHON_GIL; - - auto input_dtypes = PyList_New(input().size()), - ret = PyList_New(output().size()); - mgb_assert(input_dtypes); - PyObjRefKeeper input_dtypes_ref{input_dtypes}; - - mgb_assert(ret); - PyObjRefKeeper ret_ref{ret}; - - for (size_t i = 0; i < input().size(); ++ i) { - auto err = PyList_SetItem(input_dtypes, i, - npy::dtype_mgb2np(input(i)->dtype())); - mgb_assert(!err); - } - - // it seems that we need to incref before passing it to swig director method - Py_INCREF(input_dtypes); - Py_INCREF(ret); - if (!m_desc->_init_output_dtype(input_dtypes, ret)) { - Super::init_output_dtype(); - return; - } - - mgb_assert(PyList_Check(ret), - "_init_output_dtype should return list"); - mgb_assert(PyList_Size(ret) == static_cast(output().size()), - "_init_output_dtype list size not equal to number of outputs"); - for (size_t i = 0; i < output().size(); ++ i) { - auto cur = PyList_GetItem(ret, i); - mgb_assert(cur, "failed to get dtype for output %zu", i); - output(i)->dtype(npy::dtype_np2mgb(cur)); - } - - mgb_assert(input_dtypes->ob_refcnt == 1); - mgb_assert(ret->ob_refcnt == 1); -} - -// serialization -namespace { - - void craniotome_dumper( - serialization::OprDumpContext &ctx, - const cg::OperatorNodeBase &opr) { - - auto &&desc = opr.cast_final_safe().desc(); - auto result = PyList_New(0); - mgb_assert(result); - PyObjRefKeeper result_ref{result}; - - Py_INCREF(result); - desc._setup_serialize_params(result); - mgb_assert(result->ob_refcnt == 1); - - auto sz = PyList_Size(result); - mgb_assert(sz >= 1 && sz <= 2); - - auto name_obj = PyList_GetItem(result, 0); - mgb_assert(name_obj && PyUnicode_Check(name_obj)); - Py_ssize_t name_size; - const char *name_str = PyUnicode_AsUTF8AndSize(name_obj, &name_size); - mgb_assert(name_str); - - char *param_str = nullptr; - Py_ssize_t param_size = 0; - if (sz == 2) { - auto param_obj = PyList_GetItem(result, 1); - mgb_assert(param_obj && PyBytes_Check(param_obj)); - auto err = PyBytes_AsStringAndSize( - param_obj, ¶m_str, ¶m_size); - mgb_assert(!err); - } - - - ctx.dump_buf_with_len(name_str, name_size); - if (param_str) { - ctx.dump_buf_with_len(param_str, param_size); - } - } - - cg::OperatorNodeBase* craniotome_shallow_copy( - const serialization::OprShallowCopyContext &ctx, - const cg::OperatorNodeBase &opr, const VarNodeArray &inputs, - const OperatorNodeConfig &config) { - - MGB_MARK_USED_VAR(ctx); - auto &&orig_desc = opr.cast_final_safe().desc(); - std::unique_ptr desc; - mgb_assert(!orig_desc._set_copy_result); - orig_desc._set_copy_result = [&desc](CraniotomeDesc *r) { - mgb_assert(!desc); - desc.reset(r); - }; - orig_desc._copy(); - mgb_assert(desc); - orig_desc._set_copy_result = {}; - - mgb_assert(&orig_desc != desc.get()); - return Craniotome::make(std::move(desc), - {inputs.begin(), inputs.end()}, config).at(0).node( - )->owner_opr(); - } - - class _RegDumper { - public: - _RegDumper() { - serialization::OprRegistry::add_using_dynamic_loader( - Craniotome::typeinfo(), "Craniotome", - craniotome_dumper); - MGB_REG_OPR_SHALLOW_COPY_IMPL( - Craniotome, craniotome_shallow_copy); - } - }; - _RegDumper _reg_dumper; - -} // anonymous namespace - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/craniotome.h b/python_module/src/cpp/craniotome.h deleted file mode 100644 index d4754cb0..00000000 --- a/python_module/src/cpp/craniotome.h +++ /dev/null @@ -1,193 +0,0 @@ -/** - * \file python_module/src/cpp/craniotome.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief extend megbrain operators in python - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#pragma once - -#include "megbrain/graph/operator_node.h" -#include "./megbrain_wrap.h" - -using TensorShapeVec = std::vector>; -using SymbolVarArray = mgb::SymbolVarArray; - -namespace mgb { -namespace opr { -class Craniotome; -} // namespace opr -} // namespace mgb - -class CraniotomeDesc: public mgb::Hashable { - MGB_DYN_TYPE_OBJ_FINAL_DECL; - - mutable PyObject *m_py_self = nullptr; - - bool is_same_st(const mgb::Hashable &rhs) const override; - - size_t hash() const override; - - public: - struct NodeFlag { - static constexpr uint32_t - DYNAMIC_OUTPUT_SHAPE = 1 << 0, - DISALLOW_DUPLICATE = 1 << 1, - ALLOW_EMPTY_OUTPUT = 1 << 2, - DISABLE_SYS_MEM_ALLOC = 1 << 3; - }; - virtual ~CraniotomeDesc() = default; - - mgb::opr::Craniotome* owner_opr = nullptr; - - //! get final py object that implements this interface - PyObject* py_self() const ; - - //! store self in \p result which is a list - virtual void _setup_self(PyObject *result) const = 0; - - virtual bool _is_same(PyObject *rhs) const = 0; - - virtual uint32_t _node_flag() const = 0; - - virtual size_t _hash() const = 0; - - virtual std::string _get_opr_type_name() = 0; - - virtual size_t _get_nr_outputs() = 0; - - virtual void _execute( - const std::vector &inputs, - std::vector &outputs) = 0; - - /*! - * \brief infer output shape if DYNAMIC_OUTPUT_SHAPE is not set - */ - virtual TensorShapeVec _infer_shape( - const TensorShapeVec &inp_shape) = 0; - - virtual SymbolVarArray _grad( - size_t wrt_idx, - const SymbolVarArray &inputs, - const SymbolVarArray &outputs, - const SymbolVarArray &out_grad) = 0; - - virtual size_t _get_nr_dev_comp_order_deps() = 0; - - mgb::thin_function _get_all_io_vars; - - /*! - * \brief get output dtypes from input dtypes - * \param[in] input_dtypes python list of input - * \param[out] result initialized as an empty python list, and should - * be filled with output dtypes - * \return whether user has set the dtype - */ - virtual bool _init_output_dtype( - PyObject *input_dtypes, PyObject *result) = 0; - - /*! - * \brief get computing graph when no input var is provided - */ - virtual CompGraph _get_comp_graph() = 0; - - /*! - * \brief copy this CraniotomeDesc - * - * The implementation must call _set_copy_result() to return the result; - * this is used to bypass some swig issues. - */ - virtual void _copy() const = 0; - mutable mgb::thin_function _set_copy_result; - - /*! - * \brief setup params for serialization - * \param output an allocated list. One or two elements should be - * inserted in it after this function returns: the first element - * should be a string, indicating the id to be passed to - * opr_maker_loader; the second element, if exists, must be a byte - * object containing extra param that should be written to file. - */ - virtual void _setup_serialize_params(PyObject *output) const = 0; - - /*! - * \brief callback invoked when the graph is compiled or when func is - * destructed - * - * If the graph is compiled but not executed, this function might not be - * called - * - * \param used_outputs an array indices indicating the used output vars; - * this argument being empty means that the previously compiled - * func is destructed - */ - virtual void _on_graph_compile_or_func_del( - const std::vector& used_outputs) = 0; -}; - - -namespace mgb { -namespace opr { - -MGB_DEFINE_OPR_CLASS(Craniotome, cg::SingleCNOutshapePureByInshapeOprBase) // { - class FuncDelCallbackInvoker; - using NodeFlag = CraniotomeDesc::NodeFlag; - - bool m_on_graph_compile_called = false; - const uint32_t m_node_flag; - - //! DEV_COMP_ORDER inputs are at the tail of input array; this is the - //! number of DEV_VALUE inputs, and also the index of the first - //! DEV_COMP_ORDER input - size_t m_nr_dev_value_inp; - - std::unique_ptr m_desc; - - //! previously inferred shape; used when there is no input and - //! m_is_dynamic_output_shape is set to true - Maybe m_prev_inferred_shape; - - void scn_do_execute() override; - void get_output_var_shape(const TensorShapeArray &inp_shape, - TensorShapeArray &out_shape) const override; - - void add_input_layout_constraint() override; - - void init_output_static_infer_desc() override; - void init_output_dtype() override; - NodeProp* do_make_node_prop() const override; - - bool output_no_sys_mem_alloc() const { - return m_node_flag & (NodeFlag::DYNAMIC_OUTPUT_SHAPE | - NodeFlag::DISABLE_SYS_MEM_ALLOC); - } - - public: - Craniotome(mgb::ComputingGraph *graph, - std::unique_ptr desc, - const VarNodeArray &inputs, const OperatorNodeConfig &config); - - ~Craniotome() noexcept; - - static SymbolVarArray make( - std::unique_ptr desc, - const SymbolVarArray &inputs, - const OperatorNodeConfig &config = {}); - - const CraniotomeDesc& desc() const { - return *m_desc; - } - - size_t nr_dev_value_inp() const { - return m_nr_dev_value_inp; - } -}; - -} // namespace opr -} // namespace mgb - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/function_replace.cpp b/python_module/src/cpp/function_replace.cpp deleted file mode 100644 index 6fc0fb63..00000000 --- a/python_module/src/cpp/function_replace.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/** - * \file python_module/src/cpp/function_replace.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief replace functions in megbrain core - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./megbrain_wrap.h" -#include "./python_helper.h" - -#include "megbrain/utils/debug.h" -#include "megbrain/common.h" -#include "megbrain/system.h" - -#include -#include -#include - -#include - -#ifdef WIN32 -#include -#include -#else -#include -#endif - -namespace { - -PyObject *logger = nullptr; - -#if MGB_ENABLE_DEBUG_UTIL -void throw_fork_cuda_exc() { - // set python error state, so when returning to parent process that calls - // fork(), an exception could be raised - // - // call chain: - // python -> fork() -> pthread_atfork -> CudaCheckOnFork -> - // ForkAfterCudaError::throw_ - mgb_log_warn("try to raise python exception for fork after cuda"); - PyErr_SetString(PyExc_SystemError, "fork after cuda has been initialized"); -} -#endif - -class Init { - static Init inst; - Init() { -#if MGB_ENABLE_DEBUG_UTIL - mgb::debug::ForkAfterCudaError::throw_ = throw_fork_cuda_exc; -#endif - } -}; -Init Init::inst; - -int fork_exec_impl(const std::string& arg0, const std::string& arg1, - const std::string& arg2) { -#ifdef WIN32 - STARTUPINFO si; - PROCESS_INFORMATION pi; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - auto args_str = " " + arg1 + " " + arg2; - - // Start the child process. - if (!CreateProcess(arg0.c_str(), // exe name - const_cast(args_str.c_str()), // Command line - NULL, // Process handle not inheritable - NULL, // Thread handle not inheritable - FALSE, // Set handle inheritance to FALSE - 0, // No creation flags - NULL, // Use parent's environment block - NULL, // Use parent's starting directory - &si, // Pointer to STARTUPINFO structure - &pi) // Pointer to PROCESS_INFORMATION structure - ) { - mgb_log_warn("CreateProcess failed (%lu).\n", GetLastError()); - fprintf(stderr, "[megbrain] failed to execl %s [%s, %s]\n", - arg0.c_str(), arg1.c_str(), arg2.c_str()); - __builtin_trap(); - } - return pi.dwProcessId; -#else - auto pid = fork(); - if (!pid) { - execl(arg0.c_str(), arg0.c_str(), arg1.c_str(), arg2.c_str(), nullptr); - fprintf(stderr, "[megbrain] failed to execl %s [%s, %s]: %s\n", - arg0.c_str(), arg1.c_str(), arg2.c_str(), - std::strerror(errno)); - std::terminate(); - } - mgb_assert(pid > 0, "failed to fork: %s", std::strerror(errno)); - return pid; -#endif -} - -} // anonymous namespace - -// called from swig/misc.i -void _timed_func_set_fork_exec_path(const char *arg0, const char *arg1) { - using namespace std::placeholders; - mgb::sys::TimedFuncInvoker::ins().set_fork_exec_impl( - std::bind(fork_exec_impl, std::string{arg0}, std::string{arg1}, - _1)); -} - -void _timed_func_exec_cb(const char *user_data) { - mgb::sys::TimedFuncInvoker::ins().fork_exec_impl_mainloop(user_data); -} - -void _register_logger(PyObject *l) { - logger = l; -} - -namespace { -void py_log_handler(mgb::LogLevel level, - const char *file, const char *func, int line, const char *fmt, - va_list ap) { - if (global_finalized()) { - return; - } - - using mgb::LogLevel; - - MGB_MARK_USED_VAR(file); - MGB_MARK_USED_VAR(func); - MGB_MARK_USED_VAR(line); - - if (!logger) - return; - - PYTHON_GIL; - - const char *py_type; - switch (level) { - case LogLevel::DEBUG: - py_type = "debug"; - break; - case LogLevel::INFO: - py_type = "info"; - break; - case LogLevel::WARN: - py_type = "warning"; - break; - case LogLevel::ERROR: - py_type = "error"; - break; - default: - throw std::runtime_error("bad log level"); - } - - std::string msg = mgb::svsprintf(fmt, ap); - PyObject *py_msg = Py_BuildValue("s", msg.c_str()); - PyObject_CallMethod(logger, - const_cast(py_type), const_cast("O"), - py_msg); - Py_DECREF(py_msg); -} - -class LogHandlerSetter { - static LogHandlerSetter ins; - public: - LogHandlerSetter() { - mgb::set_log_handler(py_log_handler); - } -}; -LogHandlerSetter LogHandlerSetter::ins; -} // anobymous namespace - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/intbx.cpp b/python_module/src/cpp/intbx.cpp deleted file mode 100644 index 104a2353..00000000 --- a/python_module/src/cpp/intbx.cpp +++ /dev/null @@ -1,364 +0,0 @@ -/** - * \file python_module/src/cpp/intbx.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief numpy dtypes for low bit - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "megbrain/common.h" - -#include -#include - -#define NO_IMPORT_ARRAY 1 -#include "./numpy_incl.h" - -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" - -namespace { - -template -struct LowBitType { - static_assert(N < 8, "low bit only supports less than 8 bits"); - static int npy_typenum; - //! numerical value (-3, -1, 1, 3) - int8_t value; - - struct PyObj; - struct NpyType; - - const static int32_t max_value = (1 << N) - 1; - - //! check whether val is (-3, -1, 1, 3) and set python error - static bool check_value_set_err(int val) { - int t = val + max_value; - if ((t & 1) || t < 0 || t > (max_value << 1)) { - PyErr_SetString(PyExc_ValueError, - mgb::ssprintf("low bit dtype number error: " - "value=%d; allowed {-3, -1, 1, 3}", - val) - .c_str()); - return false; - } - - return true; - } - - template - struct NpyCast; -}; - -template -int LowBitType::npy_typenum; - -/* ==================== LowBitType::NpyCast ==================== */ - -template -template -struct LowBitType::NpyCast> { - static void apply(void* from_, void* to_, npy_intp n, void* /*fromarr*/, - void* /*toarr*/) { - auto from = static_cast(from_); - auto to = static_cast*>(to_); - for (npy_intp i = 0; i < n; ++i) { - int cur = static_cast(from[i]); - if (!LowBitType::check_value_set_err(cur)) - return; - to[i].value = cur; - } - } -}; - -template -template -struct LowBitType::NpyCast, T> { - static void apply(void* from_, void* to_, npy_intp n, void* /*fromarr*/, - void* /*toarr*/) { - auto from = static_cast*>(from_); - auto to = static_cast(to_); - for (npy_intp i = 0; i < n; ++i) { - to[i] = from[i].value; - } - } -}; - -/* ==================== LowBitType::PyObj ==================== */ -template -struct LowBitType::PyObj { - PyObject_HEAD LowBitType obj; - - static PyTypeObject py_type; - - static PyObject* from_lowbit(LowBitType val) { - auto p = reinterpret_cast(py_type.tp_alloc(&py_type, 0)); - p->obj.value = val.value; - return reinterpret_cast(p); - } - - static PyObject* py_new(PyTypeObject* type, PyObject* args, PyObject* kwds); - static PyObject* py_repr(PyObject* obj); - static PyObject* py_richcompare(PyObject* a, PyObject* b, int op); -}; -template -PyTypeObject LowBitType::PyObj::py_type; - -template -PyObject* LowBitType::PyObj::py_new(PyTypeObject* type, PyObject* args, - PyObject* kwds) { - PyObj* self; - Py_ssize_t size; - - self = (PyObj*)type->tp_alloc(type, 0); - - size = PyTuple_GET_SIZE(args); - if (size > 1) { - PyErr_SetString(PyExc_TypeError, "LowBitType Only has 1 parameter"); - return NULL; - } - PyObject* x = PyTuple_GET_ITEM(args, 0); - if (PyObject_IsInstance(x, (PyObject*)&py_type)) { - Py_INCREF(x); - return x; - } - - if (!PyLong_Check(x)) { - PyErr_SetString(PyExc_TypeError, - "LowBitType must be initialized wit int"); - return NULL; - } - - const long s = PyLong_AsLong(x); - - self->obj.value = s; - - return (PyObject*)self; -} - -template -PyObject* LowBitType::PyObj::py_repr(PyObject* obj) { - return PyUnicode_FromFormat("%d", ((PyObj*)obj)->obj.value); -} - -template -PyObject* LowBitType::PyObj::py_richcompare(PyObject* a, PyObject* b, - int op) { - mgb_assert(PyObject_IsInstance(a, (PyObject*)&py_type)); - auto bval = PyFloat_AsDouble(b); - if (bval == -1 && PyErr_Occurred()) { - return NULL; - } - double aval = ((PyObj*)a)->obj.value; -#define OP(py, op) \ - case py: { \ - if (aval op bval) { \ - Py_RETURN_TRUE; \ - } else { \ - Py_RETURN_FALSE; \ - } \ - } - switch (op) { - OP(Py_LT, <) - OP(Py_LE, <=) - OP(Py_EQ, ==) - OP(Py_NE, !=) - OP(Py_GT, >) - OP(Py_GE, >=) - }; -#undef OP - return Py_NotImplemented; -} - -/* ==================== LowBitType::NpyType ==================== */ -template -struct LowBitType::NpyType { - static PyArray_ArrFuncs funcs; - static PyArray_Descr descr; - - static bool init(); - - static void copyswap(void* dst, void* src, int swap, void* /*arr*/) { - if (src) { - mgb_assert(!swap); - memcpy(dst, src, sizeof(LowBitType)); - } - } - static PyObject* getitem(void* data, void* ap) { - return LowBitType::PyObj::from_lowbit( - *static_cast*>(data)); - } - static int setitem(PyObject* op, void* ov, void* ap); - static int fill(void* data_, npy_intp length, void* arr); -}; - -template -PyArray_ArrFuncs LowBitType::NpyType::funcs; -template -PyArray_Descr LowBitType::NpyType::descr; - -template -int LowBitType::NpyType::setitem(PyObject* op, void* ov, void* ap) { - if (!PyLong_Check(op)) { - PyErr_SetString(PyExc_ValueError, "input type must be int"); - return -1; - } - - int a = PyLong_AsLong(op); - if (!check_value_set_err(a)) - return -1; - - static_cast*>(ov)->value = a; - return 0; -} - -template -int LowBitType::NpyType::fill(void* data_, npy_intp length, void* arr) { - auto data = static_cast*>(data_); - int8_t delta = data[1].value - data[0].value, r = data[1].value; - if (!check_value_set_err(data[0].value) || - !check_value_set_err(data[1].value)) - return -1; - for (npy_intp i = 2; i < length; i++) { - r += delta; - if (r > max_value) - r = -max_value; - else if (r < -max_value) - r = max_value; - data[i].value = r; - } - return 0; -} - -template -bool LowBitType::NpyType::init() { - descr = {PyObject_HEAD_INIT(0) & LowBitType::PyObj::py_type, - 'V', // kind - 'r', // type - '=', // byteorder - NPY_NEEDS_PYAPI | NPY_USE_GETITEM | NPY_USE_SETITEM, - 0, // type num - sizeof(LowBitType), - alignof(LowBitType), - NULL, - NULL, - NULL, - &funcs}; - Py_TYPE(&descr) = &PyArrayDescr_Type; - PyArray_InitArrFuncs(&funcs); - funcs.copyswap = copyswap; - funcs.getitem = getitem; - funcs.setitem = setitem; - funcs.fill = fill; - npy_typenum = PyArray_RegisterDataType(&descr); - -#define REGISTER_CAST(From, To, From_descr, To_typenum, safe) \ - { \ - PyArray_Descr* from_descr = (From_descr); \ - if (PyArray_RegisterCastFunc(from_descr, (To_typenum), \ - NpyCast::apply) < 0) { \ - return false; \ - } \ - if (safe && PyArray_RegisterCanCast(from_descr, (To_typenum), \ - NPY_NOSCALAR) < 0) { \ - return false; \ - } \ - } -#define REGISTER_INT_CASTS(bits) \ - REGISTER_CAST(npy_int##bits, LowBitType, \ - PyArray_DescrFromType(NPY_INT##bits), \ - LowBitType::npy_typenum, 1) \ - REGISTER_CAST(LowBitType, npy_int##bits, &descr, NPY_INT##bits, 0) \ - REGISTER_CAST(npy_uint##bits, LowBitType, \ - PyArray_DescrFromType(NPY_UINT##bits), \ - LowBitType::npy_typenum, 1) \ - REGISTER_CAST(LowBitType, npy_uint##bits, &descr, NPY_UINT##bits, 0) - - REGISTER_INT_CASTS(8) - REGISTER_INT_CASTS(16) - REGISTER_INT_CASTS(32) - REGISTER_INT_CASTS(64) - REGISTER_CAST(LowBitType, float, &descr, NPY_FLOAT, 0) - REGISTER_CAST(float, LowBitType, PyArray_DescrFromType(NPY_FLOAT), - LowBitType::npy_typenum, 0) - REGISTER_CAST(LowBitType, double, &descr, NPY_DOUBLE, 1) - REGISTER_CAST(double, LowBitType, PyArray_DescrFromType(NPY_DOUBLE), - LowBitType::npy_typenum, 0) - return true; -} - -} // anonymous namespace - -#define DEFINE_INTBX(n) using IntB##n = LowBitType; -FOREACH_MGB_LOW_BIT(DEFINE_INTBX) -#undef DEFINE_INTBX - -#define MGB_STR_HELPER(n) #n - -#define DEFINE_INIT_PYTYPE(n) \ - bool init_pytype_intb##n() { \ - auto& py_type = IntB##n::PyObj::py_type; \ - py_type = {PyVarObject_HEAD_INIT(NULL, 0)}; \ - py_type.tp_name = "megbrain._mgb.pyintb" MGB_STR_HELPER(n); \ - py_type.tp_basicsize = sizeof(IntB##n::PyObj); \ - py_type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE; \ - py_type.tp_doc = "an low bit int type"; \ - py_type.tp_new = IntB##n::PyObj::py_new; \ - py_type.tp_str = IntB##n::PyObj::py_repr; \ - py_type.tp_repr = IntB##n::PyObj::py_repr; \ - py_type.tp_richcompare = IntB##n::PyObj::py_richcompare; \ - py_type.tp_base = &PyGenericArrType_Type; \ - return PyType_Ready(&py_type) >= 0; \ - } -FOREACH_MGB_LOW_BIT(DEFINE_INIT_PYTYPE) -#undef DEFINE_INIT_PYTYPE - -#define DEFINE_REGISTER_FUNC(n) \ - void register_pytype_intb##n(PyObject* d, PyObject* m) { \ - Py_INCREF(&IntB##n::PyObj::py_type); \ - PyDict_SetItemString(d, "intb" MGB_STR_HELPER(n) "_pytype", \ - (PyObject*)&IntB##n::PyObj::py_type); \ - PyModule_AddObject(m, "intb" MGB_STR_HELPER(n) "_pytype", \ - (PyObject*)&IntB##n::PyObj::py_type); \ - } -FOREACH_MGB_LOW_BIT(DEFINE_REGISTER_FUNC) -#undef DEFINE_REGISTER_FUNC - -//! called from swig init -void _init_intbx_types(PyObject* m) { - if (m == NULL) - return; - PyObject* d = PyModule_GetDict(m); - PyArray_Descr* dtype; -#define DEFINE_INIT_INTBX_TYPE(n) \ - if (!init_pytype_intb##n()) \ - return; \ - if (!IntB##n::NpyType::init()) \ - return; \ - dtype = PyArray_DescrFromType(IntB##n::npy_typenum); \ - if (!dtype) \ - return; \ - { \ - PyObject* pytype = (PyObject*)(&IntB##n::PyObj::py_type); \ - Py_INCREF(pytype); \ - PyDict_SetItemString(d, "pyintb" MGB_STR_HELPER(n), pytype); \ - } \ - Py_INCREF(dtype); \ - PyDict_SetItemString(d, "intb" MGB_STR_HELPER(n), (PyObject*)dtype); \ - register_pytype_intb##n(d, m); - FOREACH_MGB_LOW_BIT(DEFINE_INIT_INTBX_TYPE) -#undef DEFINE_INIT_INTBX_TYPE - return; -} - -#define DEFINE_NPY_INTBX(n) \ - int mgb::npy_num_intb##n() { return IntB##n::npy_typenum; } -FOREACH_MGB_LOW_BIT(DEFINE_NPY_INTBX) -#undef DEFINE_NPY_INTBX -/*int mgb::npy_num_intb2() { - return IntB2::npy_typenum; -}*/ - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_config.cpp b/python_module/src/cpp/megbrain_config.cpp deleted file mode 100644 index fa31950e..00000000 --- a/python_module/src/cpp/megbrain_config.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_config.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./megbrain_config.h" -#include "./python_helper.h" - -#include "megbrain/graph/event.h" -#include "megbrain/utils/debug.h" -#include "megbrain/comp_node_env.h" -#include "megbrain/serialization/opr_registry.h" - -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include -#else -#include -#endif - -#if MGB_ENABLE_OPR_MM -#include "megbrain/opr/mm_handler.h" -#endif - -#if MGB_CUDA -#include -#endif - -#ifdef WIN32 -#define F_OK 0 -#define RTLD_LAZY 0 -#define RTLD_GLOBAL 0 -#define RTLD_NOLOAD 0 -#define access(a, b) false -#define SPLITER ';' -#define ENV_PATH "Path" -#define NVCC_EXE "nvcc.exe" -static void* dlopen(const char* file, int) { - return static_cast(LoadLibrary(file)); -} - -static void* dlerror() { - const char* errmsg = "dlerror not aviable in windows"; - return const_cast(errmsg); -} - -static void* dlsym(void* handle, const char* name) { - FARPROC symbol = GetProcAddress((HMODULE)handle, name); - return reinterpret_cast(symbol); -} - -static int check_file_exist(const char* path, int mode) { - return _access(path, mode); -} -#else -#define SPLITER ':' -#define ENV_PATH "PATH" -#define NVCC_EXE "nvcc" -static int check_file_exist(const char* path, int mode) { - return access(path, mode); -} -#endif - -using namespace mgb; - -namespace { - std::unordered_map - set_priority_on_opr_inserted_handle; - std::mutex set_priority_on_opr_inserted_handle_mtx; - -} // anonymous namespace - -bool _config::set_comp_graph_option( - CompGraph &cg, const std::string &name, int val_int) { - -#define SET_CG_OPTION(name_chk) \ - do { \ - static_assert( \ - std::is_same::value || \ - std::is_same::value || \ - std::is_same::value || \ - std::is_same::value || \ - std::is_same::value, \ - "not bool/int opt"); \ - if (name == #name_chk) { \ - auto ret = opt.name_chk; \ - opt.name_chk = val_int; \ - return ret; \ - } \ - } while(0) - - auto &&opt = cg.get().options(); - SET_CG_OPTION(seq_opt.enable_mem_plan_opt); - SET_CG_OPTION(seq_opt.enable_mem_reuse_alloc); - SET_CG_OPTION(seq_opt.enable_seq_comp_node_opt); - SET_CG_OPTION(force_dynamic_alloc); - SET_CG_OPTION(enable_grad_var_static_reshape); - SET_CG_OPTION(async_exec_level); - SET_CG_OPTION(graph_opt.jit); - SET_CG_OPTION(graph_opt.tensorrt); - SET_CG_OPTION(graph_opt_level); - SET_CG_OPTION(allreduce_pack_max_size); - SET_CG_OPTION(allreduce_pack_ignore_first); - SET_CG_OPTION(var_sanity_check_first_run); - SET_CG_OPTION(no_profiling_on_shape_change); - SET_CG_OPTION(allocate_static_mem_after_graph_compile); - SET_CG_OPTION(log_level); - SET_CG_OPTION(enable_sublinear_memory_opt); - SET_CG_OPTION(sublinear_mem_config.lb_memory); - SET_CG_OPTION(sublinear_mem_config.genetic_nr_iter); - SET_CG_OPTION(sublinear_mem_config.genetic_pool_size); - SET_CG_OPTION(sublinear_mem_config.thresh_nr_try); - SET_CG_OPTION(sublinear_mem_config.num_worker); - SET_CG_OPTION(enable_var_mem_defragment); - SET_CG_OPTION(eager_evaluation); - SET_CG_OPTION(enable_memory_swap); - throw MegBrainError(ssprintf( - "invalid computing graph option name: %s", name.c_str())); -#undef SET_CG_OPTION -} - -bool _config::comp_graph_is_eager(CompGraph &cg) { - return cg.get().options().eager_evaluation; -} - -void _config::add_extra_vardep(const SymbolVar &var, const SymbolVar &dep) { - auto og = var.node()->owner_graph(); - mgb_assert(og == dep.node()->owner_graph()); - og->options().extra_vardeps[var.node()].push_back(dep.node()); -} - -void _config::begin_set_opr_priority(CompGraph& cg, int priority) { - SyncEventConnecter::ReceiverHandler* handle; - { - MGB_LOCK_GUARD(set_priority_on_opr_inserted_handle_mtx); - handle = &set_priority_on_opr_inserted_handle[&cg.get()]; - } - mgb_assert(!*handle, "multiple calls to _begin_set_opr_priority()"); - - auto on_opr_inserted = [priority](const cg::event::OprInserted& event) { - if (!event.exc && priority) { - int& pri = event.opr->node_prop().attribute().priority; - if (!pri) - pri = priority; - else - pri = std::min(pri, priority); - } - }; - *handle = cg.get().event().register_receiver( - on_opr_inserted); -} - -void _config::end_set_opr_priority(CompGraph &cg) { - MGB_LOCK_GUARD(set_priority_on_opr_inserted_handle_mtx); - auto nr = set_priority_on_opr_inserted_handle.erase(&cg.get()); - mgb_assert(nr, "end_set_opr_priority called " - "before begin_set_opr_priority"); -} - -void _config::begin_set_exc_opr_tracker(CompGraph &cg, PyObject *tracker) { - OprPyTracker::begin_set_tracker(cg.get(), tracker); -} - -void _config::end_set_exc_opr_tracker(CompGraph &cg) { - OprPyTracker::end_set_tracker(cg.get()); -} - -PyObject* _config::get_opr_tracker(CompGraph &cg, size_t var_id) { - auto var = cg.get().find_var_by_id(var_id); - if (!var) - Py_RETURN_NONE; - return OprPyTracker::get_tracker(var->owner_opr()).as_tuple(); -} - -void _config::set_opr_sublinear_memory_endpoint(const SymbolVar &var) { - MGB_MARK_USED_VAR(var); -#if MGB_ENABLE_SUBLINEAR - auto opr = var.node()->owner_opr(); - opr->owner_graph()->options().opr_attribute.sublinear_memory_endpoint. - insert(opr); -#endif -} - -void _config::set_fork_cuda_warning_flag(int flag) { -#if MGB_ENABLE_DEBUG_UTIL - debug::set_fork_cuda_warning_flag(flag); -#else - MGB_MARK_USED_VAR(flag); -#endif -} - -bool _config::is_cuda_ctx_set() { -#if MGB_CUDA - CUcontext ctx; - return cuCtxGetCurrent(&ctx) == CUDA_SUCCESS && ctx; -#else - return false; -#endif -} - -std::string _config::get_cuda_gencode() { -#if MGB_CUDA - std::set used; - int nr_dev; - auto err = cudaGetDeviceCount(&nr_dev); - if (err == cudaErrorNoDevice) { - return {}; - } - MGB_CUDA_CHECK(err); - for (int i = 0; i < nr_dev; ++ i) { - cudaDeviceProp prop; - MGB_CUDA_CHECK(cudaGetDeviceProperties(&prop, i)); - std::string cur{std::to_string(prop.major)}; - cur += std::to_string(prop.minor); - used.insert(cur); - } - - std::string ret; - for (auto &&i: used) { - if (!ret.empty()) - ret.append(" "); - ret.append(i); - } - return ret; -#else - mgb_throw(MegBrainError, "cuda disabled at compile time"); -#endif -} - -namespace { - -std::string find_content_in_file(const std::string& file_name, - const std::string& content) { - std::ifstream fin(file_name.c_str()); - std::string read_str; - while (std::getline(fin, read_str)) { - auto idx = read_str.find(content); - if (idx != std::string::npos) { - fin.close(); - return read_str.substr(idx); - } - } - fin.close(); - return {}; -} - -std::vector split_env(const char* env) { - std::string e(env); - std::istringstream stream(e); - std::vector ret; - std::string path; - while (std::getline(stream, path, SPLITER)) { - ret.emplace_back(path); - } - return ret; -} - -//! this function will find file_name in each path in envs. It accepts add -//! intermediate path between env and file_name -std::string find_file_in_envs_with_intmd( - const std::vector& envs, const std::string& file_name, - const std::vector& itmedias = {}) { - for (auto&& env : envs) { - auto ret = getenv(env.c_str()); - if (ret) { - for (auto&& path : split_env(ret)) { - auto file_path = std::string(path) + "/" + file_name; - if (!check_file_exist(file_path.c_str(), F_OK)) { - return file_path; - } - if (!itmedias.empty()) { - for (auto&& inter_path : itmedias) { - file_path = std::string(path) + "/" + inter_path + "/" + - file_name; - if (!check_file_exist(file_path.c_str(), F_OK)) { - return file_path; - } - } - } - } - } - } - return std::string{}; -} - -std::string get_nvcc_root_path() { - auto nvcc_root_path = find_file_in_envs_with_intmd({ENV_PATH}, NVCC_EXE); - if (nvcc_root_path.empty()) { - mgb_throw(MegBrainError, - "nvcc not found. Add your nvcc to your environment Path"); - } else { - auto idx = nvcc_root_path.rfind('/'); - return nvcc_root_path.substr(0, idx + 1); - } -} - -size_t get_local_cuda_version() { - auto nvcc_root_path = get_nvcc_root_path(); - auto ver_path = nvcc_root_path + "../version.txt"; - if (check_file_exist(ver_path.c_str(), F_OK)) { - mgb_throw(MegBrainError, "No such file : %s\n", ver_path.c_str()); - } - auto str_cuda_version = find_content_in_file(ver_path, "CUDA Version"); - if (str_cuda_version.empty()) { - mgb_throw(MegBrainError, "can not read version information from : %s\n", - ver_path.c_str()); - } - size_t cuda_major = 0; - size_t cuda_minor = 0; - sscanf(str_cuda_version.c_str(), "CUDA Version %zu.%zu,", &cuda_major, - &cuda_minor); - return cuda_major * 1000 + cuda_minor * 10; -} - -void check_cudnn_existence() { - auto cudnn_header_path = find_file_in_envs_with_intmd( - {"PC_CUDNN_INCLUDE_DIRS", "CUDNN_ROOT_DIR", "CUDA_TOOLKIT_INCLUDE", - "CUDNN_LIBRARY", "CUDA_PATH"}, - "cudnn.h", {"../include", "include"}); - if (cudnn_header_path.empty()) { - mgb_log_warn( - "cudnn.h not found. Please make sure cudnn install at " - "${CUDNN_ROOT_DIR}"); - } else { // check cudnn lib exist - auto str_cudnn_major = - find_content_in_file(cudnn_header_path, "#define CUDNN_MAJOR"); - auto str_cudnn_minor = - find_content_in_file(cudnn_header_path, "#define CUDNN_MINOR"); - auto str_cudnn_patch = find_content_in_file(cudnn_header_path, - "#define CUDNN_PATCHLEVEL"); - - if (str_cudnn_major.empty() || str_cudnn_minor.empty() || - str_cudnn_patch.empty()) { - mgb_log_warn( - "can not find cudnn version information in %s.\n You may " - "Update cudnn\n", - cudnn_header_path.c_str()); - return; - } - - size_t cudnn_major = 0, cudnn_minor = 0, cudnn_patch = 0; - sscanf(str_cudnn_major.c_str(), "#define CUDNN_MAJOR %zu", - &cudnn_major); - sscanf(str_cudnn_minor.c_str(), "#define CUDNN_MINOR %zu", - &cudnn_minor); - sscanf(str_cudnn_patch.c_str(), "#define CUDNN_PATCHLEVEL %zu", - &cudnn_patch); - -#ifdef WIN32 - std::string cudnn_lib_name = - "cudnn64_" + std::to_string(cudnn_major) + ".dll"; -#else - std::string cudnn_lib_name = - "libcudnn.so." + std::to_string(cudnn_major) + "." + - std::to_string(cudnn_minor) + "." + std::to_string(cudnn_patch); -#endif - - auto cudnn_lib_path = find_file_in_envs_with_intmd( - {"CUDNN_ROOT_DIR", "CUDNN_LIBRARY", "CUDA_PATH", ENV_PATH}, - cudnn_lib_name, {"lib64", "lib/x64"}); - if (cudnn_lib_path.empty()) { - mgb_log_warn( - "%s not found. Please make sure cudnn install at " - "${CUDNN_LIBRARY}", - cudnn_lib_name.c_str()); - } - } -} -} // namespace - -std::vector _config::get_cuda_include_path() { -#if MGB_CUDA - auto nvcc_path = get_nvcc_root_path(); - auto cudart_header_path = nvcc_path + "../include/cuda_runtime.h"; - //! double check path_to_nvcc/../include/cuda_runtime.h exists - auto ret = check_file_exist(cudart_header_path.c_str(), F_OK); - if (ret) { - mgb_throw(MegBrainError, - "%s not found. Please make sure your cuda toolkit install " - "right", - cudart_header_path.c_str()); - } else { - return {nvcc_path + "..", nvcc_path + "../include"}; - } -#else - mgb_throw(MegBrainError, "cuda disabled at compile time"); -#endif -} - -std::vector _config::get_cuda_lib_path() { -#if MGB_CUDA - auto nvcc_path = get_nvcc_root_path(); -#ifdef WIN32 - auto cuda_version = get_local_cuda_version(); - auto cuda_major = cuda_version / 1000; - auto cuda_minor = cuda_version % 10; - auto cudart_lib_path = nvcc_path + "cudart64_" + - std::to_string(cuda_major * 10 + cuda_minor) + - ".dll"; -#else - auto cudart_lib_path = nvcc_path + "../lib64/libcudart.so"; -#endif - //! double check cudart_lib_path exists - auto ret = check_file_exist(cudart_lib_path.c_str(), F_OK); - if (ret) { - mgb_throw(MegBrainError, - "%s not found. Please make sure your cuda toolkit install " - "right", - cudart_lib_path.c_str()); - } else { -#ifdef WIN32 - //! cudart64_101.dll locates at cuda/bin - return {nvcc_path + "../lib/x64", nvcc_path}; -#else - return {nvcc_path + "../lib64"}; -#endif - } -#else - mgb_throw(MegBrainError, "cuda disabled at compile time"); -#endif -} - -int _config::get_cuda_version() { -#if MGB_CUDA - int version; - MGB_CUDA_CHECK(cudaRuntimeGetVersion(&version)); - return version; -#else - mgb_throw(MegBrainError, "cuda disabled at compile time"); -#endif -} - -bool _config::is_local_cuda_env_ok() { - check_cudnn_existence(); - if (get_nvcc_root_path().empty()) { - return false; - } - return true; -} - -bool _config::is_compiled_with_cuda() { -#if MGB_CUDA - return true; -#else - return false; -#endif -} - -void _config::load_opr_library(const char* self_path, const char* lib_path) { - static bool self_global = false; - static std::mutex self_global_mtx; - { - MGB_LOCK_GUARD(self_global_mtx); - if (!self_global) { - auto hdl = dlopen(self_path, RTLD_LAZY | RTLD_GLOBAL); - mgb_assert(hdl, "failed to set mgb to global: %s", dlerror()); - self_global = true; - } - } - if (lib_path) { - auto hdl = dlopen(lib_path, RTLD_LAZY); - mgb_assert(hdl, "failed to load libray %s: %s", lib_path, dlerror()); - } -} - -std::vector> _config::dump_registered_oprs() { -#if MGB_ENABLE_DEBUG_UTIL - return serialization::OprRegistry::dump_registries(); -#else - return {}; -#endif -} - -#if MGB_ENABLE_OPR_MM -/*! see definition : src/cpp/megbrain_config.h. - * Create mm server. port 0 is permitted, leave zmqrpc to decide which port - * should be used. - */ -int _config::create_mm_server(const std::string& server_addr, int port) { - return create_zmqrpc_server(server_addr, port); -} - -void _config::group_barrier(const std::string& server_addr, - int port, uint32_t size, uint32_t rank) { - mgb_assert(rank < size, "invalid rank %d", rank); - auto group_mgr = std::make_shared( - ssprintf("%s:%d", server_addr.c_str(), port)); - uint32_t rsp = group_mgr->group_barrier(size, rank); - mgb_assert(rsp != 0, "rank already registered: %d", rank); - mgb_assert(size == rsp, "inconsistent size: %d, expect %d", size, rsp); -} - -#else - -int _config::create_mm_server(const std::string& server_addr, int port) { - mgb_throw(mgb::MegBrainError, "OPR_MM suppport disable at compile time"); - return 0; -} - -void _config::group_barrier(const std::string& server_addr, - int port, uint32_t size, uint32_t rank) { - mgb_throw(mgb::MegBrainError, "OPR_MM suppport disable at compile time"); -} - -#endif - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_config.h b/python_module/src/cpp/megbrain_config.h deleted file mode 100644 index ed4f4c9d..00000000 --- a/python_module/src/cpp/megbrain_config.h +++ /dev/null @@ -1,78 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_config.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#ifndef SWIG - -#pragma once - -#include "megbrain_build_config.h" -#include "./megbrain_wrap.h" -#include -using mgb::cg::SymbolVar; -#endif - -//! wrap by a class so swig can put the functions in a namespace -class _config { - public: - static bool set_comp_graph_option( - CompGraph &cg, const std::string &name, int val_int); - - static bool comp_graph_is_eager(CompGraph &cg); - - static void add_extra_vardep( - const SymbolVar &var, const SymbolVar &dep); - - static void begin_set_opr_priority( - CompGraph &cg, int priority); - static void end_set_opr_priority(CompGraph &cg); - - static void begin_set_exc_opr_tracker( - CompGraph &cg, PyObject *tracker); - static void end_set_exc_opr_tracker(CompGraph &cg); - - //! return (opr_msg, fwd tracker, grad tracker) or None - static PyObject* get_opr_tracker(CompGraph &cg, size_t var_id); - - static void set_opr_sublinear_memory_endpoint(const SymbolVar &var); - - static void set_fork_cuda_warning_flag(int flag); - - static bool is_cuda_ctx_set(); - - //! get cuda gencode strings for local devices - static std::string get_cuda_gencode(); - - //! get cuda lib paths. - static std::vector get_cuda_lib_path(); - - //! get cuda include paths. - static std::vector get_cuda_include_path(); - - //! get cuda version - static int get_cuda_version(); - - //! check local cuda env. The method returns true if CUDA's nvcc - //! compiler and cudnn installs in PATH. - static bool is_local_cuda_env_ok(); - - static bool is_compiled_with_cuda(); - - static void load_opr_library( - const char* self_path, const char* lib_path); - - static std::vector> - dump_registered_oprs(); - - static int create_mm_server(const std::string& server_addr, int port); - - static void group_barrier(const std::string& server_addr, - int port, uint32_t size, uint32_t rank); -}; - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_pubapi.cpp b/python_module/src/cpp/megbrain_pubapi.cpp deleted file mode 100644 index 6665723c..00000000 --- a/python_module/src/cpp/megbrain_pubapi.cpp +++ /dev/null @@ -1,334 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_pubapi.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./megbrain_pubapi.h" -#include "./megbrain_pubapi_internal.h" - -#include "megbrain/tensor.h" -#include "megbrain/graph/var_node.h" -#include "megbrain/comp_node_env.h" - -namespace { - -class DeleteDispatcher final : public mgb::CompNodeDepedentObject { - mgb::thin_function m_deleter; - mgb::CompNode m_comp_node; - std::atomic done; - - std::shared_ptr on_comp_node_finalize() override { - bool _ = false; - if (done.compare_exchange_strong(_, true)) { - m_deleter(); - } - return {}; - } -public: - explicit DeleteDispatcher(mgb::thin_function&& deleter, - mgb::CompNode cn) - : m_deleter(std::move(deleter)), m_comp_node(cn) { - done.store(false); - } - - void trigger() { - bool _ = false; - if (done.compare_exchange_strong(_, true)) { - if (!is_finalized()) { - m_comp_node.add_callback(std::move(m_deleter)); - } else { - m_deleter(); - } - } - } -}; - -} // namespace - -using namespace mgb; - -pubapi::DeviceTensor::DataType mgb::dtype_mgb2pubapi(DType dtype) { - using DevDType = pubapi::DeviceTensor::DataType; - switch (dtype.enumv()) { -#define o(s, t) \ - case DTypeEnum::s: \ - return DevDType::t - o(Float32, FLOAT32); - o(Float16, FLOAT16); - o(Int32, INT32); - o(Int16, INT16); - o(Int8, INT8); - o(Uint8, UINT8); -#undef o - default: - mgb_throw(MegBrainError, "dtype %s not implemented for pubapi", - dtype.name()); - } -} - -struct pubapi::DeviceTensor::_Impl { - -static TensorShape desc_shape_to_tensor_shape(const DeviceTensor::Desc &desc) { - TensorShape shape; - mgb_assert(desc.ndim && desc.ndim <= TensorShape::MAX_NDIM, - "invalid ndim: %zu", desc.ndim); - shape.ndim = desc.ndim; - for (size_t i = 0; i < desc.ndim; ++ i) { - shape[i] = desc.shape[i]; - } - return shape; -} - -#if MGB_CUDA -class CudaCurrentDeviceRestore { - int m_orig_dev = -1; - - public: - - CudaCurrentDeviceRestore(CompNode cn) { - if (cn.device_type() == CompNode::DeviceType::CUDA) { - MGB_CUDA_CHECK(cudaGetDevice(&m_orig_dev)); - } - } - - ~CudaCurrentDeviceRestore() { - if (m_orig_dev != -1) { - cudaSetDevice(m_orig_dev); - } - } -}; -#else -class CudaCurrentDeviceRestore { - public: - CudaCurrentDeviceRestore(CompNode) { - } -}; -#endif - -static void sync(const DeviceTensor *self, bool strong) { - CompNode cn; - if (self->m_dev_nd) { - cn = static_cast(self->m_dev_nd)->comp_node(); - } else { - mgb_assert(self->m_varptr); - cn = static_cast(self->m_varptr)->comp_node(); - } - CudaCurrentDeviceRestore cuda_dev_restore{cn}; - cn.sync(); -#if MGB_CUDA - if (strong && cn.device_type() == CompNode::DeviceType::CUDA) { - cn.activate(); - MGB_CUDA_CHECK(cudaDeviceSynchronize()); - } -#endif -} - -static const char* dtype_name(DataType dtype) { - switch (dtype) { -#define on(c) \ - case DataType::c: \ - return #c - on(FLOAT32); - on(FLOAT16); - on(INT32); - on(INT16); - on(INT8); - on(UINT8); -#undef on - default: - mgb_throw(MegBrainError, "invalid pubapi dtype enum: %d", - static_cast(dtype)); - } -} - -static void copy( - DeviceTensor *self, const Desc &other, CopyDirection direction) { - mgb_assert(self->desc.dtype == other.dtype, "dtype mismatch: %s vs %s", - self->dtype_name(), dtype_name(other.dtype)); - mgb_assert(self->m_varptr || self->m_dev_nd); - const DeviceTensorND *dv; - if (direction == CopyDirection::OTHER_TO_SELF) { - mgb_assert(!self->m_readonly, "can not copy into readonly tensor"); - auto shape = desc_shape_to_tensor_shape(other); - if (self->m_varptr) { - auto var = static_cast(self->m_varptr); - dv = &var->shape_alloc(shape).dev_tensor(); - } else { - dv = static_cast(self->m_dev_nd); - mgb_assert(dv->shape().eq_shape(shape), - "copy dest tensor shape is %s, but source shape is %s", - dv->shape().to_string().c_str(), shape.to_string().c_str()); - } - mgb_assert(self->desc.dtype == dtype_mgb2pubapi(dv->dtype())); - self->desc.dev_ptr = dv->raw_ptr(); - self->desc.ndim = dv->shape().ndim; - self->desc.shape = dv->shape().shape; - if (!other.dev_ptr) { - // used in resize() - return; - } - } else { - mgb_assert(direction == CopyDirection::SELF_TO_OTHER); - if (self->m_varptr) { - dv = &static_cast(self->m_varptr)->dev_tensor(); - } else { - dv = static_cast(self->m_dev_nd); - } - } - - mgb_assert(dv->layout().is_contiguous()); - auto size = dv->layout().span().dist_byte(); - auto cn = dv->comp_node(); - CudaCurrentDeviceRestore cuda_dev_restore{cn}; - - void *dst = dv->raw_ptr(), *src = other.dev_ptr; - if (direction == CopyDirection::SELF_TO_OTHER) { - std::swap(dst, src); - } - -#if !MGB_CUDA - mgb_assert(other.type != Type::CUDA, "cuda disabled at compile time"); -#endif - - auto &&desc = self->desc; - if (other.type == desc.type) { -#if MGB_CUDA - if (desc.type == Type::CUDA) { - int dev = desc.cuda_ctx.device; - if (dev == -1) { - MGB_CUDA_CHECK(cudaGetDevice(&dev)); - } - mgb_assert(dev == other.cuda_ctx.device, - "DeviceTensor copy must be on the same device; " - "got %d vs %d", dev, other.cuda_ctx.device); - } -#endif - cn.peer_copy_to(cn, dst, src, size); - } else { - if ((desc.type == Type::CPU && other.type == Type::CUDA && - direction == CopyDirection::SELF_TO_OTHER) || - (other.type == Type::CPU && desc.type == Type::CUDA && - direction == CopyDirection::OTHER_TO_SELF)) { - cn.copy_to_device(dst, src, size); - } else { - mgb_assert((desc.type == Type::CUDA && other.type == Type::CPU && - direction == CopyDirection::SELF_TO_OTHER) || - (other.type == Type::CUDA && desc.type == Type::CPU && - direction == CopyDirection::OTHER_TO_SELF)); - cn.copy_to_host(dst, src, size); - } - } -} - -static void forward_other_memory( - const DeviceTensor *self, - const Desc &other, CallbackOnce deleter) { - mgb_assert(self->desc.dtype == other.dtype, "dtype mismatch: %s vs %s", - self->dtype_name(), dtype_name(other.dtype)); - auto deleter_wrap = [deleter]() mutable { deleter.consume(); }; - thin_function deleter_dispatch; - if (self->desc.type == Type::CPU) { - CompNode cn{}; - if (self->m_varptr) { - cn = static_cast(self->m_varptr)->comp_node(); - } else { - cn = static_cast(self->m_dev_nd)->comp_node(); - } - deleter_dispatch = [d = new DeleteDispatcher(deleter_wrap, cn)](void*) { - d->trigger(); - delete d; - }; - } else { - deleter_dispatch = [deleter_wrap](void*) mutable { deleter_wrap(); }; - } - auto shape = desc_shape_to_tensor_shape(other); - if (self->m_varptr) { - auto var = static_cast(self->m_varptr); - DeviceTensorStorage storage; - storage.reset(var->comp_node(), - shape.total_nr_elems() * var->dtype().size(), - {static_cast(other.dev_ptr), deleter_dispatch}); - DeviceTensorND tensor; - tensor.reset(storage, {shape, var->dtype()}); - var->reset_dev_tensor_from_tensor(tensor); - } else { - DeviceTensorND& tensor = *static_cast(self->m_dev_nd); - DeviceTensorStorage storage; - size_t dtype_size = tensor.layout().dtype.size(); - storage.reset(tensor.comp_node(), - shape.total_nr_elems() * dtype_size, - {static_cast(other.dev_ptr), deleter_dispatch}); - tensor.reset(storage, {shape, tensor.layout().dtype}); - } -} - -static void forward_to( - const DeviceTensor *self, - void **dest, CallbackOnce* deleter) { - auto orig_dv_ptr = static_cast(self->m_dev_nd); - *dest = orig_dv_ptr->ptr(); - mgb_assert(*dest == self->desc.dev_ptr); - deleter->user_data = new DeviceTensorStorage(*orig_dv_ptr); - deleter->fptr = [](void* ptr) { - delete reinterpret_cast(ptr); - }; -} - -static void init_tensor(pubapi::DeviceTensor& dest, DeviceTensorND* tensor, - VarNode* var, bool readonly) { - memset(&dest, 0, sizeof(pubapi::DeviceTensor)); - { - static FuncTable functable{&sync, ©, &forward_other_memory, - &dtype_name, &forward_to}; - dest.m_functable = &functable; - } - dest._version0 = dest._version1 = CURRENT_VERSION; - - mgb_assert((!!tensor) ^ (!!var)); - auto cn = tensor ? tensor->comp_node() : var->comp_node(); - using Type = pubapi::DeviceTensor::Type; - switch (cn.device_type()) { - case CompNode::DeviceType::CPU: - dest.desc.type = Type::CPU; - break; -#if MGB_CUDA - case CompNode::DeviceType::CUDA: - dest.desc.type = Type::CUDA; - break; -#endif - default: - mgb_throw(MegBrainError, "bad comp node type: %d", - static_cast(cn.device_type())); - } - dest.desc.dtype = dtype_mgb2pubapi(tensor ? tensor->dtype() : var->dtype()); - if (tensor) { - dest.desc.dev_ptr = tensor->raw_ptr(); - dest.desc.shape = tensor->shape().shape; - dest.desc.ndim = tensor->shape().ndim; - dest.size_bytes = tensor->layout().span().dist_byte(); - } -#if MGB_CUDA - if (dest.desc.type == Type::CUDA) { - auto&& env = CompNodeEnv::from_comp_node(cn).cuda_env(); - dest.desc.cuda_ctx.device = env.device; - dest.desc.cuda_ctx.stream = env.stream; - } -#endif - dest.m_readonly = readonly; - dest.m_dev_nd = tensor; - dest.m_varptr = var; -} - -}; // pubapi::DeviceTensor::Impl - -void mgb::init_pubapi_dev_tensor(pubapi::DeviceTensor& dest, - DeviceTensorND* tensor, VarNode* var, - bool readonly) { - pubapi::DeviceTensor::_Impl::init_tensor(dest, tensor, var, readonly); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_pubapi.h b/python_module/src/cpp/megbrain_pubapi.h deleted file mode 100644 index fa33f815..00000000 --- a/python_module/src/cpp/megbrain_pubapi.h +++ /dev/null @@ -1,185 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_pubapi.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief public API for exposing megbrain internal data structures - * - * This is a pure header without compile-time dependencies. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - */ - -#pragma once - -#include -#include - -namespace mgb { -namespace pubapi { - - /*! - * \brief a general callback that would be invoked exactly once - * - * During the invoke, the functor shoule release related memory - */ - struct CallbackOnce { - void (*fptr)(void *); - void *user_data; - - //! invoke the callback and clean up the scene - void consume() { - fptr(user_data); - fptr = nullptr; - user_data = nullptr; - } - }; - - //! tensor on a computing device - class DeviceTensor { - public: - static constexpr uint32_t CURRENT_VERSION = 20190725; - - //! device type - enum class Type: uint32_t { - CPU, CUDA - }; - enum class DataType: uint32_t { - FLOAT32, FLOAT16, INT32, INT16, INT8, UINT8 - }; - enum class CopyDirection { - SELF_TO_OTHER, OTHER_TO_SELF - }; - struct CudaContext { - int device; //! set to -1 in copy() to use current device - void *stream; //!< set to nullptr for default stream - }; - - //! tensor descriptor - struct Desc { - Type type; - DataType dtype; - void *dev_ptr; //!< pointer to actual device buffer - const size_t *shape; //!< pointer to shape array - size_t ndim; - //! only valid if type == Type::CUDA - CudaContext cuda_ctx; - }; - - uint32_t _version0; //!< for consistency check - // note: fields starting with underscore are for internal use only - - Desc desc; - size_t size_bytes; - - /*! - * \brief synchonize with the calling thread - * - * This must be called before forwarding memory for direct use - * - * \param strong whether to synchronoze the whole device (true), or - * just the computing node (false). Currently it only affects - * how cuda sync is performed. - */ - void sync(bool strong = false) const { - m_functable->sync(this, strong); - } - - /*! - * \brief copy to/from another buffer - * - * Note: the copy is performed on the comp node on which this tensor - * resides and is always async. - * - * If \p direction is OTHER_TO_SELF and shape of this changes, then - * the corresponding dev_ptr would also be updated. - * - * \param other the other buffer involved in the copy; if - * \p direction is SELF_TO_OTHER, then only its type and - * dev_ptr would be used - * \param direction specify the direction to perform the copy - */ - void copy(const Desc &other, CopyDirection direction) { - m_functable->copy(this, other, direction); - } - - /*! - * \brief resize this tensor to given shape - */ - void resize(size_t ndim, const size_t *shape) { - Desc tmp; - tmp.dev_ptr = nullptr; - tmp.ndim = ndim; - tmp.shape = shape; - copy(tmp, CopyDirection::OTHER_TO_SELF); - } - - //! name of dtype of this tensor - const char* dtype_name() const { return dtype_name(desc.dtype); } - - //! name of given dtype - const char* dtype_name(DataType dtype) const { - return m_functable->dtype_name(dtype); - } - - /*! - * \brief forward memory from \p other directly to the underlying - * storage - * - * This can only be used when there is a corresponding VarNode for - * this DeviceTensor. (e.g. for the outputs of Craniotome oprs) - */ - void forward_other_memory( - const Desc &other, CallbackOnce deleter) const { - m_functable->forward_other_memory(this, other, deleter); - } - - /*! - * \brief forward device buffer to \p dest directly and create a - * tensor storage shared memory with m_dv_nd, it would be deleted - * when calling deleter, so refcnt to data ptr could be managed - * correctly. - */ - void forward_to( - void **dest, CallbackOnce* deleter) const { - m_functable->forward_to(this, dest, deleter); - } - - struct _Impl; - private: - // note: we use a func table to avoid symbol visibility problems and - // linking hazards when built with other code base - struct FuncTable { - void (*sync)(const DeviceTensor*, bool); - void (*copy)(DeviceTensor*, const Desc&, CopyDirection); - void (*forward_other_memory)(const DeviceTensor*, const Desc&, - CallbackOnce); - const char* (*dtype_name)(DataType); - void (*forward_to)(const DeviceTensor*, void**, CallbackOnce*); - }; - bool m_readonly; - void* m_dev_nd; - void* m_varptr; - FuncTable* m_functable; - public: - uint32_t _version1; - }; - - /*! - * \brief reinterpret_cast raw pointer or pointer integer to mgb object and - * check version - * \return object pointer if the version is correct; nullptr if failed - */ - template - T* as_versioned_obj(S &&val) { - T *obj = reinterpret_cast(val); - if (obj->_version0 != T::CURRENT_VERSION || - obj->_version1 != T::CURRENT_VERSION) { - return nullptr; - } - return obj; - } -} // namespace pubapi -} // namespace mgb - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_pubapi_internal.h b/python_module/src/cpp/megbrain_pubapi_internal.h deleted file mode 100644 index 7581d60e..00000000 --- a/python_module/src/cpp/megbrain_pubapi_internal.h +++ /dev/null @@ -1,31 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_pubapi_internal.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief internal helpers related to pubapi. Implemented in pubapi.cpp - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#pragma once - -#include "megbrain_pubapi.h" -#include "megbrain/graph.h" - -namespace mgb { - /*! - * \brief fill fields in \p dest with information from other tensors - * - * Note that exactly one of \p tensor and \p var must be non-null - */ - void init_pubapi_dev_tensor( - pubapi::DeviceTensor &dest, - DeviceTensorND *tensor, VarNode *var, bool readonly); - - //! convert megbrain dtype to pubapi dtype - pubapi::DeviceTensor::DataType dtype_mgb2pubapi(DType dtype); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_serialize.cpp b/python_module/src/cpp/megbrain_serialize.cpp deleted file mode 100644 index d6e371bb..00000000 --- a/python_module/src/cpp/megbrain_serialize.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_serialize.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./megbrain_serialize.h" -#include "./python_helper.h" - -#include "megbrain/opr/basic_arith.h" - -using namespace mgb; -using namespace serialization; - -TensorValueDumperContext::~TensorValueDumperContext() noexcept = default; -TensorValueLoaderContext::~TensorValueLoaderContext() noexcept = default; - -PyObject* TensorValueDumperContext::_value() { - return npy::ndarray_from_tensor(m_value, npy::ShareType::TRY_SHARE); -} - -void TensorValueDumperContext::_write(PyObject *bytes) { - mgb_assert(PyBytes_Check(bytes)); - auto arr_len = PyBytes_Size(bytes); - auto arr_buf = PyBytes_AsString(bytes); - m_fout.write(arr_buf, arr_len); -} - -std::vector TensorValueLoaderContext::_get_shape() const { - mgb_assert(m_layout.is_contiguous()); - return npy::shape2vec(m_layout); -} - -PyObject* TensorValueLoaderContext::_get_dtype() const { - return npy::dtype_mgb2np(m_layout.dtype); -} - -PyObject* TensorValueLoaderContext::_read(size_t n) { - // Creates a PyBytes with uninitialized content - PyObject* bytes = PyBytes_FromStringAndSize(nullptr, n); - m_fin.read(PyBytes_AsString(bytes), n); - return bytes; -} - -std::string _get_info_for_strip(const SymbolVarArray &dest_vars) { - std::unordered_set opr_types, dtype_names, elemwise_modes; - - auto on_opr = [&](cg::OperatorNodeBase *opr) { - if (GraphDumper::should_remove_in_dump(opr)) - return; - opr_types.insert(opr->dyn_typeinfo()->name); - for (auto i: opr->output()) - dtype_names.insert(i->dtype().name()); - if (opr->same_type()) { - auto mode = opr->cast_final().param().mode; - elemwise_modes.insert( - megdnn::Elemwise::ModeTrait::from_mode(mode).name); - } - }; - cg::DepOprIter opr_iter{on_opr}; - for (auto i: dest_vars) - opr_iter.add(i.node()->owner_opr()); - - auto to_json = [](const std::unordered_set &v) { - std::vector vs(v.begin(), v.end()); - std::sort(vs.begin(), vs.end()); - auto ret = json::Array::make(); - for (auto &&i: vs) - ret->add(json::String::make(i)); - return ret; - }; - - return json::Object::make({ - {"opr_types", to_json(opr_types)}, - {"dtypes", to_json(dtype_names)}, - {"elemwise_modes", to_json(elemwise_modes)}, - })->to_string(); -} - -void _serialize_comp_graph_to_file( - const char *fpath, bool append, GraphDumpFormat format, - const SymbolVarArray &output_vars, - int keep_var_name, bool keep_param_name, bool keep_opr_priority, - _TensorValueDumperCallback *tensor_value_dumper, - std::vector &stat, - std::vector &inputs, - std::vector &outputs, - std::vector ¶ms) { - - auto dumper = GraphDumper::make( - OutputFile::make_fs(fpath, append ? 'a' : 'w'), format); - GraphDumper::DumpConfig config{keep_var_name, keep_param_name, - keep_opr_priority}; - - if (tensor_value_dumper) { - config.tensor_value_dumper = [f=tensor_value_dumper]( - OutputFile &fout, const cg::OperatorNodeBase &opr, - const HostTensorND &value) { - mgb_assert(value.layout().is_contiguous()); - TensorValueDumperContext ctx{fout, opr, value}; - f->call(ctx); - }; - } - - auto rst = dumper->dump(output_vars, config); - inputs = std::move(rst.inputs); - outputs = std::move(rst.outputs); - params = std::move(rst.params); - stat = {rst.nr_opr, rst.tot_bytes, rst.tensor_value_bytes, - rst.content_hash}; -} - -CompGraph _load_comp_graph_from_file( - const char* fpath, _CompNodeMapperCallback* cn_mapper, - _TensorValueLoaderCallback* tensor_value_loader, - std::vector>& output_var_map, - SymbolVarArray& output_var_list) { - auto file = InputFile::make_fs(fpath); - auto format = GraphLoader::identify_graph_dump_format(*file); - mgb_throw_if(!format.valid(), SerializationError, - "unknown model format (input is likely not a MegBrain model)"); - auto loader = GraphLoader::make(std::move(file), format.val()); - GraphLoader::LoadConfig config; - if (cn_mapper) { - config.comp_node_mapper = [f = cn_mapper](CompNode::Locator& locator) { - locator = CompNode::Locator::parse(f->call(locator.to_string())); - }; - } - if (tensor_value_loader) { - config.tensor_value_loader = [f = tensor_value_loader]( - void* ptr, - const TensorLayout& layout, - InputFile& fin) { - TensorValueLoaderContext ctx{layout, fin}; - PyObjRefKeeper value = f->call(ctx); - mgb_assert(value.get()->ob_refcnt > 0); - if (ptr) { - HostTensorStorage storage; - // Unmanaged shared_ptr - storage.reset(CompNode::default_cpu(), - layout.span().dist_byte(), - {std::shared_ptr(), - reinterpret_cast(ptr)}); - HostTensorND tensor; - tensor.reset(storage, layout); - npy::np2tensor(value.get(), npy::Meth::copy_into(&tensor), - layout.dtype); - } - }; - } - auto rst = loader->load(config); - output_var_map = {rst.output_var_map.begin(), rst.output_var_map.end()}; - output_var_list = std::move(rst.output_var_list); - - std::unordered_map tensor2name; - for (const auto& pair : rst.tensor_map) { - tensor2name[pair.second.get()] = &pair.first; - } - auto cb = [&tensor2name, graph=rst.graph](cg::OperatorNodeBase* opr) { - if (!opr->same_type()) - return; - - auto& h2d = opr->cast_final_safe(); - auto it = tensor2name.find(h2d.host_data().get()); - mgb_throw_if(it == tensor2name.end(), GraphError, - "unbound Host2DeviceCopy in loaded graph"); - h2d.output(0)->name(*it->second); - mark_as_input(graph.get(), h2d.output(0)); - }; - cg::DepOprIter iter{cb}; - for (const auto& var : output_var_list) { - iter.add(var.node()->owner_opr()); - } - return CompGraph::make_from_shared_ptr(rst.graph); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_serialize.h b/python_module/src/cpp/megbrain_serialize.h deleted file mode 100644 index f320c680..00000000 --- a/python_module/src/cpp/megbrain_serialize.h +++ /dev/null @@ -1,159 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_serialize.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - - -#ifndef SWIG - -#pragma once - -#include "megbrain/serialization/serializer.h" -#include "./megbrain_wrap.h" -using mgb::cg::SymbolVar; -using mgb::cg::SymbolVarArray; -#endif - -#ifdef SWIG -%feature("autodoc", -"An object that is passed to the callback in \ -:func:`.serialize_comp_graph_to_file`.") TensorValueDumperContext; -%feature("autodoc", -"An object that is passed to the callback in \ -:func:`.load_comp_graph_from_file`.") TensorValueLoaderContext; -%feature("director") _TensorValueDumperCallback; -%feature("director") _TensorValueLoaderCallback; -%feature("director") _CompNodeMapperCallback; - -%template(_VectorPairStringSymbolVar) std::vector>; -%typemap(directorout) PyObjRefKeeper { - Py_XINCREF($input); - $result = PyObjRefKeeper($input); -} -#endif -class TensorValueDumperContext { -#ifndef SWIG - mgb::serialization::OutputFile &m_fout; - const mgb::cg::OperatorNodeBase &m_opr; - const mgb::HostTensorND &m_value; -#endif - - public: - TensorValueDumperContext() = delete; - TensorValueDumperContext(const TensorValueDumperContext&) = delete; - TensorValueDumperContext& operator = ( - const TensorValueDumperContext&) = delete; - -#ifndef SWIG - TensorValueDumperContext( - mgb::serialization::OutputFile &fout, - const mgb::cg::OperatorNodeBase &opr, - const mgb::HostTensorND &value): - m_fout{fout}, m_opr{opr}, m_value{value} - { - } -#endif - ~TensorValueDumperContext() noexcept; - - const char* _name() const { - return m_opr.cname(); - } - - const char* _type() const { - return m_opr.dyn_typeinfo()->name; - } - - PyObject* _value(); - - void _write(PyObject *bytes); - - void _write_default() { - mgb::serialization::GraphDumpConfig::default_tensor_value_dumper( - m_fout, m_opr, m_value); - } - -#ifdef SWIG -%include "./megbrain_serialize_TensorValueDumperContext.py" -#endif - -}; - -class TensorValueLoaderContext { -#ifndef SWIG - const mgb::TensorLayout &m_layout; - mgb::serialization::InputFile &m_fin; -#endif - - public: - TensorValueLoaderContext() = delete; - TensorValueLoaderContext(const TensorValueLoaderContext&) = delete; - TensorValueLoaderContext& operator=(const TensorValueLoaderContext&) = - delete; - -#ifndef SWIG - TensorValueLoaderContext(const mgb::TensorLayout &layout, - mgb::serialization::InputFile &fin) - : m_layout(layout), m_fin(fin) {} -#endif - ~TensorValueLoaderContext() noexcept; - - std::vector _get_shape() const; - PyObject* _get_dtype() const; - - // Returns bytes - PyObject* _read(size_t n); - -#ifdef SWIG -%include "./megbrain_serialize_TensorValueLoaderContext.py" -#endif -}; - -class _TensorValueDumperCallback { - public: - virtual ~_TensorValueDumperCallback() = default; - virtual void call(TensorValueDumperContext &ctx) = 0; -}; - -class _TensorValueLoaderCallback { - public: - virtual ~_TensorValueLoaderCallback() = default; - virtual PyObjRefKeeper call(TensorValueLoaderContext &ctx) = 0; -}; - -class _CompNodeMapperCallback { - public: - virtual ~_CompNodeMapperCallback() = default; - virtual std::string call(const std::string &desc) = 0; -}; - -#ifdef SWIG -%include "megbrain/serialization/dump_format.h" -#else -#include "megbrain/serialization/dump_format.h" -#endif - -void _serialize_comp_graph_to_file( - const char *fpath, bool append, - mgb::serialization::GraphDumpFormat format, - const SymbolVarArray &output_vars, - int keep_var_name, bool keep_param_name, bool keep_opr_priority, - _TensorValueDumperCallback *tensor_value_dumper, - std::vector &stat, - std::vector &inputs, - std::vector &outputs, - std::vector ¶ms); - -std::string _get_info_for_strip(const SymbolVarArray &dest_vars); - -CompGraph _load_comp_graph_from_file( - const char *fpath, _CompNodeMapperCallback *cn_mapper, - _TensorValueLoaderCallback *tensor_value_loader, - /* Outputs */ - std::vector> &output_var_map, - SymbolVarArray &output_var_list); - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_serialize_TensorValueDumperContext.py b/python_module/src/cpp/megbrain_serialize_TensorValueDumperContext.py deleted file mode 100644 index d8028678..00000000 --- a/python_module/src/cpp/megbrain_serialize_TensorValueDumperContext.py +++ /dev/null @@ -1,44 +0,0 @@ -%pythoncode { - @property - def name(self): - """name of the param - - :type: str - """ - return str(self._name()) - - @property - def type(self): - """operator type - - :type: str - """ - return str(self._type()) - - @property - def value(self): - """numerical value of the param - - :type: :class:`numpy.ndarray` - """ - return self._value() - - def write(self, buf): - """write raw data to the output file - - :param buf: value to be written - :type buf: :class:`bytes` - :return: self - """ - assert type(buf) is bytes, 'bad value: {!r}'.format(type(buf)) - self._write(buf) - - def write_default(self): - """dump the numerical value in default format - - :return: self - """ - self._write_default() - return self - -} diff --git a/python_module/src/cpp/megbrain_serialize_TensorValueLoaderContext.py b/python_module/src/cpp/megbrain_serialize_TensorValueLoaderContext.py deleted file mode 100644 index a2ff798c..00000000 --- a/python_module/src/cpp/megbrain_serialize_TensorValueLoaderContext.py +++ /dev/null @@ -1,19 +0,0 @@ -%pythoncode { - @property - def shape(self): - return self._get_shape() - - @property - def dtype(self): - return self._get_dtype() - - def read(self, size): - """read raw data from the input file - - :param size: number of bytes to be read - :type size: :class:`int` - :return: bytes - """ - return self._read(size) - -} diff --git a/python_module/src/cpp/megbrain_wrap.cpp b/python_module/src/cpp/megbrain_wrap.cpp deleted file mode 100644 index bcb85ae1..00000000 --- a/python_module/src/cpp/megbrain_wrap.cpp +++ /dev/null @@ -1,1055 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_wrap.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./megbrain_wrap.h" -#include "./python_helper.h" -#include "./megbrain_pubapi_internal.h" - -#include "megbrain/version.h" -#include "megbrain/tensor.h" -#include "megbrain/comp_node_env.h" -#include "megbrain/opr/io.h" -#include "megbrain/opr/utility.h" -#include "megbrain/gopt/inference.h" -#include "megbrain/utils/thread.h" -#include "megbrain/utils/timer.h" - -#include -using namespace mgb; - -namespace { - bool g_global_finalize_called = false; - - /*! - * \brief record the vars produced from user-created Host2DeviceCopy - * - * Note that the vars are mapped by address of underlying HostTensorND, so - * in the case of partial execution, vars in the parent graph can be - * retrieved from oprs in the sub graphs. - */ - class UserInputVars final : public UserDataContainer::UserData { - MGB_TYPEINFO_OBJ_DECL; - - //! we keep this mapping to handle multi-part compiling, where new - //! graphs would be created and the var in the original graph is needed - ThinHashMap m_tensor2var; - - public: - void register_var(SymbolVar x) { - m_tensor2var[x.node()->owner_opr() - ->cast_final_safe() - .host_data() - .get()] = x.node(); - } - - //! get the corresponding var from an opr if it has been registered; - //! return nullptr otherwise - VarNode* check(cg::OperatorNodeBase* opr) const { - if (opr->same_type()) { - auto ptr = opr->cast_final() - .host_data() - .get(); - auto iter = m_tensor2var.find(ptr); - return iter == m_tensor2var.end() ? nullptr : iter->second; - } - return nullptr; - } - - static UserInputVars& get(ComputingGraph* graph) { - return *graph->options() - .user_data.get_user_data_or_create(); - } - }; - - __attribute__((constructor)) - void global_init() { - CompNode::enable_affinity_for_cpu(true); - } -} // anonymous namespace - -MGB_TYPEINFO_OBJ_IMPL(UserInputVars); - -/* ================= SharedND ================= */ - -bool SharedND::sync(mgb::DeviceTensorND &dv) { - if (m_copy_sync) { - dv.sync(); - return true; - } - return false; -} - -void SharedND::_set_init_shape(const std::vector &shape) { - mgb_assert(m_dev_tensor && m_dev_tensor->empty()); - m_dev_tensor->resize(npy::vec2shape(shape)); -} - -void SharedND::_resize(const std::vector &shape) { - auto tshp = npy::vec2shape(shape); - if (m_dev_tensor) { - m_dev_tensor->resize(tshp); - } else { - mgb_assert(m_var); - m_var->shape_alloc(tshp); - } -} - -void SharedND::_reset_zero() { - fill_zero_dev_tensor(*m_dev_tensor); -} - -void SharedND::_copy_from_npyarr(PyObject *npyarr) { - auto do_copy = [&](DeviceTensorND *dest, VarNode *var) { - DType dtype = dest ? dest->dtype() : var->dtype(); - mgb_assert(dtype.valid()); - auto hv = npy::np2tensor(npyarr, npy::Meth::borrow(), dtype); - if (var) { - // only setup by assign(), by craniotome - var->shape_alloc(hv.shape()); - dest = &var->mutable_dev_tensor(); - } - if (!sync(dest->copy_from(hv))) { - m_async_copy_refkeeper = hv; - } else { - m_async_copy_refkeeper = {}; - } - }; - if (m_var) { - mgb_assert(!m_dev_tensor); - do_copy(nullptr, m_var); - } else { - mgb_assert(m_dev_tensor); - do_copy(m_dev_tensor.get(), nullptr); - } -} - -PyObject* SharedND::_get_npyarr() { - mgb_assert(m_dev_tensor); - if (m_dev_tensor->empty()) - Py_RETURN_NONE; - HostTensorND hv; - hv.comp_node(CompNode::default_cpu()) - .copy_from(*m_dev_tensor) - .sync(); - return npy::ndarray_from_tensor(hv, npy::ShareType::TRY_SHARE); -} - -PyObject* SharedND::_get_dtype() { - mgb_assert(m_dev_tensor); - return npy::dtype_mgb2np(m_dev_tensor->dtype()); -} - -void SharedND::_copy_from_value_proxy(CompGraphCallbackValueProxy &value) { - if (value.eager_copy()) { - mgb_log_warn("copy from eager-copied CompGraphCallbackValueProxy into" - " SharedND; consider using callback_lazycopy; traceback:\n%s", - PyStackExtracter::run().c_str()); - } - - if (m_var) { - mgb_assert(!m_dev_tensor); - auto &&src = value.dev_tensor(); - m_var->shape_alloc(src.shape()). - mutable_dev_tensor().copy_from(src); - } else { - mgb_assert(m_dev_tensor); - sync(m_dev_tensor->copy_from(value.dev_tensor())); - } -} - -void SharedND::_share_from_value_proxy(CompGraphCallbackValueProxy& value) { - if (value.eager_copy()) { - mgb_log_warn( - "share value from eager-copied CompGraphCallbackValueProxy into" - " SharedND; consider using callback_lazycopy; traceback:\n%s", - PyStackExtracter::run().c_str()); - } - - if (m_var) { - mgb_assert(!m_dev_tensor); - m_var->reset_dev_tensor_from_tensor(value.dev_tensor()); - } else { - mgb_assert(m_dev_tensor); - *m_dev_tensor = value.dev_tensor(); - } -} - -SharedND SharedND::_from_symvar(SymbolVar symvar) { - auto opr = symvar.node()->owner_opr(); - if (auto vsnd = opr->try_cast_final()) { - return SharedND(vsnd->dev_data()); - } - if (auto snd = opr->try_cast_final()) { - return SharedND(snd->dev_data()); - } - mgb_throw(MegBrainError, "cannot convert from %s", opr->dyn_typeinfo()->name); -} - -uintptr_t SharedND::_pubapi_dev_tensor_ptr(int version) { - DeviceTensorND *dv; - if (m_dev_tensor) { - mgb_assert(!m_var); - dv = m_dev_tensor.get(); - } else { - mgb_assert(m_var); - dv = nullptr; - } - void *ret; - if (version == 0) { - if (dv) { - ret = dv->raw_ptr(); - } else { - ret = m_var->dev_tensor().raw_ptr(); - } - } else { - init_pubapi_dev_tensor(m_pubapi_dev_tensor, dv, m_var, false); - ret = &m_pubapi_dev_tensor; - } - return reinterpret_cast(ret); -} - -SymbolVar SharedND::_as_sym_var(CompGraph &cg, const std::string &name, - bool volatile_) { - mgb_assert(m_dev_tensor); - OperatorNodeConfig config; - if (!name.empty()) - config.name(name); - if (volatile_) { - return opr::VolatileSharedDeviceTensor::make(cg.get(), m_dev_tensor, - config); - } else { - return opr::SharedDeviceTensor::make(cg.get(), m_dev_tensor, config); - } -} - -std::vector SharedND::_get_shape(){ - if (m_var) { - mgb_assert(!m_dev_tensor); - return npy::shape2vec(m_var->shape()); - } - mgb_assert(m_dev_tensor); - return npy::shape2vec(m_dev_tensor->shape()); -} - -void SharedND::copy_to_sub_from_shared( - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step, - const SharedND &rhs) { - mgb_assert(m_dev_tensor && rhs.m_dev_tensor); - auto sub = m_dev_tensor->sub( - Slice(begin, end, step).apply(m_dev_tensor->layout(), axis)); - sub.copy_from_fixlayout(*rhs.m_dev_tensor).sync(); - -} - -void SharedND::copy_from_shared_sub(const SharedND &rhs, - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step) { - mgb_assert(m_dev_tensor && rhs.m_dev_tensor); - if (axis == -3) { - sync(m_dev_tensor->copy_from_fixlayout(*rhs.m_dev_tensor)); - } else if (axis == -2) { - sync(m_dev_tensor->copy_from(*rhs.m_dev_tensor)); - } else { - auto sub = rhs.m_dev_tensor->sub( - Slice(begin, end, step).apply( - rhs.m_dev_tensor->layout(), axis)); - sync(m_dev_tensor->copy_from(sub)); - } -} - -void SharedND::_check_before_share_memory(const SharedND& rhs) { - mgb_assert(rhs.m_dev_tensor); - mgb_assert(m_dev_tensor); - mgb_assert(rhs.m_dev_tensor->dtype() == m_dev_tensor->dtype()); - mgb_assert(rhs.m_dev_tensor->comp_node() == m_dev_tensor->comp_node()); -} - -void SharedND::_share_memory_from(const SharedND& rhs, size_t begin) { - _check_before_share_memory(rhs); - m_dev_tensor->reset( - rhs.m_dev_tensor->storage().sub(m_dev_tensor->dtype().size() * begin), - m_dev_tensor->layout()); -} - -void SharedND::_reset_dev_tensor(const SharedND &rhs) { - _check_before_share_memory(rhs); - *m_dev_tensor = *(rhs.m_dev_tensor); -} - -/* ================= _HostSharedND ================= */ - -void _HostSharedND::ensure_own_storage() { - if (!m_own_storage) { - mgb_assert(m_tensor); - HostTensorND val{m_tensor->comp_node(), m_tensor->dtype()}; - if (!m_tensor->empty()) { - val.resize(m_tensor->shape()); - } - *m_tensor = std::move(val); - m_own_storage = true; - } -} - -void _HostSharedND::_resize(const std::vector &shape) { - ensure_own_storage(); - m_tensor->resize(npy::vec2shape(shape)); -} - -void _HostSharedND::_copy_from_npyarr(PyObject *npyarr, bool borrow) { - mgb_assert(m_tensor); - mgb_assert(m_tensor->dtype().valid()); - if (!m_borrow_on_cpu && - m_tensor->comp_node().device_type() == CompNode::DeviceType::CPU) { - borrow = false; - } - if (borrow) { - auto val = npy::np2tensor( - npyarr, npy::Meth::borrow(m_tensor->comp_node()), - m_tensor->dtype()); - m_own_storage = false; - *m_tensor = std::move(val); - } else { - ensure_own_storage(); - npy::np2tensor(npyarr, - npy::Meth::copy_into(m_tensor.get()), m_tensor->dtype()); - } -} - -SymbolVar _HostSharedND::_as_sym_var(CompGraph &cg, bool enable_static_infer, - const std::string &name) { - if (m_tensor->empty()) - cg.get().options().allocate_static_mem_after_graph_compile = false; - - OperatorNodeConfig config; - if (!name.empty()) - config.name(name); - - SymbolVar ret; - if (enable_static_infer) { - ret = opr::Host2DeviceCopy::make(cg.get(), m_tensor, config); - } else { - ret = opr::Host2DeviceCopy::make_no_value_infer(cg.get(), m_tensor, - config); - } - UserInputVars::get(&cg.get()).register_var(ret); - return ret; -} - -_HostSharedND _HostSharedND::make_proxy(SymbolVar var) { - auto &&opr = var.node()->owner_opr()-> - cast_final_safe(); - _HostSharedND rst{var.node()->comp_node(), var.dtype()}; - rst.m_tensor = opr.host_data(); - rst.m_proxied_opr = &opr; - return rst; -} - -std::string _HostSharedND::__repr__() const { - if (m_proxied_opr) { - return ssprintf("", - this, m_proxied_opr->cname()); - } - return ssprintf("", this); -} - -PyObject* _HostSharedND::_get_dtype() { - mgb_assert(m_tensor); - return npy::dtype_mgb2np(m_tensor->dtype()); -} - -/* ================= CompGraphCallbackValueProxy ================= */ - -CompGraphCallbackValueProxy -CompGraphCallbackValueProxy::make_raw_host_value_proxy( - const mgb::HostTensorND &hv) { - CompGraphCallbackValueProxy ret; - ret.m_use_raw_hv = true; - ret.m_hv = hv; - ret.m_is_active = true; - return ret; -} - -void CompGraphCallbackValueProxy::setup( - const mgb::DeviceTensorND &val, bool eager_copy) { - - while (__atomic_load_n(&m_is_active, __ATOMIC_SEQ_CST)) { - // wait for previous callback to finish - std::this_thread::yield(); - } - - mgb_assert(!m_use_raw_hv && val.shape_valid()); - m_eager_copy = eager_copy; - m_dev_value = val; - if (eager_copy) { - m_value_used = false; - do_copy(); - } else { - m_value_used = true; - } - - __atomic_store_n(&m_is_active, true, __ATOMIC_SEQ_CST); -} - -void CompGraphCallbackValueProxy::do_copy() { - mgb_assert(!m_use_raw_hv && m_dev_value.shape_valid()); - m_hv.copy_from(m_dev_value); - auto cn = m_hv.comp_node(); - if (!m_copy_event) - m_copy_event = cn.create_event(); - m_copy_event->record(); -} - -#if defined(WIN32) -#include -#include -#undef CONST -#define usleep Sleep -#endif -void CompGraphCallbackValueProxy::sync() const { - mgb_assert(!m_use_raw_hv); - RealTimer t0; - double next_warn_time = 2, warn_time_delta = 1; - while (!m_copy_event->finished()) { - //! sleep 1ms or sleep 1us no difference for performance on win32 - usleep(1); - if (t0.get_secs() >= next_warn_time) { - mgb_log_warn("wait d2h copy for more than %.3f secs", - t0.get_secs()); - next_warn_time += warn_time_delta; - warn_time_delta += 1; - } - } -} - -void CompGraphCallbackValueProxy::on_finished() { - mgb_assert(m_is_active && !m_use_raw_hv); - m_dev_value = {}; - if (m_hv.shape_valid()) { - m_hv.resize({}); // resize to reuse buffer - } - __atomic_store_n(&m_is_active, false, __ATOMIC_SEQ_CST); - if (!m_value_used) { - mgb_log_warn("computing graph callback did not read the value"); - } -} - -PyObject* CompGraphCallbackValueProxy::_get_npyarr() { - mgb_assert(m_is_active); - - if (!m_use_raw_hv) { - mgb_assert(m_dev_value.shape_valid()); - if (!m_hv.shape_valid()) { - do_copy(); - sync(); - } - } - m_value_used = true; - return npy::ndarray_from_tensor(m_hv, npy::ShareType::TRY_SHARE); -} - -PyObject* CompGraphCallbackValueProxy::_get_dtype() { - mgb_assert(m_is_active); - - if (m_use_raw_hv) - return npy::dtype_mgb2np(m_hv.dtype()); - - mgb_assert(m_dev_value.shape_valid()); - return npy::dtype_mgb2np(m_dev_value.dtype()); -} - -std::vector CompGraphCallbackValueProxy::_get_shape() { - mgb_assert(m_is_active); - - if (m_use_raw_hv) - return npy::shape2vec(m_hv.shape()); - - mgb_assert(m_dev_value.shape_valid()); - return npy::shape2vec(m_dev_value.shape()); -} - -uintptr_t CompGraphCallbackValueProxy::_pubapi_dev_tensor_ptr(int version) { - mgb_assert(m_is_active && !m_use_raw_hv); - mgb_assert(m_dev_value.shape_valid()); - void *ret; - if (version == 0) { - ret = m_dev_value.raw_ptr(); - } else { - init_pubapi_dev_tensor( - m_pubapi_dev_tensor, &m_dev_value, nullptr, true); - ret = &m_pubapi_dev_tensor; - } - return reinterpret_cast(ret); -} - -mgb::CompNode CompGraphCallbackValueProxy::_get_comp_node() { - mgb_assert(m_is_active && !m_use_raw_hv); - mgb_assert(m_dev_value.shape_valid()); - return m_dev_value.comp_node(); -} - -/* ================= AsyncExec ================= */ - -class AsyncExec::Core { - public: - Core(std::unique_ptr f): - m_func(std::move(f)) - { - } - - mgb::cg::AsyncExecutable* func() const { - return m_func.get(); - } - - struct CallbackParam { - std::vector value; - _CompGraphCallback *cb; - }; - - void dispatch_callback(const CallbackParam ¶m) { - m_worker.add_task(param); - } - - void wait_callback_finish() { - m_worker.wait_all_task_finish(); - } - - private: - std::unique_ptr m_func; - - class Worker final: public AsyncQueueSC { - public: - void process_one_task(const CallbackParam &task) { - for (auto &tmp_value: task.value) { - tmp_value.sync(); - } - task.cb->call_pycb(); - } - }; - Worker m_worker; -}; - -AsyncExec::AsyncExec(std::unique_ptr f): - m_core(std::make_shared(std::move(f))) -{ -} - -AsyncExec::~AsyncExec() { - if (m_core) - _wait(); -} - -AsyncExec::Core* AsyncExec::core() const { - return m_core.get(); -} - -void AsyncExec::_execute() { - m_core->func()->execute(); -} - -std::string AsyncExec::_to_json_str() { - auto jv = m_core->func()->to_json(); - return jv->to_string(); -} - -void AsyncExec::_wait() { - m_core->wait_callback_finish(); - m_core->func()->wait(); -} - -double AsyncExec::_get_prev_exec_time() { - return m_core->func()->get_prev_exec_time(); -} - -SymbolVarArray AsyncExec::_find_mutable_input() { - ThinHashSet used_set; - UserInputVars* user_vars = nullptr; - auto cb = [&](cg::OperatorNodeBase* opr) { - if (!user_vars) { - ComputingGraph* g; - if (m_multi_part_par_graph) - g = m_multi_part_par_graph.get(); - else - g = opr->owner_graph(); - user_vars = &UserInputVars::get(g); - } - if (auto var = user_vars->check(opr)) { - used_set.insert(var); - } - return true; - }; - m_core->func()->iter_opr_seq(cb); - for (auto i : m_core->func()->get_rt_static_source_deps()) { - cb(i.dest->owner_opr()); - } - SymbolVarArray ret; - ret.reserve(used_set.size()); - ret.insert(ret.begin(), used_set.begin(), used_set.end()); - return ret; -} - -void AsyncExec::clear_device_memory() { - _wait(); - m_core->func()->clear_device_memory(); -} - -std::vector> -AsyncExec::_update_static_alloc_plan_and_get_size() { - std::vector> ret; - for (auto&& i : m_core->func()->update_static_alloc_plan_and_get_size()) { - ret.emplace_back(i.first, i.second); - } - return ret; -} - -/* ================= _CompGraphCallback ================= */ - -void _CompGraphCallback::set_async_exec(const AsyncExec &ae) { - mgb_assert(!m_ae_core); - m_ae_core = ae.core(); -} - -void _CompGraphCallback::set_eager_copy(bool flag) { - mgb_assert(!m_cb_created); - m_eager_copy = flag; -} - -std::function &)> _CompGraphCallback::make_multi_input_callback() { - mgb_assert(!m_cb_created); - m_cb_created = true; - - // shared_ptr would delete this afterwards - std::shared_ptr <_CompGraphCallback> self(this); - - auto cb = [self](SmallVector &data) { - for (size_t i = self->m_value_proxies.size(); i < data.size(); ++i) { - self->m_value_proxies.emplace_back(); - } - if (self->m_eager_copy) { - mgb_assert(self->m_ae_core); - for (size_t i = 0; i < self->m_value_proxies.size(); ++i) { - self->m_value_proxies[i].setup(data[i], true); - } - self->m_ae_core->dispatch_callback( - AsyncExec::Core::CallbackParam{self->m_value_proxies, self.get()} - ); - } else { - for (size_t i = 0; i < self->m_value_proxies.size(); ++i) - self->m_value_proxies[i].setup(data[i], false); - self->call_pycb(); - } - }; - - return cb; -} - -std::function _CompGraphCallback::make_callback() { - this->m_value_proxies.emplace_back(); - mgb_assert(!m_cb_created); - m_cb_created = true; - - // shared_ptr would delete this afterwards - std::shared_ptr <_CompGraphCallback> self(this); - - auto cb = [self](mgb::DeviceTensorND &data) { - if (self->m_eager_copy) { - mgb_assert(self->m_ae_core); - self->m_value_proxies[0].setup(data, true); - self->m_ae_core->dispatch_callback( - AsyncExec::Core::CallbackParam{self->m_value_proxies, self.get()} - ); - } else { - self->m_value_proxies[0].setup(data, false); - self->call_pycb(); - } - }; - - return cb; -} - -void _CompGraphCallback::call_pycb() { - try { - call(m_value_proxies); - } catch (...) { - for(auto &m_value_proxy: m_value_proxies) { - m_value_proxy.on_finished(); - } - throw; - } - for(auto &m_value_proxy: m_value_proxies) { - m_value_proxy.on_finished(); - } -} - -/* ================= CompGraph ================= */ - -class CompGraph::PyUserData final: public UserDataContainer::UserData, - public NonCopyableObj { - MGB_TYPEINFO_OBJ_DECL; - - PyObject *m_obj; - - public: - - PyUserData() { - PYTHON_GIL; - m_obj = PyDict_New(); - mgb_assert(m_obj, "failed to create python object"); - } - - ~PyUserData() { - PYTHON_GIL; - Py_DECREF(m_obj); - } - - PyObject* get() const { - return m_obj; - } -}; -MGB_TYPEINFO_OBJ_IMPL(CompGraph::PyUserData); - -mgb::ComputingGraph& CompGraph::get() const { - if (m_comp_graph_own) - return *m_comp_graph_own; - auto &&val = m_comp_graph_borrow.lock(); - mgb_assert(val, "CompGraph has been destructed"); - return *val; -} - -void CompGraph::clear_device_memory() { - if (!m_comp_graph_own) - return; - m_comp_graph_own->clear_device_memory(); -} - -PyObject* CompGraph::_user_data() { - auto ct = get().options().user_data.get_user_data_or_create(); - auto ret = ct->get(); - PYTHON_GIL; - Py_INCREF(ret); - return ret; -} - -void CompGraph::_add_output_spec( - mgb::cg::SymbolVar &var, _CompGraphCallback *callback) { - - cg::ComputingGraph::Callback cb; - if (callback) { - cb = callback->make_callback(); - m_raw_callbacks.push_back({callback, m_out_specs.size() - 1}); - } - if (m_out_specs.empty()) { - m_out_specs.emplace_back(); - } - m_out_specs.back().push_back({var, cb}); -} - -AsyncExec CompGraph::_do_compile(bool copy, bool optimize_for_inference) { - mgb_assert(m_out_specs.size() == 1, "got %zu output specs for compile", - m_out_specs.size()); - auto&& spec = m_out_specs[0]; - if (optimize_for_inference) { - SymbolVarArray vars; - vars.reserve(spec.size()); - for (auto&& i : spec) { - vars.push_back(i.first); - } - vars = gopt::optimize_for_inference(vars, {}); - mgb_assert(vars.size() == spec.size()); - for (size_t i = 0; i < vars.size(); ++i) { - spec[i].first = vars[i]; - } - } - - std::unique_ptr async_executable; - if (get().options().eager_evaluation || - (copy && get().current_comp_seq())) { - // need to copy a new comp graph - SymbolVarArray vars; - vars.reserve(spec.size()); - for (auto&& i : spec) { - vars.emplace_back(i.first); - } - - // copy graph - auto new_graph = mgb::ComputingGraph::make(); - SymbolVarArray new_vars = - replace_vars_comp_graph(std::move(vars), new_graph.get()); - mgb_assert(new_vars.size() == spec.size()); - - // register input - auto h2d = find_h2d(new_vars); - for (auto&& i : h2d) { - UserInputVars::get(new_graph.get()).register_var(i); - } - - mgb::ComputingGraph::OutputSpec new_spec; - new_spec.reserve(spec.size()); - for (size_t i = 0; i < spec.size(); ++i) { - new_spec.emplace_back(mgb::ComputingGraph::OutputSpecItem{ - new_vars[i], spec[i].second}); - } - async_executable = new_graph->compile(new_spec); - } else { - async_executable = get().compile(spec); - } - - AsyncExec ret{std::move(async_executable)}; - - for (auto&& i : m_raw_callbacks) { - mgb_assert(!i.second); - i.first->set_async_exec(ret); - } - _clear_output_spec(); - return ret; -} - -std::vector CompGraph::_do_compile_multi_part() { - // last spec is empty due to an extra call to _add_multi_part_endpoint() - mgb_assert(m_out_specs.size() > 1 && m_out_specs.back().empty(), - "got %zu output specs for multi-part compile", - m_out_specs.size()); - m_out_specs.pop_back(); - std::vector ret; - ret.reserve(m_out_specs.size()); - auto graph = get().shared_from_this(); - for (auto&& i : graph->compile_multi_part(m_out_specs)) { - ret.emplace_back(std::move(i)); - } - for (auto&& i : ret) { - i.set_multi_part_par_graph(graph); - } - for (auto&& i : m_raw_callbacks) { - i.first->set_async_exec(ret.at(i.second)); - } - _clear_output_spec(); - return ret; -} - -/* ================= SharedScalar ================= */ - -SharedScalar::SharedScalar(PyObject *val): - m_val{std::make_shared()} -{ - _set(val); -} - -HostTensorND& SharedScalar::val_as_host_nd() { - if (m_val_as_host_nd.empty()) { - HostTensorStorage storage; - storage.reset(CompNode::default_cpu(), m_val->dtype().size(), - {m_val, static_cast( - const_cast(m_val->storage()))}); - m_val_as_host_nd.reset(storage, {TensorShape{1}, m_val->dtype()}); - } - return m_val_as_host_nd; -} - -void SharedScalar::_set(PyObject *val) { - auto tensor = npy::np2tensor(val, npy::Meth::borrow(), {}); - mgb_assert(tensor.layout().is_scalar(), - "value given to SharedScalar must be scalar; got shape %s", - tensor.shape().to_string().c_str()); - if (m_dtype_locked) { - mgb_assert(tensor.dtype() == m_val->dtype(), - "dtype for SharedScalar has been locked as %s, " - "but attempt to set it to %s", m_val->dtype().name(), - tensor.dtype().name()); - } - m_val->set_raw(tensor.dtype(), tensor.raw_ptr()); - - if (!m_dev_val.empty()) { - auto &&hv = val_as_host_nd(); - for (auto &&i: m_dev_val) - i.second->copy_from_fixlayout(hv); - } -} - -PyObject* SharedScalar::_get() { - HostTensorND hv{CompNode::default_cpu(), TensorShape{1}, m_val->dtype()}; - memcpy(hv.raw_ptr(), m_val->storage(), m_val->dtype().size(1)); - return npy::ndarray_from_tensor(hv, npy::ShareType::TRY_SHARE); -} - -SymbolVar SharedScalar::_as_sym_var(CompGraph &cg, mgb::CompNode &cn) { - m_dtype_locked = true; - auto &&dv = m_dev_val[cn]; - auto &&hv = val_as_host_nd(); - if (!dv) { - dv = std::make_shared(cn); - dv->copy_from(hv); - } - return opr::SharedDeviceTensor::make(cg.get(), dv, - ssprintf("SharedScalar@%p", m_val.get())); -} - -/* =============== Operator =============== */ - -const std::unique_ptr Operator::sm_opr_footprint_ptr{ - std::make_unique()}; - -/* ================= misc ================= */ - -SymbolVar fill_retain_dtype(SymbolVar var, PyObject *value) { - auto tensor = npy::np2tensor(value, npy::Meth::borrow(), {}); - mgb_assert(tensor.shape().is_scalar(), - "value for fill_retain_dtype must be scalar; got shape %s", - tensor.shape().to_string().c_str()); - switch (tensor.dtype().enumv()) { -#define cb(_dt) case DTypeTrait<_dt>::enumv: \ - static_assert(sizeof(DTypeTrait<_dt>::ctype) <= sizeof(int), \ - "bad dtype size"); \ - return var.fill_retain_dtype(static_cast( \ - *tensor.ptr::ctype>())); - MEGDNN_FOREACH_COMPUTING_DTYPE_INT(cb) -#undef cb - case DTypeEnum::Float32: - return var.fill_retain_dtype(*tensor.ptr()); - case DTypeEnum::Float16: - return var.fill_retain_dtype( - static_cast(*tensor.ptr())); - case DTypeEnum::BFloat16: - return var.fill_retain_dtype( - static_cast(*tensor.ptr())); - // TODO: What does this mean? - case DTypeEnum::Quantized8Asymm: - case DTypeEnum::QuantizedS32: - case DTypeEnum::QuantizedS8: - case DTypeEnum::Quantized4Asymm: - case DTypeEnum::QuantizedS4: - case DTypeEnum::Byte: - case DTypeEnum::QuantizedS16: - case DTypeEnum::Bool: - break; -#define cb(low_bit, size) \ - case DTypeEnum::low_bit##size: \ - break; -MEGDNN_FOREACH_LOWBIT_DTYPE(cb) -#undef cb - - } - throw ConversionError(ssprintf( - "unsupported value dtype: %s", tensor.dtype().name())); -} - -PyObject* get_symvar_inferred_value(mgb::SymbolVar symvar) { - auto var = symvar.node(); - auto&& mgr = var->owner_graph()->static_infer_manager(); - using IT = cg::static_infer::InferType; - auto it = mgr.get_infer_type(var); - if (!(it.value & (IT::CONST | IT::RT_STATIC))) - Py_RETURN_NONE; - - auto val = mgr.infer_value_fallible(var); - if (!val) - Py_RETURN_NONE; - - auto hv = HostTensorND::make_proxy(*val); - return npy::ndarray_from_tensor(hv, npy::ShareType::MUST_UNSHARE); -} - -void _mgb_global_finalize() { - CompNode::finalize(); - g_global_finalize_called = true; -} - -bool global_finalized() { - return g_global_finalize_called; -} - -std::vector _get_mgb_version() { - return {MGB_MAJOR, MGB_MINOR, MGB_PATCH, MGB_IS_DEV}; -} - -SymbolVarArray _grad(SymbolVar target, SymbolVarArray wrts, - bool warn_mid_wrt, int use_virtual_grad, - bool return_zero_for_nodep) { - if (use_virtual_grad == -1) { - use_virtual_grad = std::abs( - target.node()->owner_graph()->options().graph_opt_level) >= 2; - } - - if (use_virtual_grad) { - mgb_assert(return_zero_for_nodep, - "can't return a null var when using virtual grad opr"); - SymbolVarArray ret; - ret.reserve(wrts.size()); - for (auto&& wrt : wrts) { - ret.push_back(opr::VirtualGrad::make(target, wrt)); - } - return ret; - } - return cg::grad(target, wrts, warn_mid_wrt, return_zero_for_nodep); -} - -SymbolVar _inter_graph_trans_var( - CompGraph &dest_graph, SymbolVar src) { - auto &&graph = dest_graph.get(); - auto trans = mgb::cg::InterGraphVarTransformer::get(graph); - mgb_assert(trans, "trans func on graph %p has not been setup", &graph); - return trans->trans(src.node()); -} - -SymbolVar _get_graph_optimizer_replaced_var(SymbolVar src) { - return gopt::GraphOptimizer::var_replace_lookup(src.node()); -} - -void mark_as_input(ComputingGraph* cg, SymbolVar var) { - VarNode* node = var.node(); - mgb_assert(node->owner_graph() == cg); - mgb_assert(node->owner_opr()->same_type()); - UserInputVars::get(cg).register_var(var); -} - -namespace { - -void add_update_impl(const DeviceTensorND& dest, - const DeviceTensorND& delta_nobrd, - float alpha, float beta, float bias) { - auto&& cn = dest.comp_node(); - using DT = CompNode::DeviceType; - mgb_assert(cn == delta_nobrd.comp_node() && - (cn.device_type() == DT::CUDA || cn.device_type() == DT::CPU || - cn.device_type() == DT::ROCM)); - mgb_assert(dest.dtype() == delta_nobrd.dtype()); - auto&& delta = delta_nobrd.sub(SubTensorSpec::make_from_offset_elem( - delta_nobrd.layout().broadcast(dest.shape()), 0)); - cn.activate(); - if (!static_cast(alpha) && beta == 1 && - !static_cast(bias)) { - dest.copy_from_fixlayout(delta); - } else { - auto&& handle = MegDNNHandle::get( - CompNodeEnv::from_comp_node(cn)).handle(); - auto&& op = handle->create_operator(); - op->param() = {alpha, beta, bias}; - op->exec(dest.as_megdnn(), delta.as_megdnn()); - if (cn.device_type() == DT::CPU && cn != CompNode::default_cpu()) { - CompNodeEnv::from_comp_node(cn).cpu_env().dispatch( - [p = op.release()] { delete p; } - ); - } - } -} - -} // anonymous namespace - -void _add_update_fastpath(SharedND& dest_, SharedND& delta_, - float alpha, float beta, float bias) { - auto&& dest = dest_.dev_tensor(); - auto&& delta = delta_.dev_tensor(); - add_update_impl(*dest, *delta, alpha, beta, bias); -} - -void _add_update_fastpath(SharedND& dest_, CompGraphCallbackValueProxy& delta_, - float alpha, float beta, float bias) { - auto&& dest = dest_.dev_tensor(); - auto&& delta = delta_.dev_tensor(); - add_update_impl(*dest, delta, alpha, beta, bias); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/megbrain_wrap.h b/python_module/src/cpp/megbrain_wrap.h deleted file mode 100644 index 106457ee..00000000 --- a/python_module/src/cpp/megbrain_wrap.h +++ /dev/null @@ -1,491 +0,0 @@ -/** - * \file python_module/src/cpp/megbrain_wrap.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief wrappers for basic functionalities - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#pragma once - -#include "./python_helper.h" -#include "./megbrain_pubapi.h" - -#include "megbrain/graph.h" -#include "megbrain/opr/io.h" - -#include "megbrain/plugin/opr_footprint.h" - -#include -#include - -class CompGraph; -class CompGraphCallbackValueProxy; - -/*! - * \brief proxy a mgb::DeviceTensorND or a SymbolVar - */ -class SharedND { - mgb::pubapi::DeviceTensor m_pubapi_dev_tensor; - - std::shared_ptr m_dev_tensor; - mgb::HostTensorND m_async_copy_refkeeper; - mgb::VarNode *m_var = nullptr; - bool m_copy_sync = true; - - bool sync(mgb::DeviceTensorND &dv); - inline void _check_before_share_memory(const SharedND& rhs); - - public: - SharedND() = default; - - SharedND(mgb::CompNode node, PyObject* dtype): - m_dev_tensor(std::make_shared( - node, npy::dtype_np2mgb(dtype))) - { } - - SharedND(const std::shared_ptr& dv) - : m_dev_tensor(dv) {} - - //! set init shape; can be only called once - void _set_init_shape(const std::vector &shape); - - //! resize to given shape - void _resize(const std::vector &shape); - - //! reset dev_tensor to zeros - void _reset_zero(); - - /*! - * \brief assign to proxy given dev tensor; used by craniotome - */ - void assign(const mgb::DeviceTensorND &dv) { - mgb_assert(!m_dev_tensor && !m_var); - m_dev_tensor = std::make_shared(dv); - } - - /*! - * \brief assign to proxy a var node; used by craniotome - */ - void assign(mgb::VarNode *var) { - mgb_assert(!m_dev_tensor && !m_var); - m_var = var; - } - - /*! - * \brief share memory from another SharedND; only used in ParamPack - */ - void _share_memory_from(const SharedND& rhs, size_t begin); - - /*! - * \brief reset dev_tensor to another SharedNd's - */ - void _reset_dev_tensor(const SharedND& rhs); - - uintptr_t _pubapi_dev_tensor_ptr(int version); - - mgb::SymbolVar _as_sym_var(CompGraph &cg, const std::string &name, - bool volatile_); - - mgb::CompNode _get_comp_node() { - return m_dev_tensor->comp_node(); - } - - void _set_copy_sync(bool flag) { - m_copy_sync = flag; - } - - //! get dev buffer from shared nd - const std::shared_ptr& dev_tensor() { - return m_dev_tensor; - } - - void _copy_from_npyarr(PyObject *npyarr); - void _copy_from_value_proxy(CompGraphCallbackValueProxy &value); - void _share_from_value_proxy(CompGraphCallbackValueProxy &value); - static SharedND _from_symvar(mgb::SymbolVar symvar); - - //! get numpy ndarray that contains a copy of the value; return new ref - PyObject* _get_npyarr(); - PyObject* _get_dtype(); - std::vector _get_shape(); - - /*! - * \brief copy to sub of this from another SharedND - * \param axis axis for sub, or -1 to work on flattened array - */ - void copy_to_sub_from_shared( - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step, - const SharedND &rhs); - - /*! - * \brief copy from sub of another SharedND to this - * \param axis axis for sub, or -1 to work on flattened array, -2 to - * copy whole tensor, -3 to copy whole tensor fixlayout - */ - void copy_from_shared_sub(const SharedND &rhs, - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step); -}; - -/*! - * \brief wraps around shared pointer to mgb::HostTensorND - */ -class _HostSharedND { - bool m_own_storage = false, m_borrow_on_cpu = false; - std::shared_ptr m_tensor; - //! set to non-null if this _HostSharedND is set to proxy a var - mgb::opr::Host2DeviceCopy* m_proxied_opr = nullptr; - - void ensure_own_storage(); - - public: - _HostSharedND() = default; - - _HostSharedND(const _HostSharedND &rhs): - m_own_storage{false}, - m_tensor{rhs.m_tensor}, - m_proxied_opr{rhs.m_proxied_opr} - { - } - - _HostSharedND(mgb::CompNode node, mgb::DType dtype): - m_own_storage{true}, - m_tensor{std::make_shared(node, dtype)} - { - } - - _HostSharedND(mgb::CompNode node, PyObject* dtype): - _HostSharedND(node, npy::dtype_np2mgb(dtype)) - { - } - - _HostSharedND& operator = (const _HostSharedND &) = delete; - - /*! - * \brief make a _HostSharedND by proxing a var produced by - * Host2DeviceCopy - */ - static _HostSharedND make_proxy(mgb::SymbolVar var); - - mgb::SymbolVar _as_sym_var(CompGraph &cg, bool enable_static_infer, - const std::string &name); - - void _resize(const std::vector &shape); - void _copy_from_npyarr(PyObject *npyarr, bool borrow); - - void _enable_borrow_on_cpu(bool flag) { - m_borrow_on_cpu = flag; - } - - std::string __repr__() const; - PyObject* _get_dtype(); -}; - -/*! - * \brief proxy a value to be passed to computing graph callback - */ -class CompGraphCallbackValueProxy { - mgb::pubapi::DeviceTensor m_pubapi_dev_tensor; - bool m_is_active = false; //! setup called but on_finished not called - bool m_use_raw_hv = false; - bool m_value_used, m_eager_copy; - mgb::HostTensorND m_hv; - std::shared_ptr m_copy_event; - - //! original dev value - mgb::DeviceTensorND m_dev_value; - - //! perform D2H copy - void do_copy(); - - public: - static CompGraphCallbackValueProxy make_raw_host_value_proxy( - const mgb::HostTensorND &hv); - - bool eager_copy() const { - return m_eager_copy; - } - - mgb::DeviceTensorND& dev_tensor() { - return m_dev_value; - } - - void setup(const mgb::DeviceTensorND &val, bool eager_copy); - void sync() const; - - /*! - * \brief called after python callback returned - */ - void on_finished(); - - //! get numpy ndarray that contains a copy of the value; return new ref - PyObject* _get_npyarr(); - PyObject* _get_dtype(); - std::vector _get_shape(); - - uintptr_t _pubapi_dev_tensor_ptr(int version); - - mgb::CompNode _get_comp_node(); -}; - -class AsyncExec { - public: - class Core; - - AsyncExec() = default; - - ~AsyncExec(); - - AsyncExec(std::unique_ptr f); - - void _execute(); - void _wait(); - double _get_prev_exec_time(); - - void clear_device_memory(); - - std::vector> - _update_static_alloc_plan_and_get_size(); - - std::string _to_json_str(); - - /*! - * \brief find all Host2DeviceCopy input vars that are mutable (i.e. - * used as func args) - */ - mgb::SymbolVarArray _find_mutable_input(); - - Core* core() const; - - void set_multi_part_par_graph(std::shared_ptr g) { - m_multi_part_par_graph = std::move(g); - } - - private: - std::shared_ptr m_core; - //! parent graph in multi-part compiling - std::shared_ptr m_multi_part_par_graph; -}; - -/*! - * \brief callback wrapper for computing graph - */ -class _CompGraphCallback { - bool m_cb_created = false, m_eager_copy = false; - AsyncExec::Core* m_ae_core = nullptr; - std::vector m_value_proxies; - - public: - /*! - * \brief set AsyncExec associated with this callback; if it is set, - * eager value copy would be enabled - */ - void set_async_exec(const AsyncExec &ae); - - /*! - * \brief set whether enabling eager copy - * - * If eager copy is enabled, host to device copy would start immediately - * and asynchronously when this callback is executed by megbrain - */ - void set_eager_copy(bool flag); - - virtual ~_CompGraphCallback() = default; - - std::function &)> make_multi_input_callback(); - std::function make_callback(); - - /*! - * \brief call python callback - */ - void call_pycb(); - - /*! - * \brief python callback to be overwritten - */ - virtual void call(std::vector&) = 0; -}; - -/*! - * \brief wrap around shared mgb::ComputingGraph - */ -class CompGraph { - class PyUserData; - - mgb::SmallVector m_out_specs; - //! (callback, output spec part) - mgb::SmallVector> m_raw_callbacks; - - std::shared_ptr m_comp_graph_own; - std::weak_ptr m_comp_graph_borrow; - - explicit CompGraph(const std::shared_ptr& cg) - : m_comp_graph_own{cg} {} - - explicit CompGraph(const std::weak_ptr &cg): - m_comp_graph_borrow{cg} - {} - - public: - - CompGraph(): - m_comp_graph_own(mgb::ComputingGraph::make()) - {} - - // A mgb::cg::ComputingGraph may be wrapped in a CompGraph in two ways: - // 1. Borrowing a ComputingGraph. - // 2. Own a shared_ptr of ComputingGraph. - // We make constructors private and use factory function instead to make - // it explicit at the call site. (So-called "Named Constructor") - - /*! - * \brief Wrap a ComputingGraph by borrowing a reference. - */ - static CompGraph make_from_weak_ptr( - const std::weak_ptr& cg) { - return CompGraph{cg}; - } - - /*! - * \brief Wrap a ComputingGraph by owning one of its reference. - */ - static CompGraph make_from_shared_ptr( - const std::shared_ptr& cg) { - return CompGraph{cg}; - } - - CompGraph(const mgb::cg::SymbolVarArray& dest_symbol_vars) { - m_comp_graph_own = mgb::ComputingGraph::make(); - mgb::cg::replace_vars_comp_graph(dest_symbol_vars, - m_comp_graph_own.get()); - } - - void clear_device_memory(); - - //! get underlying ComputingGraph instance - mgb::ComputingGraph& get() const; - - CompGraph& share_device_memory_with(CompGraph &other) { - get().share_device_memory_with(other.get()); - return *this; - } - - //! get a dict to store arbitrary user data - PyObject* _user_data(); - - AsyncExec _do_compile(bool copy, bool optimize_for_inference); - std::vector _do_compile_multi_part(); - - /*! - * \brief add an output spec - * \param callback callback to be invoked; or nullptr for computing - * output var only - */ - void _add_output_spec(mgb::cg::SymbolVar &var, - _CompGraphCallback *callback); - - //! mark currently added output specs as a part in multi-part compile - void _add_multi_part_endpoint() { - m_out_specs.emplace_back(); - } - - void _clear_output_spec() { - m_raw_callbacks.clear(); - m_out_specs.resize(1); - m_out_specs[0].clear(); - } - - size_t _release() { - if (m_comp_graph_own) { - auto ret = m_comp_graph_own.use_count(); - m_comp_graph_own.reset(); - return ret; - } - m_comp_graph_borrow.reset(); - return 0; - } - -}; - -//! wrap shared_ptr -class SharedScalar { - bool m_dtype_locked = false; - std::shared_ptr m_val; - mgb::HostTensorND m_val_as_host_nd; - mgb::CompNode::UnorderedMap> m_dev_val; - - mgb::HostTensorND& val_as_host_nd(); - - public: - SharedScalar(PyObject *val); - void _set(PyObject *val); - PyObject* _get(); - mgb::SymbolVar _as_sym_var(CompGraph &cg, mgb::CompNode &cn); - - void _lock_dtype() { - m_dtype_locked = true; - } - - bool _dtype_locked() { - return m_dtype_locked; - } - - const std::shared_ptr& get_val() const { - return m_val; - } -}; - -/*! - * \brief wrap around shared mgb::cg::OperatorNodeBase - */ -class Operator { - mgb::cg::OperatorNodeBase* m_operator_node; - std::string m_params; - - static const std::unique_ptr sm_opr_footprint_ptr; - -public: - Operator() : m_operator_node(nullptr){}; - Operator(mgb::cg::OperatorNodeBase* operator_node) - : m_operator_node(operator_node), - m_params(std::move( - (sm_opr_footprint_ptr->calc_footprint(m_operator_node)).param->to_string())) - {} - - size_t id() const { return m_operator_node->id(); } - - const std::string& name() const { return m_operator_node->name(); } - - const std::string& params() const { return m_params; } - - const std::shared_ptr get_owner_graph() const { - return m_operator_node->owner_graph()->shared_from_this(); - } - - const mgb::SymbolVarArray inputs() const { - return mgb::cg::to_symbol_var_array(m_operator_node->input()); - } - - const mgb::SymbolVarArray outputs() const { - return mgb::cg::to_symbol_var_array(m_operator_node->output()); - } - - mgb::cg::OperatorNodeBase* node() const { return m_operator_node; } -}; - -//! get inferred value as numpy ndarray or None -PyObject* get_symvar_inferred_value(mgb::SymbolVar var); - -mgb::SymbolVar fill_retain_dtype(mgb::SymbolVar var, PyObject* value); - -//! whether _mgb_global_finalize() has been called -bool global_finalized(); - -#ifndef SWIG -void mark_as_input(mgb::cg::ComputingGraph* cg, mgb::cg::SymbolVar var); -#endif - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/numpy_incl.h b/python_module/src/cpp/numpy_incl.h deleted file mode 100644 index 02a2b693..00000000 --- a/python_module/src/cpp/numpy_incl.h +++ /dev/null @@ -1,37 +0,0 @@ -/** - * \file python_module/src/cpp/numpy_incl.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief import numpy array with proper settings - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ -#pragma once - -#define PY_ARRAY_UNIQUE_SYMBOL mgb_numpy_array_api -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include - -#define FOREACH_MGB_LOW_BIT(cb) \ - cb(1) \ - cb(2) \ - cb(4) \ - -#define FOREACH_MGB_DTYPE_PAIR(cb) \ - cb(IntB1, npy_num_intb1()) \ - cb(IntB2, npy_num_intb2()) \ - cb(IntB4, npy_num_intb4()) \ - cb(BFloat16, npy_num_bfloat16()) - -namespace mgb { - //! numpy type num for intb2 type -#define DEFINE_NPY_INTBX(n) \ - int npy_num_intb##n(); -FOREACH_MGB_LOW_BIT(DEFINE_NPY_INTBX) -#undef DEFINE_NPY_INTBX - int npy_num_bfloat16(); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/opr_defs.cpp b/python_module/src/cpp/opr_defs.cpp deleted file mode 100644 index 1fd4dbbb..00000000 --- a/python_module/src/cpp/opr_defs.cpp +++ /dev/null @@ -1,313 +0,0 @@ -/** - * \file python_module/src/cpp/opr_defs.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./opr_defs.h" -#include "./opr_helper.h" -#include "./python_helper.h" - -#if MGB_ENABLE_OPR_MM -#include "megbrain/opr/mm_handler.h" -#endif - -#include "megbrain/opr/io.h" -#include "megbrain/serialization/extern_c_opr_io.h" - -using namespace mgb; -using namespace mgb::opr; - -SymbolVar _Opr::_axis_add_remove(SymbolVar src, - const std::vector& axis, bool is_add, - const OperatorNodeConfig &config) { - using ADR = mgb::opr::AxisAddRemove; - std::vector desc; - mgb_assert(!axis.empty()); - for (auto i: axis) { - if (is_add) { - desc.emplace_back(ADR::AxisDesc::make_add(i)); - } else { - desc.emplace_back(ADR::AxisDesc::make_remove(i)); - } - } - return ADR::make(src, desc, config); -} - -SymbolVarArray _Opr::param_pack_split( - SymbolVar src, const std::vector>& shapes, - const OperatorNodeConfig& config) { - auto size = shapes.size(); - mgb::TensorShapeArray shapearr(size); - for (size_t i = 0; i < size; i++) { - shapearr[i] = npy::vec2shape(shapes[i]); - } - - auto cn = src.node()->comp_node(); - auto offsets = megdnn::ParamPackConcat::gen_offsets( - shapearr, cn.get_mem_addr_alignment(), src.dtype().size()); - - return mgb::opr::ParamPackSplit::make(src, offsets, shapearr, config); -} - -#if MGB_ENABLE_OPR_MM -#include "megbrain/opr/lock.h" -#include "megbrain/opr/io_remote.h" - -SymbolVar _Opr::lock_acquire(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config) { - return mgb::opr::LockAcquire::make(var, {lock_id, group_id}, config); -} - -SymbolVar _Opr::lock_release(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config) { - return mgb::opr::LockRelease::make(var, {lock_id, group_id}, config); -} - -SymbolVar _Opr::remote_send( - const std::string& server_addr, const int port, - const std::string& key, SymbolVar var, - const bool is_grad, - const OperatorNodeConfig& config) { - return RemoteSend::make(key, var, - std::make_shared(ssprintf( - "%s:%d", server_addr.c_str(), port)), - is_grad, config); -} - -SymbolVar _Opr::remote_recv(const std::string& server_addr, const int port, - const std::string& key, CompGraph& graph, - const std::vector& shape, PyObject* dtype, - const OperatorNodeConfig& config) { - const TensorShape ishape = npy::vec2shape(shape); - const DType idtype = npy::dtype_np2mgb(dtype); - - return RemoteRecv::make(key, graph.get(), - std::make_shared( - ssprintf("%s:%d", server_addr.c_str(), port)), - config, ishape, idtype); -} - -SymbolVar _Opr::collective_comm_with_input( - SymbolVar inpvar, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable) { - SymbolVarArray inputs(1, inpvar); - ComputingGraph* graph = inpvar.node()->owner_graph(); - auto group_mgr = std::make_shared( - ssprintf("%s:%d", server_addr.c_str(), port)); - SmallVector> dev_buffer_arr(1, nullptr); - if (output_buf) - dev_buffer_arr[0] = output_buf->dev_tensor(); - CollectiveComm::Param param = load_collective_comm_params(params, graph); - mgb::DType _dtype = DType(); - if (dtype != Py_None) { - _dtype = npy::dtype_np2mgb(dtype); - } - return CollectiveComm::make(inputs, graph, key, nr_devices, is_root, rank, - local_grad, group_mgr, dev_buffer_arr, param, - _dtype, backend, config, disable.get_val())[0]; -} - -SymbolVar _Opr::collective_comm_without_input( - CompGraph& cg, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable) { - SymbolVarArray inputs; - auto& graph = cg.get(); - auto group_mgr = std::make_shared( - ssprintf("%s:%d", server_addr.c_str(), port)); - SmallVector> dev_buffer_arr(1, nullptr); - if (output_buf) - dev_buffer_arr[0] = output_buf->dev_tensor(); - CollectiveComm::Param param = load_collective_comm_params(params, &graph); - mgb::DType _dtype = DType(); - if (dtype != Py_None) { - _dtype = npy::dtype_np2mgb(dtype); - } - return CollectiveComm::make(inputs, &graph, key, nr_devices, is_root, rank, - local_grad, group_mgr, dev_buffer_arr, param, - _dtype, backend, config, disable.get_val())[0]; -} - -#else -namespace { - [[noreturn]] void on_opr_mm() { - mgb_throw(MegBrainError, "opr-mm disabled at compile time"); - } -} -SymbolVar _Opr::lock_acquire(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config) { - on_opr_mm(); -} - -SymbolVar _Opr::lock_release(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config) { - on_opr_mm(); -} - - -SymbolVar _Opr::remote_send( - const std::string& server_addr, const int port, - const std::string& key, SymbolVar var, - const bool is_grad, - const OperatorNodeConfig& config) { - on_opr_mm(); -} - -SymbolVar _Opr::remote_recv(const std::string& server_addr, const int port, - const std::string& key, CompGraph& graph, - const std::vector& shape, PyObject* dtype, - const OperatorNodeConfig& config) { - on_opr_mm(); -} - -SymbolVar _Opr::collective_comm_with_input( - SymbolVar inpvar, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable) { - on_opr_mm(); -} - -SymbolVar _Opr::collective_comm_without_input( - CompGraph& cg, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable) { - on_opr_mm(); -} - -#endif // MGB_ENABLE_OPR_MM - -SymbolVarArray _Opr::extern_c_opr_placeholder( - const SymbolVarArray& inputs, - const std::vector>& output_shapes, - PyObject* output_dtypes, const char* dump_name, PyObject* data_bytes, - const OperatorNodeConfig& config) { - mgb_assert(PyBytes_Check(data_bytes)); - if (output_dtypes != Py_None) { - mgb_assert(PyTuple_Check(output_dtypes)); - mgb_assert(output_shapes.size() == - static_cast(PyTuple_Size(output_dtypes))); - } - - TensorShapeArray cpp_output_shapes(output_shapes.size()); - for (size_t i = 0; i < output_shapes.size(); ++i) { - cpp_output_shapes[i] = npy::vec2shape(output_shapes[i]); - } - SmallVector cpp_output_dtypes; - if (output_dtypes != Py_None) { - size_t dtype_size = PyTuple_Size(output_dtypes); - for (size_t i = 0; i < dtype_size; ++i) { - cpp_output_dtypes.push_back( - npy::dtype_np2mgb(PyTuple_GetItem(output_dtypes, i))); - } - } - - auto opr = opr::ExternCOprRunner::make_placeholder( - inputs, cpp_output_shapes, dump_name, PyBytes_AsString(data_bytes), - PyBytes_Size(data_bytes), config, cpp_output_dtypes); - SymbolVarArray ret; - ret.reserve(opr->output().size()); - for (auto i: opr->output()) - ret.emplace_back(i); - return ret; -} - -#if MGB_ENABLE_TENSOR_RT - -#include "megbrain/tensorrt/tensorrt_runtime_opr.h" - -SymbolVarArray _Opr::tensor_rt_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config) { - mgb_assert(PyBytes_Check(data_bytes)); - auto size = PyBytes_Size(data_bytes); - mgb_assert(size, "trt data bytes should not be empty"); - return opr::TensorRTRuntimeOpr::make(PyBytes_AsString(data_bytes), - size, inputs, - config); -} -#else -SymbolVarArray _Opr::tensor_rt_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config) { - mgb_throw(MegBrainError, "TensorRT disabled at compile time"); -} -#endif - -#if MGB_ATLAS - -#include "megbrain/opr/atlas_runtime_op.h" - -SymbolVarArray _Opr::atlas_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config) { - mgb_assert(PyBytes_Check(data_bytes)); - auto size = PyBytes_Size(data_bytes); - mgb_assert(size, "atlas data bytes should not be empty"); - - return opr::AtlasRuntimeOpr::make(PyBytes_AsString(data_bytes), size, - inputs, config); -} -#else -SymbolVarArray _Opr::atlas_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config) { - mgb_throw(MegBrainError, "Atlas disabled at compile time"); -} -#endif - -SymbolVar _Opr::timestamp(SymbolVar input, PyObject* dest, size_t dest_off, - const OperatorNodeConfig& config) { - auto tensor = std::make_shared( - npy::np2tensor(dest, npy::Meth::must_borrow(), dtype::Float32{})); - return opr::Timestamp::make(input, std::move(tensor), dest_off, config); -} - -SymbolVar _Opr::virtual_loss(const SymbolVarArray& ys, - const SymbolVarArray& y_grads, - const OperatorNodeConfig& config) { - return opr::VirtualLoss::make(ys, y_grads, {}, config); -} - -SymbolVar _Opr::virtual_dep(const SymbolVarArray& symvars, - const OperatorNodeConfig& config) { - return opr::VirtualDep::make(symvars, config); -} - - -#if MGB_CAMBRICON -#include "megbrain/cambricon/cambricon_runtime_opr.h" - -SymbolVarArray _Opr::cambricon_runtime(PyObject* data_bytes, const char* symbol, - const SymbolVarArray& inputs, - bool tensor_dim_mutable, - const OperatorNodeConfig& config) { - mgb_assert(PyBytes_Check(data_bytes)); - auto size = PyBytes_Size(data_bytes); - mgb_assert(size, "cambricon data bytes should not be empty"); - return opr::CambriconRuntimeOpr::make(PyBytes_AsString(data_bytes), size, - symbol, inputs, tensor_dim_mutable, - config); -} -#else -SymbolVarArray _Opr::cambricon_runtime(PyObject* data_bytes, const char* symbol, - const SymbolVarArray& inputs, - bool tensor_dim_mutable, - const OperatorNodeConfig& config) { - mgb_throw(MegBrainError, "Cambricon disabled at compile time"); -} -#endif - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/opr_defs.h b/python_module/src/cpp/opr_defs.h deleted file mode 100644 index 29a70c5f..00000000 --- a/python_module/src/cpp/opr_defs.h +++ /dev/null @@ -1,170 +0,0 @@ -/** - * \file python_module/src/cpp/opr_defs.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief extra opr definitions - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#ifndef SWIG -#pragma once - -#include "./megbrain_wrap.h" -#include "./opr_helper.h" - -#if MGB_ENABLE_OPR_MM -#include "megbrain/opr/collective_comm.h" -#endif -#include "megbrain/opr/basic_arith.h" -#include "megbrain/opr/tensor_manip.h" -using mgb::SymbolVar; -using mgb::SymbolVarArray; -using mgb::OperatorNodeConfig; - -#endif - -class _Opr { - -public: - -// basic arith - -static SymbolVar add_update(SymbolVar dest, SymbolVar delta, - const SharedScalar &alpha, const SharedScalar &beta, - const SharedScalar &bias, const SharedScalar &disable, - const OperatorNodeConfig &config) { - return mgb::opr::AddUpdate::make(dest, delta, - {alpha.get_val(), beta.get_val(), bias.get_val(), disable.get_val()}, - config); -} - -// tensor manip - -static SymbolVarArray param_pack_split( - SymbolVar src, const std::vector>& shapes, - const OperatorNodeConfig& config); - -static SymbolVar dimshuffle(SymbolVar src, - const std::vector &pattern, size_t ndim, - const OperatorNodeConfig &config) { - return mgb::opr::Dimshuffle::make(src, pattern, ndim, config); -} - -static SymbolVar _axis_add_remove(SymbolVar src, - const std::vector& axis, bool is_add, - const OperatorNodeConfig &config); - -static SymbolVar callback_injector(SymbolVar src, _CompGraphCallback &callback, - const OperatorNodeConfig &config) { - return mgb::opr::CallbackInjector::make(src, callback.make_callback()); -} - -static SymbolVar callback_injector(SymbolVarArray src, _CompGraphCallback &callback, - const OperatorNodeConfig &config) { - return mgb::opr::CallbackInjector::make(src, callback.make_multi_input_callback()); -} - -static SymbolVar set_grad(SymbolVar src, _SetGradCallback &grad_getter, - const OperatorNodeConfig &config) { - return mgb::opr::SetGrad::make(src, grad_getter.make_callback(), config); -} - -// multi machine - -static SymbolVar lock_acquire(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config); - -static SymbolVar lock_release(SymbolVar var, size_t lock_id, size_t group_id, - const OperatorNodeConfig &config); - -static SymbolVar remote_send( - const std::string& server_addr, const int port, - const std::string& key, SymbolVar var, - const bool is_grad, - const OperatorNodeConfig& config); - -static SymbolVar remote_recv(const std::string& server_addr, const int port, - const std::string& key, - CompGraph& graph, - const std::vector& shape, PyObject* dtype, - const OperatorNodeConfig& config); - -static SymbolVar collective_comm_with_input( - SymbolVar inpvar, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable); - -static SymbolVar collective_comm_without_input( - CompGraph& graph, const std::string& key, const size_t nr_devices, - const bool is_root, const int rank, const bool local_grad, - const std::string& server_addr, const int port, PyObject* params, - PyObject* dtype, const std::string& backend, SharedND* output_buf, - const OperatorNodeConfig& config, const SharedScalar& disable); - -// misc -static SymbolVarArray extern_c_opr_placeholder( - const SymbolVarArray& inputs, - const std::vector>& output_shapes, - PyObject* dtypes, - const char* dump_name, PyObject* data_bytes, - const OperatorNodeConfig& config); - -static SymbolVarArray tensor_rt_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config); - - - -static SymbolVar timestamp(SymbolVar input, PyObject* dest, size_t dest_off, - const OperatorNodeConfig& config); - -static SymbolVar virtual_loss(const SymbolVarArray& ys, - const SymbolVarArray& y_grads, - const OperatorNodeConfig& config); - -static SymbolVar virtual_dep(const SymbolVarArray& symvars, - const OperatorNodeConfig& config); - -static SymbolVarArray atlas_runtime(const SymbolVarArray& inputs, - PyObject* data_bytes, - const OperatorNodeConfig& config); - - -static SymbolVarArray cambricon_runtime(PyObject* data_bytes, - const char* symbol, - const SymbolVarArray& inputs, - bool tensor_dim_mutable, - const OperatorNodeConfig& config); - -#ifdef SWIG -%pythoncode { - -@classmethod -def _make_axis_vec(cls, axis): - ret = _VectorInt() - if isinstance(axis, collections.Iterable): - for i in axis: - ret.push_back(i) - else: - ret.push_back(axis) - return ret - -@classmethod -def add_axis(cls, src, axis, config): - return cls._axis_add_remove(src, cls._make_axis_vec(axis), True, config) - -@classmethod -def remove_axis(cls, src, axis, config): - return cls._axis_add_remove(src, cls._make_axis_vec(axis), False, config) - -} // %pythoncode -#endif // SWIG - -}; - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/opr_helper.cpp b/python_module/src/cpp/opr_helper.cpp deleted file mode 100644 index 0baa47c2..00000000 --- a/python_module/src/cpp/opr_helper.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/** - * \file python_module/src/cpp/opr_helper.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./opr_helper.h" -#include "./megbrain_wrap.h" -#include "megbrain/opr/indexing.h" -#include "megbrain/opr/io.h" -#include "megbrain/serialization/opr_load_dump.h" - -using namespace mgb; - -namespace { - class OprParamsLoadContext final: public serialization::OprLoadContextRawPOD { - PyObject *m_params; - ComputingGraph *m_graph; - size_t m_nr_used_params = 0, m_param_size = 0; - size_t m_item_bytes_consumed = 0; - - void read_raw(void *dest, size_t size) override final { - mgb_assert(m_nr_used_params < m_param_size); - auto item = PyList_GetItem(m_params, m_nr_used_params); - mgb_assert(item, "failed to get item %zu", m_nr_used_params); - mgb_assert(PyBytes_Check(item), "list item must be bytes"); - auto item_size = PyBytes_Size(item); - mgb_assert(size < (SIZE_MAX >> 3)); - mgb_assert(m_item_bytes_consumed + size <= size_t(item_size)); - auto item_buf = PyBytes_AsString(item); - mgb_assert(item_size > 0 && item_buf); - memcpy(dest, item_buf + m_item_bytes_consumed, size); - m_item_bytes_consumed += size; - if (m_item_bytes_consumed == size_t(item_size)) { - ++ m_nr_used_params; - m_item_bytes_consumed = 0; - } - } - - std::shared_ptr load_tensor() override { - mgb_assert(0); - } - - std::shared_ptr load_tensor_shared() override { - mgb_assert(0); - } - - const serialization::GraphLoadConfig& config() const override { - mgb_assert(0); - } - - public: - OprParamsLoadContext(PyObject *params, ComputingGraph *graph): - m_params{params}, m_graph{graph} - { - mgb_assert(PyList_Check(params), "params must be a list"); - m_param_size = PyList_Size(params); - } - - ~OprParamsLoadContext() { - mgb_assert(m_nr_used_params == m_param_size, - "number of params mismatch"); - } - - ComputingGraph& graph() override { - return *m_graph; - } - }; -} // anonymous namespace - -_SplitPartCallback::callback_t _SplitPartCallback::make_callback() { - mgb_assert(!m_cb_created); - m_cb_created = true; - - std::shared_ptr<_SplitPartCallback> cb_ptr(this); - - auto cb = [cb_ptr](size_t sz) { - return cb_ptr->call(sz); - }; - - return cb; -} - -_SetGradCallback::callback_t _SetGradCallback::make_callback() { - mgb_assert(!m_cb_created); - m_cb_created = true; - - if (empty()) { - return {}; - } - - std::shared_ptr<_SetGradCallback> cb_ptr(this); - - auto cb = [cb_ptr](const opr::SetGrad& opr) { - auto graph = CompGraph::make_from_weak_ptr( - opr.owner_graph()->shared_from_this()); - return cb_ptr->call(graph); - }; - - return cb; -} - -_TimeoutCallback::callback_t _TimeoutCallback::make_callback() { - mgb_assert(!m_cb_created); - m_cb_created = true; - - std::shared_ptr<_TimeoutCallback> cb_ptr(this); - auto cb = [cb_ptr]() { - return cb_ptr->call(); - }; - return cb; -} - -mgb::SymbolVar _create_subtensor_like_opr( - const std::string &name, - const SymbolVarArray& inputs, - const std::vector &idx, - const mgb::OperatorNodeConfig &config) { -#define CHK1(_name, _opr) \ - if (name == _name) { \ - mgb_assert(inputs.size() == 1); \ - return opr::_opr::make(inputs[0], idx, config); \ - } -#define CHK2(_name, _opr) \ - if (name == _name) { \ - mgb_assert(inputs.size() == 2); \ - return opr::_opr::make(inputs[0], inputs[1], idx, config); \ - } - - CHK1("subtensor", Subtensor); - CHK2("set_subtensor", SetSubtensor); - CHK2("incr_subtensor", IncrSubtensor); - CHK1("mavi", IndexingMultiAxisVec); - CHK2("set_mavi", IndexingSetMultiAxisVec); - CHK2("incr_mavi", IndexingIncrMultiAxisVec); - CHK1("mesh_indexing", MeshIndexing); - CHK1("batched_mesh_indexing", BatchedMeshIndexing); - CHK2("incr_mesh_indexing", IncrMeshIndexing); - CHK2("set_mesh_indexing", SetMeshIndexing); - CHK2("batched_incr_mesh_indexing", BatchedIncrMeshIndexing); - CHK2("batched_set_mesh_indexing", BatchedSetMeshIndexing); - - mgb_throw(MegBrainError, "bad subtensor opr name: %s", name.c_str()); - -#undef CHK1 -#undef CHK2 -} - -SymbolVar _make_immutable(CompGraph &comp_graph, PyObject *npyarr, - PyObject *dtype, const mgb::cg::OperatorNodeConfig &config) { - - auto cn = config.get_single_comp_node(); - mgb_assert(cn.valid(), "invalid comp node given to make_tensor"); - DType dtype_mgb; - if (dtype && dtype != Py_None) - dtype_mgb = npy::dtype_np2mgb(dtype); - auto hv = npy::np2tensor(npyarr, npy::Meth::borrow(cn), dtype_mgb); - return opr::ImmutableTensor::make(comp_graph.get(), hv, config); -} - -SymbolVarArray _create_opr( - const char *name, const SymbolVarArray &inputs, - PyObject *params, const OperatorNodeConfig &config) { - mgb_assert(!inputs.empty()); - auto registry = serialization::OprRegistry::find_by_name(name); - mgb_assert(registry, "operator %s not found", name); - OprParamsLoadContext ctx{params, inputs[0].node()->owner_graph()}; - VarNodeArray vinputs(inputs.size()); - for (size_t i = 0; i < inputs.size(); ++ i) - vinputs[i] = inputs[i].node(); - auto opr = registry->loader(ctx, vinputs, config); - - SymbolVarArray ret; - for (auto i: opr->output()) { - if (!i->contain_flag(VarNode::Flag::VOLATILE_CONTENT)) - ret.push_back(i); - } - return ret; -} - -#if MGB_ENABLE_OPR_MM -mgb::opr::CollectiveComm::Param load_collective_comm_params( - PyObject* params, mgb::ComputingGraph* graph) { - OprParamsLoadContext ctx{params, graph}; - return ctx.read_param(); -} -#endif - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/opr_helper.h b/python_module/src/cpp/opr_helper.h deleted file mode 100644 index 15b49d5a..00000000 --- a/python_module/src/cpp/opr_helper.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * \file python_module/src/cpp/opr_helper.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief helper for wrapping special oprs - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#pragma once - -#include "./megbrain_wrap.h" - -#include "megbrain/opr/tensor_manip.h" -#include "megbrain/opr/utility.h" -#if MGB_ENABLE_OPR_MM -#include "megbrain/opr/collective_comm.h" -#endif -using AxisIndexer = mgb::opr::indexing::AxisIndexer; - -/*! - * \brief wrapping callbacks used for opr::Split::Options::make_callback - */ -class _SplitPartCallback { - bool m_cb_created = false; - - public: - virtual ~_SplitPartCallback() = default; - virtual std::vector call(size_t tot_size) = 0; - - using callback_t = mgb::opr::Split::Options::callback_t; - callback_t make_callback(); -}; - -class _SetGradCallback { - bool m_cb_created = false; - - public: - virtual ~_SetGradCallback() = default; - virtual mgb::SymbolVar call(CompGraph &graph) = 0; - virtual bool empty() = 0; - - using callback_t = mgb::opr::SetGrad::GradGetter; - callback_t make_callback(); -}; - -/*! - * \brief wrapping callbacks used for subclasses of opr::RemoteIOBase - */ -class _TimeoutCallback { - bool m_cb_created = false; - - public: - virtual ~_TimeoutCallback() = default; - /*! - * \brief Will be overrided by swig generated code, calls into Python. - */ - virtual bool call() = 0; - - using callback_t = mgb::thin_function; - callback_t make_callback(); -}; - -#if MGB_ENABLE_OPR_MM -mgb::opr::CollectiveComm::Param load_collective_comm_params( - PyObject* params, mgb::ComputingGraph* graph); -#endif - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/plugin.cpp b/python_module/src/cpp/plugin.cpp deleted file mode 100644 index 5ca4df44..00000000 --- a/python_module/src/cpp/plugin.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/** - * \file python_module/src/cpp/plugin.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief helpers for debugging - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./plugin.h" -#include "./python_helper.h" - -#include "megbrain/system.h" - -#include -#include -#include - -#ifdef WIN32 -#include -#else -#include -#include -#endif -#include - -/* ================= _InfkernFinderImpl ================= */ -size_t _InfkernFinderImpl::sm_id = 0; - -_InfkernFinderImpl::_InfkernFinderImpl(CompGraph &cg, bool record_input_value): - m_id{sm_id ++}, - m_comp_graph{cg.get().shared_from_this()}, - m_finder{m_comp_graph.get(), record_input_value} -{ -} - -size_t _InfkernFinderImpl::_write_to_file(const char *fpath) { - auto opr = m_finder.write_to_file(fpath); - if (opr) - return opr->id() + 1; - return 0; -} - -size_t _InfkernFinderImpl::_get_input_values_prepare(size_t opr_id) { - m_inp_val = m_finder.get_input_values(opr_id); - return m_inp_val.size(); -} - -const char* _InfkernFinderImpl::_get_input_values_var_name(size_t idx) { - return m_inp_val.at(idx).first->cname(); -} - -size_t _InfkernFinderImpl::_get_input_values_var_idx(size_t idx) { - return m_inp_val.at(idx).first->id(); -} - -size_t _InfkernFinderImpl::_get_input_values_run_id(size_t idx) { - return m_inp_val.at(idx).second.run_id; -} - -CompGraphCallbackValueProxy _InfkernFinderImpl::_get_input_values_val(size_t idx) { - return CompGraphCallbackValueProxy::make_raw_host_value_proxy( - m_inp_val.at(idx).second.val); -} - -std::string _InfkernFinderImpl::__repr__() { - return mgb::ssprintf( - "_InfkernFinderImpl(%zu,graph=%p)", m_id, m_comp_graph.get()); -} - -/* ================= _FastSignal ================= */ - -class _FastSignal::Impl { - using HandlerCallback = std::function; - bool m_worker_started = false; - std::mutex m_mtx; - std::thread m_worker_hdl; -#ifdef WIN32 - SECURITY_ATTRIBUTES win_sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; - HANDLE pipe_r, pipe_w; - DWORD bytes_r_w; -#else - int m_pfd[2]; //! pipe fds; write signal handlers, -1 for exit -#endif - std::unordered_map m_handler_callbacks; - - void worker() { - std::ostringstream oss; - oss << std::this_thread::get_id() << std::endl; - mgb_log("fast signal worker started in thread %s", oss.str().c_str()); - mgb::sys::set_thread_name("fastsgl"); - int signum; - for (;;) { -#ifdef WIN32 - if (ReadFile(pipe_r, &signum, sizeof(int), &bytes_r_w, NULL) == - NULL) { -#else - if (read(m_pfd[0], &signum, sizeof(int)) != sizeof(int)) { -#endif - if (errno == EINTR) - continue; - mgb_log_error("fast signal worker: " - "failed to read from self pipe: %s", - strerror(errno)); - return; - } - std::exception_ptr exc_ptr; - if (signum == -1) - return; - try { - HandlerCallback *cb; - { - MGB_LOCK_GUARD(m_mtx); - cb = &m_handler_callbacks.at(signum); - } - (*cb)(); - } MGB_CATCH_ALL_EXCEPTION("fast signal worker", exc_ptr); - } - } - - void setup() { - if (m_worker_started) - return; - -#ifdef WIN32 - if (!CreatePipe(&pipe_r, &pipe_w, &win_sa, 0)) { - throw mgb::MegBrainError(mgb::ssprintf("failed to create pipe: %s", - strerror(errno))); - } -#else - if (pipe(m_pfd)) { - throw mgb::MegBrainError(mgb::ssprintf("failed to create pipe: %s", - strerror(errno))); - } -#endif - std::thread t(std::bind(&Impl::worker, this)); - m_worker_hdl.swap(t); - m_worker_started = true; - } - - void write_pipe(int v) { - mgb_assert(m_worker_started); -#ifdef WIN32 - if (WriteFile(pipe_w, &v, sizeof(int), &bytes_r_w, NULL) == NULL) { -#else - if (write(m_pfd[1], &v, sizeof(int)) != sizeof(int)) { -#endif - mgb_log_error("fast signal: failed to write to self pipe: %s", - strerror(errno)); - } - } - - public: - bool worker_started() const { - return m_worker_started; - } - - void register_handler(int signum, PyObject *func) { - setup(); - - { - PYTHON_GIL; - mgb_assert(PyCallable_Check(func)); - Py_INCREF(func); - } - auto deleter = [](PyObject *f){ - PYTHON_GIL; - Py_DECREF(f); - }; - std::shared_ptr funcptr(func, deleter); - - auto callback = [funcptr]() { - PYTHON_GIL; - auto func = funcptr.get(); - auto ret = PyObject_CallObject(func, nullptr); - mgb_assert(ret, "failed to call pyobj %p; repr=%s", - func, PyUnicode_AsUTF8(PyObject_Repr(func))); - Py_DECREF(ret); - }; - - MGB_LOCK_GUARD(m_mtx); - m_handler_callbacks[signum] = callback; - } - - void shutdown() { - MGB_LOCK_GUARD(m_mtx); - if (!m_worker_started) - return; - write_pipe(-1); - m_worker_hdl.join(); -#ifdef WIN32 - CloseHandle(pipe_r); - CloseHandle(pipe_w); -#else - close(m_pfd[0]); - close(m_pfd[1]); -#endif - m_handler_callbacks.clear(); - m_worker_started = false; - } - - void signal_hander(int signum) { - write_pipe(signum); - } - - ~Impl() { - shutdown(); - } -}; - -_FastSignal::Impl _FastSignal::sm_impl; - -void _FastSignal::signal_hander(int signum) { - if (sm_impl.worker_started()) - sm_impl.signal_hander(signum); -} - -void _FastSignal::register_handler(int signum, PyObject *func) { -#ifdef WIN32 - //! up to now we can only use CTRL_C_EVENT to unix signal.SIGUSR1/2 - //FIXME: how to coherence signal number at python side - // https://docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/signal?view=vs-2017 - mgb_assert(signum == CTRL_C_EVENT, "only allow register CTRL_C_EVENT as unix signal.SIGUSR1/2 now"); - signal(signum, signal_hander); -#else - struct sigaction action; - memset(&action, 0, sizeof(action)); - action.sa_handler = &signal_hander; - int ret = sigaction(signum, &action, nullptr); - mgb_assert(!ret, "sigaction failed: %s", strerror(errno)); -#endif - - sm_impl.register_handler(signum, func); -} - -void _FastSignal::shutdown() { - sm_impl.shutdown(); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} - diff --git a/python_module/src/cpp/plugin.h b/python_module/src/cpp/plugin.h deleted file mode 100644 index 5253a0bb..00000000 --- a/python_module/src/cpp/plugin.h +++ /dev/null @@ -1,135 +0,0 @@ -/** - * \file python_module/src/cpp/plugin.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief helpers for debugging - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - - -#ifndef SWIG - -#pragma once - -#include "./megbrain_wrap.h" - -#include "megbrain/plugin/profiler.h" -#include "megbrain/plugin/infkern_finder.h" -#include "megbrain/plugin/num_range_checker.h" -#include "megbrain/plugin/opr_io_dump.h" - -#endif // SWIG - -#include - -class _CompGraphProfilerImpl { -#ifndef SWIG - std::shared_ptr m_comp_graph; - mgb::GraphProfiler m_profiler; -#endif - - public: - _CompGraphProfilerImpl(CompGraph &cg): - m_comp_graph{cg.get().shared_from_this()}, - m_profiler{m_comp_graph.get()} - { - } - - std::string _get_result() { - auto json = m_profiler.to_json_full( - m_comp_graph->current_comp_seq()); - return json->to_string(); - } -}; - -class _NumRangeCheckerImpl { -#ifndef SWIG - std::shared_ptr m_comp_graph; - mgb::NumRangeChecker m_checker; -#endif - - public: - _NumRangeCheckerImpl(CompGraph &cg, float range): - m_comp_graph{cg.get().shared_from_this()}, - m_checker{m_comp_graph.get(), range} - { - } -}; - -class _TextOprIODumpImpl { -#ifndef SWIG - std::shared_ptr m_comp_graph; - mgb::TextOprIODump m_dump; -#endif - - public: - _TextOprIODumpImpl(CompGraph &cg, const char *fpath): - m_comp_graph{cg.get().shared_from_this()}, - m_dump{m_comp_graph.get(), fpath} - { - } - - void _print_addr(bool flag) { - m_dump.print_addr(flag); - } - - void _max_size(size_t size) { - m_dump.max_size(size); - } -}; - -class _BinaryOprIODumpImpl { -#ifndef SWIG - std::shared_ptr m_comp_graph; - mgb::BinaryOprIODump m_dump; -#endif - - public: - _BinaryOprIODumpImpl(CompGraph &cg, const char *fpath): - m_comp_graph{cg.get().shared_from_this()}, - m_dump{m_comp_graph.get(), fpath} - { - } -}; - -class _InfkernFinderImpl { -#ifndef SWIG - static size_t sm_id; - const size_t m_id; - std::shared_ptr m_comp_graph; - mgb::InfkernFinder m_finder; - mgb::InfkernFinder::InputValueRecord::FullRecord m_inp_val; -#endif - - public: - _InfkernFinderImpl(CompGraph &cg, bool record_input_value); - - size_t _write_to_file(const char *fpath); - - size_t _get_input_values_prepare(size_t opr_id); - const char* _get_input_values_var_name(size_t idx); - size_t _get_input_values_var_idx(size_t idx); - size_t _get_input_values_run_id(size_t idx); - CompGraphCallbackValueProxy _get_input_values_val(size_t idx); - - std::string __repr__(); - -}; - -class _FastSignal { -#ifndef SWIG - class Impl; - static Impl sm_impl; - - static void signal_hander(int signum); -#endif - public: - static void register_handler(int signum, PyObject *func); - static void shutdown(); -}; - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} - diff --git a/python_module/src/cpp/python_helper.cpp b/python_module/src/cpp/python_helper.cpp deleted file mode 100644 index 1cc97d7a..00000000 --- a/python_module/src/cpp/python_helper.cpp +++ /dev/null @@ -1,911 +0,0 @@ -/** - * \file python_module/src/cpp/python_helper.cpp - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief helper utilities for python integration - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#include "./python_helper.h" -#include "megbrain/graph/exc_extra_info.h" -#include "megbrain/graph/event.h" -#include "megbrain/graph/cg.h" -#include "megbrain/utils/mempool.h" - -#include "./numpy_incl.h" - -/* - * demangle typeid, see - * http://stackoverflow.com/questions/281818/unmangling-the-result-of-stdtype-infoname - */ -#ifdef __GNUG__ -#include -#include -#include - -namespace { - -std::string demangle_typeid(const char* name) { - - int status = -4; // some arbitrary value to eliminate the compiler warning - - // enable c++11 by passing the flag -std=c++11 to g++ - std::unique_ptr res { - abi::__cxa_demangle(name, nullptr, nullptr, &status), - std::free - }; - - return (status==0) ? res.get() : name ; -} -} -#else - -namespace { -// does nothing if not g++ -std::string demangle_typeid(const char* name) { - return name; -} -} - -#endif - -using namespace mgb; -using namespace cg; - -PyStackExtracter* PyStackExtracter::ins = nullptr; - -namespace { - - std::string repr_pyobj(PyObject *obj) { - if (!obj) - return ""; - PYTHON_GIL; - auto str = PyObject_Repr(obj); - if (!str) - return ssprintf("", obj); - std::string ret{PyUnicode_AsUTF8(str)}; - Py_DECREF(str); - return ret; - } - - template - std::string typeid_name(const T &t) { - return demangle_typeid(typeid(t).name()); - } - -} // anonymous namespace - -/* ============== OprPyTracker ============== */ - -class OprPyTracker::TrackerStorage final : public UserDataContainer::UserData, - public NonCopyableObj { - MGB_TYPEINFO_OBJ_DECL; - - PyObject* m_cur_tracker = nullptr; - size_t m_refcnt_to_add = 0; - SyncEventConnecter::ReceiverHandler m_opr_insert_handler; - ThinHashMap m_opr2tracker; - -public: - explicit TrackerStorage(ComputingGraph& graph) { - auto on_new_opr = [this](const event::OprInserted& ev) { - if (!ev.is_dedup && !ev.exc) { - if (m_cur_tracker) { - ++m_refcnt_to_add; - m_opr2tracker[ev.opr] = m_cur_tracker; - } - } - }; - m_opr_insert_handler = - graph.event().register_receiver(on_new_opr); - } - - ~TrackerStorage() { - if (m_cur_tracker) { - // manage refcnt of cur tracker - disable(); - } - PYTHON_GIL; - for (auto&& i : m_opr2tracker) { - Py_DecRef(i.second); - } - } - - //! get the instance - static TrackerStorage& inst(ComputingGraph& graph) { - auto make = [&graph]() { - return std::make_shared(graph); - }; - return *graph.options() - .user_data.get_user_data_or_create( - make); - } - - //! get the tracker associated with an opr, or nullptr - PyObject* get(OperatorNodeBase* opr) const { - auto iter = m_opr2tracker.find(opr); - return iter == m_opr2tracker.end() ? nullptr : iter->second; - } - - void enable(PyObject* obj) { - mgb_assert(!m_cur_tracker, - "multiple calls to begin_set_tracker() on the same graph"); - m_cur_tracker = obj; - } - - void disable() { - mgb_assert(m_cur_tracker, - "call end_set_tracker() before begin_set_tracker()"); - if (m_refcnt_to_add) { - PYTHON_GIL; - for (size_t i = 0; i < m_refcnt_to_add; ++i) { - Py_IncRef(m_cur_tracker); - } - } - m_cur_tracker = nullptr; - } -}; -MGB_TYPEINFO_OBJ_IMPL(OprPyTracker::TrackerStorage); - -void OprPyTracker::begin_set_tracker(ComputingGraph& graph, PyObject* obj) { - TrackerStorage::inst(graph).enable(obj); -} - -void OprPyTracker::end_set_tracker(ComputingGraph& graph) { - TrackerStorage::inst(graph).disable(); -} - -OprPyTracker::TrackerResult OprPyTracker::get_tracker(mgb::MegBrainError& exc) { - auto ptr = dynamic_cast(exc.extra_info()); - if (!ptr) - return {}; - return get_tracker(ptr->opr()); -} - -OprPyTracker::TrackerResult OprPyTracker::get_tracker( - mgb::cg::OperatorNodeBase* opr) { - TrackerResult ret; - mgb_assert(opr); - ret.exc_opr = opr; - opr = cg::get_opr_root_source_opr(opr); - ret.unopt_opr = opr; - - auto&& storage = TrackerStorage::inst(*opr->owner_graph()); - ret.tracker = storage.get(opr); - - { - auto&& grad_info = opr->node_prop().attribute().grad_tracker; - if (grad_info.valid()) { - ret.opr_grad_src = cg::get_opr_root_source_opr(grad_info->orig_opr); - ret.tracker_grad_src = storage.get(ret.opr_grad_src); - } - } - - return ret; -} - -PyObject* OprPyTracker::TrackerResult::as_tuple(const char *leading_msg) const { - std::string msg; - if (leading_msg) - msg = leading_msg; - - auto print_opr = [&](const char *otype, cg::OperatorNodeBase *opr) { - if (!opr) - return; - - msg += ssprintf("\n%s: id=%zu name=%s type=%s\n", - otype, opr->id(), opr->cname(), - typeid_name(*opr).c_str()); - msg += " input variables: \n"; - size_t idx = 0; - for (auto i: opr->input()) { - msg += ssprintf(" %zu: ", idx ++); - msg += cg::dump_var_info({i}); - msg += "\n"; - } - - msg += " output variables: \n"; - idx = 0; - for (auto i: opr->output()) { - msg += ssprintf(" %zu: ", idx ++); - msg += cg::dump_var_info({i}); - msg += "\n"; - } - }; - - print_opr("Associated operator", exc_opr); - if (unopt_opr != exc_opr) { - print_opr("Unoptimized equivalent of associated operator", unopt_opr); - } - print_opr("Associated operator created by taking grad of", opr_grad_src); - - PYTHON_GIL; - PyObject *py_msg = PyUnicode_FromString(msg.c_str()), - *py_tuple = PyTuple_Pack(3, py_msg, - tracker ? tracker : Py_None, - tracker_grad_src ? tracker_grad_src : Py_None); - Py_DECREF(py_msg); - return py_tuple; -} - -std::string blame(mgb::cg::OperatorNodeBase* opr) { - mgb_assert(PyMGBExceptionMaker::py_exc_class, - "Python exception class is not set yet"); - PyObject* args = OprPyTracker::get_tracker(opr).as_tuple(); - - PYTHON_GIL; - - PyObject* py_exc = PyObject_CallObject(PyMGBExceptionMaker::py_exc_class, args); - Py_DECREF(args); - mgb_assert(py_exc); - - PyObject* py_str = PyObject_Str(py_exc); - Py_DECREF(py_exc); - mgb_assert(py_str); - - int err = PyUnicode_READY(py_str); - if (err) { - Py_DECREF(py_str); - mgb_assert(!err); - } - - Py_ssize_t c_str_size; - const char* c_str = PyUnicode_AsUTF8AndSize(py_str, &c_str_size); - if (!c_str) { - Py_DECREF(py_str); - mgb_assert(c_str); - } - std::string ret(c_str, c_str_size); - Py_DECREF(py_str); - return ret; -} - -/* ============== PyMGBExceptionMaker ============== */ -PyObject *PyMGBExceptionMaker::py_exc_class = nullptr; - -void PyMGBExceptionMaker::setup_py_exception(std::exception &exc) { - mgb_assert(py_exc_class); - if (auto cbexc = dynamic_cast(&exc)) { - cbexc->restore(); - return; - } - - std::string msg; - try { - msg = ssprintf("MegBrain core throws exception: %s\n%s", - typeid_name(exc).c_str(), exc.what()); - - auto mgbexc = dynamic_cast(&exc); - OprPyTracker::TrackerResult tracker; - if (mgbexc) { - tracker = OprPyTracker::get_tracker(*mgbexc); - } - - PYTHON_GIL; - PyObject *py_exc_arg = tracker.as_tuple(msg.c_str()); - PyErr_SetObject(py_exc_class, py_exc_arg); - Py_DECREF(py_exc_arg); - } catch (std::exception &newexc) { - auto newmsg = ssprintf( - "caught exception during handling exception: %s\n%s\n" - "original message: %s", - typeid_name(newexc).c_str(), newexc.what(), - msg.c_str()); - PyErr_SetString(PyExc_RuntimeError, newmsg.c_str()); - } catch (...) { - auto newmsg = ssprintf( - "caught unknown exception during handling exception\n" - "original message: %s", msg.c_str()); - PyErr_SetString(PyExc_RuntimeError, newmsg.c_str()); - } -} - -/* ============== PyExceptionForward ============== */ - -PyExceptionForward::~PyExceptionForward() { - PYTHON_GIL; - PyObjRefKeeper::deleter(m_type); - PyObjRefKeeper::deleter(m_value); - PyObjRefKeeper::deleter(m_traceback); -} - -void PyExceptionForward::restore() { - PyErr_Restore(m_type, m_value, m_traceback); - m_type = m_value = m_traceback = nullptr; -} - -void PyExceptionForward::throw_() { - PyObject *etype, *obj, *trace; - PyErr_Fetch(&etype, &obj, &trace); - PyErr_NormalizeException(&etype, &obj, &trace); - - std::string msg{"python exception"}; - bool succ = false; - if (etype && obj && trace) { - auto run = [&]() { -#define DEF(name, expr) \ - PyObjRefKeeper name{expr}; \ - if (!name.get()) \ - return - DEF(mod, PyImport_ImportModule("traceback")); - DEF(result, PyObject_CallMethod(mod.get(), "format_exception", - "(OOO)", etype, obj, trace)); - if (!PyList_Check(result.get())) - return; - auto size = PyList_Size(result.get()); - msg.append(":\n"); - for (Py_ssize_t i = 0; i < size; ++i) { - msg.append(" "); - msg.append(PyUnicode_AsUTF8(PyList_GetItem(result.get(), i))); - } - msg.pop_back(); // remove last \n - succ = true; -#undef DEF - }; - run(); - } - if (!succ) { - PyObject* obj_str_py; - if (obj && (obj_str_py = PyObject_Repr(obj))) { - msg.append(" with message "); - msg.append(PyUnicode_AsUTF8(obj_str_py)); - Py_DECREF(obj_str_py); - } else { - msg.append(" with unknown message"); - } - } - // throwing exception may cause abort due to unknown reasons; so we first - // log the message - mgb_log_error("caught exception from python callback: %s", msg.c_str()); - fflush(stdout); - fflush(stderr); - throw PyExceptionForward{etype, obj, trace, msg}; -} - -/* ============== namespace npy ============== */ - -namespace { - -int to_mgb_supported_dtype_raw(int dtype) { - if (dtype == NPY_INT64) - return NPY_INT32; - if (dtype == NPY_FLOAT64) - return NPY_FLOAT32; - return dtype; -} - -#define FOREACH_NPY_DTYPE_PAIR(cb) \ - cb(Uint8, NPY_UINT8) \ - cb(Int8, NPY_INT8) \ - cb(Int16, NPY_INT16) \ - cb(Int32, NPY_INT32) \ - cb(Float16, NPY_FLOAT16) \ - cb(Float32, NPY_FLOAT32) - -#define FOREACH_NPY_MGB_DTYPE_PAIR(cb) \ - FOREACH_NPY_DTYPE_PAIR(cb) \ - FOREACH_MGB_DTYPE_PAIR(cb) - - - -//! convert megbrain dtype to numpy dtype -int dtype_mgb2np_raw(DType dtype) { - mgb_assert(dtype.valid(), "attempt to convert from invalid dtype"); - switch (dtype.enumv()) { -#define cb(_m, _n) \ - case DTypeEnum::_m: \ - return _n; - FOREACH_NPY_MGB_DTYPE_PAIR(cb) -#undef cb - default: - break; - } - throw ConversionError(ssprintf( - "can not convert dtype %s to numpy dtype", dtype.name())); -} - -struct PyArrayDescrDeleter { - void operator()(PyArray_Descr* obj) { - Py_XDECREF(obj); - } -}; - -//! Convert MegBrain DType to NumPy DType descriptor, the caller receives a new -//! reference to the descriptor. -std::unique_ptr dtype_mgb2np_descr( - DType dtype) { - PYTHON_GIL; - mgb_assert(dtype.valid(), "attempt to convert from invalid dtype"); - auto build_mgb_dtype_dict = - [](const char* name, - const std::vector>& data) { - PyObject* metadata = PyDict_New(); - PyObject* mgb_dtype_metadata = PyDict_New(); - PyDict_SetItemString(mgb_dtype_metadata, "name", - PyUnicode_FromString(name)); - for (const auto& d : data) { - PyDict_SetItemString(mgb_dtype_metadata, d.first, d.second); - } - PyDict_SetItemString(metadata, "mgb_dtype", mgb_dtype_metadata); - return metadata; - }; - if (dtype.has_param()) { - PyArray_Descr* type_descr; - switch (dtype.enumv()) { - case DTypeEnum::Quantized8Asymm: { - auto& param = dtype.param(); - type_descr = PyArray_DescrNewFromType(NPY_UINT8); - type_descr->metadata = build_mgb_dtype_dict( - DTypeTrait::name, - {{"scale", PyFloat_FromDouble(param.scale)}, - {"zero_point", PyLong_FromLong(param.zero_point)}}); - break; - } - case DTypeEnum::QuantizedS8: { - auto& param = dtype.param(); - type_descr = PyArray_DescrNewFromType(NPY_INT8); - type_descr->metadata = build_mgb_dtype_dict( - DTypeTrait::name, - {{"scale", PyFloat_FromDouble(param.scale)}}); - break; - } - case DTypeEnum::Quantized4Asymm: { - auto& param = dtype.param(); - type_descr = PyArray_DescrNewFromType(NPY_UINT8); - type_descr->metadata = build_mgb_dtype_dict( - DTypeTrait::name, - {{"scale", PyFloat_FromDouble(param.scale)}, - {"zero_point", PyLong_FromLong(param.zero_point)}}); - break; - } - case DTypeEnum::QuantizedS4: { - auto& param = dtype.param(); - type_descr = PyArray_DescrNewFromType(NPY_INT8); - type_descr->metadata = build_mgb_dtype_dict( - DTypeTrait::name, - {{"scale", PyFloat_FromDouble(param.scale)}}); - break; - } - case DTypeEnum::QuantizedS32: { - auto& param = dtype.param(); - type_descr = PyArray_DescrNewFromType(NPY_INT32); - type_descr->metadata = build_mgb_dtype_dict( - DTypeTrait::name, - {{"scale", PyFloat_FromDouble(param.scale)}}); - break; - } - default: - mgb_throw(ConversionError, "unhandled parameterized DType %s", - dtype.name()); - } - return std::unique_ptr(type_descr); - } - PyArray_Descr* basic_descr = PyArray_DescrFromType(dtype_mgb2np_raw(dtype)); - mgb_assert(basic_descr != nullptr, - "failed to convert expected dtype to numpy type descriptor"); - return std::unique_ptr(basic_descr); -} - -DType dtype_np2mgb_raw(int npt) { - switch (npt) { -#define cb(_m, _n) \ - case _n: \ - return dtype::_m(); - FOREACH_NPY_DTYPE_PAIR(cb) -#undef cb - } -#define cb(_m, _n) \ - if (_n == npt) return dtype::_m(); - FOREACH_MGB_DTYPE_PAIR(cb) -#undef cb - - PYTHON_GIL; - std::string msg; - auto py_obj = PyArray_TypeObjectFromType(npt); - if (!py_obj) { - msg = ssprintf("unknown numpy dtype enum %d", npt); - } else { - msg = ssprintf("unsupported numpy dtype %s", - repr_pyobj(py_obj).c_str()); - } - Py_DECREF(py_obj); - throw ConversionError(msg); -} - -DType dtype_np2mgb_descr(PyArray_Descr* descr) { - PYTHON_GIL; - auto handle_parameterized_dtype = [](PyObject* metadata) -> DType { - mgb_assert(PyDict_Check(metadata), - "Invalid parameterized DType metadata: should be a dict"); - PyObject* dtype_name_py = PyDict_GetItemString(metadata, "name"); - mgb_assert( - PyUnicode_Check(dtype_name_py), - "Invalid parameterized DType metadata: name should be a str"); - std::string dtype_name(PyUnicode_AsUTF8(dtype_name_py)); - if (dtype_name == "Quantized8Asymm") { - PyObject* scale_py = PyDict_GetItemString(metadata, "scale"); - PyObject* zero_point_py = - PyDict_GetItemString(metadata, "zero_point"); - mgb_assert(scale_py && zero_point_py, - "Invalid Quantized8Asymm metadata: missing scale or " - "zero_point."); - mgb_assert( - PyFloat_Check(scale_py), - "Invalid Quantized8Asymm metadata: scale should be float"); - mgb_assert(PyLong_Check(zero_point_py), - "Invalid Quantized8Asymm metadata: zero_point should be " - "integer"); - auto zero_point = PyLong_AS_LONG(zero_point_py); - mgb_assert(zero_point >= 0 && zero_point < 256, - "Invalid Quantized8Asymm metadata: zero_point should be " - "in [0, 256)"); - return dtype::Quantized8Asymm( - static_cast(PyFloat_AS_DOUBLE(scale_py)), - static_cast(zero_point)); - } - if (dtype_name == "Quantized4Asymm") { - PyObject* scale_py = PyDict_GetItemString(metadata, "scale"); - PyObject* zero_point_py = - PyDict_GetItemString(metadata, "zero_point"); - mgb_assert(scale_py && zero_point_py, - "Invalid Quantized4Asymm metadata: missing scale or " - "zero_point."); - mgb_assert( - PyFloat_Check(scale_py), - "Invalid Quantized4Asymm metadata: scale should be float"); - mgb_assert(PyLong_Check(zero_point_py), - "Invalid Quantized4Asymm metadata: zero_point should be " - "integer"); - auto zero_point = PyLong_AS_LONG(zero_point_py); - mgb_assert(zero_point >= 0 && zero_point < 15, - "Invalid Quantized4Asymm metadata: zero_point should be " - "in [0, 15)"); - return dtype::Quantized4Asymm( - static_cast(PyFloat_AS_DOUBLE(scale_py)), - static_cast(zero_point)); - } - if (dtype_name == "QuantizedS32" || dtype_name == "QuantizedS8" || - dtype_name == "QuantizedS4") { - PyObject* scale_py = PyDict_GetItemString(metadata, "scale"); - mgb_assert(scale_py, "Invalid metadata: missing scale"); - mgb_assert(PyFloat_Check(scale_py), - "Invalid metadata: scale should be float"); - float scale = static_cast(PyFloat_AS_DOUBLE(scale_py)); - if (dtype_name == "QuantizedS32") { - return dtype::QuantizedS32(scale); - } else if (dtype_name == "QuantizedS8"){ - return dtype::QuantizedS8(scale); - } else { - return dtype::QuantizedS4(scale); - } - } - throw ConversionError( - ssprintf("Unknown parameterized DType: %s", dtype_name.c_str()) - .c_str()); - }; - PyObject* dtype_metadata; - if (descr->metadata && PyDict_Check(descr->metadata) && - (dtype_metadata = PyDict_GetItemString(descr->metadata, "mgb_dtype"))) { - return handle_parameterized_dtype(dtype_metadata); - } - return dtype_np2mgb_raw(descr->type_num); -} - -HostTensorND lowbit_ndarray_to_host_tensor( - CompNode comp_node, TensorLayout &layout, PyArrayObject *input) { - auto src_ptr = reinterpret_cast(PyArray_DATA(input)); - if (!layout.ndim) { - // numpy scalar - mgb_assert(src_ptr, "can not convert from null numpy array"); - layout.init_contiguous_stride({1}); - } else { - mgb_assert(layout.ndim && layout.ndim <= TensorShape::MAX_NDIM, - "unsupported ndim %zu", layout.ndim); - for (size_t i = 0; i < layout.ndim; ++ i) { - layout.shape[i] = PyArray_SHAPE(input)[i]; - layout.stride[i] = PyArray_STRIDE(input, i); - mgb_assert(layout.shape[i], "zero shape not supported"); - } - mgb_assert(layout.is_contiguous()); - } - HostTensorND ret{comp_node, layout}; - lowbit_memcpy_byte2compact(layout.dtype, ret.raw_ptr(), src_ptr, - layout.total_nr_elems()); - return ret; -} - -/*! - * \brief convert a python object to tensor and try to borrow memory if the - * original object is a contiguous numpy array - * \param dtype see np2tensor - * \return the megbrain tensor, and whether memory is borrowed - */ -std::pair np2tensor_try_borrow( - PyObject *obj, CompNode dest_cn, DType dtype) { - mgb_assert(dest_cn.valid()); - - PYTHON_GIL; - - PyArray_Descr* expected_descr = nullptr; - if (dtype.valid()) { - // The reference to expected_descr will be stealed later. - expected_descr = dtype_mgb2np_descr(dtype).release(); - } - - // make result from PyArrayObject; its reference would be stolen - auto make_from_arr = [&](PyArrayObject *input, bool is_borrow) { - PyObjRefKeeper ref_obj_cvt{reinterpret_cast(input)}; - - TensorLayout layout; - layout.dtype = dtype_np2mgb_descr(PyArray_DESCR(input)); - if (dtype.valid()) - mgb_assert(dtype == layout.dtype); - layout.ndim = PyArray_NDIM(input); - - if (layout.dtype.is_low_bit()) { - auto ret = lowbit_ndarray_to_host_tensor(dest_cn, layout, input); - // decref(input) would be handled by ref_obj_cvt - return std::make_pair(ret, false); - } - - auto data = reinterpret_cast(PyArray_DATA(input)); - if (!layout.ndim) { - // numpy scalar - mgb_assert(data, "can not convert from null numpy array"); - layout.init_contiguous_stride({1}); - } else { - mgb_assert(layout.ndim && layout.ndim <= TensorShape::MAX_NDIM, - "unsupported ndim %zu", layout.ndim); - auto dsize = layout.dtype.size(); - bool is_empty = false; - for (size_t i = 0; i < layout.ndim; ++ i) { - layout.shape[i] = PyArray_SHAPE(input)[i]; - layout.stride[i] = PyArray_STRIDE(input, i); - if (!layout.shape[i]) { - is_empty = true; - } - mgb_assert(layout.stride[i] % dsize == 0, - "bad stride %zd", layout.stride[i]); - layout.stride[i] /= dsize; - } - mgb_assert(is_empty || layout.is_contiguous()); - } - HostTensorStorage storage; - auto input_ptr = ref_obj_cvt.make_shared(data); - storage.reset(dest_cn, layout.span().high_byte, input_ptr); - HostTensorND ret; - ret.reset(storage, layout); - return std::make_pair(ret, is_borrow); - }; - - PyArrayObject *obj_as_arr = nullptr; - do { - // check contiguous and dtype, and borrow mem if ok - if (!PyArray_Check(obj)) - break; - obj_as_arr = reinterpret_cast(obj); - int typenum = PyArray_DTYPE(obj_as_arr)->type_num; - // We have to check dtype.valid() and typenum first to avoid - // accidentally trigger ConversionError on incompatible dtypes which can - // be automatically converted into comptaible ones (e.g. float64). - if (dtype.valid() && - (expected_descr->type_num != typenum || - dtype_np2mgb_descr(PyArray_DTYPE(obj_as_arr)) != dtype)) - break; - if (typenum != to_mgb_supported_dtype_raw(typenum)) { - mgb_assert(!dtype.valid() && expected_descr == nullptr); - expected_descr = - PyArray_DescrFromType(to_mgb_supported_dtype_raw(typenum)); - break; - } - if (PyArray_ISCARRAY_RO(obj_as_arr)) { - Py_INCREF(obj_as_arr); - return make_from_arr(obj_as_arr, true); - } - } while(0); - - constexpr auto NP_FLAGS = NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_FORCECAST; - PyObject *obj_cvt; - if (obj_as_arr) { - obj_cvt = PyArray_FromArray(obj_as_arr, expected_descr, NP_FLAGS); - } else { - obj_cvt = PyArray_FromAny(obj, expected_descr, 0, 0, NP_FLAGS, nullptr); - } - - if (obj_cvt) { - // convert to mgb supported dtype - auto arr = reinterpret_cast(obj_cvt); - int dt0 = PyArray_TYPE(arr), dt1 = to_mgb_supported_dtype_raw(dt0); - if (dt0 != dt1) { - mgb_assert(expected_descr == nullptr); - expected_descr = PyArray_DescrFromType(dt1); - mgb_assert(expected_descr); - auto obj_cvt_new = PyArray_FromAny( - obj_cvt, expected_descr, 0, 0, NP_FLAGS, nullptr); - Py_DECREF(obj_cvt); - obj_cvt = obj_cvt_new; - } - } - - if (!obj_cvt) { - if (PyErr_Occurred()) { - PyExceptionForward::throw_(); - } - throw ConversionError(ssprintf("can not convert to numpy array from %s", - repr_pyobj(obj).c_str())); - } - - return make_from_arr(reinterpret_cast(obj_cvt), false); -} - -//! hold a reference to HostTensorND -class HostTensorNDRefHolder final: public NonCopyableObj { - HostTensorND m_val; - static MemPool sm_mem_pool; - - friend class MemPool; - - HostTensorNDRefHolder(const HostTensorND &v): - m_val{v} - { - } - - public: - - static HostTensorNDRefHolder* alloc(const HostTensorND &v) { - return sm_mem_pool.alloc(v); - } - - static void free(HostTensorNDRefHolder *p) { - return sm_mem_pool.free(p); - } -}; -MemPool HostTensorNDRefHolder::sm_mem_pool; - -void ndarray_shared_from_tensor_py_capsule_dtor(PyObject *cap) { - auto ptr = PyCapsule_GetPointer(cap, "HostTensorND"); - mgb_assert(ptr, "not a PyCapsule: %s", repr_pyobj(cap).c_str()); - HostTensorNDRefHolder::free(static_cast(ptr)); -} - -} // anonymous namespace - -PyObject* npy::ndarray_from_tensor( - const HostTensorND &val, ShareType share_type) { - if (!val.layout().is_contiguous() && !val.shape().is_empty()) { - mgb_assert(share_type != ShareType::MUST_SHARE); - HostTensorND contig; - contig.copy_from(val); - return ndarray_from_tensor(contig, ShareType::TRY_SHARE); - } - PYTHON_GIL; - npy_intp dims[TensorLayout::MAX_NDIM]; - for (size_t i = 0; i < val.layout().ndim; ++ i) - dims[i] = val.shape()[i]; - PyObject* ret = nullptr; - - auto alloc_new_ret = [&]() { - mgb_assert(!ret); - ret = PyArray_NewFromDescr( - &PyArray_Type, dtype_mgb2np_descr(val.dtype()).release(), - val.layout().ndim, dims, nullptr, nullptr, 0, nullptr); - mgb_assert(ret, "failed to allocate array"); - mgb_assert(PyArray_Check(ret)); - return PyArray_DATA(reinterpret_cast(ret)); - }; - if (val.dtype().is_low_bit()) { - mgb_assert(share_type != ShareType::MUST_SHARE, - "can not share memory for lowbit dtype"); - lowbit_memcpy_compact2byte(val.dtype(), alloc_new_ret(), val.raw_ptr(), - val.layout().total_nr_elems()); - } else if (share_type == ShareType::MUST_UNSHARE) { - memcpy(alloc_new_ret(), val.raw_ptr(), val.layout().span().dist_byte()); - } else { - // share data - ret = PyArray_NewFromDescr( - &PyArray_Type, dtype_mgb2np_descr(val.dtype()).release(), - val.layout().ndim, dims, nullptr, - const_cast(val.raw_ptr()), 0, nullptr); - mgb_assert(ret, "failed to alloc ndarray"); - auto capsule = PyCapsule_New(HostTensorNDRefHolder::alloc(val), - "HostTensorND", ndarray_shared_from_tensor_py_capsule_dtor); - mgb_assert(capsule, "failed to create PyCapsule"); - auto err = PyArray_SetBaseObject( - reinterpret_cast(ret), capsule); - mgb_assert(!err); - } - return ret; -} - -HostTensorND npy::np2tensor(PyObject* obj, const Meth& meth, DType dtype) { - auto ret_full = np2tensor_try_borrow(obj, meth.dest_cn_, dtype); - if (meth.dest_tensor_) { - meth.dest_tensor_->copy_from(ret_full.first); - return *meth.dest_tensor_; - } - if (meth.must_borrow_) { - mgb_assert(ret_full.second, - "can not borrow from numpy array as contig array with dtype " - "%s; src=%s", - dtype.name(), repr_pyobj(obj).c_str()); - } - return ret_full.first; -} - -PyObject* npy::dtype_mgb2np(mgb::DType dtype) { - PYTHON_GIL; - // According to - // https://docs.scipy.org/doc/numpy/reference/c-api.array.html#c.PyArray_TypeObjectFromType - // the following is equivalent to PyArray_TypeObjectFromType for built-in - // types. - auto descr = dtype_mgb2np_descr(dtype); - if (descr == nullptr) { - return nullptr; - } - if (dtype.has_param()) { - return reinterpret_cast(descr.release()); - } - PyObject* typeobj = reinterpret_cast(descr->typeobj); - Py_XINCREF(typeobj); - return typeobj; -} - -mgb::DType npy::dtype_np2mgb(PyObject *obj) { - mgb_assert(obj && obj != Py_None, - "can not convert null PyObject to numpy dtype"); - // see - // http://stackoverflow.com/questions/8477122/numpy-c-api-convert-type-object-to-type-number - PYTHON_GIL; - - PyArray_Descr* dtype; - if(!PyArray_DescrConverter(obj, &dtype)) { - throw ConversionError(ssprintf("can not convert to np.dtype from %s", - repr_pyobj(obj).c_str())); - } - - mgb::DType result = dtype_np2mgb_descr(dtype); - Py_DECREF(dtype); - return result; -} - -PyObject* npy::to_mgb_supported_dtype(PyObject* dtype) { - PYTHON_GIL; - - PyArray_Descr* descr; - if (!PyArray_DescrConverter(dtype, &descr)) { - throw ConversionError(ssprintf("can not convert to np.dtype from %s", - repr_pyobj(dtype).c_str())); - } - mgb_assert(!descr->metadata, - "unexpected metadata in dtype: " - "dtype_obj=%s metadata=%s", - repr_pyobj(dtype).c_str(), repr_pyobj(descr->metadata).c_str()); - int type_num = to_mgb_supported_dtype_raw(descr->type_num); - return PyArray_TypeObjectFromType(type_num); -} - -TensorShape npy::vec2shape(const std::vector &vec) { - TensorShape shape; - mgb_assert(vec.size() <= TensorShape::MAX_NDIM, - "dim too large: %zd (max %zd)", - vec.size(), TensorShape::MAX_NDIM); - shape.ndim = vec.size(); - for (size_t i = 0; i < vec.size(); i ++) { - if (!vec[i]) { - shape.ndim = 0; - break; - } - shape[i] = vec[i]; - } - mgb_assert(shape.ndim, "shape should not be empty"); - return shape; -} - -void mgb_init_numpy() { - import_array1( ); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/cpp/python_helper.h b/python_module/src/cpp/python_helper.h deleted file mode 100644 index 1d443905..00000000 --- a/python_module/src/cpp/python_helper.h +++ /dev/null @@ -1,229 +0,0 @@ -/** - * \file python_module/src/cpp/python_helper.h - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * \brief helper utilities for python integration - * - * \copyright Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - * - */ - -#pragma once - -#include "megbrain/graph.h" - -#include -#include - -class GILManager { - PyGILState_STATE gstate; - - public: - GILManager(): - gstate(PyGILState_Ensure()) - { - } - - ~GILManager() { - PyGILState_Release(gstate); - } -}; -#define PYTHON_GIL GILManager __gil_manager - -//! wraps a shared_ptr and decr PyObject ref when destructed -class PyObjRefKeeper { - std::shared_ptr m_ptr; - -public: - static void deleter(PyObject* p) { - if (p) { - PYTHON_GIL; - Py_DECREF(p); - } - } - - PyObjRefKeeper() = default; - PyObjRefKeeper(PyObject* p) : m_ptr{p, deleter} {} - - PyObject* get() const { return m_ptr.get(); } - - //! create a shared_ptr as an alias of the underlying ptr - template - std::shared_ptr make_shared(T* ptr) const { - return {m_ptr, ptr}; - } -}; - -class PyStackExtracter { - static PyStackExtracter *ins; - - public: - virtual ~PyStackExtracter() = default; - - virtual std::string extract() = 0; - - static void reg(PyStackExtracter *p) { - ins = p; - } - - static std::string run() { - return ins->extract(); - } -}; - -//! exception to be thrown when python callback fails -class PyExceptionForward : public std::exception { - PyObject *m_type, *m_value, *m_traceback; - std::string m_msg; - - PyExceptionForward(PyObject* type, PyObject* value, PyObject* traceback, - const std::string& msg) - : m_type{type}, - m_value{value}, - m_traceback{traceback}, - m_msg{msg} {} - -public: - PyExceptionForward(const PyExceptionForward&) = delete; - PyExceptionForward& operator=(const PyExceptionForward&) = delete; - ~PyExceptionForward(); - - PyExceptionForward(PyExceptionForward&& rhs) - : m_type{rhs.m_type}, - m_value{rhs.m_value}, - m_traceback{rhs.m_traceback}, - m_msg{std::move(rhs.m_msg)} { - rhs.m_type = rhs.m_value = rhs.m_traceback = nullptr; - } - - //! throw PyExceptionForward from current python error state - static void throw_() __attribute__((noreturn)); - - //! restore python error - void restore(); - - const char* what() const noexcept override { return m_msg.c_str(); } -}; - -/*! - * \brief make python exception - */ -class PyMGBExceptionMaker { - static PyObject *py_exc_class; - friend std::string blame(mgb::cg::OperatorNodeBase* opr); - - public: - static void setup_py_exception(std::exception &exc); - - static void _reg_exception_class(PyObject *cls) { - py_exc_class = cls; - } - -}; - -//! associate a python object with an operator -class OprPyTracker final : public mgb::NonCopyableObj { - class TrackerStorage; - OprPyTracker() = delete; - -public: - /*! - * \brief set current tracker; all operators created later would share - * this tracker - * - * Note that a py reference would be kept - */ - static void begin_set_tracker(mgb::cg::ComputingGraph& graph, - PyObject* obj); - - static void end_set_tracker(mgb::cg::ComputingGraph& graph); - - struct TrackerResult { - mgb::cg::OperatorNodeBase - //! operator that directly causes the exception - *exc_opr = nullptr, - //! operator constructed by user (non-optimized exc_opr) - *unopt_opr = nullptr, - //! the grad source if opr is constructed by taking grad - *opr_grad_src = nullptr; - PyObject *tracker = nullptr, *tracker_grad_src = nullptr; - - //! format as python tuple - PyObject* as_tuple(const char* leading_msg = nullptr) const; - }; - - //! get tracker from exception - static TrackerResult get_tracker(mgb::MegBrainError& exc); - - //! get tracker from operator - static TrackerResult get_tracker(mgb::cg::OperatorNodeBase* opr); -}; - -std::string blame(mgb::cg::OperatorNodeBase* opr); - -//! numpy utils -namespace npy { - //! convert tensor shape to raw vector - static inline std::vector shape2vec(const mgb::TensorShape &shape) { - return {shape.shape, shape.shape + shape.ndim}; - } - - //! change numpy dtype to megbrain supported dtype - PyObject* to_mgb_supported_dtype(PyObject *dtype); - - //! convert raw vector to tensor shape - mgb::TensorShape vec2shape(const std::vector &vec); - - //! convert megbrain dtype to numpy dtype object; return new reference - PyObject* dtype_mgb2np(mgb::DType dtype); - - //! convert numpy dtype object or string to megbrain dtype - mgb::DType dtype_np2mgb(PyObject *obj); - - //! buffer sharing type - enum class ShareType { - MUST_SHARE, //!< must be shared - MUST_UNSHARE, //!< must not be shared - TRY_SHARE //!< share if possible - }; - - //! get ndarray from HostTensorND - PyObject* ndarray_from_tensor(const mgb::HostTensorND &val, - ShareType share_type); - - //! specify how to convert numpy array to tensor - struct Meth { - bool must_borrow_ = false; - mgb::HostTensorND *dest_tensor_ = nullptr; - mgb::CompNode dest_cn_; - - //! make a Meth that allows borrowing numpy array memory - static Meth borrow( - mgb::CompNode dest_cn = mgb::CompNode::default_cpu()) { - return {false, nullptr, dest_cn}; - } - - //! make a Meth that requires the numpy array to be borrowed - static Meth must_borrow( - mgb::CompNode dest_cn = mgb::CompNode::default_cpu()) { - return {true, nullptr, dest_cn}; - } - - //! make a Meth that requires copying the value into another - //! tensor - static Meth copy_into(mgb::HostTensorND *tensor) { - return {false, tensor, tensor->comp_node()}; - } - }; - /*! - * \brief convert an object to megbrain tensor - * \param meth specifies how the conversion should take place - * \param dtype desired dtype; it can be set as invalid to allow arbitrary - * dtype - */ - mgb::HostTensorND np2tensor(PyObject *obj, const Meth &meth, - mgb::DType dtype); -} - -// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/python/genopr.py b/python_module/src/python/genopr.py deleted file mode 100755 index 28ce7e28..00000000 --- a/python_module/src/python/genopr.py +++ /dev/null @@ -1,293 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# This file is part of MegBrain. -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - -from io import StringIO -import re -import argparse -import subprocess -import os -import textwrap - -def camel2underscore( - name, *, - first_cap_re=re.compile('([A-Z])([A-Z][a-z]+)'), - all_cap_re = re.compile('([a-z])([A-Z]+)')): - if name.isupper(): - return name.lower() - s1 = first_cap_re.sub(r'\1_\2', name) - return all_cap_re.sub(r'\1_\2', s1).lower() - -class Doc: - """wrap an identifier and doc""" - _id = None - - def __init__(self, id_, doc, typestr=None, default=None): - self._id = id_ - self.doc = doc - self.typestr = typestr - self.default = default - - def __str__(self): - return self._id - - -class OprGenerator: - _fout = None - _cur_indent = '' - - def __init__(self): - self._fout = StringIO() - - def _indent(self): - self._cur_indent += ' ' * 4 - - def _unindent(self): - self._cur_indent = self._cur_indent[:-4] - - def _write(self, content, *fmt, indent=0): - if indent < 0: - self._unindent() - - self._fout.write(self._cur_indent) - if fmt: - content = content % fmt - self._fout.write(content) - self._fout.write('\n') - - if indent > 0: - self._indent() - - def _gen_signature(self, inputs, params, *, have_config=True, - has_out_dtype=False): - assert inputs - sig = [] - for inp in inputs: - name = str(inp) - if name.startswith('*'): - assert name[1:].isidentifier() - assert inp is inputs[-1] - else: - assert name.isidentifier() - if isinstance(inp, Doc) and inp.default is not None: - name += '={}'.format(inp.default) - sig.append(name) - if not str(inputs[-1]).startswith('*'): - sig.append('*') - for i, _ in params: - sig.append('{}=None'.format(i)) - - if have_config: - sig.extend(['name=None', 'comp_node=None', 'config=None']) - if 'comp_graph' not in map(str, inputs): - sig.append('comp_graph=None') - if has_out_dtype: - assert 'dtype' not in map(str, inputs) - sig.append('dtype=None') - - if params: - sig.append('**kwargs') - - if sig[-1] == '*': - sig.pop() - return ', '.join(sig) - - def _write_canonize_inputs(self, inputs, canonize_input_vars, - canonize_input_vars_args=None, - has_out_dtype=False): - self._write_gen_config(has_out_dtype) - inputs = list(map(str, inputs)) - if canonize_input_vars_args is None: - if inputs[0][0] == '*': - arg = inputs[0][1:] - else: - arg = '[{}]'.format(', '.join(inputs)) - else: - arg = canonize_input_vars_args - self._write('all_inputs = _helper.%s(%s, ' - 'comp_graph=comp_graph, config=config)', - canonize_input_vars, arg) - - def _write_gen_config(self, has_out_dtype=False): - if not has_out_dtype: - self._write('config = _helper.gen_config(name, comp_node, config)') - else: - self._write('config = _helper.gen_config(name, comp_node, config, dtype)') - - def _write_make_params(self, params, body): - for pname, ptype in params: - self._write('%s = _helper.cvt_to_opr_param_def(%s, ' - '_opr_param_defs.%s, kwargs)', - pname, pname, ptype) - self._write('assert not kwargs, "extra kwargs: {}".format(kwargs)') - - for i in body: - self._write(i) - - self._write('all_params = []') - for pname, _ in params: - self._write('all_params.append(%s.serialize())', - pname) - - def _write_doc(self, inputs, params, desc): - self._write('"""') - if isinstance(desc, Doc): - assert desc._id is None - self._write(desc.doc) - elif desc: - for i in textwrap.wrap(desc, 75): - self._write(i) - - self._write('') - for i in inputs: - name = str(i) - typestr = ':class:`.SymbolVar`' - if name[0] == '*': - name = name[1:] - typestr = 'list of ' + typestr - if isinstance(i, Doc): - self._write(':param %s: %s', name, i.doc) - if i.typestr is not None: - typestr = i.typestr - if typestr: - if not isinstance(i, Doc): - self._write(':param %s: ', name) - self._write(':type %s: %s', name, typestr) - - for pname, ptype in params: - self._write(':param %s: ', pname) - self._write(':type %s: :class:`~megbrain.opr_param_defs.%s`', - pname, ptype) - - self._write(':param comp_node: see doc for *config*') - self._write(':param name: see doc for *config*') - self._write( - ':param config: give a :class:`.OperatorNodeConfig` object to set ' - 'operator name and comp node. This can also be achieved by passing ' - '*comp_node* and *name* separately.') - - if 'comp_graph' not in map(str, inputs): - self._write( - ':param comp_graph: If all inputs are immediate numbers, ' - '*comp_graph* and *comp_node* must be provided ' - 'so the input values can be put on appropriate ' - 'computing graph and computing node') - self._write('"""') - - def _write_return(self, name, outputs): - self._write('outputs = _mgb._create_opr(' - '"%s", all_inputs, all_params, config)', name) - if outputs: - self._write('outputs = [outputs[i] for i in %s]', - list(map(int, outputs))) - self._write('return _helper.cvt_opr_result(outputs, ' - '**cvt_result_kwargs)') - - def decl_opr(self, name, *, inputs, params, desc=None, pyname=None, - canonize_input_vars='canonize_input_vars', - canonize_input_vars_args=None, body=[], - outputs=None, version=0, has_out_dtype=False): - """ - :param inputs: name of variable inputs; a name starting with `*' means - a list of vars - :type inputs: list of str - :param params: (param name, param type) pairs; it can be a single - string representing the param type, and param name defaults to - 'param' - :type params: list of pair of str, or str - :param pyname: python function name - :param body: extra statements to be placed before calling _create_opr - :param outputs: the indices of output vars to be selected from raw opr - result - """ - if isinstance(params, str): - params = [('param', params)] - assert params - - if pyname is None: - pyname = camel2underscore(name) - - self._write('def %s(%s):', pyname, - self._gen_signature(inputs, params, - has_out_dtype=has_out_dtype), indent=1) - self._write_doc(inputs, params, desc) - self._write_canonize_inputs( - inputs, canonize_input_vars, - canonize_input_vars_args=canonize_input_vars_args, - has_out_dtype=has_out_dtype) - self._write('cvt_result_kwargs = {}') - self._write_make_params(params, body) - if version: - name += 'V{}'.format(version) - self._write_return(name, outputs) - self._write('', indent=-1) - - def decl_raw_opr(self, name, *, inputs, inputs_cvt=[], body=None, - desc=None, local_defs=[], have_config=True): - """declare a raw operator that is forwarded to _mgb._Opr; if *body* is - given, a custom implemented can be provided - - :param inputs_cvt: list of (input name, cvt) pairs, where cvt is name - of the function to convert that input - :param body: list of statements to produce output, or None - :param local_defs: list of statements to be prepended before generated - code - """ - self._write('def %s(%s):', name, - self._gen_signature(inputs, [], have_config=have_config), - indent=1) - self._write_doc(inputs, [], desc) - if have_config: - self._write_gen_config() - for i in local_defs: - self._write(i) - for k, v in inputs_cvt: - self._write('%s = %s(%s)', k, v, k) - self._write('cvt_result_kwargs = {}') - if body is None: - self._write('output = _mgb._Opr.%s(%s, config)', - name, ', '.join(map(str, inputs))) - else: - for i in body: - self._write(i) - self._write( - 'return _helper.cvt_opr_result(output, **cvt_result_kwargs)') - self._write('', indent=-1) - - def get_str(self): - return self._fout.getvalue() - - -def main(): - parser = argparse.ArgumentParser( - description='generate operator function def code from decl file') - parser.add_argument('inputs', nargs='+') - args = parser.parse_args() - - gen = OprGenerator() - exec_globals = { - 'decl_opr': gen.decl_opr, - 'decl_raw_opr': gen.decl_raw_opr, - 'Doc': Doc, - 'camel2underscore': camel2underscore, - } - for i in args.inputs: - print('generate oprs from {}'.format(i)) - with open(i) as fin: - exec(fin.read(), exec_globals) - - git_commit = subprocess.Popen(['git', 'rev-parse', 'HEAD'], - stdout=subprocess.PIPE).communicate()[0].strip() - git_commit = git_commit.decode('utf-8') - - file_rela = lambda *paths: os.path.join(os.path.dirname(__file__), *paths) - outfile = lambda name: file_rela('../../megengine/_internal', name) - with open(file_rela('opr_template.py')) as fin: - with open(outfile('opr.py'), 'w') as fout: - fout.write(fin.read(). - replace('{%body%}', gen.get_str()). - replace('{%git_commit%}', git_commit)) - -if __name__ == '__main__': - main() diff --git a/python_module/src/python/opr_template.py b/python_module/src/python/opr_template.py deleted file mode 100644 index 29ea0a9d..00000000 --- a/python_module/src/python/opr_template.py +++ /dev/null @@ -1,425 +0,0 @@ -# -*- coding: utf-8 -*- -# This file is part of MegBrain. -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. - -"""This python module contains functions to apply the operators defined by -megbrain. - -.. note:: - Most of the functions are automatically generated, and their signature have - the form contain a ``param`` argument (or more than one arguments such as - :func:`convolution` that has ``param`` and ``execution_polity``) and also - accept keyword arguments. In such case, it can be called by either - providing a param object of appropriate type, or by passing the arguments - needed by the constructor of param object to the keyword arguments. - Furthermore, for a param that needs an enumeration member, the enum name - can be used to refer to the enum object. - - For example, the following statements are equivalent:: - - elemwise([a, b], mode='max') - elemwise([a, b], mode=opr_param_defs.Elemwise.Mode.MAX) - elemwise([a, b], param=opr_param_defs.Elemwise('max')) -""" - -from . import mgb as _mgb -from . import helper as _helper -from . import opr_param_defs as _opr_param_defs - -import sys -import enum -import collections -import json - -__git_commit__ = "{%git_commit%}" - -{%body%} - -class _ElemMeta(type): - def __getattr__(self, name): - def run(*inputs, **kwargs): - return elemwise(inputs, mode=name, **kwargs) - if name.startswith('__'): - return - return run - - -class elem(metaclass=_ElemMeta): - """ - Helper class for easily applying element-wise operator. Request for getting - member method would be translated to a call to :func:`elemwise` with mode - set to the method name. Example:: - - elem.exp(a) # elemwise(a, mode='exp') - elem.max(a, b) # elemwise([a, b], mode='max') - - """ - - -def add_update( - dest, delta, - alpha=_mgb.SharedScalar(1), beta=_mgb.SharedScalar(1), - bias=_mgb.SharedScalar(0), disable=_mgb.SharedScalar(0), *, - name=None, comp_node=None, config=None, comp_graph=None): - """update *dest* by `dest := dest*alpha + delta*beta + bias` - - :param dest: target var to be updated; must be created from - :func:`make_shared` - :type dest: :class:`.SymbolVar` - :param disable: AddUpdate will not be executed if disable is set to 1, - this is used for dynamic param-updating. The value of this SharedScalar - can only be set to 0/1 of type `int` - :type disable: :class:`.SharedScalar` - """ - def as_ss(x): - if not isinstance(x, _mgb.SharedScalar): - x = _mgb.SharedScalar(x) - return x - - assert isinstance(dest, _mgb.SymbolVar) - config = _helper.gen_config(name, comp_node, config) - dest, delta = _helper.canonize_input_vars( - [dest, delta], comp_graph=comp_graph, config=config) - - assert isinstance(disable, _mgb.SharedScalar) - - alpha, beta, bias = map(as_ss, [alpha, beta, bias]) - return _mgb._Opr.add_update(dest, delta, alpha, beta, bias, disable, config) - -def reduce_(src, mode, axis=None, keepdims=False, *, - name=None, comp_node=None, config=None, comp_graph=None): - """reduce along given axis; if axis is None, reduce to scalar - - :param mode: reduction mode - :type mode: :class:`~megengine._internal.opr_param_defs.Reduce.Mode` compatible - :param axis: axis along which to reduce input var - :type axis: int - :param keepdims: whether to keep an axis of shape 1 in the result - :type keepdims: False - """ - assert isinstance(src, _mgb.SymbolVar) - config = _helper.gen_config(name, comp_node, config) - inputs = [src] - kwargs = {'mode': mode} - remove_axis = False - if axis is None: - inputs.append(1) - assert not keepdims, 'can not set axis=None and keepdims=True' - else: - remove_axis = not keepdims - kwargs['axis'] = axis - - ret = reduce_general(inputs, config=config, comp_graph=comp_graph, - **kwargs) - if remove_axis: - ret = _mgb._Opr.remove_axis(ret, axis, _mgb.make_opr_config()) - return _helper.cvt_opr_result(ret) - -def _reduce_like(impl, src, axis, keepdims, - name, comp_node, config, comp_graph): - config = _helper.gen_config(name, comp_node, config) - remove_axis = False - if axis is None: - assert not keepdims, 'can not set axis=None and keepdims=True' - src = src.flatten() - axis = 0 - else: - assert isinstance(axis, int) and axis >= 0, ( - 'bad axis: {!r}'.format(axis)) - remove_axis = not keepdims - - ret = impl(src, axis=axis, config=config, comp_graph=comp_graph) - if remove_axis: - ret = _mgb._Opr.remove_axis(ret, axis, _mgb.make_opr_config()) - return _helper.cvt_opr_result(ret) - -def dimshuffle(src, pattern, ndim=0, *, - name=None, comp_node=None, config=None): - """swap shapes and strides according to given pattern - - :param pattern: a list of integers, where each element is the input axis of - that output axis. An element could also be 'x' for creating a new axis - with shape 1 - :param ndim: number of input dimensions; 0 to be inferred from pattern; - this is required only for grad - """ - config = _helper.gen_config(name, comp_node, config) - if not isinstance(pattern, (list, tuple)): - raise TypeError('could not convert {} to dimshuffle pattern'.format( - pattern)) - pattern_mgb = _mgb._VectorInt() - for i in pattern: - if i == 'x': - pattern_mgb.push_back(-1) - else: - i = int(i) - assert i >= 0 - pattern_mgb.push_back(i) - return _mgb._Opr.dimshuffle(src, pattern_mgb, int(ndim), config) - -def param_pack_split(src, shapes, *, - name=None, comp_node=None, config=None): - """ - split param into a list of tensor for given shape - ParamPackSplit operator has a input: ``src`` and would - have a ``output``. output[i] indicates the address of tensor which part of - ``src`` would transfer its elements into. - - Example: a input tensor with size 32, the shapes: ``[(1, 2, 4), (4, 2, 2), - (4, 2, 1)]``, the output tensor would be a list of address with size 3. - output[0] indicates the address of tensor with shapes[0]:(1, 2, 4), - output[1] indicates the address of tensor with shapes[1]:(4, 2, 2), - output[2] indicates the address of tensor with shapes[2]:(4, 2, 1). - - :param src: The concatenated input tensor. - :type src: :class:`SymbolVar` - :param shapes: Shapes of output tensors - :type shapes: list of list of int - """ - config = _helper.gen_config(name, comp_node, config) - - if not isinstance(shapes, (list, tuple)): - raise TypeError('could not convert {} to tensor shapes'.format( - shapes)) - - shapes_mgb = _mgb._VectorTensorShape() - - for s in shapes: - s = tuple(map(int, s)) - assert min(s) > 0 - shapes_mgb.push_back(s) - - return _mgb._Opr.param_pack_split(src, shapes_mgb, config) - -class _modify_subtensor_helper: - def __init__(self, dest, val, *, name=None, comp_node=None, config=None): - self.dest = dest - self.val = val - self.config = _helper.gen_config(name, comp_node, config) - - def __getitem__(self, idx): - inp = _mgb._VectorSymbolVar() - dest, desc = _helper.cvt_getitem_to_idx_desc( - self.dest, idx, allow_newaxis=False) - assert desc is not None, 'no __getitem__ entries given' - inp.push_back(dest) - inp.push_back(self.val) - return _mgb._create_subtensor_like_opr( - self._opr_name, inp, desc, self.config) - -class set_subtensor(_modify_subtensor_helper): - """a proxy object which supports ``__getitem__`` to set subtensor. - ``c = set_subtensor(a, b)[idx]`` is equivalent to the numpy - expression:: - - c = a.copy() - c[idx] = b - - """ - _opr_name = 'set_subtensor' - - -class incr_subtensor(_modify_subtensor_helper): - """a proxy object which supports ``__getitem__`` to increase subtensor. - ``c = incr_subtensor(a, b)[idx]`` is equivalent to the numpy - expression:: - - c = a.copy() - c[idx] += b - """ - _opr_name = 'incr_subtensor' - -class mesh_indexing: - """ Extract elements from given tensor by the coordinates which is - Cartesian product of given index; example:: - - mesh_indexing(x)[:, [2, 3], :, [2, 3, 4]] - """ - - def __init__(self, src, *, name=None, comp_node=None, config=None): - self.src = src - self.config = _helper.gen_config(name, comp_node, config) - - - def __getitem__(self, idx): - inp, desc = _helper.cvt_getitem_to_idx_desc(self.src, idx) - if desc is None: - return inp - return _mgb._create_subtensor_like_opr( - 'mesh_indexing', [inp], desc, self.config) - -class batched_mesh_indexing: - """ Similar to :class:`mesh_indexing`, while the k-th position of - slices is a 2-dim matrix `matrix[k]`. - The `matrix[k] is a list of index. The i-th row `matrix[k][i]` - represents the index of the associated k-th position slice when - `batch_idx == i` ; example:: - - batched_mesh_indexing(x)[:, [[1, 2], [2, 3]], 1:-1:-1] - - .. warning:: - The first dimension of slices must be (start, stop, step) like, - cannot be any of SymbolVar, numpy.array, Python list. - And the shape of other indexs must be (n, x) while n is the length - of first dimension of tensor after applying [start:stop:step] - - """ - - def __init__(self, src, *, name=None, comp_node=None, config=None): - self.src = src - self.config = _helper.gen_config(name, comp_node, config) - - - def __getitem__(self, idx): - inp, desc = _helper.cvt_getitem_to_idx_desc(self.src, idx) - if desc is None: - return inp - return _mgb._create_subtensor_like_opr( - 'batched_mesh_indexing', [inp], desc, self.config) - -class incr_mesh_indexing(_modify_subtensor_helper): - _opr_name = 'incr_mesh_indexing' - -class set_mesh_indexing(_modify_subtensor_helper): - _opr_name = 'set_mesh_indexing' - -class batched_incr_mesh_indexing(_modify_subtensor_helper): - _opr_name = 'batched_incr_mesh_indexing' - -class batched_set_mesh_indexing(_modify_subtensor_helper): - _opr_name = 'batched_set_mesh_indexing' - -class advanced_indexing: - """wrapper for numpy-like advanced indexing, where a non-slice index can be - a vector; example:: - - advanced_indexing(x)[:, [2, 3]] - - """ - def __init__(self, src, *, name=None, comp_node=None, config=None): - self.src = src - self.config = _helper.gen_config(name, comp_node, config) - - def __getitem__(self, idx): - inp, desc = _helper.cvt_getitem_to_idx_desc(self.src, idx) - if desc is None: - return inp - return _mgb._create_subtensor_like_opr( - 'mavi', [inp], desc, self.config) - -class set_advanced_indexing(_modify_subtensor_helper): - """:class:`set_subtensor` equivalent with advanced-indexing support""" - _opr_name = 'set_mavi' - - -class incr_advanced_indexing(_modify_subtensor_helper): - """:class:`incr_subtensor` equivalent with advanced-indexing support""" - _opr_name = 'incr_mavi' - - -def mean(inp, axis, keepdims): - """average value along an axis""" - if hasattr(inp.dtype, 'metadata'): - return reduce_(inp, 'MEAN', axis, keepdims) - else: - s = reduce_(inp, 'SUM', axis, keepdims) - if axis is None: - cnt = inp.shape.prod() - else: - cnt = inp.axis_shape(axis) - return s / cnt - -def square(inp): - """*inp* squared""" - return inp ** 2 - -def sqrt(inp): - """square root""" - return inp ** 0.5 - - -class _LoopDescMakerCallback(_mgb._LoopDescMakerCallback): - def __init__(self, func): - super().__init__() - assert isinstance(func, collections.Callable) - self._func = func - self.__disown__() - - def call(self, desc): - self._func(desc) - - -def make_loop(desc_maker, *, - swap_interval=-5, name=None, comp_node=None, config=None): - """Create a loop operator. The loop operator works in the following way: - - 1. Copy variables specified by :meth:`.LoopDesc.add_input` from the parent - graph into the sub graph. - 2. Evaluates the loop condition. - 3. If the absolute value of the loop condition is no more than 1e-6, go to - 5. - 4. Update variables in the sub graph using rules specified by - :meth:`.LoopDesc.assign` and then go to 2 again. - 5. Copy values of output variables given by :meth:`.LoopDesc.add_output` - into the parent graph and exit. - - The loop operator could be thought of as a digital circuit, where the sub - graph (which must be purely functional) is the combinational logic part and - the :meth:`.LoopDesc.assign` rules serve as the flip-flops. - - :type desc_maker: callable - :param desc_maker: a function to create the loop descriptor; it would - receive a :class:`.LoopDesc` object and should call methods on it to - describe the sub graph. This function may be called multiple times, and - it should behave exactly the same in every call. - - :type swap_interval: int - :param swap_interval: number of loop executions between swapping saved - mutable states to host; larger *swap_interval* requires more memory and - less copy stall. If *swap_interval* is negative, then statically - inferred loop time would be used if possible; otherwise its absolute - value would be used as swap interval. - - :rtype: list of :class:`.SymbolVar` - :return: the output vars, corresponding to each - :meth:`.LoopDesc.add_output` call. - """ - config = _helper.gen_config(name, comp_node, config) - return _mgb._make_loop(_LoopDescMakerCallback(desc_maker), swap_interval, - config) - -def symvar_from_shared_nd(sv, comp_graph, name=None): - """get a symbol var in a computing graph that represents a shared (i.e. - pre-allocated) value on device - - :param sv: the shared value - :type sv: :class:`.SharedND` - :param comp_graph: the computing graph to which this symvar should belong - :type graph: :class:`.CompGraph` - :param name: the name of resulting symvar - :type name: str or None - :rtype: :class:`.SymbolVar` - """ - assert isinstance(sv, _mgb.SharedND) - return sv.symvar(comp_graph, name) - -def zero_grad(sv, **kwargs): - return set_grad(sv, None, **kwargs) - -# for backward pickle compatiblility -def _make_enum_unpickle(new_enum): - """create a class that can be used for unpickling old enum values""" - class OldEnum: - def __new__(cls, value): - return new_enum[value] - return OldEnum - - - -ConvMode = _make_enum_unpickle(_opr_param_defs.Convolution.Mode) -PoolingMode = _make_enum_unpickle(_opr_param_defs.Pooling.Mode) -ROIPoolingMode = _make_enum_unpickle(_opr_param_defs.ROIPooling.Mode) -WarpPerspectiveBorderMode = _make_enum_unpickle( - _opr_param_defs.WarpPerspective.BorderMode) -WarpPerspectiveInterpMode = _make_enum_unpickle( - _opr_param_defs.WarpPerspective.InterpolationMode) diff --git a/python_module/src/swig/callback.i b/python_module/src/swig/callback.i deleted file mode 100644 index d5953a13..00000000 --- a/python_module/src/swig/callback.i +++ /dev/null @@ -1,215 +0,0 @@ -/* - * $File: callback.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%feature("autodoc", -"""It is used to be passed as arguments to callbacks (used in -:meth:`.CompGraph.compile`, :func:`.callback_injector`, and -:meth:`.CraniotomeBase.execute`). Object of this type could also be directly -passed to :meth:`.SharedND.set_value`, to bypass some host and device -communication. Note that the underlying buffer may be reused after the callback -returns, so reference to this object should not be passed outside of the -callback, and :meth:`get_value` should be called immediately if the numerical -value is needed.""") -CompGraphCallbackValueProxy; - -class CompGraphCallbackValueProxy { - public: - - PyObject* _get_npyarr(); - PyObject* _get_dtype(); - std::vector _get_shape(); - - uintptr_t _pubapi_dev_tensor_ptr(int version); - CompNode _get_comp_node(); - - %pythoncode{ - - @property - def shape(self): - """get shape of the var - - :type: tuple of int - """ - return tuple(map(int, self._get_shape())) - - @property - def comp_node(self): - """get comp node of the var - - :type: :class:`.CompNode` - """ - return self._get_comp_node() - - @property - def dtype(self): - """get data type of the var - - :type: :class:`.numpy.dtype` - """ - return self._get_dtype() - - def get_value(self, *, borrow_mem=False): - """get value as numpy array - - :param borrow_mem: whether to forward internal buffer with - zero-copy; if True, the content in returned buffer would be - modified directly by asynchronous graph execution. - """ - ret = self._get_npyarr() - if not borrow_mem: - ret = ret.copy() - return ret - - @property - def dev_ptr(self): - """this method is DEPRECATED; use :meth:`pubapi_dev_tensor_ptr` - instead""" - return self._pubapi_dev_tensor_ptr(0) - - @property - def pubapi_dev_tensor_ptr(self): - """get a pointer to the corresponding mgb::pubapi::DeviceTensor object - - :rtype: int - :return: the address as an integer - """ - return self._pubapi_dev_tensor_ptr(1) - } -}; -%template(_VectorCompGraphCallbackValueProxy) - std::vector; - -%feature("director") _CompGraphCallback; -class _CompGraphCallback { - public: - _CompGraphCallback(); - - void set_eager_copy(bool flag); - - virtual ~_CompGraphCallback(); - virtual void call(std::vector &value) = 0; -}; - -%feature("director") _SplitPartCallback; -class _SplitPartCallback { - public: - _SplitPartCallback(); - virtual ~_SplitPartCallback(); - - virtual std::vector call(size_t tot_size) = 0; -}; - -%feature("director") _SetGradCallback; -class _SetGradCallback { - public: - _SetGradCallback(); - virtual ~_SetGradCallback(); - - virtual SymbolVar call(CompGraph &graph) = 0; - virtual bool empty() = 0; -}; - -%feature("director") _TimeoutCallback; -class _TimeoutCallback { - public: - _TimeoutCallback(); - virtual ~_TimeoutCallback(); - - virtual bool call() = 0; -}; - -%pythoncode{ -import collections -import inspect -from .mgb_helper import callback_lazycopy - -class _CompGraphCallbackPyWrapper(_CompGraphCallback): - """wraps around a callable to be used as comp graph callback""" - - def __init__(self, f): - super().__init__() - if isinstance(f, callback_lazycopy): - f = f.func - self.set_eager_copy(False) - else: - self.set_eager_copy(True) - assert isinstance(f, collections.Callable) - self._func = f - self.__disown__() - - def call(self, value): - if value.size() == 1: - self._func(value[0]) - else: - self._func(value) - - -_CompGraphCallbackPyWrapperNoEager = lambda f: ( - _CompGraphCallbackPyWrapper(callback_lazycopy(f))) - -class _SplitPartCallbackPyWrapper(_SplitPartCallback): - def __init__(self, f): - super().__init__() - assert isinstance(f, collections.Callable) - self._func = f - self.__disown__() - - def call(self, size): - return tuple(map(int, self._func(size))) - - -class _SetGradCallbackPyWrapper(_SetGradCallback): - def __init__(self, f): - super().__init__() - if f is None: - self._func = None - else: - assert isinstance(f, collections.Callable) - nr_arg = len(list(filter( - lambda x: ( - x.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD and - x.default == inspect.Parameter.empty), - inspect.signature(f).parameters.values()))) - if not nr_arg: - f = lambda graph, f0=f: f0() - else: - assert nr_arg == 1, 'bad callback for SetGrad: {}'.format(f) - self._func = f - - self.__disown__() - - def call(self, graph): - if self._func is None: - return SymbolVar() - - ret = self._func(graph) - if ret is None: - ret = SymbolVar() - else: - assert isinstance(ret, SymbolVar), ( - 'bad return value for var maker: {!r}'.format(ret)) - return ret - - def empty(self): - return self._func is None - - -class _TimeoutCallbackPyWrapper(_TimeoutCallback): - def __init__(self, f): - super().__init__() - assert isinstance(f, collections.Callable) - self._func = f - self.__disown__() - - def call(self): - return bool(self._func()) - - -} // %pythoncode - -// vim: ft=swig diff --git a/python_module/src/swig/comp_graph.i b/python_module/src/swig/comp_graph.i deleted file mode 100644 index 80c05586..00000000 --- a/python_module/src/swig/comp_graph.i +++ /dev/null @@ -1,87 +0,0 @@ -/* - * $File: comp_graph.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - - -%pythoncode{ -from .mgb_helper import copy_output, FuncOutputSaver -import json -} // pythoncode - -%feature("autodoc", """a callable object compiled from :class:`CompGraph`. - -.. note:: - - Only the most recently compiled AsyncExec object can be used. -""") AsyncExec; -%feature("autodoc", """explicitly release the underlying staticially allocated -device memory""") AsyncExec::clear_device_memory; -class AsyncExec { - public: - AsyncExec() = delete; - - void _execute(); - void _wait(); - double _get_prev_exec_time(); - std::string _to_json_str(); - SymbolVarArray _find_mutable_input(); - std::vector> - _update_static_alloc_plan_and_get_size(); - - void clear_device_memory(); - - %include "comp_graph_impl_AsyncExec.py" -}; - -%template(_VectorAsyncExec) std::vector; - -%feature("autodoc", """use device memory manager in another computing graph to -manage memory of this graph, so their memories can be shared. This is safe only -when :class:`AsyncExec` compiled from these graphs do not run concurrently.""") -CompGraph::share_device_memory_with; -%feature("valuewrapper") CompGraph; -class CompGraph { - public: - CompGraph(); - - AsyncExec _do_compile(bool copy, bool optimize_for_inference); - std::vector _do_compile_multi_part(); - void _add_output_spec(SymbolVar &var, _CompGraphCallback *callback); - void _add_multi_part_endpoint(); - void _clear_output_spec(); - size_t _release(); - - CompGraph& share_device_memory_with(CompGraph &other); - - PyObject* _user_data(); - void clear_device_memory(); - - %extend { - size_t _id() const { - return $self->get().id(); - } - - size_t _get_ptr_addr() const { - return reinterpret_cast(&$self->get()); - } - - std::string get_mem_allocation_info() const { - return self->get().get_mem_allocation_info(); - } - - std::string __repr__() const { - auto &&graph = $self->get(); - return mgb::ssprintf("", graph.id(), &graph); - } - } - - %include "comp_graph_impl_CompGraph.py" -}; - -%include "comp_graph_tools.i" - -// vim: ft=swig diff --git a/python_module/src/swig/comp_graph_impl_AsyncExec.py b/python_module/src/swig/comp_graph_impl_AsyncExec.py deleted file mode 100644 index 28836c13..00000000 --- a/python_module/src/swig/comp_graph_impl_AsyncExec.py +++ /dev/null @@ -1,229 +0,0 @@ -%pythoncode { - -_var2output_saver = None -"""map from var id to corresponding output saver; setup by -:meth:`.CompGraph.compile`""" - -_expand_single_output = False -"""whether output contains only a single element and it should not be wrapped -by a list; setup by :meth:`.CompGraph.compile`""" - -__output_savers = None -"""list of (symvar, output saver)""" - -__inputs = None -"""list of (symvar, _HostSharedND.make_proxy(symvar)) pairs""" - -__allow_args_input = None - -__warned_unused_keys = None - -__auto_wait_enabled = True - -callbefore_func = None - -callback_func = None - -def __normalize_var_list(self, vlist): - if len(vlist) == 1: - vlist, = vlist - if isinstance(vlist, SymbolVar): - return [vlist] - ret = [] - for i in vlist: - assert isinstance(i, SymbolVar) - ret.append(i) - return ret - -def _setup_args(self, args, kwargs): - if kwargs: - assert not args, 'should not provide both args and kwargs' - for symvar, hsv in self.__inputs: - val = kwargs.pop(symvar.name, None) - assert val is not None, ( - 'missing input at runtime: {}'.format(symvar)) - hsv.set_value(val, borrow=self.__auto_wait_enabled) - - if kwargs: - keys = set(kwargs.keys()) - if keys != self.__warned_unused_keys: - from .logconf import get_logger - logger = get_logger() - logger.warning( - 'extra kwargs provided for megbrain AsyncExec: {}'.format( - keys)) - self.__warned_unused_keys = keys - return - - assert not args or self.__allow_args_input, ( - 'pass non-keyword args to function compiled without' - ' inputs spec') - assert len(args) == len(self.__inputs), ( - 'inputs do not match: args={} needed={}'.format( - args, [i[0] for i in self.__inputs])) - for (symvar, hsv), val in zip(self.__inputs, args): - hsv.set_value(val, borrow=self.__auto_wait_enabled) - -def enable_borrow_on_cpu(self, flag=True): - """whether to allow borrow input tensor memory on CPU; if set to True, then - the user should ensure that memory buffers of input tensors are unchanged. - - This is set to False by default. - """ - for _, i in self.__inputs: - i.enable_borrow_on_cpu(flag) - -def __call__(self, *args, **kwargs): - """Execute the function; either one of positional arguments or keyword - arguments must be given. Set :attr:`inputs` to change the order of - positional arguments. The keys in keyword arguments are the names of input - symvars - - :return: if auto wait is disabled, the return value would be - :class:`FuncOutputSaver` objects corresponding to the vars marked by - :class:`copy_output`; if auto wait is enabled, the numerical values as - :class:`numpy.ndarray` would be returned. - """ - if self.callbefore_func: - if not callable(self.callbefore_func): - raise TypeError( - "callbefore func must be callable: {}".format(self.callbefore_func)) - self.callbefore_func() - self._setup_args(args, kwargs) - self._execute() - if self.callback_func: - if not callable(self.callback_func): - raise TypeError( - "callback func must be callable: {}".format(self.callback_func)) - self.callback_func() - if self.__auto_wait_enabled: - self.wait() - - if not self.__output_savers: - return - ret = [] - if self.__auto_wait_enabled: - for _, i in self.__output_savers: - ret.append(i.get()) - else: - for _, i in self.__output_savers: - ret.append(i) - if self._expand_single_output: - ret, = ret - return ret - -def wait(self): - """wait for previous async exec to finish; wait is needed (i.e. the - function runs in async mode) only when there is no output callback (i.e. - all outputs are given by dest symvar only), or :meth:`disable_auto_wait` is - called explicitly. - - :return: self""" - self._wait() - return self - -@property -def prev_exec_time(self): - """previous execution time in seconds""" - return self._get_prev_exec_time() - -@property -def inputs(self): - """get input vars needed at runtime, in the order as the values that should - be passed to :meth:`__call__` - - :setter: Set the order of input vars, which must be created by - :func:`.make_arg`. None could also given, and in such case only keyword - arguments would be allowed for :meth:`__call__` - - :type: tuple of :class:`.SymbolVar` - """ - return tuple(i[0] for i in self.__inputs) - -@inputs.setter -def inputs(self, *inputs): - if self.__inputs is None: - needed = tuple(self._find_mutable_input()) - used_names = set() - for i in needed: - assert i.name not in used_names, ( - 'duplicated input name: {}'.format(i.name)) - used_names.add(i.name) - self.__inputs = [(i, _HostSharedND.make_proxy(i)) for i in needed] - - if len(inputs) == 1 and inputs[0] is None: - self.__allow_args_input = False - return - - inputs = self.__normalize_var_list(inputs) - inpvar2proxy = dict(self.__inputs) - self.__allow_args_input = True - reordered = [] - for i in inputs: - proxy = inpvar2proxy.pop(i, None) - if proxy is None: - raise TypeError('extra input var provided: {}; needed: {}'.format( - i, self.inputs)) - reordered.append((i, proxy)) - - assert not inpvar2proxy, 'inputs not provided: {}'.format( - list(inpvar2proxy.keys())) - - self.__inputs = reordered - -@property -def available_outputs(self): - """get output vars that could be used to set :attr:`outputs`. The order may - be unstable - - :type: tuple of :class:`.SymbolVar`""" - return tuple(self._var2output_saver.keys()) - -@property -def outputs(self): - """get output vars whose corresponding values would be returned by - :meth:`__call__` - - :setter: set the order of output vars to be returned. Duplicated vars could - be included, but all the vars must have been provided to - :meth`.CompGraph.compile`. - - :type: tuple of :class:`.SymbolVar`""" - if not self.__output_savers: - return - - if self._expand_single_output: - (var, saver), = self.__output_savers - return var - return tuple(var for var, saver in self.__output_savers) - -@outputs.setter -def outputs(self, *outputs): - olist = [] - for var in self.__normalize_var_list(outputs): - saver = self._var2output_saver.get(var) - assert saver is not None, 'var {} is not set to be output var'.format( - var) - olist.append((var, saver)) - self.__output_savers = olist - -def dump(self): - """dump internal graph and execution sequence as - json-serializable object""" - return json.loads(self._to_json_str()) - -def disable_auto_wait(self): - """if there is output callback function, then by default when - :meth:`__call__` is invoked, it would not return until all computation is - finished. This behavior can be changed by disabling auto wait, so the - function returns as early as possible.""" - self.__auto_wait_enabled = False - -def update_static_alloc_plan_and_get_size(self): - """update static memory allocation plan without actual allocation - - :return: a dict that maps from comp node to size of allocation in bytes - """ - return {k: v for k, v in self._update_static_alloc_plan_and_get_size()} - -} diff --git a/python_module/src/swig/comp_graph_impl_CompGraph.py b/python_module/src/swig/comp_graph_impl_CompGraph.py deleted file mode 100644 index 5f87a532..00000000 --- a/python_module/src/swig/comp_graph_impl_CompGraph.py +++ /dev/null @@ -1,191 +0,0 @@ -%pythoncode{ - -@property -def id(self): - """an integer increasing ID""" - return self._id() - -def __eq__(self, rhs): - return isinstance(rhs, CompGraph) and self.id == rhs.id - -def __hash__(self): - return self.id - -@property -def user_data(self): - """get a dict that is associated with this computing graph to store - arbitrary user data""" - return self._user_data() - -def _process_output_spec(self, inputs, outspec): - """process user-provided output spec and add to the output staging list of - this graph - - :return: a callable ``f(func)` to update compiled :class:`.AsyncExec` status - """ - assert outspec - - if isinstance(outspec, copy_output): - outspec = [outspec] - expand_single_output = True - else: - expand_single_output = False - - var2output_saver = {} - output_vars = [] - - for spec in outspec: - if isinstance(spec, copy_output): - var = spec.symvar - output_vars.append(var) - if var in var2output_saver: - continue - - callback = FuncOutputSaver(spec.borrow_mem) - var2output_saver[var] = callback - elif isinstance(spec, SymbolVar): - var = spec - callback = None - else: - var, callback = spec - assert isinstance(var, SymbolVar) - if callback is not None: - callback = _CompGraphCallbackPyWrapper(callback) - self._add_output_spec(var, callback) - - def update(func): - assert isinstance(func, AsyncExec) - func.inputs = inputs - if output_vars: - func._var2output_saver = var2output_saver - func._expand_single_output = expand_single_output - func.outputs = output_vars - - return update - -def compile(self, inputs, outspec, *, copy=False, optimize_for_inference=False): - """Compile the graph to get a callable function for numerical evaluation - - .. warning:: - - If ``compile()`` is called multiple times, only the most recent result - function can be used. - - :type inputs: iterable of :class:`.SymbolVar` or None - :param inputs: specifying the positional parameters to be passed to the - generated function, or use None for keyword params only - :type outspec: iterable of *single_outspec* - :param outspec: specifying how the compiled function should - return outputs. Each *single_outspec* may be one of the - following forms: - - * a pair of (var, callback), the callback would be called during - function execution with a :class:`.CompGraphCallbackValueProxy` - argument corresponding to the given symbolvar. Additionally, - *callback* may be wrapped by :class:`.callback_lazycopy`; see the - its document for details. - * a single :class:`.SymbolVar`, to ensure this var is computed (so - the non-pure operators on its dependency path could take effect) - * a :class:`.copy_output` object, so the var's value would be - copied to the return value of compiled function. If there is one - such spec, the function would be synchronous. - :param copy: whether to copy the graph - :param optimize_for_inference: whether to run - :func:`.optimize_for_inference` on the output vars before compiling - :rtype: :class:`.AsyncExec` - """ - - self._clear_output_spec() - ret_update = self._process_output_spec(inputs, outspec) - ret = self._do_compile(copy, optimize_for_inference) - ret_update(ret) - return ret - -def compile_outonly(self, outputs, *, inputs=None): - """compile for only output; (almost) equavalent to - ``self.compile(inputs, [copy_output(i) for i in outputs])`` - - :type outputs: :class:`.SymbolVar` or list of - :class:`.SymbolVar` - :param outputs: the output symbol vars - """ - if isinstance(outputs, SymbolVar): - outputs = copy_output(outputs) - else: - assert isinstance(outputs, collections.Iterable), ( - '{} not iterable'.format(outputs)) - outputs = [copy_output(i) for i in outputs] - - return self.compile(inputs, outputs) - -def compile_multi_part(self, io_specs): - """Compile multiple functions for partial execution. Each function would - only execute the oprs necessary to compute current outspec, and intermediate - results from previous functions are reused. The functions would share - underlying device storage with this graph. - - .. warning:: - - Each individual partial function would have a newly created computing - graph. Therefore plugins attached on this graph would not be effective - on the partial functions. - - :param io_specs: input/output specifications as a list of - ``(inputs, outspec)`` pairs. Each pair is defined as the params of - :meth:`compile`. - :return: a list of :class:`.AsyncExec` objects as the functions - corresponding to each part - """ - self._clear_output_spec() - updaters = [] - for inputs, outspec in io_specs: - updaters.append(self._process_output_spec(inputs, outspec)) - self._add_multi_part_endpoint() - funcs = self._do_compile_multi_part() - for i, j in zip(funcs, updaters): - j(i) - return funcs - -def make_shared(self, comp_node, *, dtype=None, - shape=None, value=None, name=None, volatile=False): - """make a shared value belonging to this comp graph; see - :func:`.make_shared`""" - from . import make_shared - return make_shared(comp_node, dtype=dtype, shape=shape, value=value, - comp_graph=self, name=name, volatile=volatile) - -def make_immutable(self, comp_node, value, *, dtype=None, name=None): - """make an immutable value belonging to this comp graph; see - :func:`.make_immutable`""" - from . import make_immutable - return make_immutable(comp_node, self, value, dtype=dtype, name=name) - -def make_arg(self, comp_node, *, dtype=np.float32, shape=None, name=None, - value=None): - """make a runtime argument belonging to this comp graph; see - :func:`.make_arg`""" - from . import make_arg - return make_arg(comp_node, self, dtype=dtype, shape=shape, name=name, - value=value) - -def set_option(self, name, val): - """set comp graph option; see :func:`.set_comp_graph_option`""" - from .config import set_comp_graph_option - return set_comp_graph_option(self, name, val) - -def is_eager(self): - """return True if comp_graph is in eager mode""" - from .config import comp_graph_is_eager - return comp_graph_is_eager(self) - -def release(self): - """explicitly release the underlying computing graph storage; this is - mostly useful in eager evaluation mode, since doing so would release the - underlying device storage - - :return: original reference count before release - :rtype: int - """ - return int(self._release()) - -} diff --git a/python_module/src/swig/comp_graph_tools.i b/python_module/src/swig/comp_graph_tools.i deleted file mode 100644 index 7f6262df..00000000 --- a/python_module/src/swig/comp_graph_tools.i +++ /dev/null @@ -1,55 +0,0 @@ -%{ -#include "megbrain/gopt/framework.h" -%} - -%inline { - - SymbolVarArray _get_owner_opr_inputs(SymbolVar var) { - mgb_assert(var.node()); - return mgb::cg::to_symbol_var_array(var.node()->owner_opr()->input()); - } - - std::string _get_owner_opr_type(SymbolVar var) { - mgb_assert(var.node()); - return var.node()->owner_opr()->dyn_typeinfo()->name; - } - - std::string _get_opr_type(Operator opr) { - return opr.node()->dyn_typeinfo()->name; - } - - SymbolVarArray _replace_vars(const SymbolVarArray& repl_src, - const SymbolVarArray& repl_dst, - const SymbolVarArray& vars) { - mgb::ThinHashMap varmap; - for (size_t i = 0; i < repl_src.size(); ++i) { - varmap[repl_src[i]] = repl_dst[i]; - } - return mgb::cg::replace_vars(vars, varmap); - } - - typedef std::vector OperatorArray; - SymbolVarArray _replace_oprs(const OperatorArray& repl_src, - const OperatorArray& repl_dst, - const SymbolVarArray& vars) { - mgb::ThinHashMap - oprmap; - for (size_t i = 0; i < repl_src.size(); ++i) { - oprmap[repl_src[i].node()] = repl_dst[i].node(); - } - return mgb::cg::replace_oprs(vars, oprmap); - } - - void _set_priority_to_id(const SymbolVarArray& dest_vars) { - auto on_opr = [](mgb::cg::OperatorNodeBase* opr) { - if (opr->node_prop().attribute().priority == 0) { - opr->node_prop().attribute().priority = opr->id(); - } - }; - mgb::cg::DepOprIter dep_iter{on_opr}; - for (const SymbolVar& var : dest_vars) { - dep_iter.add(var); - } - } -} -// vim: ft=swig foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/swig/comp_node.i b/python_module/src/swig/comp_node.i deleted file mode 100644 index 708cd34f..00000000 --- a/python_module/src/swig/comp_node.i +++ /dev/null @@ -1,165 +0,0 @@ -/* - * $File: comp_node.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%{ -using mgb::CompNode; -static CompNode::DeviceType str2device_type( - const std::string &str, bool allow_unspec) { - using T = CompNode::DeviceType; - if (str == "CPU") { - return T::CPU; - } else if (str == "CUDA" || str == "GPU") { - return T::CUDA; - } else { - mgb_assert(allow_unspec && str == "XPU", "bad device type: %s; which " - "must be either CPU, GPU or XPU", str.c_str()); - return T::UNSPEC; - } -} -%} - -class CompNode { - public: - static CompNode load(const char* id); - - %extend { - static std::vector _parse_locator(const std::string &id) { - auto logi = CompNode::Locator::parse(id); - return { - static_cast(logi.type), logi.device, logi.stream, - }; - } - static void _set_device_map(const std::string &type, - int from, int to) { - CompNode::Locator::set_device_map( - str2device_type(type, false), from, to); - } - - static size_t _get_device_count(const std::string &type, bool warn) { - return CompNode::get_device_count(str2device_type(type, true), warn); - } - - static void _set_unspec_device_type(const std::string &type) { - CompNode::Locator::set_unspec_device_type( - str2device_type(type, false)); - } - - static void _try_coalesce_all_free_memory() { - CompNode::try_coalesce_all_free_memory(); - } - - bool _check_eq(const CompNode &rhs) const { - return (*$self) == rhs; - } - - std::vector _get_locator() const { - auto logi = $self->locator_logical(), phys = $self->locator(); - return { - static_cast(logi.type), logi.device, logi.stream, - static_cast(phys.type), phys.device, - phys.stream, - }; - } - - std::string __getstate__() { - return $self->to_string_logical(); - } - - std::string __str__() { - return $self->to_string(); - } - - std::string __repr__() { - return mgb::ssprintf("CompNode(\"%s\" from \"%s\")", - $self->to_string().c_str(), - $self->to_string_logical().c_str()); - } - - size_t _get_mem_align_() const { - return $self->get_mem_addr_alignment(); - } - - size_t __hash__() { - return mgb::hash(*$self); - } - - std::pair _get_mem_status_bytes() { - return $self->get_mem_status_bytes(); - } - } - - %pythoncode { - DEVICE_TYPE_MAP = { - 0: 'XPU', - 1: 'CUDA', - 2: 'CPU' - } - - cn_thread_local = threading.local() - """used to save map location when calling :func:`mge.load()`""" - - def __setstate__(self, state): - """:func:`mge.load()` and :func:`deepcopy()` call this function, - The latter will not produce the map_location attribute""" - if "map_location" in CompNode.cn_thread_local.__dict__.keys(): - state = CompNode.cn_thread_local.map_location(state) - self.this = CompNode_load(state).this - - def __eq__(self, rhs): - return isinstance(rhs, CompNode) and self._check_eq(rhs) - - @property - def mem_align(self): - """memory alignment in bytes""" - return self._get_mem_align_() - - @property - def locator_logical(self) -> [str, int, int]: - """logical locator: a tuple containing (type, device, stream)""" - t, d, s = self._get_locator()[:3] - return self.DEVICE_TYPE_MAP[t], d, s - - @property - def locator_physical(self) -> [str, int, int]: - """physical locator: a tuple containing (type, device, stream)""" - t, d, s = self._get_locator()[3:] - return self.DEVICE_TYPE_MAP[t], d, s - - @property - def mem_status_bytes(self) -> [int, int]: - """get (total, free) memory on the computing device in bytes. - - Free memory includes memory chunks that buffered by the memory manager. - - Please note that the results are the same for different CompNode within same device. - """ - return self._get_mem_status_bytes() - } -}; -%template(_VectorCompNode) std::vector; -%template(_VectorCompNodeAndSize) std::vector>; - -%pythoncode { - -def as_comp_node(desc): - """create a :class:`.CompNode` by desc - - :type desc: str or :class:`.CompNode` - :param desc: if str, an id describing the comp node, like 'gpu0', 'gpu1'. A - special id 'gpux' represents the logical default comp node. Otherwise - it should already be a :class:`.CompNode`. - """ - if isinstance(desc, str): - return CompNode_load(desc) - assert isinstance(desc, CompNode), ( - 'could not convert {} to CompNode'.format(desc)) - return desc - -} - -// vim: ft=swig diff --git a/python_module/src/swig/craniotome.i b/python_module/src/swig/craniotome.i deleted file mode 100644 index adff8c4d..00000000 --- a/python_module/src/swig/craniotome.i +++ /dev/null @@ -1,88 +0,0 @@ -/* - * $File: craniotome.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%{ -#include "craniotome.h" -%} - -typedef std::vector> TensorShapeVec; -%template(_VectorTensorShape) std::vector>; - -%feature("director") CraniotomeDesc; -class CraniotomeDesc { - - public: - virtual ~CraniotomeDesc() = default; - - virtual void _setup_self(PyObject *result) const = 0; - - virtual bool _is_same(PyObject *rhs) const = 0; - - virtual uint32_t _node_flag() const = 0; - - virtual size_t _hash() const = 0; - - virtual std::string _get_opr_type_name() = 0; - - virtual size_t _get_nr_outputs() = 0; - - virtual void _execute( - const std::vector &inputs, - std::vector &outputs) = 0; - - virtual TensorShapeVec _infer_shape( - const TensorShapeVec &inp_shape) = 0; - - virtual SymbolVarArray _grad( - size_t wrt_idx, - const SymbolVarArray &inputs, - const SymbolVarArray &outputs, - const SymbolVarArray &out_grad) = 0; - - virtual size_t _get_nr_dev_comp_order_deps() = 0; - - SymbolVarArray _get_all_io_vars(); - - virtual bool _init_output_dtype( - PyObject *input_dtypes, PyObject *result) = 0; - - virtual CompGraph _get_comp_graph() = 0; - - virtual void _copy() const = 0; - void _set_copy_result(CraniotomeDesc *result); - - virtual void _setup_serialize_params(PyObject *output) const = 0; - - virtual void _on_graph_compile_or_func_del( - const std::vector& used_outputs) = 0; - - %extend { - CompNode _get_comp_node() { - mgb_assert($self->owner_opr); - return $self->owner_opr->comp_node(); - } - - size_t _get_opr_id() { - mgb_assert($self->owner_opr); - return $self->owner_opr->id(); - } - } -}; - -%inline { - static SymbolVarArray make_opr_from_craniotome_desc( - CraniotomeDesc *desc, - const SymbolVarArray inputs, - const OperatorNodeConfig &config) { - - return mgb::opr::Craniotome::make( - std::unique_ptr(desc), inputs, config); - } -} - -// vim: ft=swig diff --git a/python_module/src/swig/loop.i b/python_module/src/swig/loop.i deleted file mode 100644 index 0a094d2d..00000000 --- a/python_module/src/swig/loop.i +++ /dev/null @@ -1,134 +0,0 @@ -/* - * $File: loop.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%{ -#include "megbrain/opr/loop.h" -#include -using LoopDesc = mgb::opr::Loop::Desc; -%} - -%feature("autodoc", -"""An object used by callbacks for :func:`.make_loop` to describe the sub graph in -loop operator. See docs of :func:`.make_loop` for more explanation. -""") LoopDesc; - -%feature("autodoc", -"""forward a variable belonging to the parent graph into the sub graph - -:type input: :class:`.SymbolVar` -:param input: a variable in the parent graph -:type has_assign: bool -:param has_assign: whether this input var would be assigned later -:rtype: :class:`.SymbolVar` -:return: the corresponding variable in the sub graph -""") LoopDesc::add_input; - -%feature("autodoc", -"""instructs that value of a variable in the sub graph should be replaced by -the new value at the end of each loop. - -:type dest: :class:`.SymbolVar` -:param dest: the variable to be updated. It must be a return value of - :meth:`add_input`. -:type val: :class:`.SymbolVar` -:param val: the new value -:return: self to be chained -""") LoopDesc::assign; - -%feature("autodoc", -"""set a variable to indicate whether the loop should be repeated. - -:type cond: :class:`.SymbolVar` -:param cond: loop would be repeated if the absolute value of *cond* is more - than 1e-6; It must evaluates to a scalar. -:return: self to be chained -""") LoopDesc::set_loop_condition; - -%feature("autodoc", -"""get the loop counter, which would indicate current loop count, starting from zero. - -:rtype: :class:`.SymbolVar` -:return: the loop counter -""") LoopDesc::get_counter_var; - -%feature("autodoc", -"""mark a variable to be copied as output value of the loop operator. - -:type var: :class:`.SymbolVar` -:param var: a variable in sub graph whose value should be copied into the - parent graph -:type mode: str -:param mode: output mode; possible values are: - - * ``'last'``: only the last value would be recorded - * ``'all'``: all the value would be recorded; shape of the variable should - not change during looping, and the output var would be prepended with an - extra leading dimension to index the loop count. - * ``'sum'``: sum of all values of this variable during looping would be - copied to output - * ``'product'``: product of all values of this variable during looping - would be copied to output -:rtype: int -:return: call id, starting at 0 and increasing continuously -""") LoopDesc::add_output; - -class LoopDesc { - public: - LoopDesc() = delete; - ~LoopDesc() = delete; - - SymbolVar add_input(SymbolVar input, bool has_assign = false); - LoopDesc& assign(SymbolVar dest, SymbolVar val); - LoopDesc& set_loop_condition(SymbolVar cond); - SymbolVar get_counter_var(); - - %extend { - size_t add_output(SymbolVar& var, std::string mode) { - using Desc = mgb::opr::Loop::Desc; - auto get_mode = [&]() { - using OM = Desc::OutputMode; - for (char &i: mode) - i = std::tolower(i); - if (mode == "last") - return OM::LAST; - if (mode == "all") - return OM::ALL; - if (mode == "sum") - return OM::SUM; - throw mgb::MegBrainError( - mgb::ssprintf("unrecognized loop mode: %s", - mode.c_str())); - }; - return $self->add_output(var, get_mode()); - } - } - -}; - -%feature("director") _LoopDescMakerCallback; -%inline { - class _LoopDescMakerCallback { - public: - virtual ~_LoopDescMakerCallback() = default; - virtual void call(LoopDesc &desc) = 0; - }; - - static SymbolVarArray _make_loop( - _LoopDescMakerCallback* callback, int swap_interval, - const OperatorNodeConfig &config) { - - std::shared_ptr<_LoopDescMakerCallback> callbackptr{callback}; - - auto desc_maker = [callbackptr](mgb::opr::Loop::Desc &loop_desc) { - callbackptr->call(loop_desc); - }; - return mgb::opr::Loop::make(desc_maker, swap_interval, config); - } -} // %inline - -// vim: ft=swig diff --git a/python_module/src/swig/mgb.i b/python_module/src/swig/mgb.i deleted file mode 100644 index 3a2c871d..00000000 --- a/python_module/src/swig/mgb.i +++ /dev/null @@ -1,71 +0,0 @@ -/* - * $File: mgb.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%include "symbol_var_array.i" - -%include "mgb_exception.i" -%module(directors="1") mgb -%{ -#define SWIG_FILE_WITH_INIT 1 -void mgb_init_numpy(); // implemented in python_helper.cpp -void _init_intbx_types(PyObject *m); // implemented in intbx.cpp -void _init_bfloat16_types(PyObject *m); // implemented in bfloat16.cpp -%} - -%init %{ - mgb_init_numpy(); - _init_intbx_types(m); - _init_bfloat16_types(m); -%} - -%include "std_vector.i" -%include "std_pair.i" -%include "stdint.i" -%template(_VectorSizeT) std::vector; -%template(_VectorInt) std::vector; -%template(_VectorString) std::vector; -%template(_PairStringSizeT) std::pair; -%template(_PairSizeTSizeT) std::pair; -%template(_VectorPairSizeTString) std::vector>; - -%pythoncode %{ -import numpy as np -import os -import threading -intb1 = _mgb.intb1 -intb2 = _mgb.intb2 -intb4 = _mgb.intb4 -bfloat16 = _mgb.bfloat16 -%} - -%{ -#include "megbrain/comp_node.h" -#include "megbrain/tensor.h" -#include "megbrain/graph.h" - -#include "megbrain_wrap.h" -#include "megbrain_config.h" -#include "megbrain_serialize.h" -#include "plugin.h" -%} - -%include "megbrain_build_config.h" -%include "comp_node.i" -%include "comp_graph.i" -%include "symbol_var.i" -%include "shared_nd.i" -%include "../cpp/megbrain_config.h" -%include "callback.i" -%include "operator.i" -%include "craniotome.i" -%include "misc.i" -%include "loop.i" -%include "../cpp/megbrain_serialize.h" -%include "../cpp/plugin.h" - -// vim: ft=swig diff --git a/python_module/src/swig/mgb_exception.i b/python_module/src/swig/mgb_exception.i deleted file mode 100644 index 8a6ee7c5..00000000 --- a/python_module/src/swig/mgb_exception.i +++ /dev/null @@ -1,40 +0,0 @@ -/* - * $File: mgb_exception.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - - -%include "std_string.i" -%include "std_except.i" -%include "pyabc.i" - -%{ -#include "python_helper.h" -%} - -namespace PyMGBExceptionMaker { - void _reg_exception_class(PyObject *cls); -} - -%feature("director:except") { - if ($error) - PyExceptionForward::throw_(); -} - -%include "exception.i" -%allowexception; -%exception { - try { - $action - } catch (std::exception &e) { - PyMGBExceptionMaker::setup_py_exception(e); - SWIG_fail; - } catch(...) { - SWIG_exception(SWIG_UnknownError, "Unknown exception"); - } -} - -// vim: ft=swig diff --git a/python_module/src/swig/misc.i b/python_module/src/swig/misc.i deleted file mode 100644 index d3f18946..00000000 --- a/python_module/src/swig/misc.i +++ /dev/null @@ -1,151 +0,0 @@ -/* - * $File: misc.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - - -%{ -#include "megbrain/utils/persistent_cache.h" -#include "megbrain/serialization/helper.h" -#include "megbrain/gopt/inference.h" -#include "megbrain/plugin/opr_footprint.h" -using _PyStackExtracter = PyStackExtracter; -using _PersistentCache = mgb::PersistentCache; -using _PersistentCacheBlob = _PersistentCache::Blob; -using _MaybePersistentCacheBlob = mgb::Maybe<_PersistentCacheBlob>; -using _OptimizeForInferenceOptions = mgb::gopt::OptimizeForInferenceOptions; -%} - -%feature("director") _PyStackExtracter; -class _PyStackExtracter { - public: - virtual ~_PyStackExtracter() = default; - virtual std::string extract() = 0; - static void reg(_PyStackExtracter *p); -}; - -// from Blob to python bytes -%typemap(in) const _PersistentCacheBlob& { - mgb_assert(PyBytes_Check($input)); - $1->ptr = PyBytes_AsString($input); - $1->size = PyBytes_Size($input); -} -%typemap(directorin) const _PersistentCacheBlob& { - $input = PyBytes_FromStringAndSize( - static_cast($1.ptr), $1.size); -} -%typemap(directorout) _MaybePersistentCacheBlob { - mgb_assert($1->ob_refcnt >= 2, "persistent cache result refcnt too small"); - if ($1 == Py_None) { - $result = mgb::None; - } else { - mgb_assert(PyBytes_Check($input)); - _PersistentCacheBlob blob; - blob.ptr = PyBytes_AsString($1); - blob.size = PyBytes_Size($1); - $result = blob; - } -} - -%feature("director") _PersistentCache; -class _PersistentCache { - public: - virtual ~_PersistentCache() = default; - - virtual void put(const std::string &category, - const _PersistentCacheBlob &key, - const _PersistentCacheBlob &value) = 0; - - virtual _MaybePersistentCacheBlob get( - const std::string &category, - const _PersistentCacheBlob &key) = 0; - - %extend { - static void reg(_PersistentCache *p) { - _PersistentCache::set_impl({p, [](_PersistentCache*){}}); - } - } -}; - -struct _OptimizeForInferenceOptions { -#define SET(n) void enable_##n(); - SET(f16_io_f32_comp); - SET(f16_io_comp); - SET(fuse_conv_bias_nonlinearity); - SET(fuse_conv_bias_with_z); -#undef SET -#define SET(_trans, _trans_capital) \ - void enable_##_trans(); \ - - SET(nchw4, NCHW4); - SET(nhwcd4, NHWCD4); - SET(nchw88, NCHW88); - SET(nchw44, NCHW44); - SET(nchw44_dot, NCHW44_DOT); - SET(nchw32, NCHW32); - SET(chwn4, CHWN4); -#undef SET -}; - -%inline { - static SymbolVarArray _optimize_for_inference( - const SymbolVarArray& dest_vars, - const _OptimizeForInferenceOptions& opt) { - return mgb::gopt::optimize_for_inference(dest_vars, opt); - } - - // defined in function_replace.cpp - void _register_logger(PyObject *logger); - void _timed_func_set_fork_exec_path(const char *arg0, const char *arg1); - void _timed_func_exec_cb(const char *user_data); - - // defined in megbrain_wrap.cpp - void _mgb_global_finalize(); - std::vector _get_mgb_version(); - SymbolVarArray _grad(SymbolVar target, SymbolVarArray wrts, - bool warn_mid_wrt, int use_virtual_grad, - bool return_zero_for_nodep); - SymbolVar _inter_graph_trans_var( - CompGraph &dest_graph, SymbolVar src); - SymbolVar _get_graph_optimizer_replaced_var(SymbolVar src); - void _add_update_fastpath(SharedND& dest, SharedND& delta, - float alpha, float beta, float bias); - void _add_update_fastpath(SharedND& dest, - CompGraphCallbackValueProxy& delta, - float alpha, float beta, float bias); - - static SymbolVar _current_grad_target(CompGraph &graph) { - return mgb::cg::current_grad_target(graph.get()); - } - - uint32_t _get_dtype_num(PyObject *dtype) { - return static_cast(npy::dtype_np2mgb(dtype).enumv()); - } - - PyObject* _get_serialized_dtype(PyObject *dtype) { - PYTHON_GIL; - std::string sdtype; - auto write = [&sdtype](const void* data, size_t size) { - auto pos = sdtype.size(); - sdtype.resize(pos + size); - memcpy(&sdtype[pos], data, size); - }; - mgb::serialization::serialize_dtype(npy::dtype_np2mgb(dtype), write); - return PyBytes_FromStringAndSize(sdtype.data(), sdtype.size()); - } - - size_t max_size_t() { - return std::numeric_limits::max(); - } - - std::string _get_opr_fp_graph_exec( - CompGraph& cg, const SymbolVarArray& outputs) { - auto json = mgb::OprFootprint::get_opr_fp_graph_exec(cg.get(), outputs); - return json->to_string(); - } -} - -// vim: ft=swig diff --git a/python_module/src/swig/operator.i b/python_module/src/swig/operator.i deleted file mode 100644 index e7bd0911..00000000 --- a/python_module/src/swig/operator.i +++ /dev/null @@ -1,148 +0,0 @@ -/* - * $File: operator.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%{ -#include "opr_helper.h" -#include "opr_defs.h" - -using ::mgb::cg::OperatorNodeConfig; - -using _AxisIndexer = AxisIndexer; - -static inline PyObject* _to_mgb_supported_dtype(PyObject* dtype) { - return ::npy::to_mgb_supported_dtype(dtype); -} - -%} - -%feature("autodoc", "Extra configuration for an operator") OperatorNodeConfig; -class OperatorNodeConfig { - public: - OperatorNodeConfig(); - void name(const std::string &name); - void comp_node(const CompNode &node); - - %extend { - void comp_node_arr(const std::vector &arr) { - OperatorNodeConfig::CompNodeArray tarr(arr.begin(), arr.end()); - $self->comp_node_arr(tarr); - } - - CompNode require_comp_node() { - mgb_assert($self->comp_node().size() == 1, - "comp_node is required for the config"); - return $self->comp_node()[0]; - } - - void output_dtype(PyObject* dtype) { - $self->output_dtype(npy::dtype_np2mgb(dtype)); - } - } -}; - -%feature("autodoc", - "representing a operator node in a computing graph") Operator; -class Operator { -public: - %extend { - size_t _get_id() const { - return $self->id(); - } - - const std::string& _get_name() const { - return $self->name(); - } - - const std::string& _get_params() const { - return $self->params(); - } - - SymbolVarArray _get_inputs() { - return $self->inputs(); - } - - SymbolVarArray _get_outputs() { - return $self->outputs(); - } - - CompGraph _get_owner_graph() { - const auto& cg = $self->get_owner_graph(); - return CompGraph::make_from_shared_ptr(cg); - } - - %include "operator.py" - } -}; - -%template(_VectorOperator) std::vector; - -class _AxisIndexer { -public: - static _AxisIndexer make_interval(int axis, SymbolVar begin, SymbolVar end, - SymbolVar step); - - static _AxisIndexer make_index(int axis, SymbolVar idx); -}; -%template(_VectorAxisIndexer) std::vector<_AxisIndexer>; - -%inline { - // all defined in opr_helper.cpp - SymbolVarArray _create_opr( - const char *name, const SymbolVarArray &inputs, PyObject *params, - const OperatorNodeConfig &config); - - SymbolVar _create_subtensor_like_opr( - const std::string &name, - const SymbolVarArray& inputs, - const std::vector<_AxisIndexer> &idx, - const OperatorNodeConfig &config); - - SymbolVar _make_immutable( - CompGraph &comp_graph, PyObject *npyarr, PyObject *dtype, - const OperatorNodeConfig &config); -} - -PyObject* _to_mgb_supported_dtype(PyObject *dtype); - -%include "../cpp/opr_defs.h" - -%pythoncode { - -def make_opr_config(name=None, comp_node=None, output_dtype=None): - """make :class:`.OperatorNodeConfig` from given name or comp_node - - :type name: None or str - :param name: name for the operator - :type comp_node: None or comp_node-compatible or iterable of - comp_node-compatible - :param comp_node: a single comp_node, or iterable of comp_nodes - :type dtype: None or numpy-dtype compatible - :param dtype: the specified dtype the operator. - """ - rst = OperatorNodeConfig() - if comp_node is not None: - if isinstance(comp_node, str): - rst.comp_node(as_comp_node(comp_node)) - elif isinstance(comp_node, collections.Iterable): - vec = _VectorCompNode() - for i in comp_node: - vec.push_back(as_comp_node(i)) - rst.comp_node_arr(vec) - else: - rst.comp_node(as_comp_node(comp_node)) - if name is not None: - assert isinstance(name, str) - rst.name(name) - if output_dtype is not None: - rst.output_dtype(output_dtype) - - return rst - -} // %pythoncode - -// vim: ft=swig foldmethod=marker foldmarker=f{{{,f}}} diff --git a/python_module/src/swig/operator.py b/python_module/src/swig/operator.py deleted file mode 100644 index a1eb095e..00000000 --- a/python_module/src/swig/operator.py +++ /dev/null @@ -1,37 +0,0 @@ -%pythoncode { - -__owner_graph = None - -@property -def owner_graph(self): - """get the owner graph; note that a reference would be kept in this var""" - if self.__owner_graph is None: - self.__owner_graph = self._get_owner_graph() - return self.__owner_graph - -@property -def id(self): - """an integer identifier for this opr that is unique in the computing - graph""" - return int(self._get_id()) - -@property -def name(self): - return self._get_name() - -@property -def params(self): - import json - return json.loads(self._get_params()) - -@property -def inputs(self): - return tuple(self._get_inputs()) - -@property -def outputs(self): - return tuple(self._get_outputs()) - -def __repr__(self): - return 'Operator(id={},name={})'.format(self.id, self.name) -} diff --git a/python_module/src/swig/shared_nd.i b/python_module/src/swig/shared_nd.i deleted file mode 100644 index 03e3dced..00000000 --- a/python_module/src/swig/shared_nd.i +++ /dev/null @@ -1,125 +0,0 @@ -/* - * $File: shared_nd.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%pythoncode { -from .mgb_helper import SharedNDLazyInitializer -} // pythoncode - -%feature("autodoc", """a value stored on computing device and can be modified -by special operators in the graph""") SharedND; -class SharedND { - public: - SharedND(CompNode comp_node, PyObject *dtype); - - void _set_init_shape(const std::vector &shape); - void _resize(const std::vector &shape); - void _reset_zero(); - - PyObject* _get_npyarr(); - PyObject* _get_dtype(); - std::vector _get_shape(); - - void _copy_from_npyarr(PyObject *npyarr); - void _copy_from_value_proxy(CompGraphCallbackValueProxy &value); - void _share_from_value_proxy(CompGraphCallbackValueProxy &value); - static SharedND _from_symvar(SymbolVar symvar); - - void _set_copy_sync(bool flag); - uintptr_t _pubapi_dev_tensor_ptr(int version); - - void copy_to_sub_from_shared( - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step, - const SharedND &rhs); - - void copy_from_shared_sub(const SharedND &rhs, - int axis, ptrdiff_t begin, ptrdiff_t end, ptrdiff_t step); - - CompNode _get_comp_node(); - - SymbolVar _as_sym_var(CompGraph &graph, const std::string &name, - bool volatile_); - - void _share_memory_from(const SharedND &rhs, size_t begin); - - void _reset_dev_tensor(const SharedND& rhs); - - %include "shared_nd_SharedND.py" -}; -%template(_VectorSharedND) std::vector; - -class _HostSharedND { - public: - _HostSharedND(CompNode node, PyObject *dtype); - static _HostSharedND make_proxy(SymbolVar var); - - SymbolVar _as_sym_var(CompGraph &cg, bool enable_static_infer, - const std::string &name); - PyObject* _get_dtype(); - void _resize(const std::vector &shape); - void _copy_from_npyarr(PyObject *npyarr, bool borrow); - void _enable_borrow_on_cpu(bool flag); - std::string __repr__() const; - - %include "shared_nd_HostSharedND.py" -}; - - -%feature("autodoc", -"""a scalar value that can be modified after it has been created; -compared to :class:`SharedND`, it has the advantage that no comp node needs to -be specified.""") SharedScalar; -class SharedScalar { - public: - SharedScalar(PyObject *val); - void _set(PyObject *val); - PyObject* _get(); - bool _dtype_locked(); - void _lock_dtype(); - SymbolVar _as_sym_var(CompGraph &cg, CompNode &cn); - - %pythoncode { - - def lock_dtype(self): - """lock dtype so further set() calls must pass the same dtyped - value""" - self._lock_dtype() - - @property - def dtype_locked(self): - """whether dtype is locked""" - return self._dtype_locked() - - def set(self, val): - self._set(val) - - def get(self): - """get the value stored in this SharedScalar""" - return self._get()[0] - - def __getstate__(self): - state = self.__dict__.copy() - del state['this'] - state['__shared_scalar_value'] = self.get() - state['__shared_scalar_dtype_locked'] = self.dtype_locked - return state - - def __setstate__(self, state): - val = SharedScalar(state.pop('__shared_scalar_value')) - if state.pop('__shared_scalar_dtype_locked', True): - val._lock_dtype() - self.this = val.this - for k, v in state.items(): - self.__dict__[k] = v - - def __repr__(self): - return 'SharedScalar({})'.format(self.get()) - } -}; - - -// vim: ft=swig diff --git a/python_module/src/swig/shared_nd_HostSharedND.py b/python_module/src/swig/shared_nd_HostSharedND.py deleted file mode 100644 index f94ff798..00000000 --- a/python_module/src/swig/shared_nd_HostSharedND.py +++ /dev/null @@ -1,67 +0,0 @@ -%pythoncode{ - -__dtype = None - -def as_sym_var(self, cg, enable_static_infer, name=None): - """get symvar to represent value of this HostSharedND in a - computing graph - - :type cg: :class:`.CompGraph` - :param cg: computing graph - :type enable_static_infer: :class:`bool` - :param enable_static_infer: whether to enable static value - inference for this symvar; if set to True, the value must - be set up before calling :meth:`as_sym_var`. - """ - if name is None: - name = '' - return self._as_sym_var(cg, enable_static_infer, name) - -def symvar(self, comp_graph, name=None, *, enable_static_infer=None): - return self.as_sym_var(comp_graph, enable_static_infer, name) - -def enable_borrow_on_cpu(self, flag): - """whether to allow borrow memory in :meth:`set_value` if - the underlying comp ndoe is on CPU""" - self._enable_borrow_on_cpu(flag) - -def _set_value_print_warn( - self, reason, *, - disabled=os.getenv('MGB_DISABLE_SET_VALUE_WARN') is not None): - if disabled: - return - from .logconf import get_logger - logger = get_logger() - logger.warning('set {} from incompatible object is slow: {}'.format( - self, reason)) - -def set_value(self, w, *, borrow=False): - """set value to given numpy array - - :param borrow: if set to True, the memory of *w* may be - borrowed, and *w* must remain unmodified during usage of - this object - :type borrow: bool - :return: self - """ - if self.__dtype is None: - self.__dtype = self._get_dtype() - - if not isinstance(w, np.ndarray): - wtype = type(w) - w = np.ascontiguousarray(w, self.__dtype) - if w.size >= 1024: - self._set_value_print_warn( - 'not an ndarray object: {}'.format(wtype)) - elif w.size >= 1024: - if w.dtype != self.__dtype: - self._set_value_print_warn( - 'dtype mismatch: expect {}, get {}'.format( - self.__dtype, w.dtype)) - elif not w.flags['C_CONTIGUOUS']: - self._set_value_print_warn('non-contiguous ndarray') - - self._copy_from_npyarr(w, borrow) - return self - -} diff --git a/python_module/src/swig/shared_nd_SharedND.py b/python_module/src/swig/shared_nd_SharedND.py deleted file mode 100644 index da024c7a..00000000 --- a/python_module/src/swig/shared_nd_SharedND.py +++ /dev/null @@ -1,196 +0,0 @@ -%pythoncode{ - -__lazy_initializer = None - -def __apply_lazy_initializer(self): - """ __lazy_initializer released by self.set_value()""" - if self.__lazy_initializer is not None: - self.set_value(self.__lazy_initializer.get_value()) - -@property -def shape(self): - """get shape of unerlying data""" - if self.__lazy_initializer is not None: - val = self.__lazy_initializer.get_shape() - else: - val = self._get_shape() - return tuple(map(int, val)) - -@property -def comp_node(self): - return self._get_comp_node() - -@property -def dtype(self): - return self._get_dtype() - -@property -def lazy_initializer(self): - """object to specify how to initialize this SharedND, or None - if not set - - Please not that the initializer could be called at any time. - - :type: :class:`.SharedNDLazyInitializer` - """ - return self.__lazy_initializer - -@lazy_initializer.setter -def lazy_initializer(self, init): - assert not len(self._get_shape()), ( - 'can not set initializer for initialized SharedND') - assert isinstance(init, SharedNDLazyInitializer) - self.__lazy_initializer = init - -def set_value(self, w, *, sync=True, inplace=False, share=False): - """set value from a numpy array or from outputs in callback - - .. warning:: - - If sync is false, a reference to input is kept and the caller is - responsible to ensure that the input would not be modified after - this function returns. - - :param w: value to be set - :type w: :class:`numpy.ndarray`-compatible, :class:`SharedND` or - :class:`.CompGraphCallbackValueProxy` - :param sync: whether to sync device before returns - :type sync: bool - :param inplace: whether to copy in-place from another :class:`.SharedND`, - guaranteed no memory allocating; if True, this SharedND must have the - same shape as *w*, and buffer for this :class:`SharedND` would not be - re-allocated. - :param share: directly share the buffer in a - :class:`.CompGraphCallbackValueProxy` with zero copy - :return: self - """ - - if self is w: - return self - - if share: - assert isinstance(w, CompGraphCallbackValueProxy) - self._share_from_value_proxy(w) - return self - - self._set_copy_sync(sync) - if isinstance(w, CompGraphCallbackValueProxy): - self._copy_from_value_proxy(w) - return self - - if isinstance(w, SharedND): - w.__apply_lazy_initializer() - ax_type = -2 - if inplace: - ax_type = -3 - self.copy_from_shared_sub(w, ax_type, -1, -1, -1) - return self - assert not inplace, 'inplace only implemented for copying from SharedND' - - if self.__lazy_initializer is not None: - del self.__lazy_initializer - self._copy_from_npyarr(w) - return self - -def get_value(self): - """get value as numpy array - :return: numpy array, or None if value is empty""" - self.__apply_lazy_initializer() - return self._get_npyarr() - -def resize(self, *shape): - """resize the SharedND to given shape and allocate memory, without - initializing data; usually :meth:`pubapi_dev_tensor_ptr` is then called to - get the buffer address and pass it to some other library - - :return: self - """ - if len(shape) == 1 and isinstance(shape[0], collections.Iterable): - shape = shape[0] - self._resize(shape) - return self - -def reset_zero(self): - """reset dev_tensor to zeros""" - self._reset_zero() - -def copy_to(self, dest): - """copy value to numpy array - - :type dest: :class:`np.ndarray` - :param dest: destination array to write value of this var to, - which must match shape, have float32 dtype and be - contiguous - """ - check_cont_ndarray(dest) - wflat = dest.reshape(-1) - assert wflat.ctypes.data == dest.ctypes.data - self._copy_to_flatten(wflat) - return dest - -@property -def dev_ptr(self): - """this method is DEPRECATED; use :meth:`pubapi_dev_tensor_ptr` instead""" - return self._pubapi_dev_tensor_ptr(0) - -@property -def pubapi_dev_tensor_ptr(self): - """get a pointer to the corresponding mgb::pubapi::DeviceTensor object - - :rtype: int - :return: the address as an integer - """ - return self._pubapi_dev_tensor_ptr(1) - -def symvar(self, comp_graph, name=None, *, volatile=False): - """convert to SymbolVar to be put into a computing graph - - :param volatile: whether shape/ptr is allowed to change - """ - self.__apply_lazy_initializer() - assert self.shape, "initial shape must be available" - if name is None: - name = '' - return self._as_sym_var(comp_graph, name, volatile) - -def __getstate__(self): - state = self.__dict__.copy() - del state['this'] - state['value'] = self.get_value() - state['comp_node'] = self.comp_node - state['dtype'] = self.dtype - return state - -def __setstate__(self, state): - val = state.pop('value') - dtype = state.pop('dtype', 'float32') - snd = SharedND(state.pop('comp_node'), dtype) - if val is not None: - assert val.dtype == dtype - snd.set_value(val) - self.this = snd.this - for k, v in state.items(): - self.__dict__[k] = v - -def share_memory_from(self, rhs, offset): - """ - share memory from another SharedND, self and rhs must be initialized - :param rhs: another sharedND used to share memory - :type rhs: :class:`SharedND` - - :param offset: offset in rhs sharedND - :type offset: int - """ - assert self != rhs - self._share_memory_from(rhs, offset) - -def reset_dev_tensor(self, rhs): - """ - reset devive tensor to another SharedND, self and rhs must be initialized. - :param rhs: another sharedND whose device tensor to be reset to. - :type rhs: :class:`SharedND` - """ - assert self != rhs - self._reset_dev_tensor(rhs) - -} diff --git a/python_module/src/swig/symbol_var.i b/python_module/src/swig/symbol_var.i deleted file mode 100644 index 2c86f206..00000000 --- a/python_module/src/swig/symbol_var.i +++ /dev/null @@ -1,113 +0,0 @@ -/* - * $File: symbol_var.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -%{ -using mgb::cg::SymbolVar; -%} - -%feature("autodoc", -"representing a symbolic variable in a computing graph") SymbolVar; - -class SymbolVar { -public: - SymbolVar flatten(); - SymbolVar rename(const std::string &name); - bool allow_shape_change(); - - %extend { - - SymbolVar fill_retain_dtype(PyObject *val) { - return fill_retain_dtype(*$self, val); - } - - CompGraph _get_owner_graph() { - mgb_assert($self->node()); - auto cg = $self->node()->owner_graph()->shared_from_this(); - return CompGraph::make_from_shared_ptr(cg); - } - - Operator _get_owner_opr() { - mgb_assert($self->node()); - return Operator{$self->node()->owner_opr()}; - } - - CompNode _get_comp_node() { - mgb_assert($self->node()); - return $self->node()->comp_node(); - } - - const std::string& _get_name() const { - mgb_assert($self->node()); - return $self->node()->name(); - } - - size_t _get_id() const { - mgb_assert($self->node()); - return $self->node()->id(); - } - - std::vector _get_imm_shape() { - mgb_assert($self->node()); - return npy::shape2vec($self->node()->shape()); - } - - PyObject* _get_inferred_value() { - return get_symvar_inferred_value(*$self); - } - - bool _is_valid() const { - return $self->node(); - } - - PyObject* _get_dtype() const { - return npy::dtype_mgb2np($self->dtype()); - } - - CompGraphCallbackValueProxy _eager_eval_get_value() const { - CompGraphCallbackValueProxy ret; - ret.setup($self->eager_eval_get_value(), false); - return ret; - } - - void _reeval_if_eager_eval() { - auto &&var = $self->node(); - mgb_assert(var); - auto &&cg = var->owner_graph(); - if (cg->options().eager_evaluation) { - mgb_assert(var->owner_opr()->inserted_in_graph()); - cg->insert_opr(std::unique_ptr( - var->owner_opr())); - } - } - - bool _is_shared_device_tensor() { - if ($self->node() - ->owner_opr() - ->same_type()) - return true; - return false; - } - - %include "symbol_var_SymbolVar.py" - - } - -}; - -typedef std::vector SymbolVarArray; -%template(_VectorSymbolVar) std::vector; - -// SymbolVarArray compatibility; see symbol_var_array.i for more details -%typemap(out) SymbolVarArray { - $result = swig::from(static_cast&>($1)); -} -%typemap(directorin) const SymbolVarArray& { - $input = swig::from(static_cast&>($1)); -} - -// vim: ft=swig diff --git a/python_module/src/swig/symbol_var_SymbolVar.py b/python_module/src/swig/symbol_var_SymbolVar.py deleted file mode 100644 index 96fb3383..00000000 --- a/python_module/src/swig/symbol_var_SymbolVar.py +++ /dev/null @@ -1,216 +0,0 @@ -%pythoncode { - -__owner_graph = None -__owner_opr = None - -@property -def owner_graph(self): - """get the owner graph; note that a reference would be kept in this var""" - if self.__owner_graph is None: - self.__owner_graph = self._get_owner_graph() - return self.__owner_graph - -@property -def owner_opr(self): - """get the owner opr; get owner graph explicitly so it can keep a reference - to its owner graph""" - if self.__owner_opr is None: - self.__owner_opr = self._get_owner_opr() - - self.__owner_opr.owner_graph - return self.__owner_opr - -@property -def comp_node(self): - return self._get_comp_node() - -@property -def name(self): - return self._get_name() - -@property -def id(self): - """an integer identifier for this var that is unique in the computing - graph""" - return int(self._get_id()) - -@property -def imm_shape(self): - """shape as immediate number - - :type: tuple of int - """ - return tuple(map(int, self._get_imm_shape())) - -@property -def inferred_value(self): - """get statically inferred value of this var, or None if - inference failed - - :type: :class:`numpy.ndarray` or None""" - return self._get_inferred_value() - -@property -def valid(self): - """whether this symvar is valid (i.e. has corresponding var node in - graph)""" - return self._is_valid() - -@property -def volatile(self): - """whether the shape is volatile""" - return not self._is_shared_device_tensor() - -@property -def dtype(self): - """get underling data type - :rtype: :class:`numpy.dtype`""" - return self._get_dtype() - -def __hash__(self): - return hash((self.owner_graph, self.id)) - -def __eq__(self, rhs): - return (isinstance(rhs, SymbolVar) and - self.owner_graph == rhs.owner_graph and - self.id == rhs.id) - -def _binary_opr(self, mode, rhs): - from .opr import elemwise - return elemwise([self, rhs], mode=mode) - -def _binary_opr_lhs(self, mode, lhs): - from .opr import elemwise - return elemwise([lhs, self], mode=mode) - -def __add__(self, rhs): - return self._binary_opr('ADD', rhs) -def __radd__(self, lhs): - return self._binary_opr_lhs('ADD', lhs) - -def __sub__(self, rhs): - return self._binary_opr('SUB', rhs) -def __rsub__(self, lhs): - return self._binary_opr_lhs('SUB', lhs) - -def __mul__(self, rhs): - return self._binary_opr('MUL', rhs) -def __rmul__(self, lhs): - return self._binary_opr_lhs('MUL', lhs) - -def __matmul__(self, rhs): - from .opr import matrix_mul - return matrix_mul(self, rhs) -def __rmatmul__(self, rhs): - from .opr import matrix_mul - return matrix_mul(rhs, self) - -def __lshift__(self, rhs): - return self._binary_opr('SHL', rhs) -def __rshift__(self, rhs): - return self._binary_opr('SHR', rhs) - -def __truediv__(self, rhs): - return self._binary_opr('TRUE_DIV', rhs) -def __rtruediv__(self, lhs): - return self._binary_opr_lhs('TRUE_DIV', lhs) - -def __floordiv__(self, rhs): - return self._binary_opr('FLOOR_DIV', rhs) -def __rfloordiv__(self, rhs): - return self._binary_opr_lhs('FLOOR_DIV', rhs) - -def __mod__(self, rhs): - return self._binary_opr('MOD', rhs) -def __rmod__(self, rhs): - return self._binary_opr_lhs('MOD', rhs) - -def __pow__(self, rhs): - return self._binary_opr('POW', rhs) -def __rpow__(self, lhs): - return self._binary_opr_lhs('POW', lhs) - -def __lt__(self, rhs): - return self._binary_opr('LT', rhs) -def __gt__(self, lhs): - return self._binary_opr_lhs('LT', lhs) - -def __le__(self, rhs): - return self._binary_opr('LEQ', rhs) -def __ge__(self, lhs): - return self._binary_opr_lhs('LEQ', lhs) - -def __neg__(self): - from .opr import elemwise - return elemwise([self], mode='NEGATE') - -def __getitem__(self, idx): - from .helper import cvt_getitem_to_idx_desc - inpvar, desc = cvt_getitem_to_idx_desc(self, idx) - if desc is None: - return inpvar - return _create_subtensor_like_opr('subtensor', [inpvar], desc, make_opr_config()) - -def reshape(self, *shp): - from .opr import reshape - return reshape(self, shp) - -def broadcast(self, *shp): - from .opr import broadcast - return broadcast(self, shp) - -def sum(self, axis=None, keepdims=False): - from .opr import reduce_ - return reduce_(self, 'SUM', axis, keepdims) - -def max(self, axis=None, keepdims=False): - from .opr import reduce_ - return reduce_(self, 'MAX', axis, keepdims) - -def min(self, axis=None, keepdims=False): - from .opr import reduce_ - return reduce_(self, 'MIN', axis, keepdims) - -def prod(self, axis=None, keepdims=False): - from .opr import reduce_ - return reduce_(self, 'PRODUCT', axis, keepdims) - -def mean(self, axis=None, keepdims=False): - from .opr import mean - return mean(self, axis, keepdims) - -def dimshuffle(self, *pattern, **kwargs): - from .opr import dimshuffle - ndim = kwargs.pop('ndim', 0) - assert not kwargs - return dimshuffle(self, pattern=pattern, ndim=ndim) - -def astype(self, target_dtype): - """see :func:`typecvt`""" - from .opr import typecvt - return typecvt(self, target_dtype) - -@property -def shape(self): - from .opr import get_var_shape - return get_var_shape(self) - -def axis_shape(self, axis): - from .opr import get_var_shape - return get_var_shape(self, axis=axis) - -@property -def eager_val(self): - """get value in eager evaluation mode""" - return self._eager_eval_get_value() if self.owner_graph.is_eager() else None - - -def __iter__(self): - """add __iter__ to avoid implicit iteration by calling - __getitem__""" - raise NotImplementedError('SymbolVar var could not be itered') - -def __repr__(self): - return 'SymbolVar(id={},name={})'.format(self.id, self.name) - -} diff --git a/python_module/src/swig/symbol_var_array.i b/python_module/src/swig/symbol_var_array.i deleted file mode 100644 index 75b68dd0..00000000 --- a/python_module/src/swig/symbol_var_array.i +++ /dev/null @@ -1,46 +0,0 @@ -/* - * $File: symbol_var_array.i - * - * This file is part of MegBrain, a deep learning framework developed by Megvii. - * - * $Copyright: Copyright (c) 2014-2017 Megvii Inc. All rights reserved. - */ - -/* - * In megbrain, SymbolVarArray is SmallVector. - * - * I do no want to convert between std::vector<> and mgb::SmallVector in the - * C++ wrappers; neither do I want to write a SmallVector<> interface file as - * good as swig's std::vector<> implementation. - * - * So the goal becomes making swig generate python wrapper for std::vector<>, - * but call SymbolVarArray in the generated C++ file. - * - * A logical solution is to derive SymbolVarArray from std::vector<> only in - * the .i file so swig can use the correct name; however the generated python - * class becomes uniterable. So our hack here is to specialize std::vector to - * use SymbolVarArray in the generated C++ file. - * - * This file must be included before instantiation of std::vector. - */ -%{ -#include -#include "megbrain/graph/symbol_var.h" -using SymbolVar = mgb::cg::SymbolVar; -using SymbolVarArray = mgb::cg::SymbolVarArray; -namespace std { -template -class vector : public SymbolVarArray { -public: - using SymbolVarArray::SymbolVarArray; - using allocator_type = alloc; - - allocator_type get_allocator() const { - mgb_throw(mgb::MegBrainError, "get_allocator() should not be called"); - return {}; - } -}; -} -%} - -// vim: ft=swig diff --git a/python_module/src/version.ld b/python_module/src/version.ld deleted file mode 100644 index ac6e0802..00000000 --- a/python_module/src/version.ld +++ /dev/null @@ -1,17 +0,0 @@ -{ -global: - MGB_VSYM_*; - MEGDNN_VSYM_*; - mgb_get_extern_c_opr_api_versioned; - PyInit__mgb; - extern "C++" { - *mgb::*; - *megdnn::*; - *megcore::*; - megcore*; - }; - megcore*; - -local: - *; -}; diff --git a/python_module/test/.gitignore b/python_module/test/.gitignore deleted file mode 100644 index 8b29bf97..00000000 --- a/python_module/test/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -log.txt -*json -massif.out* diff --git a/python_module/test/README.md b/python_module/test/README.md deleted file mode 100644 index 797e8c5f..00000000 --- a/python_module/test/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# MegEngine Tests - -* unit: This directory has same layout as megengine directory. -* regression: Small tests to check whether old issue is fixed. -* integration: Tests involve multiple parts of megengine, tests that longer than 1min should be an manual test. -* pytorch_comparison: Special directory for torch-related test -* helpers - - Test utilities should placed in this directory - - `from helpers import ...` in your test code - - -## Default running setup - -Execute `run.sh` to test default set of tests. - -- No torch related test -- No internet related test -- No doc related test diff --git a/python_module/test/__init__.py b/python_module/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/conftest.py b/python_module/test/conftest.py deleted file mode 100644 index cf1a5359..00000000 --- a/python_module/test/conftest.py +++ /dev/null @@ -1,34 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import sys - -sys.path.append(os.path.join(os.path.dirname(__file__))) - - -def pytest_json_modifyreport(json_report): - events = [] - timestamp = 0 - for item in json_report["tests"]: - for stage in ["setup", "call", "teardown"]: - if stage in item: - events.append( - { - "name": item["nodeid"], - "ph": "X", - "ts": timestamp, - "dur": item[stage]["duration"] * 1e6, - "cat": stage, - "pid": stage, - "tid": item["nodeid"], - } - ) - timestamp += events[-1]["dur"] - json_report["traceEvents"] = events - del json_report["collectors"] - del json_report["tests"] diff --git a/python_module/test/helpers/__init__.py b/python_module/test/helpers/__init__.py deleted file mode 100644 index 63d89aed..00000000 --- a/python_module/test/helpers/__init__.py +++ /dev/null @@ -1,172 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from typing import List, Tuple - -import numpy as np - -import megengine._internal as mgb -import megengine.functional as F -from megengine import Graph, jit -from megengine.module import Linear, Module -from megengine.test import assertTensorClose - -from .env import modified_environ - - -class MLP(Module): - def __init__(self): - super().__init__() - self.dense0 = Linear(28, 50) - self.dense1 = Linear(50, 20) - - def forward(self, x): - x = self.dense0(x) - x = F.relu(x) - x = self.dense1(x) - return x - - -def has_gpu(num=1): - try: - mgb.comp_node("gpu{}".format(num - 1)) - except mgb.MegBrainError: - return False - - return True - - -def randomNp(*args): - for arg in args: - assert isinstance(arg, int) - return np.random.random(args) - - -def randomTorch(*args): - import torch # pylint: disable=import-outside-toplevel - - for arg in args: - assert isinstance(arg, int) - return torch.tensor(randomNp(*args), dtype=torch.float32) - - -def graph_mode(*modes): - if not set(modes).issubset({"eager", "static"}): - raise ValueError("graph mode must be in (eager, static)") - - def decorator(func): - def wrapper(*args, **kwargs): - if "eager" in set(modes): - func(*args, **kwargs) - if "static" in set(modes): - with Graph() as cg: - cg.set_option("eager_evaluation", False) - func(*args, **kwargs) - - return wrapper - - return decorator - - -def _default_compare_fn(x, y): - assertTensorClose(x.numpy(), y) - - -def opr_test( - cases, - func, - mode=("eager", "static", "dynamic_shape"), - compare_fn=_default_compare_fn, - ref_fn=None, - **kwargs -): - """ - mode: the list of test mode which are eager, static and dynamic_shape - will test all the cases if None. - func: the function to run opr. - compare_fn: the function to compare the result and expected, use assertTensorClose if None. - ref_fn: the function to generate expected data, should assign output if None. - cases: the list which have dict element, the list length should be 2 for dynamic shape test. - and the dict should have input, - and should have output if ref_fn is None. - should use list for multiple inputs and outputs for each case. - kwargs: The additional kwargs for opr func. - - simple examples: - - dtype = np.float32 - cases = [{"input": [10, 20]}, {"input": [20, 30]}] - opr_test(cases, - F.eye, - ref_fn=lambda n, m: np.eye(n, m).astype(dtype), - dtype=dtype) - - """ - - def check_results(results, expected): - if not isinstance(results, Tuple): - results = (results,) - for r, e in zip(results, expected): - compare_fn(r, e) - - def get_trace_fn(func, enabled, symbolic): - jit.trace.enabled = enabled - return jit.trace(func, symbolic=symbolic) - - def get_param(cases, idx): - case = cases[idx] - inp = case.get("input", None) - outp = case.get("output", None) - if inp is None: - raise ValueError("the test case should have input") - if not isinstance(inp, List): - inp = (inp,) - else: - inp = tuple(inp) - if ref_fn is not None and callable(ref_fn): - outp = ref_fn(*inp) - if outp is None: - raise ValueError("the test case should have output or reference function") - if not isinstance(outp, List): - outp = (outp,) - else: - outp = tuple(outp) - - return inp, outp - - if not set(mode).issubset({"eager", "static", "dynamic_shape"}): - raise ValueError("opr test mode must be in (eager, static, dynamic_shape)") - - if len(cases) == 0: - raise ValueError("should give one case at least") - - if "dynamic_shape" in set(mode): - if len(cases) != 2: - raise ValueError("should give 2 cases for dynamic shape test") - - if not callable(func): - raise ValueError("the input func should be callable") - - inp, outp = get_param(cases, 0) - - def run(*args, **kwargs): - return func(*args, **kwargs) - - if "eager" in set(mode): - f = get_trace_fn(run, False, False) - results = f(*inp, **kwargs) - check_results(results, outp) - - if "static" in set(mode) or "dynamic_shape" in set(mode): - f = get_trace_fn(run, True, True) - results = f(*inp, **kwargs) - check_results(results, outp) - if "dynamic_shape" in set(mode): - inp, outp = get_param(cases, 1) - results = f(*inp, **kwargs) - check_results(results, outp) diff --git a/python_module/test/helpers/env.py b/python_module/test/helpers/env.py deleted file mode 100644 index f5dae64d..00000000 --- a/python_module/test/helpers/env.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# The MIT License (MIT) -# -# Copyright (c) 2018 Laurent LAPORTE -# -# 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. -import contextlib -import os - - -# modified_environ codes come from https://github.com/laurent-laporte-pro/stackoverflow-q2059482/blob/master/demo/environ_ctx.py -@contextlib.contextmanager -def modified_environ(*remove, **update): - """ - Temporarily updates the ``os.environ`` dictionary in-place. - - The ``os.environ`` dictionary is updated in-place so that the modification - is sure to work in all situations. - - :param remove: Environment variables to remove. - :param update: Dictionary of environment variables and values to add/update. - """ - env = os.environ - update = update or {} - remove = remove or [] - - # List of environment variables being updated or removed. - stomped = (set(update.keys()) | set(remove)) & set(env.keys()) - # Environment variables and values to restore on exit. - update_after = {k: env[k] for k in stomped} - # Environment variables and values to remove on exit. - remove_after = frozenset(k for k in update if k not in env) - - try: - env.update(update) - [env.pop(k, None) for k in remove] - yield - finally: - env.update(update_after) - [env.pop(k) for k in remove_after] diff --git a/python_module/test/helpers/torch_util.py b/python_module/test/helpers/torch_util.py deleted file mode 100644 index 659033c5..00000000 --- a/python_module/test/helpers/torch_util.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import torch - -from megengine.core import tensor -from megengine.utils import prod - - -def _uniform(shape): - return np.random.random(shape).astype(np.float32) - - -def init_with_same_value(mge_param, torch_param, initializer=_uniform): - mge_shape = mge_param.shape - torch_shape = torch_param.shape - assert prod(mge_shape) == prod(torch_shape) - weight = initializer(mge_shape) - mge_param.set_value(weight) - torch_param.data = torch.Tensor(weight.reshape(torch_shape)) - - -def gen_same_input(shape, initializer=_uniform): - data = initializer(shape) - mge_input = tensor(data) - torch_input = torch.Tensor(data) - return mge_input, torch_input diff --git a/python_module/test/integration/manual/README.md b/python_module/test/integration/manual/README.md deleted file mode 100644 index aad1ed6f..00000000 --- a/python_module/test/integration/manual/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# Regression test -* [How to run](#how-to-run) -* [Correctness](#correctness) -* [Performance](#performance) -* [Debug tools](#debug-tools) -* [To do list](#to-do-list) - -## How to run - -1. Run correctness regression test by - -``` -rlaunch --cpu=4 --memory=15000 --gpu=1 -- python3 verify_correctness.py -``` - -2. Run performance regression test by - -``` -rlaunch --cpu=4 --memory=15000 --gpu=1 -- python3 run_resnet50_perf.py -``` - -Compare with the [reference result](#performance) to verify the performance change. - -3. [Temporary]: Run dynamic graph test - -``` -cd python_module/megengine/examples/cifar10/resnet_example -rlaunch --cpu=4 --memory=15000 --gpu=1 -- MGE_DISABLE_TRACE=1 python3 main.py --mode train --backend megengine-dynamic -``` - -Be sure to run a few epochs to verify the CPU/GPU memory usage and the result tends to converge. The complete run takes around 2 hours. - -## Correctness - -Pre-trained Resnet18 model on cifar10 dataset is used. - -The test set contains -* forward run with static graph -* forward run with dynamic graph -* forward + backward + parameter update with static graph -* forward + backward + parameter update with dynamic graph - -Sample output: - -``` -Running fwd static ... -Success -Running fwd dynamic ... -Success -Running train static ... -Success -Running train dynamic ... -Failed!!! -import megengine operator -[INFO] load /home/zhangfan/.local/lib/python3.6/site-packages/megengine/examples/cifar10/resnet_example/checkpoint/pytorch_init.pth done -calculated loss: [2.3731833, 34.4626] -expect: [ 2.3731833 34.460594 ] -``` - -## Performance - -Test cases run Resnet 50 training with batch size = 64. - -Run `python3 resnet50_perf.py --help` for valid options. - -Example script: - -* Run `python3 run_resnet50_perf.py` -* You may want to submit the job to a remote server by `rlaunch --cpu=16 --memory=100384 --gpu=8 -- python3 run_resnet50_perf.py` -* Sample output -``` -************************************** -Run ResNet 50 performance test with batch size = 64 -************************************** -Run static graph with default opt level -Finish with GPU Usage 6710MiB -Wall time per iter 283 ms -Run status: finished -************************************** -Run static graph with conv fastrun -Finish with GPU Usage 6540MiB -Wall time per iter 265 ms -Run status: finished -************************************** -Run static graph with conv fastrun and JIT -Finish with GPU Usage 6540MiB -Wall time per iter 267 ms -Run status: finished -************************************** -Run static graph with JIT, conv fastrun and without running step -Finish with GPU Usage 6540MiB -Wall time per iter 223 ms -Run status: finished -************************************** -``` - -## Debug tools - -You can pass `--run-debug-tool` to script `run_resnet50_perf.py`. Opr-level profiling result and valgrind will be invoked. - -### How much overhead time will it take due to usage of the profiler - -Please compare the same job with/without profiler. The timing statistic reported by profiler does not include the overhead time from itself. - -### How can I get more information from profiler? - -Refer to the main function in `megengine.utils.profile_analyze`. - -### How can I profile main memory usage? - -Valgrind massif tool can be used. The script also prints memory usage summary on screen as: - -``` - - GB -1.836^ # - | @@#::::::@::: - | @@@ #::::::@::: - | ::::::::::::@:::::::::@:@@@ #::::::@::: - | ::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | ::@@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | :@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @:@@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | ::::@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | :::: :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | :@: :: :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | :@@: :: :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @@:@@: :: :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - | @@ :@@: :: :@ @@::@@@:: @@::::: :::::: @ ::: ::: @:@@@ #::::::@::: - 0 +----------------------------------------------------------------------->Gi - 0 19.39 - -``` -You can change "--run-iter" value to adjust iters to profile. -The detailed profiling is printed to `massif.out.ms_print`. - -### How can I understand the profiler result? - -The dumped profiling file `prof.json` can be interpolated by [megengine/utils/profile_analyze.py](../../utils/profile_analyze.py). -The following information is printed from the profiler: - -``` ------------------ -------- -total device time 0.318062 -total host time 0.275643 ------------------ -------- - -╒════════════════════╤══════════════╤═══════════════════════════╤═══════════════╤═════════╤══════════╤═════════════╤═════════════╤══════════════╕ -│ device self time │ cumulative │ operator info │ computation │ FLOPS │ memory │ bandwidth │ in_shapes │ out_shapes │ -╞════════════════════╪══════════════╪═══════════════════════════╪═══════════════╪═════════╪══════════╪═════════════╪═════════════╪══════════════╡ -│ #0 │ 0.114 │ Elemwise │ 6.53 │ 57.40 │ 51.63 │ 454.02 │ None │ None │ -│ 0.114 │ 35.8% │ 1481 │ GFLO │ GFLOPS │ GiB │ GiB/s │ │ │ -│ 35.8% │ │ N/A │ │ │ │ │ │ │ -├────────────────────┼──────────────┼───────────────────────────┼───────────────┼─────────┼──────────┼─────────────┼─────────────┼──────────────┤ -│ #1 │ 0.176 │ ConvolutionBackwardFilter │ 523.15 │ 8.35 │ 5.28 │ 84.24 │ None │ None │ -│ 0.0627 │ 55.5% │ 53 │ GFLO │ TFLOPS │ GiB │ GiB/s │ │ │ -│ 19.7% │ │ N/A │ │ │ │ │ │ │ -├────────────────────┼──────────────┼───────────────────────────┼───────────────┼─────────┼──────────┼─────────────┼─────────────┼──────────────┤ -│ #2 │ 0.221 │ ConvolutionBackwardData │ 508.05 │ 11.31 │ 5.05 │ 112.42 │ None │ None │ -│ 0.0449 │ 69.6% │ 52 │ GFLO │ TFLOPS │ GiB │ GiB/s │ │ │ -│ 14.1% │ │ N/A │ │ │ │ │ │ │ -├────────────────────┼──────────────┼───────────────────────────┼───────────────┼─────────┼──────────┼─────────────┼─────────────┼──────────────┤ -``` -Please read [megengine/utils/profile_analyze.py](../../utils/profile_analyze.py) for more usages. - -## To do list - -* Change numerical tolerance after XPU-280 is done -* Add scripts to facilitate log analysis -* Profile GPU memory -* Incorporate with QA system -* Add more regression tests diff --git a/python_module/test/integration/manual/resnet50_perf.py b/python_module/test/integration/manual/resnet50_perf.py deleted file mode 100644 index 9f36e8f0..00000000 --- a/python_module/test/integration/manual/resnet50_perf.py +++ /dev/null @@ -1,210 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import argparse -import json -import os -import subprocess -import sys -import time - -import numpy as np - -import megengine as mge -import megengine.distributed as dist -import megengine.functional as F -from megengine._internal.plugin import CompGraphProfiler -from megengine.core import Graph, tensor -from megengine.core.graph import get_default_graph -from megengine.functional.debug_param import ( - get_conv_execution_strategy, - set_conv_execution_strategy, -) -from megengine.jit import trace -from megengine.module import BatchNorm2d, Conv2d, Linear, MaxPool2d, Module -from megengine.optimizer import SGD - -sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "examples")) - - -def init_profiler(comp_graph=get_default_graph()): - profiler = CompGraphProfiler(comp_graph) - return profiler - - -def dump_profiler(profiler, filename): - with open(filename, "w") as fout: - json.dump(profiler.get(), fout, indent=2) - - -def print_gpu_usage(): - stdout = subprocess.getoutput("nvidia-smi") - for line in stdout.split("\n"): - for item in line.split(" "): - if "MiB" in item: - print("Finish with GPU Usage", item) - break - - -def run_perf( - batch_size=64, - warm_up=True, - dump_prof=None, - opt_level=2, - conv_fastrun=False, - run_step=True, - track_bn_stats=True, - warm_up_iter=20, - run_iter=100, - num_gpu=None, - device=0, - server=None, - port=None, - scale_batch_size=False, - eager=False, -): - - # pylint: disable = import-outside-toplevel - from resnet50 import Resnet50 - - if conv_fastrun: - set_conv_execution_strategy("PROFILE") - - if num_gpu: - dist.init_process_group(args.server, args.port, num_gpu, device, device) - if scale_batch_size: - batch_size = batch_size // num_gpu - print("Run with data parallel, batch size = {} per GPU".format(batch_size)) - - data = tensor(np.random.randn(batch_size, 3, 224, 224).astype("float32")) - label = tensor(np.random.randint(1000, size=[batch_size,], dtype=np.int32)) - - net = Resnet50(track_bn_stats=track_bn_stats) - opt = SGD(net.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-4) - - def train_func(data, label): - logits = net(data) - loss = F.cross_entropy_with_softmax(logits, label) - - if num_gpu: - loss = loss / num_gpu - - opt.zero_grad() - opt.backward(loss) - return loss - - train_func = trace( - train_func, - symbolic=(not eager), - opt_level=opt_level, - profiling=not (dump_prof is None), - ) - - if warm_up: - print("Warm up ...") - for _ in range(warm_up_iter): - opt.zero_grad() - train_func(data, label) - if run_step: - opt.step() - print_gpu_usage() - print("Running train ...") - start = time.time() - for _ in range(run_iter): - opt.zero_grad() - train_func(data, label) - if run_step: - opt.step() - - time_used = time.time() - start - - if dump_prof: - with open(dump_prof, "w") as fout: - json.dump(train_func.get_profile(), fout, indent=2) - - return time_used / run_iter - - -def str2bool(v): - if isinstance(v, bool): - return v - if v.lower() in ("yes", "true", "t", "y", "1"): - return True - elif v.lower() in ("no", "false", "f", "n", "0"): - return False - else: - raise argparse.ArgumentTypeError("Boolean value expected.") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Running regression test on Resnet 50", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - parser.add_argument("--batch-size", type=int, default=64, help="batch size ") - parser.add_argument( - "--warm-up", type=str2bool, default=True, help="whether to warm up" - ) - parser.add_argument( - "--dump-prof", - type=str, - default=None, - help="pass the json file path to dump the profiling result", - ) - parser.add_argument("--opt-level", type=int, default=2, help="graph opt level") - parser.add_argument( - "--conv-fastrun", - type=str2bool, - default=False, - help="whether to use conv fastrun mode", - ) - parser.add_argument( - "--run-step", - type=str2bool, - default=True, - help="whether to run optimizer.step()", - ) - parser.add_argument( - "--track-bn-stats", - type=str2bool, - default=True, - help="whether to track bn stats", - ) - parser.add_argument( - "--warm-up-iter", type=int, default=20, help="number of iters to warm up" - ) - parser.add_argument( - "--run-iter", type=int, default=100, help="number of iters to collect wall time" - ) - parser.add_argument("--server", default="0.0.0.0") - parser.add_argument("--port", type=int, default=2222) - parser.add_argument( - "--scale-batch-size", - type=str2bool, - default=False, - help="whether to divide batch size by number of GPUs", - ) - parser.add_argument( - "--eager", type=str2bool, default=False, help="whether to use eager mode" - ) - - # Data parallel related - parser.add_argument("--num-gpu", type=int, default=None) - parser.add_argument("--device", type=int, default=0) - args = parser.parse_args() - - print(vars(args)) - - os.environ["MGB_JIT_BACKEND"] = "NVRTC" - - t = run_perf(**vars(args)) - - print("**********************************") - print("Wall time per iter {:.0f} ms".format(t * 1000)) - print("**********************************") - get_default_graph().clear_device_memory() diff --git a/python_module/test/integration/manual/run_resnet50_perf.py b/python_module/test/integration/manual/run_resnet50_perf.py deleted file mode 100644 index a8a24d99..00000000 --- a/python_module/test/integration/manual/run_resnet50_perf.py +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import argparse -import os -import pathlib -import subprocess - -from megengine.utils.profile_analyze import main as profiler - -home = pathlib.Path(__file__).parent.absolute() -script_path = os.path.join(str(home), "resnet50_perf.py") -script_path = "python3 " + script_path - -prof_path = "prof.json" - -log_path = "log.txt" - - -def print_log(msg: str, log: str = log_path): - print(msg) - with open(log, "a") as f: - print(msg, file=f) - - -def run_cmd(cmd: str, log: str = log_path) -> bool: - stdout = subprocess.getoutput(cmd) - token = "Wall time" - gpu_msg = "GPU Usage" - run_finished = False - for line in stdout.split("\n"): - if token in line: - print(line) - print_log("Run status: finished") - run_finished = True - if gpu_msg in line: - print(line) - if not run_finished: - print_log("Run status: failed") - with open(log, "a") as f: - print(stdout, file=f) - - return run_finished - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser(description="ResNet50 train performance") - parser.add_argument( - "--run-debug-tool", action="store_true", help="run profiler and valgrind" - ) - parser.add_argument( - "--run-parallel", action="store_true", help="run data parallel performance" - ) - parser.add_argument("--run-eager", action="store_false", help="run eager graph") - args = parser.parse_args() - - f = open(log_path, "w") - f.close() - - print_log("**************************************") - print_log("Run ResNet 50 performance test with batch size = 64") - - print_log("**************************************") - print_log("Run static graph with default opt level") - cmd = script_path - run_cmd(cmd) - - print_log("**************************************") - print_log("Run static graph with conv fastrun") - cmd = script_path + " --conv-fastrun=yes" - run_cmd(cmd) - - print_log("**************************************") - print_log("Run static graph with conv fastrun and JIT") - cmd = script_path + " --conv-fastrun=yes --opt-level=3" - run_cmd(cmd) - - print_log("**************************************") - print_log("Run static graph with JIT, conv fastrun and without running step") - cmd = script_path + " --conv-fastrun=yes --opt-level=3 --run-step=no" - run_cmd(cmd) - - if args.run_eager: - print_log("**************************************") - print_log("Run static graph with default opt level and batch-size=8") - cmd = script_path + " --batch-size=8" - run_cmd(cmd) - print_log("**************************************") - print_log("Run eager graph with default opt level and batch-size=8") - cmd = script_path - run_cmd("MGE_DISABLE_TRACE=1 " + cmd + " --eager=yes") - - if args.run_debug_tool: - - print_log("**************************************") - print_log("Run with dump_prof") - cmd = script_path + " --dump-prof=" + prof_path - if run_cmd(cmd): - print("Printing profiling result") - profiler([prof_path, "--aggregate-by=type", "--aggregate=sum", "-t 10"]) - - print_log("**************************************") - print_log("Run with valgrind massif") - massif_out = "massif.out" - # Use 0.01% as valgrind massif threashold - # A smaller value reports more details but it may take longer time to analyze the log - # Change it accordingly. - mem_threshold = 0.01 - cmd = ( - "valgrind --tool=massif --threshold={} --massif-out-file=".format( - mem_threshold - ) - + massif_out - + " " - ) - cmd = cmd + script_path + " --warm-up=no --run-iter=20" - run_cmd(cmd) - ms_print_file = "massif.out.ms_print" - cmd = ( - "ms_print --threshold={} ".format(mem_threshold) - + massif_out - + " > " - + ms_print_file - ) - os.system(cmd) - cmd = "head -n 33 " + ms_print_file - os.system(cmd) - print_log("Read {} for detailed massif output".format(ms_print_file)) - - if args.run_parallel: - print_log("**************************************") - tmp_out = "/dev/null" - # Change server and port to run at your system - server = "localhost" - port = "2222" - for num_gpu in (2, 4, 8): - print_log("Run with {} GPUs".format(num_gpu)) - - cmd = script_path + " --num-gpu={} --server={} --port={} ".format( - num_gpu, server, port - ) - for i in range(num_gpu - 1): - irank = num_gpu - 1 - i - os.system( - cmd - + " --device={}".format(irank) - + " 1>{} 2>{} &".format(tmp_out, tmp_out) - ) - if not run_cmd(cmd): - break - - print_log("**************************************") - print_log("**************************************") - print("Finish run, summary:") - cmd = 'grep "Run with\|Wall time\|Run status\|Error\|GPU Usage" ' + log_path - os.system(cmd) diff --git a/python_module/test/integration/mnist_model_with_test.mge b/python_module/test/integration/mnist_model_with_test.mge deleted file mode 100644 index 126837d41f24151b9bad560e0b496908e1e5e9af..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 1568739 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

lEy;b2Vy$&~$ykL@mJs{ogyW|X&Jq(k~ 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

-ba4nCQ~7rI~X{5)Y!fjtI1UA+al54}RIHawLt{yf+<<2-vZzq_?H zmpuyy5z*uDOYEj<)NZoN%?VmwGgIXtnLTRfylt-Pc?P(6xRH$74R#k|*H zIy^eq7QKeoCB0u;m%XE=2|PF?1-=~@3%xm8C%vLw20d+ekUY3DqP$w+w7g&=Ha%cc zD!pOv$317iojroXqC4TQTfJ?Hy}Y=y+dYn)h&&Cxi@bI#=({)ZMLqFJ5xkDDmpme3 z-Mq*=p}bYWY(0_xhdZHc6g>rI_Plp`8oj-hmON6rqCIjG&$=DnDZMifsXW~Xti7MF z&b&ZXygkXbfxHbnvpsYK=ebw*{4ZWp38aufq$2?ovti7(zBE8Uw zlRX!h0KJH{5x%!=RJ~*?^tAao;;=I85={&rR4!r_AM7#o!*F07hTf7NNoV{)5wmfS$7Cpq5A-pWq zfIScNn7qjLpuKNNalCkVCO%`ls69o(GCgMRoIK57z`Tt4roG=X%e_`L7`y=4fj!G! zsJnY{sXPV0|2x@#kh@@q6}?vpgS|d9#pOuhfPIXtX-E4>%5l)Tg` z4?IOe{5^Fj*}Mnl_C1{xU_5`Rr@W4-@F~rqr3@C-8)BC z{=EnHWW9I0uey}YYP=it-@Kh$p1X*ncfBG#J3LzFm^!FE20jMXIz1Tompzp^t-aF- ziad6Do4k!)@4aO`qrE5YJv~laZ#_tit~wEE7`?xvz&n_xYrF#f zX}$k7vb*CwE4#CT557onXuY;=dcAG(y}h$EAG;g~ZM`(YWxZ#IS-jm{eLQyfuRT;w zfjnArI6R~-iamHw` z$GcTB3B8_nMZL6!lD&T$Sha=pEW`#k_D(u05>D{X8DlXT6FK=sUFsv%HPuA3JE$jXfgh z=RG6u@w}Eg-M!O%D!iTd8@(MViaHk&EO37OEIf;}LA{QkLOt`*j64yB9K8D7E<6TsYQ16f-n-n$)52t9$tSG~;je7pbTroAJwHoXVM zlsnW#nLRJmNIgWVzPeaz^*rD9z&wwvV7t?`%DgN~oV;kHslCv{i99-XHoZw{(7HhTGrflq9=+t-E<2kh zxjdr(O1&*+-MkFZgSsgY6TQ4Awmq?SoW1fDB|Uw@GrSm8fV`$7481>_6up)Ed^|Nr zD!zN;EWC?J0KQf=H9SmB`MUwpVLd=fGrbcWAU$}d$30}ElD&C0+r4y=oxKNefxHsR zT|1l))4UIz=)Le;1idD8Z#_afJ-v)|sJx8cqCD2hygdcFwmtp#n7cI=jy)%2=R8Zy z@x1yta=iFo5j`#`Ilawx?z@-DguUBoe!K?5)V(YDqdf7;4ZZ1X9K9GhSUuC389a#Q z9z5IGCcRX^X1#4IL%jC-b-d>Y&AoLK(7luNF+EXG2s}csNj-pFTRk5PfxO8X!@PQt zn!PCliakXLnZ4NguDj9{ioFD5P&>J0i#?f2alI6*p*uCkFg>Iw96KbIv%NRXj=ewn zL%jeCpu8#gBfeVnl03F|lf6Q2&OI*!m${^mK0Cq`2|H{;m%EhMUA<v zfxWfUUOGy(13WkkAiW@qp}fv2Bt7?wg*}bJkUR!?20adK`aA-JGQGY$>%0#rlstO; zc0FqY$2vu7&OKx`Av}YG$vhdo1ilVAwYu}MCB4x-@;pv;^*u`EzrEea(>)9wsl0rQ zIlTwcSUqKLqr7eN-n$F0SiM=FAw4hG*F5N+n>;5!biHP+B)ch>@4M_F>%3V||GYr$ zxV@qIGrXmIvOSEQ3O#)X(L8~&vOU1A2E8L6y1aqL3%%JF8oeW6zdA)g$2}25v%D6~ zw!1wAUp+Dc8oi<`l{^fSR6Uq>jXN;NpuMwlFTE)O$-Txs-Mrp-qdmR0JMs61U3 zxx9vL)I2{>#k`7LtvreXjlJVOySrjrE4?HI-aK14oV(7%!MmRsH9Zu6NIWfHp}ftZ zM?GQMR=p-StG&y9d%ZW_f<4xvc|DrX9z3M=480!P3%#`~&bvP&8oc%z7rhE~Nj)JY z0lno@OFi;Yi@k3FLOg8bXuNk|g}q_;BfWtcOTGEHq&&MhK0T%&Mm=NH5Iz2U|a=nfCfIBvw06uLFQoSiEcs#mbK|LW{VZ4u4_&h~bQ@x^~L_O32p*>C` zoV(1Bu)UXGTfK@h7QMt6D803(5j`Lvlf7(uYCM_ITRr}|U%Yy%E<7q3_Pk*bHa$xw zuRZ^wyF4NklRT_I>b!}r3ckH)8@)SIA-%vuv%3(dQoIFgZoH7Gn>_>Q5ol zslA~32t6P9qdgjq{=5Ozth{iy#67>?L%pJQiad!OJiU893q7p?EWC*LUcKKHTs@3| zmpuZt)Gj=f~zCO!6Uvb?iHRlUTCxIJozroH#ynZ3`AgSyv?3cX96JUsffDLu(eEIhsvi@Y*e z3%nb;!aRWZjy-EXBD~mIFunhekv%9!Og+I6mps>fC_J{!i@e$%8WGq&y#+13X>ky1Yhk*u1XP z8@!n@%e<0~7(62`BRtyTz`e{g#JrP(IXz-2!aa(*QM>j>p*==Y6+I;gvAk~&Vmsam zFt{jSWx568sl7es9zFTI{Jg|On>~LdhP+i(@ICjj7d@nUY(0rorM;Uhi9Lz5G`$dJ zD?Kld0lg>Ys=H;w3O$&iF})1ur@X7!s=eP|7CeE)C%m#SQ#{D{uDy?)Z#^^MQ@k7g zr#$8blf0%hnY>Bp2|UW_8oeaGxI8mOyF5ih3qHsB482*fgS;XB;XJehYrXqWN?7(57Zn7wzHkG%-yAv~}e4n0+tu{}{k`MhaVNZ#`+smpWpnvb^jV^gF)z zb-hnut33x(@I4jeojsOr*t~IFB|V>kM7`gGPCaIXx;u`?NxPR9AiZ4c2|kpyDn2ri zNImSJ+`Z~QJUuf+&ODyd`Mew=e><2@_B`JGW4*UPL%l)Q0zI%~NIgm`mpu7p-aO+W zw>^J)BRpk~W<6S4VZ2%3FFp1ybUhpYga<-G?;?>qzK z;63RzTfBG-Pdr}fp}fa@kG)%r9Bu%G&~8H&AbL5cs&wpo;{`YqP#2VbG#@?i9PdS8@jgV$~?ck zRz1u4iM`Q9b3H#qalAz$IXy=*UOmURioA*Gue~O*<~x02s6ENKT0Qly^gC4YU_Ank z{X9jMX1vZ=G`)=-sJV5Q-#k0Vqdmc>a6EXq-91Lu-MiLRmc8&C z$h}V{#J$yA9X-kKIXxqa)V;I*G7(G2MtiA154ZSB?JUu-^k-eYMfW41~4m|V1yE|`5M?KU)p}fXeo;`LZk-h2T z`@FP?%sm^-`??T)p}U{oH(+Pt`r;yXLF!MfPnPQ7dR4m}#z6g@d2zB*{N zr95@T#l2XVFgqnB8@=?Mr@i9b(YqaQ&pl()iM^dQ+r5~m6+ICJa6FO3$h+p?G(Doy zF1;*VyS;?H<-Go3>bw)Fe7%-zHoY#GfxSH{3%;#es=RbjvOR3Q@x8ZEFTDeR54{se zFT856**pHE#<}`CK|Qfmk-fF5<2_M~$~#;nNWCePNW7>9i9FvUmb^|Os6FW&%{%9% znY;>(fxSa$sJ!LN620I=v6o7QKt6Rz1f= zxIJghOg%o%Rz2ef8ax0sIlIO_3_aE~dOf|bo;>qRraW|88NFdOGQ7kX{<{rwxjcR0 ze>_{iXgo2ARlC>+j=e0_2fP>!?mS_y=schxiapq7z&!_;YP}WdhdkV8O+Bs%K)nyM zhdor(!o6LPPCVo%g}wSj0KM@n{5)@hpS>cFlD&p`YB{+M0KJs>W4$V9oV=2tqCNHo zA-$p)06dF-V?DV{;Jak0sJs|wQ9Mg3hr0umTRk!ndA(J;?7W-&}zPwc~vAmK>8ojmYGQC(>9=!wJ$Gy8o!@KMzcfCF}T|9@R3B5$?L%qAIP(9g? zfIW?i0=%V0Q#~CAFg@|*sXfei!adr0!My;BF+3v#c0AJ>nLTP4V?A$GCOsURB)uwO z1HEsHp}ng{VZEZ)Y`w;5%{=Cs!M*05g*=n|fjl~Nj=QM~gglYLa=U13Dm+Lth&=ZX z+&w+&O1*O#g*zU6vptNv7CgjA6Fu`fn?2=4ZaXB@3cdR*i98R^Jv{?OWIcd)%e+A^ zhrRQLjlH@gWxf17MLmv-dOQ6DS+5l0EuSN4@8M%seuP{=3r$nL8^LWjxVBr#vHw z4n1M6PQ4-`(LHwK?z~~FYd!W8eLdcSC%ltJLAr%De3KyF8{$7QGvE|sM1ijmY9XxW@sXQh;jJ%3@1w9CvHN36d3cVE&c)VnXa6I5_ zggxkIo;;c>0zH!HJ-r3*2ffbEEj_681-x_hls)s{Iz3L7@jd;X`n!2~6g_Gm)IC?B z?me!H5xv-B8@&ZsyE&AS4nF*6K{`>S3O(j#b371ky1GYJp1hYBD7}D2487i=A3Ywe ztGtuWTRnNo`8{nBn>*bDLu!?@4R0nhrK}-2R)x6EIo7vti4%OG(M~Omc2UE3_Wwz%DqD0E?LGVLZ(Kb-YH}>N|;;`#suL&pe4HBR#7fU_2Y9V7*;>5WM0u zoV_DF6+Ph&lRa&%dOW734LphiIlbnKkv&+O@w}A)qr7S;0liS3!99pb0=)?oj=UlF zK0S;WgS!jEGP#KvT0CI*@Vw0GhduLsqCJl)8$SJZhP$Lz-aReG2ED6Nnmu9?rah~C zm^E9?L9oGj=l4?C_P{XSG-x9&pqiHy1c_5R=Y?_9lV=N zJ-l?ZtULpB$vqmyJ3U2+0liiHfV|98&bxqzL zH@%`q5IueOxjR#wIXg%EOTD;0kULB0e!bMj%{${KJH2Lt5WLAEB|TZT-MoeQmONMT zggtKQ;Jl)dmAweBYrU>o96gp0guM$KygZ+cGCinkpuFoNT08_xf4tHGBfa=Ozd7Y+ zyF3d~p1s;9guFm;(7PF~z`a5Ulsw5=r@Un^VmzpS;Jo?ii@oo$*}NM?^*l-7RJw!o zoV(ZzgghClB)vmeRK1{JOueB)Ha>&%8+(dp!6O!aO3kggsX;Exp;vBRwy*6us{& z8NIBxg*~>bE4*yPWW5f|FS`hkf;+g7fxJ~+6TLMt%sm0;hCF9buRSeJ2tA3CianNi z3B8PVz&vHnmb`>Dp1cHOJH5^;Y`a(VRJ=z9$i0;-<-M80eLR4eJv{#cF}(LUtGt<% zhdoL=$~`3mW4(F##=Pi+4ZXeoE@VxMH?mH%W4!c#( zEj>MEiapSJ;k;8KF+DcQX1#g#X+0mig}i4iOFFqUa6O3~+dJh4_r2=%mpn({qCBj` z61@`GLA_WoM?3^5Iw{6{k(M$l)b8J)IE1U zf;~|d9=$QheLTQh#JqTQ?YxSUZoM#dg1lMUV7!^rK0FbTDZQpJ**jcc<-0okygjC! zI6UjYF1>2SmOO+}t-UKhp*^D0ti3)+v^?rA|2y|ziaYjwvb?ujGQG_UOufHdl04iE zG`*-|6}{%_G(6l;2t7ph*1Y$La6RbaW4r)~S-Ro9P`#5%r#(&GM!h$(d_0Ny`n(^J zRlLZ*RXzH;g}v!W)x047=R2x7+`R4TZ#};2kGz0ALAQ@v)QnY~{B(7l;(fxF5##k}4g ze7h#Q!#j{oF1-2iVm-F1IK6t4t-K0nWjwPXPCcX&9KB5R2R)Mz8NHU3Iz3Xx1ir8o zhrQl`YB()apgRoDg1qq6B)xGU$h(48GCd1q6h4EU$Grq|54~FFH@*F{=sX=>=)Huz zn!T$cS-nX0Q@to_sXX^?+&p?Kro7Eitvud{JiVOfN4y4a>^!b`PCXtlvOM>3Wxc;f zr#znS=e!w2+Ppwx20ivvmc25;U_CO8raWR*uR9Q7;X6P%FFRW(3cTBTXgsr<)I9EG zraGG@gFGg-ue>P)F+K48Q@jWYqCAvp9X=*v)4V&o20bh~V!a&U@Vr|5uDnLG@jYY> zMLkz5JU!2WLA`)!?maPN?Yo|mZ#}1q7CurMraaSEiM;a&(>!Rd{=1))xIFSM0=rM2Rx$Wi9IQsc)dQjp}YfRNxk6Q_Pm%tk-Z~vH$D~A1ii6#GCeLTb-bNm!aeAx zSG_>omc9L%4Llwo**#YO>OACxoxLP2tvyp{F1+GoDZD}r!aavza=eWs&%JDJ3%nAU zTsu>{t-T%XVZA;91HI(2(>;!22fe*bmOQ>AxxGAifIYRx$-GATl{cRk#Q13T%qua66b2)4Nf6 z#XS1p@w^z!lioKBfJG`&TkUghbZ#~Zgw!FCpTD?XL zB|K^4K)ro!1HC?Y6Fou%&%LBn@jXJFjXUM$uf4Vzg1v`Vh`s!VO1x@qFg<*U6TK`J zt~|F~1iOl7vAv7W-n#VSQ@ecNc0C>cK|OxmAG@iK_&obk*1H0PmAyF&FFgoE7QOx= zle_{7T)g)t3O;F;6uq}NCcVh!KfN@Nj=b+H5IxXTG(G$G;XE@CFunY&Gd+F2v^&IM z?LD6U_q*miu04x!U%Z2S13kzD(LDx`a=mJ$3p^*~%DmJMc|C)+t~@+oHob5&%e(}h z1ir_jD7|65SiIdf2EI{1Q9aj|vON+Kw>+A($-KD9*gUeF+`V)?+`HkuG`Z9PG7 zBE51Jnmip(lsu6j`#n%?#=NxN8$57G<2#jL+`Abc4LwyP;W`|yXT6>p13enEpge&% zbUZ%)1wER|q`I`pkiAY; z(7e3?CA~2F8$E0&`aC)%$h@~=l|8=2={y}FeLR5!Mm(U+xV`0B<2;Z8@weX(>;Bqr@e^61vlse7ww1b3GLxianVR z<2*I7!o3#@2R(-InY*qX7d_-i&Af57`aP*FQay*&3q2u9?>quR{=CuD!o9{;sXcW$ z!o5JG8NE*0BE7M8(>kl*FFljIgS>F0$UNb|M!nl4Bt45(Ey3OyLTe7s%j+&j zoxG&s*uA|pnLJ=g#y!&ZPd(1=ay{TlaXnOIB0T_7$2|kdX+13dpgnu`Grejdb3L^U zTRaDW!@Wb?(>;j2jyw^r;k*mfvAvL5cs#f+JiXA7+`RKv*F0jkT0FL2TD{=6(mZJU z8$SJ`7d${&+`Bn{bUXr%c0KB@g*-vI$~`ZIEW8_ecfBs!wLJ|QkiDAMm%My(F*;9j zz`akVGrj&h1HPEPjX9F0uDs6BhCCyVM7>1Bt~*jkuRW9m9lZ~`s6EUCzCGsgtGriN zpFJU_t38YnPQAQMj=iwZvb*v@v_1EJzdRs$Zar4t6*_nfj=g=6+B;jclD$(J|2(|5 z!@TLfi#&HmgS~JO6TRrF0KMTG*1C7uGd)(!3q7XWFugQL`n@8}61`!GhP=I^0lm&D z&pS1Y)4T;Wj66wPqCB$#YrVn0H9Z^&!MpjigFS+NK)j8{mpucjPdkxIhP+(Gwmq65tvxVr!8`#P9X*m?$GrTsNImAU!gM7(5$CCp`_R6+4~bguMm`T|K46Pd#|mWxa^y zlRP#rqP-!^y}V4@hCC}i7rkPSB0Qr-k-fkQMLkf;xIN#vEWN2oSv|l}oV?3}Z#>bl z!@M3@4Lx|o{=9y}%Dp@byF5&PKD>wb13la306oQn;XD$*jy^-g;7(8Wp zU%l5Gs60?cLcJ!NT0C8)Q9ZYlQM^|wzC5+Ki@dm120pWU-aL#%Z@sk3e7zjm2^0Xzj9B)#4Lsyq@Qj=kz6`#d^0 z4Lyic{JPEcT|H_40zH^o;k=(|n?2BvV?FbrmAfB!n>?lDxID&@em#k`#Jl>l5IvQ0 ze7(Gx%{-%~Nxky}BRw{G4L#eEgT1p#pSye&4!y-DNIk=)bUlL?AUwT_#yl|s!n{oQ zwmtNRtGqkRFg=8UbG*6C0KH_#em%~d0=~>yD!eG8^gMcgz`SIHu01WafV{ttJiF!` ztUb*F9K9~&2|a$|I6bm6IlW-p$2^!OyFJX0y}QOkZoNj0mc3YpeEXq`a$* zq`dQ`-aP5R%RR`Lt2}w8vb;B}lRcNf06m<+8$6Y`F+FLZ20hJmvpvMY-Mekt8a?%4 zN;~tiv^>mZv%RJ8tvioVLcEk)yuE3V@Vi@%2R$dF)w`V=*1IUG(>=G#3BE|ohCNpQ z5WP%3ynyFJm#s=P9%3p*O$06Qf~|Ge8j=(|RB@w~S#<~xPvh`d9LDm}LMguQ#8 zLcBhgaXacFio6NwFuipS*gV+N0KIarq&<#9tvi6K)jd2C9lX}$5xtN{uf50v3BA~A zfxH^OEj>v+fji)VX}yc*&b&(Hp1qQ3rakIgR=n|C<2(aj&%Ex{bG%d_HoaeA1icxC zY`s2qG(F2{ZoQeLO1=5(!#s2?SiQk+%)DW+?!2bUDLrBoJG_)zZN2U5nmx^&8axqs z5xv95g}oathC8F`P(12Ty}YY;BE70XyS(DH6g;!Y?Yxd+qrISphrO7gcRim}jXl!= zkv&uaA3duK1-*pXjk~8&(d z$h|l~th_iNTf1JuGd(3`ggqGzQoIjYpgs3m+B(r=2|EYyE<7hfIKBUTnY`@iXFb=J z5WSJ>(Y*l`!aQ84tUS99kG*p`D!h)=<-ISzn?3yc+&u|54ZUMG5WJ~v#k`#aEWM4N z20aZexxI>ic05;~cs*H6IJ^h5W;}r}fjtHO)4Xw;Jv|T$?K~ycl)7iTmpyL4w7jLr zPrc+~2R=`ws62kIpuG7xH@!$1tGb*CD!nfZt-WU((>+62T)KmJ2R)LdAilSn7QA|N zqdh@o0==`Ol)Y4mX1&&ByOX*u9`VX}v~-w!At-EO8zo0=j(+ zj6DFn2|I^uhdhFY0KEi^iafzUOg*zH^t}vCKs{WFdA$YgKt124EIpF%`#grg7rlU2 z3%=dpKRwx`5k2~U>O90*uDvRl2R$j`+P#XhqrGi@c|37l*gUi6?LFQgg*~f~Up+tH zfIOWT2EGAhBt47;OFY;hw>(kG3A~1ml|Ak30ljvW9zCSf1H86oP`#coK)u*foV;?| zo4r_zdOQ}t0lj0nUp(q;kG)6aRXtI$qq?_dM7`>Yf;>kt&pl_~(7i_Pygab%@;nAL zHoa9gTfM2lSv{~}D!q0{)jbtg0X<=Ypge?+wmrTnJU#IgOg+Sd+&m6|&AJ$h$h?s4 zLp^`0`n`vX8@2NpghFGXua)m89ell`@Ar% zK0VFRZ9V!#Vmu8+hCO;NgT3^2c)eiP6uor_Iz98Jt2~Krd%aS$nLT7Alf8$t5pM`29=%Mm)I1(CoIMI$EWIq3hCLd=M!k8c7d`g#JH4(h^gLy)K)W1y zV!Z)5hCTCop}h}YW4rVVh&_3g-8?$xt~{|Adp*H;yS@6r%sswtsJ&CUfxUil%DsE+ zo4f>pjJ+^l2|fR=o;=pG-n=3>-@P_+^}Jg4Ry_lTn>K01v{`aRhU8$7Pbjl2RHtUdAIue&}YfIEag zusm)RvApi?PCPS}iM`3V{yi0bs68(3n7oF2sJy^i*S!I2AU#4U(!2%J*}cyBojeA8 zVLE|sz&z{NfITincRdk)Iz6=^W<46qBfcOTF}+I!FFYqtA-y>T$33xE z96PJdK)fub1wG36m^`1tiM*44&pQ#b`8>hy6TR|}1wDyH61;q0aJ=F>K)gqvzdd~4 zD?M+<(7gu}G`x&hJ3Urgi#!D)*u9w;$i3U;2|U9Evb~kE5WOVIxjkL1X+3gaggvcB zU%g|FpgrB*mb(IJmOVWc=e(etz`TNEoxGb?`@L3m^1FsFY`qNsX}tmR%e~Yzh&-3p zxV@u#pFO&{QoRM7?7e)tNxalYf4jcc8ohkgyF5+2gFPSIlRNsw0=?*hoV^cOkiGea zmpz)D0=~E$hdtA&)xFiAbiGVd#ysHVgFGHRQ9bM)MLdMAGra7o<~$GDR6U$TIX&0j zki0mrJH3x0<~#YXaXlyLZ9P-bIXyt0tULo`6FvAZj=eh(DLo15tG!X@g1idp<~o~0 z?mAn*NxcCY-@W+E%)OY_gFK(10K8Xn>bw}8BRp@71U}KIhq)}*2)+K+*}W@Z^t=3O z96g}xy1W{nNxe>wz&(insyqOBjlBiE9K0oHVm-MYfIO;;6+JDSPrY$wkGrIpFTKFi zuDwN;Ha*w#jyzc9d_AVmggZ2&7QHjWS3Mp|J3O!Xm%SN=!`aB10|Ghb8 z20e4WfISC)y*$%yHN6oMVZ7Z&h`pF5?7Xj|>p4kpaJ?AQyu20r&^*SFg*_h7j6F1X z%DXapfV~%fcs;*)XuJRjZN2%0TX^S##* zf<3*6Og+XDf<5naB|ZH#13Zc;Ydt0C-@AQWL%l#(%{_128og*$fIYggPCeRvExp2} zu)RRvg*&Y{J3VjMoIT2|qdjI|h`ri0g*}k*;Jmg`^gZ!;i92pjQ9X^^jy;0i2fc2R zAH8TX_&b+|7Cl~!XuUz?(mUF-(LGPvjy++_^F6nwGalLatqP@b`TD^`N zhCRNwle`LKi@g1BggwU>TD$;h+&%HuialGRAw7E_v%J+^ZoPPpfIaQ`9K7HfCA}&& z&plE8WxM1QK)sUj#=PqJl0Cb@wYyR$xxDyIu)N(Lk3GlNK0Q5hcs-FniM@^Gr@c4| zTRoUHzdhj(O1oiLS-c=6H@uhF{k(`ddA%ccZ9RN2xxELW%{y*$w>*~eqC47RsJwY? z96PMlzr9(?>$$sYy}ZlyxV*J3i#)~lbiK*|{5(i*J3Is9lfBNK$32gp#XOTzLcH9% zf4yS9h`pP_%{;gd9ld-Cls#DIg1u~wB)#$9%{`KI>bykUkv+d3J3K_T%RC=REKPgS|bjo4Y6+0KEXdgghHaC_Vq8@x9_<{5xac zh&{D&8$HFy5j<&uU%h(p;k}h&Bs{Dhpu8;RkUjiw0X-EZT)ha@ZM`Pi!#%Ep9zE^} zl)XlHp1c4dh`oBe7`?lOS3Sw`w>yh4b3LYK4ZKdjl|4oeRlVA3>AVYu_B|entG(#W z-n_7P*}GNSojmT3$GzTmX1(^4-8{;7!8{;(2t3fnhP}*boxGyZSUYNZX}yLG^1MkV zZM~)9-aOr+p*?1}pgo)jK-{8oi7D6um!p z1ii!alDxQez&*#ScfDh)V7=HVvb^gT?mep;Ks}@5)4g*7wmeezUcKxVGd)rH^SvMe z4ZZBiKs}Q!621A=yt~iSk-I-Kt~@q#*ge?UCOp=n?!5b*oINxB4!mh7KE07zAU%4u zj=i?ka6Q0OXT6SUG(DkGZ#`@ZI=vjV7(Mni;Jkbp3p{jTkGq`!6usV2dA&M5HoZE~ z20Yf$g}e*inmq%p&OB_rQoX7r^Sy{Fm%SL-fV@=-{5y6XK)uZegFV%w?mVPc8$Ja0 zjXh!rr@goo$-E92#ynxULOm2AcRdanqCJ9_l%*;X76~Og$M(aJ{zDzP&-G zTRRu*x;tegnmsAL*u7u;O}*}r=RDVCI=wQJJ3UpK_PtNJhrHyBrM&8>H#`%be7xC2 zhCBjizC5N_;63-1;JRa|L_K3DCp`&ri99Z_eZ9X)Vnp}hEci@aklM?JJ$+dRtQoI3{FSiN=m%Do^^ zQ9TXB9X-7+6Ft&{;JnrTTRg_^kUdS>%RKiWX}oA3j5`R6b-YEg$GxqCp}n=fK0U^8 zf<1xNAHM!nhP|5gRk{lx(>(ZdGd+cuY`lIQt-XR4RlOgA8oOkKsl5MJ6TMlofIJ0D z-Mu$^(7f1lJ-vm+e!Z0k0KD1RfW5u#le~%xw7q6}4ZZb7`n(12Ks`hO(Y)U}>pQM# zNIgDB!#op1S-VdeianJU^E>!qH$9{2HocXmHoZ4WX}vE7<-O&qalHgGygl;Cuf3y@ z@x0TCx;?aPio9ob+C3u<3%%vOYCU|C0y@`?L_OpXguEIaG(CFC$h@KIM7$i01ihS` zP`tqJth^=Cjl6|uc0E)qpFIy2m%W+=roC8oA-kjw2s}G~H9fFplRO&S zgFW*cAUlGB*1bMHVmkzPB|T>|3B6Iqs=bD~#XDf-fIH+eF};Rl^}WZmraTl77CSe= zOFdHsjlEk>3BBfXc{%~uNxbPMqr94$x;)fqro8AEeZ6{ejlH7dN;{tLbG^NqfISQI z*Sx|+6}-=@1-+s*sl8sRU%X_u(Y>Mh|Gj(-8odBkTe?@R);#H@#=LZ3H$7MEQaiV< z6uq_99X$cYfx8%UTf8D2X}#O)<-0n!LOs({EIlw2jy>`_#kq659zGxc?Y#Ry@Vydq z+dQoIJ-oiA#l5_2E4-Cx;XDm~qCG4g4L-*$lDx)%={-IZz&*x%5j{HrPCaVm3%v<6 zeZ5A-7CYqmNjt^hMLqTdt2|e*BD+!`puAoxBE1zYzPur`3cc0hi9Jh5KfM%0;JivN z$UUdc0X+vLPd)sUBt5eHr98<9$Gn2Yi@e#iCcRZw zp1jZFpS=(z**(%MTs@BuW4son6+9?hP`%R01-*xnggtR)g}m(fzdVmtggwi?;k;R` z6up#xSvz?Ar@Ld~3B8L~fW2*Q-Mu$t6Fpd67`@cE6TOdBp*<6$#=Pk}(7h4~x;KRpY3W<6EZ*1i6j#k|Xm z13pWLraey1o;`lqlDxK&TRh@Q`@A%z?>(|lbv>84 zM?7p|3ccrJl|2^-$vYj6H#{&0E4=<*Vm#9yA3eh)&O5Jhk31Y!;XVD=FuRR8e7rVa zCp{sVSv@itUcDy@mONLLdA*UAZ@ZHLB)tVK zp1stk3q3ofiM{X>qrANXioL06ti214uDyz)W4-T89zA(ZJ-yd+4?AuUsy+AejlE%A z=R8?DDLoJ^r@QcV%{)i-{=Fyw;5@g`CcS=^+PkFMRXyT661{YpRJ@0tmOapvh&cPY zWIcp4rajWI|GYCC9=*<>HatyaX1zuUIXzEar@Z@%aXk07cD(>k^gP`bwLLe57(G}uNjoV$l{}%N zj6GOU13j6sSiLI>ojV27cRd1N`@C6-@4WvW+r4NYk-NV&4Lv?2yE!sx?z#kFYCO?c znmqF?);#Y?p}c~|oV^!75W8uwE<8-DqdcCcvOS#BZoC^47`@Ud0==YYeLKp=06u-t zl|5mn)Vy$_I=us<>AWZa^F0Vbj=Yv1#=Wq@0lb0S!a7mB)4jGjhCKz{Cq1D_p*$PJ zjy$%`empM&WIS+KzdhovU_C=pn>ybBL%lW}cD%FW_1U%%u6TX;QA3Wnrue@|#>AYu?%sl@#+`Q`JkUg5f zhP)Ti89jST={*9L2|XI7NWI{oDZLlbh`lubt~_Zk$32h4b-fyTGQ9j7{5-u$!ae?{ z-Mp0C61{%Hz`R(P)4Vo5guOArTRpe3COpBKgFT&~s=colwYwutY&!=jO})iy0lmCG zD!e2vLOsOQtv%prg}rplZare?s6B!i4n35*EWN%7*St}c%Dlrx-aKa+iM-$Q={*TP znLHu|FFmQ1Up?qfW6?LvO8^513lDZV?D2Ompma0O*?IcPdyk52ECIW zc0GFJw>{leH$7zc0Y1M1uDt`wJUuBjDn01kyt{NtNj<{iay%lz20b1_usk~khCMhn z7(HUG^EnAHA%MgS@J(lfBhcfjo!tQ$3T{DZQY) z<-0!AicCf3%;9xB0cP?*1W#&sk{Cq96jA6 zq`g&9X*|2?vOEF~o4Z4GmA$j+O+6>WkUh^5P(9#POFa6=xxCzwV7-qTV?AB;!o7&i z^Ss@CxxKj^4!s+lFTHSxp1pIOUA^^aGd)%5f4dx6YdVP1a6J6HSUqF4l|2A_wLI{i z5IZ&$BR#}N;ytEL0==IXCcVrL2)_Qyt2|;JqCKAjr@j6K_d9d0_&p5?^1MPKWIZ&o zmc1XJO+CmEW<39yjXOfg#yb%_g}wFGro2HPy*=EOy1k_VnY_$WQ9UY5i#?Nkz&uCv zLp%0xa6R)!nY$~&_dD_klRN|<9=%@w8odz)Og(&!mObU<*gduZ z5pOTD_C5AOT7Rn!n~`X2fVsI2E8O{nLRkC{5_m?r#v^GS-YKN;5`3Zsy&31;XCU56TLU7 z@4I(zM7m@{2tK@9i95Yz%)G)5hr6{G^Ss1jJG**=zB_GPr@e*XoxONrcs>{kj=f!-$US}rWIan- z`@1@FHN67K$h zojX;ii@ZxB2tCgq3O&}pY`h(CBE2k>nY@Rk3_aon8$D$;487sS;XKZE9K0$bZ#~@7 zxVuI)lRcz_L_Hra3_bo#qPxq0?z~BHQ@wcvL_H4nr@Vww=c|BuEDLoK$uD!g3db~_N5jzlfAH1Nm z9loLh6TOuS*}DjGgFSX>BE6!4SiK=-L%d0OAiX>K6g>=jc|E&QaXsnfE4>jNQ9Leo zy*&=&E4o7)P`&1?z>`uonmt{D zf;@MbguG3#@w}Qo9y}tnwmTe^_q*j2%Dgf<1wL2Hy*!-@oIDSFZ#~*&FT2M-LcQ<> zkG)bKOK|NEhK)u1%BE7Ee1wHy+HoeToUcG5+^E?$w+`FCWb~{7& zaXs=gggn#xoxFqAsyw^dkv$}LT0OwyjJzzO^1N?kJH3}|HN74h8@tH)Z@jauAUv3D zyuHH)h`T8Mg}sZ3NIhDIK|KRzem#Qb0K9EZ z$~{CqySyYSc)bRwdb`Vs^StETYCM#0RXuY@LA`@rWxaOQlf9$4PP{r~+dccylf4j` zNs|l0A!0%*b_dFDJ=DX^3=DfP+biLdC zF1Nz zJU#8Ddc1THT)c%$hrKhG4?SSoJ-qa;Ej&jiH9T*1n>?mRgS;-jV?FL}NWEQe;XGKw zWIQqwp1u3ikGyo{9z7+=fxK@Vy1azHXT9}STRp>pqCKIOBE4n(qP?@GJH5_rW4%cR zbv-BY3Oy#u5j}Bcc|G?9<302#_`K$~TRpQZwY@(ysyruRGQ4e=z`AxAiaeUwaXtMO z7d=>Ll)ZL+ioKF7hP&c&i#rKtRXd+=e?6sv{5;0ICOnozWIYwcZoQ**|GWuYwmj}z z`8psH486AZ&OBc=a6KieF+B%tc)hjs6+EB_06t%z5j^Pqay|ALiaqPP9KAAZ`_ z_&lH;^gN0{Pd)K&iM)0=h&;m?Qa$aPZN27IE4?mol00{0wLLgqnmwXS4!x4R!aR5> zjlA%oJw2Tetvw1KfV}(RgFSRsjx(mc-1 z!M%*GRJ~)phP<5lh`o<@$i3j}&OCP^7CjRfn>uhd0KL<&Y`q;i`MhNI)wdXh*}W$b z#yxs9YCL5TySwO%zCC(!5WRtE(mQ2H#5^qo5It}F={~{=QaplVOg$9W)w}k|j6EYRl|8k0gFRl8F1@9}{ybmv z$~|OLpFB;GrMyz{&^o={*E=d^IX#alvOG7RW4$`4KfO$rJ-vlW1U)6_gF6H>;X5Vc z620s#>bxLLB)xf$H#_=f#5~@UZ@sJv5Iv1-G`-#(z7G z;=JzTMZB1b1U}=h_q?vA9=%SmoV=9IxVLCz6jy+m&Q$4p0Hod(!;5($KlDt0X$GoxBjy>9VU_7|a z8$G&81wDv#Prbq)7rmKw=sVO)KD#O~Bt6*`Nje^8j6J`fOFaE$hCQt{@x6_Rg}h+& z@jL&$D87Rs3chTZJ3ZOr5I*);g1pNPB|R5pj=WD>OTDtDFujtnPCRFn48EuxguDTj z1Uiw~sJz)hbG#q(sXcO=dcC8jv%Rp(M?HZdr@g|wI=yuuA-%;uv%TQ706m}lf4$Sz zzC3y^ZM`~QxxD9gIlK-$B|Y*yi@R+@)wypil{5IvhbmOCCe;=70ig}gJE0lh#@v_0V*fxUD90=y+Lfjn)t ztGqWO2RxAx<2{k-8@5WW8}lROvUT|MoIw7rM7k-L?kJ-wTkjJ<4Y$Gtbk zKs`5fLcACH2|dK7fxVzlay?^E@V%6lIlKkvBfY#|j6E@?-#urJWxTfHAUxPH#5{1~ zmpxx!nLXr{r9C^|SiRP1i@m&;QayK9!@NL3mb`dJ$GgVY!abhO%e-^Mxx8XnjlD^{ zN(GV3BAl(PCa-=>O3Z24?dU7sXJ7A_q;DwP(8eH+q{8; z^Sm~fl03aqbv)*kmc5WcQoG(Vqr9}Qcs;T*e7%+p3cajxfIS4CfW01b4!x%>(meU! zb-V;FExk*wpS*Q9ZN1v04ZhmBGQB=cvb{nDE4|(&3BCGlC_L$FMZNP{oxJj)_&o6e zCOuzr*}Sy!?z>T5**&nOeY~1m5{t3);-yW*FBVb4?ZEFOgnbvEj%|GAURd5Q@lT31wH1G7rpXe zF}Z(hki1oX8a;HcsJ)sw#k~oUGQE${LcQ$yg*_H`sX7~ycsgKfg1w!aRlQ=_fIMWb z2R$UkI=w|9Expi|nZ3Ojx4d4QoIPw_H$E&%mb`giygZWmYP~pKmpsSn|2&doVm)j- z4ZVsIp*`7eAHD5}>AdHzV?B}1)jYdgTfMp^-n>e8y}MSvh&`jLf<2LR96h6<552$7 zuRKFgrMm$Qh&&rBvpk((^E_3Pr@eT?u)UO6={!2@ggsQaUpuo2jl4IiFTIyV2s;ll zhdi#^wY^@+4!wi=bG^*TvAqzW3%x_|P`yf>hCRv-;ky933q3ab4!vm^)Vw!Wbv-eD zbUi;woxQYrpuO7w^ShOCUcE1vi@m&SpS^1nyS$@;G(BqXbUkLRu{|gEq`kBvki0vq zNISSP$US!)u{$D?#Jz-6nY()s(>&9ezCH2eFg@z-emy7Ry1YS^E4|FUExmo{=Dd=5 zB|He+>AL{mcD*3V<2(Q3w7gId6Fny#j=ZJ$N4-!ZGd=kU{=G_I#<~UMM?BFWr92oT z5Ihq;$2{WlvAs_9p*^&WNIeflIlZAAkh~^rEIkF(8$2AuJUiQ6TD(AbHN6#E^*mXY z+`E?@IXh31g}uOENcxth+G&$GlrM zth&wygS~zN+C1nHtv$g5z`DxK>pVq^V!djqOFcAA^}DU`g1w=Im_2WGWIUPVZ9NJ@ zXFKG;)V$3(B|JX&>pkk;*1VcxgS^d(l0CB;J3U?fki4if-#v9${5>|l!aGbGr@ViU zTs{1dZM|*}+&f!_ggukYh`bV_{=5&&COU2|FTI&3B0I%n8NJ+Szr8u;Jv}p<_`FR$ zAUq7AM>`cBJ3Vgk!n{l>lRb=@E4}1wxIL{5OS=l2hB_vy4Lul?4!h4_+dP#oVmx+{ zW<4If1wD4)Dm^qcVm$m~+Pt-1fIRihhP*u(o4kRm3BCwYj=eWBMLqp*2R&&W=e&aj zw>|vYkv-D?usfjvguE@?z`S$~x4lOhD84$96g|F+Up!mk#l0Wi_`4Gt;JuIlK0S|v zeZ2MBBsN;-e z7QFr_*1V2E-aKn%p*_HysXewTExc~df;`?#)4Yn=TRmv&-aHAr!#zzv_B_%N5j}Qb z-n__=<2>H^oxGzZ;yhaRQoWL3j=fU^XuO&Ck36_^le|n8oxKbnT|G(wt-N4nyF9qH zzP)l~F1=dVb36=3wmg^~fV?p}hrKo5K)qkCTD@puyt?Y|fxL=Wp}Vf;&AhaKFui^< zhP`YPRK3CyIJv%%e-DJo4ia8T{|=9QN2GATf74_l)c8V&AX?~KfSZGQ60cm_78fPdn3ijlJYKHN8$H;kz6vM?6ob z)x66soxG>LdcAEfC_VmB-aY(W={=nYWj#$8Nj!ygbUbs8kiCBnE4_#m*}Xo8(>-vy ze?91P<2;)=kGyK-CcQHDvOR&-ushwQ(maP7sl7AAAU$hh9Xu&Y)7sFup{?@V!epcs(Y& zv%KX>-8`h=1wB}sojal9pS__0_&sGFTf4EY2EEgW8$2%9EWNWFe!b?@SG_RnpuL@n zyF6vZw>-5Ufjp-%-ns5sn>-e_MZFSWG(9S_BfYB(qPq#b5bsTT z@jc{{q&-p|q&@q=jXi%Mq&y}8u|0TQBR$y=tUc??e!V(nC_Rwd{JViR@w-I~^1c2V zI6ZOGO}(45fji>DY&~neWxam|YduhZT0Pa-hP|l&rM)t#pFM(GKD|m}4ZW%z%R3>& zz&uJIXua^&qRWW7&{ zgFV&J5j)tG%n;_`Tw<8$F6G0ljjg0zH-U9=(GITL1un z|9?IA1}{BZ#MeFim-#$M>ifGm2%kI|X^}nEi84JXLRme}D$YAU{v^FY+={z==Y74d z)Wkg`ADg?B+NHb0e_gyrYofg)rK&yP$TB_LD5yO}IMg};mH|CkvXs3)qBcAo27tVu z(&;<9igo8UiD-Asd|3N)p>(RV7fEvEtL5w`%k%K!7bO=2$&KJE8q7=NgVzaw6 zi3Yv${f@odU28pm(w99Sm=-&pb3#29vN1ftah$vbjkmlO05iP;#GgD+-9bB={y)7f z1r$9cY9_sU{}Vk)7a z`@TIVXc;`qpBKGZ{f<1;lP5g{5u7_SvlKne#Lon1X79Zfu6JcT_V&Xv75RSZ0o zx^=v>VMII@7p}d^qp3ZB`+B`2n4r9+{A9c^0du@<62d%C!6LmyI~Bd^4c5F#4;j7I z`a8W?LUg=f#40_ZsW-h5B@{g?-9J4OfD=557reaA4+6Yg2#CGA$QV8N9Y;NvTwXjF zd5OGo+EG1mljFR**?_zPS|2_R_VhfcpZ~lCk+QvhF`zwHvroNye2_fv@~OR)M-V+d zcZ)qIB$mBFc>q0v+%!5LK+GD+^FjGBmRUN${NFlu#4>-KGf+RgisgS$^!rMKG^0_<~ zFs(dh>IuHF$GE)wF(N&r;#9qN4}(4BY@a-8U+cR>WFkFBGMBuUcMv>@#<#u3)~CFk zrGz}c5Wl^LEQE-UYs0A1uAf-xs_k5EH%p?u@)ZxPd$upqjf$^Mt*6 z>wmo+XAHg9O@5J@^qNO(P~O7XqY8gD&+cOtx;8YsPW z=Vm>!_>Dc)zr8zPjp998!j(O_NWHr@n3=s>S1!Ftz6`s6^xiz^UQ)fz+i*N583{d$ zF0i{QBAB}d4XV38g4N{Iop^w(q=gMT|U) z)9$_9BLO{mk^j42c&@y757Ie{*oM6zaO^yf7@NI3w!b^*VE?@!FU~w=>I^-h#!$V9 z*6uyvY;C+ugkL?o-7meL+szxLDRb=|4Y4AVM0A>l54#KHYB}r-;BJ_<@&trx{JKu>43b06%D;( zOPakAWV$`rp=-T=D@r{mn=(A0Vv@VMPs==g>LZLu%#EQLxCPzJ?Y=1mfCABGH% z6o|b;Js>>ZsdKzy*9kmRS%f_I0pU8vLlC_s%~`#>Aa%Snkhwc2!=<}Q{;E1F_=UVhF7>={vK~FORfoNF3(-42A>X`GI8eO|2Ub1a z_4B=1s$)D5F`+vbt5LjLZ8W^__g9>2RBK0>{`AYwf(p6tBHUkbgy zNi@Afi%z^ZeN#L@-UK|(-i*9QzN0(xy?Z^jvZ=j;GnzeOlD)hcRZP4tCN{mOrIS0U z0RKBPw*b8xMMgbD2CzG}nR`8RYP35DWlue9oZvkcL}R=s`h~rzhXuXIa5X%)Gp9T# zgqXc{SYthK54yZw@w`1eUYWa@cdff3?0r2Yu`at6M>st49;Lh-j}^VNJEcAN(1AU1 zEg`*>Vh_E9rg1&iF9*H>t|q(|N}Ids`8U1u8Hl|ZKuJC2AB?>M-Wt4OQ?NW`(uh4P zk}bW=m7hInb`QOA>w&#I@BO`#Y8yQrrhC0~*hszP2=+b1f-^h-Jl{Ottc1NV;6T05 z5v{$!MYud}$T~b0+HO6k(F{AFfiXR5wD&yh;5a?+53M{?eI2{igh@Rx;dH%}9GkuJ zz9BuA!i+t*FRr{{Ru?_2vxdBU$38qHiF!Tygn_-fj=($+{6)RxDuBI_7Irx_1%W)S zl-<0_v7o%a8Hzl?gBd+B8NEB_auq$@mX*6~GRQr}ZT&pjWD~x~C1<^zl;u5lJP*BP z352`2aDqKQd7iytau+@F7n8g#U;8`)U;(^ivjx3&ZuC6nMuZH9@0OY)0 zj2S%;n+?5p!Gb+v$e6tb#;!d~3thdSKbyVsKi@etc>O&0@@KrTAq~AHd@#H&-j_UI z&PF_{Z`3@1btpZ8IF&q(MmM&eN4T&4>`P5$`QR%5OBTYNRK@3 zgNeKKi+emV>?6E=Z=t*m`qMiQIJdhtX2QIOaL_$^c}TrxH6XnTz0tdm9#A}uHrl<; zI842wN7y+={|vnZt|h()W&^(bmR-FD;+8#f{${-erN6xzU3a}I-4ecV<1{@V7=Ahy z{!YCQQ@1_p+LgRr+k(AIj)T415R<(3T8%x5do;ag2B|y5G1k0|hYCH*fgL>j9Q-;) zbeBEn1l7E?Q*FJpDe*k4GvYg3`i(rMIE1?Sn5I3l|JAz~5QM!<6f3=Q#wfiACuY49 zsgu2C4xu~*$viwpitRi|nUOowyY;+z%D+40%%D4EAb>mylbO5!wD`M=>QOq~howDC zudO_6v?M)s)apE66x_U3izYn)w~{^1`3O9(9`C%_0?@rjas9mFw7|R!JjlEQ%^^Hb z>)RseC<$d;vWbi}}2GV~0J{7Ad^|^LjZCTtvOGI3zuM*3G>~8Hhco z-~c`KX|6mWn8Z8?=qNnC&M`gScI-SIb~QbnvB11K_;@`?a+JN}YOFk5c4j?&B^|xq zo2b12OJlv5{?EJ|U@JPW80tMj4n)08=|R1Y?UOybFWt9$`HLM0CA)n@zneUDCYq(m*`0rhz={_X50lvWh*Dd=tI1V`IICe*irgDmc9{ z4OcztqyYM{I_+~ve zafrMFjkUauE!Mkpe`39P*&DrR5RW@NRg>FvsOG$d zE+svDx3@hsFs{7!Owhc6E&;vJ@a(*-_k%q#Q$)Re0^~e^yL>&CP7=H*ybQb;)g?UW z){i|oy&pWSpP9TqE-1a_O)))WY41EeaSXi~7K*$<3dy}KHA}t36tKK7h_$^rPFcOs z@zgz(n#VnDxLZ8Chr&FpG$T7MZDYOLrmsClmFqkoF!wy0#`(Nj9SFU9I&r;)usA(v z{71boMSwk8-8((rn-#tIMLoQKu2eid52Zc-(EK~kVDY@mqh7rgv4*|Z7G1m_9KO4r zz>PisnwmTZV4OXRyXd__00TXexxqS&mZ&^rhylG&>>9ng&|5r#YtFp*=;%Bzt3y2C z9LqgaWTLz^LAbr^+oe6gRRcW~9+o`xkD9#$$jLm+O2fR#O`E)?83MjVf@eKborOL5 zj+eb>{T@8Fp@h3;nf|>u%QQU+Z_m6x1Wdf)AVxgYvm`ydOZGaNh-1BULlHjj$%nm~ z+OIr0v~s=4s6@PwC*%=#t;{^x$}>E8%XB?Z&8$4U?+d)& ze=5C^>=-@&7^pob?72LDjn6xoBP+dtjxoHf069HN_x?P}BThW?aDluMmFPTpE{eU}0FXTjTCBVe za#X%JwF#CR-Zgi?j*hSGhDraN3px4nw7o8Yzw`2ueUu^=@33? z?s`3A-+jFm!1_JuV7M&`G^PWVXAyRK+~r<`q1oiXy#TyL!8Cl5oAX1w}kS z2Ch8t5ez+iVE8;~Whp(K1dTmca0|WE+-1DX;F7&6y{bLk5)nOkrBgipg04L-u?M|g zKoLD4!@9hd&XT>m0vE26UMe~)&BeWY5b?ZE-g~{V9mhP1v(GxuiZwhz^De!; zJDR0}<9ci+8|GFQ8vE#N#k*R{Q7_=?uNlSL-}9OB}pY@!va|Y-qjByoo)Q*aW=OMEN|dRj9qC z&|y96TQNQG?nyj!iE3sMi)GkD-=COnoGUneK9-O3bs7-)cCwV z6I?vyY&g9LS|dG`Je)nP8dtq62$#I-@TfeJgbzI~fMz_*Y&*Sv&-1%}ZG^m~t_eL! zcUV0(%fY>^Z!EpGpXWSd`JcUwQjR?;1_C^MACbL?v7fzOy-_`ft8u(w(+oV_2Om9f z&aJ(wev`eGJwiQTH=w)E!UjD@Wre+}f^fYtL6$v>K!m(PFk(D0@ti$xd<8s>&cQsE z&*?o-weLry*XHVnNq{wck{hJQUhP|Lm5h2K47 z$#1)`aF9LNTTeWEd2T&qOWC|u9bP=Q^@2Tq8L7MxrOG@-^CLaCPM5t>sGdD{J;*#@ zC9pkl%n3d$Mz6a}CJDVdyjHz*K!!YLUzxj)!<;=d5h%QMLIOQ7Vg)>@0Ovhr0w+BZ zzL-26kpsOcJ-NMrS<$?+)6G3b{~kV=X!pDs146xnobJ6*gseNl5I#KH4GlihiGn>5 zi?ls_IUPMmR>Zt#?5(}8YNb0I;xxKc8JIkYMZ7%5IoQ2Clmb0LrKP>UUO2sni!8k? z6MVgqV>P@mo`*Xw&E~v2mP0*FZA7>p20A_e?@7I$o&h^>gyp=wP6j=2^AA0b{S7@M z3eP-=q-ML_a+tlS5w1E7Oz68O>TA4ji*mg@2g*E*c(Og%6{J0PjkLWhdceC=Rl>Z! z9Y(yj6-zxL#OuAa)>pjevbDW(?}NP$j|0AS-fKPN-M+m@at1vIsMCN{n6CipwRZe2ZOo#Q*1_d-15Dvv#Kdl$W|5lp?e zJI1_TVuU?a0}s8TEgikJ>Tx|?nH)W|Ps_Z_jVQe-Xl`|p*eE=z z?B~3CJvhD6ZxB6lU`0Kl401g4epkG?pyxd8S(iLwQnJ0DE_A)dPp`Yjjo`aXO$WUs zA>uri`yst^D>=PoY1TTLKoh-Z34=Wi+LOJS%45CHm)g5w_u#$H+(bP_pNBlA1=0w%pHS)e^@RSP|ds;NANG9)~Zm^nSk1T(!HX!yNz*~Gj6 zX&SqKZ8;s2|m5RL(sgoVbHw8TXwn+BzL^<8t^<{ z(9%1uBb_`OmV`a|S?;_^N0hxLK%%`9n)bYQ>;t{t@wK}jHnxOF{&&w{*(qa(d93x~XEt-ZTXp|QQ3Y=6B^IITRu9Kbx9(LFt; zT#-5=7`wZNL=e7iVkEuE0*t+4?`^#TJ0iUVvxB|#1qnTKDYv}&nx#F1=9oPj{%bu2 z=>a?d5wN{9xmG>fD9Jn~h`YRs$HBW+9eq5sCzw4ZHeWr`e}p|P(agM*(V)Fgd!jvP zN^L!1s(d`MArU>8rNX?TLY}-Al8iih@l3r4+p0Yxj!!-79d10Q*5y22TVy9wn@nt^MA;pRB#%j0rtnuq3@bhYmiK`%pcN ztQI^YlBGTVqk%msReU{yvOm1~w{^W;?q|H!le;~vI#WABzu~)2B8$BGy%9ZMJ-xk$ zl3(8pu0o(iJ`ptYbZ-4IjOMw*O*p-p$?&~m0&Lx@T=G1QRDC>}{boHfWKz8s&=|ezj7PnI?A$sox_-RCEIhqE zhC{xa)s4M6pijK%U&Fkmlh(XTZGXJ2d>OoQOPoBw%pScG+Xp=I-nzRA0?0hW=NrBA z*Vwx8FL*q)PSdl^#ZkRzLzumuR(U(M$*;Xsk~_T-H`l!FH3~d;L9M+|s>D2X zFk!s#;Q>3sg!MfCc)C0kl43on7wJ5llu7`zSrb zmgc>x^jW*TyC6Mbk%T>K=5aiy_pm+AJ9NGACn~*6ZI!$}>sq~CFNM2vIEB4?@uR%S z(a$?gk}o^~t{uI#!OJ~2PcuDt>~6g}(>%R`>nc6oAeOwUage=}%@Di^2!_3SXn;M} z*~YwhI$FI{>$<#}7x_D*KtsJEzFs@JXW6{DnJ>KoH?X{jAV)m|`L08Bl`!(Tmk63@IShB-Xenv}h8y$(Gym3=+HD*8KF@;5yQ=gvD5VqZLS=C!;H z$(B4!k2}3uO$WWAXiYn5rq8`u5HGwO*$X{U!Y@4$mkYgMQ@}hDFPyy2=n1{fblbe1 z$#*?*A(=eaqpm&pt*tzB9qYSzH+j5~!5lpSTQ@s6KQX=DLasfYLteeq{s}yt5{W!Z z#SXpl8@M}s6I(spg|9paQQ^F9AJe_rt_!}BV~M=0yyZRWXHz{kn=8GEwADQEv;jR2 zmr%V(zXiS3JA%A;c%i(&GjBbF^k}^k9!I^H2F$#hMBTkf3`D&nh>yJp(5XDmUp2j{ zB0oJVPJO+pCeu5U%Tql$3!6OeR3g2yvNXM{hnqY|8)`jAUQ)d*)Y82jS*1NebR)f6 zD?dFspq;(6g_^x))GNIrlCiu=D-u0nv&cOV1;spf<08Bf<^ViT%O<__#hJXlg3Y`+ z%dR}|Tm-#2W6r(aBvw3x3~44g*ruTek6OJ$0NK31ccHsRx~DzMUtv8B;g!95_e{KY zYf8NeDfGO$iiNzuxtKjA;uAaVA$7gLT3J0W>$E$4s|dY}k2$^Zm+!ptm36%VkBU9s z5PQ92(-FKn!va00J}*58vl6|~%@sWsJ-ECB;hntJPv1OtYy`X+@f*DdaUVVJ?)^N& zvMW8R$@aUVXfwHyfQ`Ko2zNaxw+TJ>eeAsEVM{$?2e-YBrN6vSuxP!K$eO(;SqHuA z=2X3%Z2~#ZXpuZANxwSN50gD@S6#h1z}md> z2HrfAI4?ZjWtTlslfpbN{Leht3(h+D%RIe{p3J=_{g%B@Cyu?NMD0AS)Z;w_zeBwn z#?QQZK6gCMNn5>w&A_BK)bvdz}>u|N9MfiX`?(QQffUX zjfT7{s1v<0N~68RjDS7ZnUlTmI<>va={r1<(L_CSfLZv*Q6{}=t0g_%nG!wd6S+MH(Lud55Zk=#_dvXfI*C1=kl#Frse`@r zEpR0ak_OQHN8<#z2gHJt?1X4Wwk+!@w45z(BXXHGU36wp{&OtrUOvb$D5)ZvS z7Y;o1+)zD*PK&)&-L1V5I^{h0Q8v9>9!I>)NLsuISS7lr)E_U0na=!j2OK_1na!j3YEP@Xuv#;;4!=~>f=0JLOTROepJW)OH zp3yx_k^nyGg*!dJrbj&yU|v0t_m@3`5W_sk(7`IFS$ zQX0L&Uokx-y4k#A1W&vlZT~!201rI?L6tq_c1XNUxWGJizQeszk9NIpU4Fe+majaD zkc&IQo5{QmIMhAsdoMkNBYnMo69T<#ei1x9CJ((_I2}FP^8>w_r^mf*ue3ceKIlCr zBrLt273n(r%rLzyWf{6n?uNYoS&O}o*N!~uZ9Bb8?Ebt_j!eA4V3fVAGHjcd=21&gVE>t_E^ENzp#R@#lLBPB*&B{CfFnYb56V5xU(U85d z@Z`K_Cbv5c&G)>2uZBI;FaNv6Ihebz&G|fdp2s^j+a`uLczDYf|#~Qt?td%@X z@&7$k#aO(nom{<>M7%v$a*w>2p8!21vcNs*20uKlj{ZE%K03UYwro3G#w+HNg z_NqLRju1SChf%!R+cZ7*tDZKEi*hmI7GdO1P{Fe5Bt10utz&3NKHK;bdx=V@;N=1 z1l>ITZ5ll-$qv1Imyo-{o9Q~BB!E3?x9mKGoq4@wN(H?x8DhN}#AQ8wK5RWefDt>* z@Myf00VO?xXl*=9rF1>Hd7?abMFu^&D-1oiK_9&RFi^cXixIsOg5*54YI8j-H&H!^ z{;0h{G%mZm)I7Z0JNUa=FO)q`Bp1Dt8!tV%g2z3~4Qss~Am+SMCQH2nfG|8p5b``H z(1*P!y6Z5?X*QGsLs~tVF*{Qwh zXN|lHN722FO_V*dZKu6)VT`>9f~>ht+^9WnyCJQ*b@>(0;sjx|uy*2pzpTi+#LS;BUP3FFQTz ztG7IJn%})}I8D9z05iQ6=v=%{ZIHSVim<)6!OXqo7n?m+g8#g@P!>Hr7Mr_p-ORn6 zQ*k|d(4xGj*@wKFC5Jt7N+&%>mY==)k*~eqKCruXYtp@!WiUNz%>usgKg_!TWY|3# z>wvupc4$48w$41Y8J<0wdyzc|dN4eDGE6<>D8)Q)-6Oqq?SwnF?jgNIk(9kBYb3m< z4~;zU)kQt$s2ja?OjNz6QOGeRg_Qbr@09d;!DRMlZaEH8J zsr9^Zl5{=q@D9DyilIFQk+?nD%dtC)r@%axzY4r+CMZ2p>6N{UAEZ6m2o}7ZZ7My; z9;G~ezIr`P*j7CnjD|e3XZ$+wH%>h117|&73{E|wlNG&CCkDN;8cIC~m|{F)<#4@| zg4;aaNAkSP|h_{v5rQ+R{5% zb56Zt@JT(aJ$F2-TJbxywSYaIhl@Q@J&Zk*`+GfU*AKl)sXIL@MU1?)37EXk?ykKy zW5>L(MMb@ePiH+|yK6io82!B&&>g)H*bu$@nz+2l5M;Vk1;=6p4-vf5WBNR9i|joXh=M&&Lx?;e_IAADcC@|W!!EsuQ-eISY|Ol>D{nmqimE+M zd@Vhlf4e;Ay&FB7$g?~iAE!NwQWQKZJzKr2#x=bcXY#xA!Y#bw$|^njg6%l#f*ZYH zMism##6vv-hPyo@&I-J{79Kn&!_B=Zl?T0*OkBO5-=@8N=o!5iQO7;cF<`v=_lG@G z{wcdb!?ZnP{T@7Iydpiy$PYc|i_g7AOm{r*AJaXH;sQR9Z?8PGv6MQl{m?hifl1SLJ^CBr-AUV%Ibxr03JfQ~#e zqyW8p3V=PD@07e2!lyi~kUc#f>7~8Is}VeL%dtJDR$aYyqaZ#4bEUkFe?L9!)(O0} zbA!AyVSc>VW7IvHJIp*OfKfe!EtS2%Y}mV|Os>6(5C^>ZP-`c$adMLe( z3O+q1Aj>=~k6=CL0+79)o02?R?ruHl3avfsjJZAXT7x_U+{3(}54gQjw@W=*VWYg! zAZb006uUfCn}t1NBQL#?b~?R{_=~&%4%$8Fz1KWq2{^rzw<W$u~5BJWJ$fSN+Y~U^J2Xsa7jDR zBs)FhLFK%ubfG)xgU~u}0dYKO3j#dncx5}oT}C~95e~fso9em`T;MxbM?k%~_Ru_9 zsdGJQ5J!3!H2z`Cv7}g`L#Q64UfHOk377d{TV$|(l$LhRzSV# zA;mnXdwaYi4Bb58=fynG3dcMdPz^k)CP+Na{FOU4Tmn5o*}=VGFqAui0ggPY=*v73 zitoB9P9Z!6Q_4J&c%D5LKAXM4kODoqD~&z4J$F6zxT8I13zR+Bx4Auul9i=^qBJ(+M_jNtrs6xC1VqU%M5;HvtDrvl8by~d;cdWhd zm+ZUUUDmw4)u%mUnG8K3zYRWEMP$7mzDzrUcrLw&-vvBP7NWgFNP|52HnhE~u)jT) z0tq~Gp_ILYD||gR`!_t2x17Cncci`2OB+0pafiLI7uUUi>kK_D*JHdK@V>kqiRHYT z>;pY)s(ifNP~y9;g0;Om)Y3e{LIpmuiZH#j&XK)K(f+Z#O+h+y1<@=!rb@ZWKIqoiM%Dwt&6QdlHq5-I36;Gi!ecqqje|U^YV10K-+ zKtH^nm!3Vwp@6+x*!DcuxaB<&g&4ge*z>%+5eB>lGM+sy*Ofe>(FHv(?|41^;Iq6& za=kn`slPjcc?dlN(T_as7(qQ&`X4;A#R9&V7C1cLX_P#LGbBA2WWT-0FZaBBl_otW zZDYO0g~vUGA0It&X`sD*i=4efd|SPhU&g&6kPp4u6y&@tZ$G_-=36}U2pv2e?=`(y zP>MV^?;bq{6b3yg(e^ya5SqP_t?Rs~zs|YoG+{j0gr&TFdz3v;l$X6xF!emf@XEXf zXRy7{DIL6m6X?DDOB=lzFv~gYB+k7jw&FZn-;TXn`%Sy(z>mFW5kb8>H;X;n?6$p0 zvcx=gzZyIuUU$1^SEjw6{tmi#b+$d12(Ua6%Vj;i0>V473MjpvXBa$HxD~xDqyM|) zJnuVQ4oJOPC?dW0(^3bC~rN-<6u1`Rfs)nbB{gQ8LYdxw{AR2c9^|d zhrBx})|0!IjL?FO(*+0Evu!g-2`BXj7 zHwZnFP#e8~{scY5i8Q@Yd}+IEwU51O*NeRn5Fou49=AN3b#^;ioCrOgSM0smQ#`zn zFj70Ojhj8T4UD}zAJ;s>rwcvX7R0?utth=E%=$d&mE1cIJP5s?$KyQ5Q6@WMG^{+o zucJI!+bX=;O94Hs+q%6fIIX>K`Eoq-;gLL2Bx*bFJ4ZcsP0~AwPp3Oqt)e}=F?u|a zY4yBVG$p<5jwL;^`6IpXOrSkt<83|76{kD#(7`=bJ3YMhE}XqND{DOul^aWOshfegLf<&Hg=p_RRD z)f7DpgP1+(%R0Sy{TMwQ-6p-Q8eF|PWgI;z`r*A1IRHIZ-Wo6>~fd!+|{HySTmcZk9Z1 zKf}C+gxo!$+0?wn?Wa5e_YpmD7n8l?Qwh8n!dbkU=8nB$&BMIIXNA3_YAU^3ts*@I z@0L84`jWeyON~9JH()%o!B#vTf~9g96wt4qDIt0O#*lW08bzIQ#{B0jwQ zCm=m#VT`@(h9SM3-YLGIcN;u2Rg1l@(dj*E&|bNlvXQ-A(kVUHHs3oipkO`oEl)ce zM5VnC)kVEx7)ZVMt(Ux6AGN#Jdt1C)tTek~p^`kR5tKHcX|OsCgoV8lm-f6)jt4!N zcH}$^Z%4csdK^70O**^51!6sUW!St3H)gzVHm5xPzX`qU77aZSMoPVVbYH#V22s86 zpUb^e;^{rGW23!Ym$*I5%iukId&)h^sf#^f<(a*RO|ZNf@!C8#Z3jK?CyTxP|0BKK zUcbE}Uu(Oy?{GcmE{{F$hM+xGRu4P#LuWm%5vjet9yz_dlBqrVJd!;Y@C!Yr*Q7*F-!9 zFd{sr;N(1VRJc8fR#&}w!(2Sfi#5G|rf9rB+qk@Y9_c--qLjUanb3g&k@AE&)6PK!OUTAn@W3-G+{ zCn~$Oe$qT8F66xQfdf71$F)3MrRF@85~e-Tp_4p6PD8yM=(N28gU7?8W+dj&nWAtXKcW8*xkZUH^xQtiCc#T-4+PBS}yCB?mb z-3h&c1))6z4xqgU?{qz$|GYi3?J+$Ld96JN)a1K?msGu;>xDfj9f!PyBVxMQ0z18c zxr4m%X+AuusUkdFV$eOHTra&)TmwB~pWVFyx^Fz}Zt7rnf$V?aHK=d`_XXudtxCXKwDwO2e1!Bjn59nrlK8;CtW>>|Dd zg@`@bU4c6QU@kt!eKEp547jD%-rs7=*pt z-8em4;_JL@Mr}O80Tn&7U)#J^kD|RSO{2WfTaUfl^Pjz)0r5SngTXzuCMP`|Z5X|X z1h_q0^$|SEUl~1}*KEBQxmmsKWR5*}Ws1E`7sk9|q^~>-2;;p2fOI?~0HnMnS)RNd zXL`KkSI)gZ;nO{2L@YZg8w@-?a`ikxtV%qoMk753>y12LC2PHGn7KU|?PI;%WzM{} z*p$4_;6}ZA>+ij<57@j^y_Gx%8;89d6#u$9Tg#WuaiY5hGTXNo-E1!O&eusXeG-c>zwEn2;+{13hmvI@NBF@`-;66RSQnfrhw&uKulOjCC@It)KY#+S9mGZm?dMmyQh+aHao)WwS;)lK7r)@mj zf|fn69EQD!Ab>r=U1&Xbq~5yP;xfJTi*CEKX4kx1t@ga$?IJ#ddBHrgyH!0zAS%6b zrW3sf?!`R7mn*(^G?u+ZrL#Svx=}rHMXJ*tfjhE0MkK8P+?R72P(U3R+7CvW_G)%tMEH?43RxI zlcc>zvDmyh3ZlFM$>| zE-O8q+TlHrcnZBv(+s>T3>m#bQI|WqcHTTUe<;1Gr&+z_|DL=hA*DPfe_y@Xj$%8C z_Ypl}4zWECNRB-cf+@XYq)fb>)y+JFXR4WSr!2i4^58l<5^lX=s`k6WYH7XmTnWAWJ(oPlvUI#G$k{!&k-5B)<_$jX z?~=U!-90@B2KT&Qu&2F0!;QN8-hw=tZOJ_QX@EVArgA;_{*JolIuN~p?i9WI?TNhD zepS6yjKRHc__;jq7mK~zqJTZ?U}8N{v$(xj?JvDLnEkw!1(ZEtTSvVj^(wtV#^<|R z>l8iYiMu@h=}*02CLFz{qsu%gH=aGFRaZIH_-nnEl%qRB8Ld2Crn)_8jz+!YZ4|pK zgAzTBaDu%0XZ*Z?8T&lxrNO)T=%_r(2eZ9Bz2m&^d@Q`C5sf{54s<+*0*<}gdKbMU zf%ZH(XWu-j1&+N`1-Lv4I*mO1@)EvjdjvfYq8YvE_D#J!_DDV1L%cn}u=TvhqJ+B` zw2r-1&w#yt?Gil|0PVY5uY=QlE-O0Qp z8$&(jQpvsZeEd5*xdS~h1eCiG#s*bt7>+!ufzP~k5Cy$XvSvNA z?OQ#}6vn#mJ;yy(B8k0}09-v^=>ffT*f71R#0R}mVQ)RKj*q=^o2a{P3&p$iX1=}E zHp9F^=RQ4U>`guTrtM%2GX{ae+L!N(#LJ2AaGdMnOCSV2{1?#4f$y zs5-rG0sp+SPtm+IP#QcesfE4ZYA-!T1tGo1u(v(u_8vVJu$sM6`dB>+BVIjW50bnK zkp#Q=n%liHRBgSkq!K;aJHfq~s?5E5_Wr%caQQt+k(WI}K`=dEtcbnU+VHzNG%!6S zm4H3YD7n0SH9oyi&nmrz2B|%uf26$uJFL7-qeZ>uWKumlP@cWyOkh2@!!o?-jM6>H z6_Y*J1bw|e+h@Jv;;%f@T7f(y)WZg>2S>f8?mWFoWQ9Er zIo!RiSJ1m5=%&5RK@B@MrfWTYpC3JN8&o|KD}=lVMoK+s0dqZOOpm+f#tpsUAWVLd$1R1!UZ9^$-5CEPs=-r+p>#kIX4uD!k5ws1UwB}}}PC>1>TF|0a5 zfXKWVts*^qwTinVs;4}E9tu6i@7cV~UGKb|!EL>1uOK~vRpdRldDgp|IWE1|L14W^ z;M2TvYo)z)`pvxY7Vx}0Tm`;t)W1CwBwD@X&M&+tBjP-2?u|Wcpt!fl)z&XbcB-5ovJA09o4wPC$aE-k(7j%I-S_ ziGn&X)RjHXBGtXhM0`B46N9`I!pywbr473ndab+Nj0wHdkEy(LQzJcFHT=AM9K<}2 zLovL`1>n7BHha8?qtm^(d|tbLQK3DX7Vf<0%!*06Qzvevb zn|r;I9=tpmBYC=zWhgsFCZ{|WxQx4t3a-84lAk=<+kU;q#tpr6iQzkl2A4Z3EJ;1K z7-l_fr?9#iTvwV3NG^ z8s5GB@{&FM0)@Obq0_uBsJXq8SF61F;1s=yu(!R4TqwL8i0`{WX9vB4+mbxAV2-_` zMFl;-nw&kKODes`y-Ph#EE+voTe&?%NhZ7w8y&r5UktmU`xL!hoQFLBAQn8?UqC%R zAGAGE1cANqmxMgW-BP`HRDwO6#X!5pf1^Fl|Ft}%oxHsXsX)BBN)kQz5qZ0mj!r!e z)hxXXwx_-G7^6E~HMl))-e$eK$!a~dVgo+xX1hHc##B94WMe%O@lCtH>Z!exEYUqc z(qKKOrDZ*a&6d2Ni;lgHhF81~#_PQ_LL5DLLRq|2lw-YLa}~Y>9|*k=hf}>Ch$Fqq z5SYB|n@+shwzxbv$Hu&O9-%xY&+xlrrY^mhgAu)7 z+5^2SwH`hE62d&paUi{Q=YKtO*r2>i4~0E81MNEXqencEdx5;e$HTk`dOy4AyEZ=a zyCXhG8>qcaJzYKUDKfq9XGy)a4KY33Gip7v8Yn!G9Z9`xe+xYdMd&?LjxW5syL3Iq zq71#_O^!SV{-eD+hcvxG+JQaqIH^60p|Cuy8lAmYMWVf=W(vHcc8RDOS*`K^4^^?5(j|{vMb%nj5hmt&%3LCq2u5rD3RLQ&+iJiSU z@Ps^}@*zFFx9hvee;K`vNeDb(X)!&A!b?3Y*lIoS+Sg8iYLR-9W+=2bi`1&zFC(+9n9Q^h^X?V!3G2-LkazBW8o7`44mql`Q6W^KKt<(#}e4sX0= z@fSS~H#WVMs*XHIoOwJKgrz;RODwz#wSv4b0e8K2kchjZTc*9sQocN{=r}#M52d?^D=*1WtrJ72x9c^$pkWA{CXE9*QA{E|C#6s$d2 zhwnVKg+slvg5ta}po_hhMwdO&7&twfSFt@6=*_(pjb=SK(<{Aa8TUM+-z>e}%V9mu zP0qZjg}A*$hs8WU7Nfg$lc>EalZ!nMgqOXXP>ekninTnL=uSMJo0L6U?5(`ziswA= zuzEYx1!ujv3m-iOx~x4t7mhqEjWfOLX9heAXpg;wB(6LdhmbrWoL;VsSlW19-e8A)Y;idOAGR;V3_D`UOVDO5eyUDCXCX}mk!lLkFa?t;A$fr>jKFs!{W-LO1RlCivh%7ML#N%+0| zOg=r%;upPwg*ZJyFwngsYtp=-pgg^<*~UE>Vi`S>t~foha}d30*ay8OG^;(m*sr|= zj9fcS8jHK+ZDqW!OYuBc5p+E^obtTi<~=<2I9t6UP5?c>1^YYpTbaFgBCtAmz4JRg zo`*e*g0s4{u_L`%I#s=tn5MnK1J79+l0 zXxO}KfUvwIBh@_QAXL3tD1kkL0;xRYM*=-MlYl(0-t0TG$=|(GK8ig*&Vs!hr|Ugl zT|PZ}umwG+%1%55*uFi`BiTDgNJc%WAtgOO_;0;m#E86liPyaWZeBb=Xc#;>mbAS| zl%l<08~?l+KbO2j=^s6Rp76akY=OO%fX=-E-O4*%bhW(SaqB$U6cD|%70*0IM_V%5D-1jGl)I+OQ5{4u~)o^UnIQX$Spkh zZIr#$5RtrK(W|}7NJu@#hmE}t9I3rJmQua3w5h#mKo&iW4xznzUCzC}N$NbJG_kzk zH~76uD~Y|b%u_uxWJNp~tarSHzRo)iuByD$9ZI~!eFZ(3)Q`P(wNO1WvCq8KEq=XP zqQE?AXa_x&y1TpjCJ8;|!HPYZw9GrMrVqVFuu41uI3B!KAv!(j)SA8c3-Ud>g@nDI z-@`l@_xC)7Av`@6)O);4si!=DlmI=n-c3B{&=ft6>E3?teX6{$0Ip`^~*1Ga@|?rNg{g(Of*>n|V8nx5YiPSkXPeX_Gy@ zOp3gJWRyIy*-pJxukbus9~C{mrU*St`hh+6IRU*t##}uDHnY31+*3U}sg6AF&Wk|pwwnIFGV1v9AjEKCDcE`MG@S?rP(5V+0+WR}H<~zLnuzI~0 zi4s1A(+R!qC1E{vq&+=3;VHbBOcXvhzU{obdM!N=8bv*@*>ycNPQyJZft9_qU-LY$ zL;F0J+fKcQ-0i*QEK0peSAsk_2Z219Ct18g0ie9VX0bdEA*nssVC%bvt0uhDqJX^1 zxFNmCw@|z-k;1(|(h0p9vmCy3e`LH~KVZFUE0ev(|I0i}q>w$om*U5nH^o;EcWhFp9j`=nlOcpr^bA_-VZPS1&yzBOtv7oJc*IJ4L+q zg$6w&SdKkH-19rnK>9rxxG22|mu9;1O6t9q1%o_NnZi7oXPLa84`#iV^|U?ldEmXK zxQ9Kd*9*N^H+MW<%0)eWd=fp#(c(OU?hm|lR+cXtoVTzkEyYKOeV7ec($W5GS&HI6+F12jB7 zIPN`uq;Nfs5idRANT9ur4Kh7ummIv!Nf*5jP3%0@R2;o`XAHe09V9x|Z^XU)J=8m7 zIQ6~h+bg}2O7c6&epEdRxG}o#Dcn4u{dGM;dS5+ibu2ymTVuWX@|Qh_tK2%#jV3)t z;hH`4^~Jp;S+G0TZ`-_~#*@3Wf-Svu@)SMwu8}-uin6^yF*&{YaOphRac4Z1M)W)g zI?p^kbXz^voD@Fjfpa|o=C8YH&IG-P!k)XgUzxq?ILFlvRd>72o#{NQiEBM~elERcbh#0F}Xd4zf3z?M4mjm{FOb{{(C%f;~Tw> z|4+SK4gCv!Ok9CCJ4s*O`QO!Gy-v2!9;aR;fpkX~Cau+=!_53@%y_~%P*pj_r zsXo0#oM5^GwMf0tJdwN<@~k@`4_-auRn0s{VP3tt+*Cb+{t-R1xA{GeT*p06WIQ~- z9Lv2aSt`7lRLnbdy`sB#t2aG%l)=3CQhdFPlf1k{lMX!w10uaetFgU@6!bf5`zpPH zOt(AIY8^hv$j3Yoq_{jlc<4Q>s2@4JG_kx(gXlaPCu=-_P!7GnG_$<(sxiHK7Zf|O zgM~b%aBIEx(44&#?4P|<0?0jPi#@#=3(mYGO#Qr)g|oc71)9C^hfBSNA)dVPw2Zx# zO?f;u985ixreeGdL$|wIXstbib@M!RJypG^r<1(wf1N!|{IfmPb5=d6D@wgIf5g31 z>}5Pf7nHqfO2EB7bA`QfwFW+tA+S9Y`?5RdHdnl-*IhephmO5}>L5Hx%NM*l+rd4VU?aW97@@rrle#>UNW{DX5M4bsZtXmo z3@SYfb+|k|FEqSkcknz7JsZ7OzbL%}9`3yC&H=s!cbL2gj2%8Ttkk@ht?D}{w7$EP zkx)G&a6a z3~s#aFZsP9^Nzg$C~rMrA`HE@IN-eo6Tmz!PY^vscBwpUX9&K2C&)bhGP1pBJtIBN z7xg{GL9V<|{HMKn@ee&b`<^{_bc4M!^6tEsD_}kPNVvRR&7C~nYgfH0C78VLiEKOA z0u89}xH8?yT{DZw?_D?)X^0vH^#C$y6xJSJFLu))N#3VfO1SC8M z{vkcRP+mP}?v1=H0@S>r`kp1Zx=qq0SvoPxlTPNYn{E> z9ELsaebcVCmPz5}D1rfgUvckLd?~y$iKqS1z3XeV7q`SKykpexSAz?i} zqNzPvfvde`|8%_+5`sOP8%w)l5dgec2|m4iq_Vr&a#TI9^6fhNZzesNEL**RAsfAj z34%SBPUJn!kfS}z3fMf>0vJ0Xdy72YWWPLCtc<-oGC@2MA5cA#E4n*NESo%rps+h? z3x&N*B@et$ZyG(501iErk&?X!D$KlK9fLh=6;eDqalO4ui)K6&J}NxoYR$Vq-fX=r zyPZAoL&!T_a-O}zd+9vQBw)S#LZQ1TGhRHT`;ooUk?OrZTzNf+tY^HbuD(4W2mw7a z+y}fbLYcdPJP$kp#C<)Wbb`Ikk}W;85zf61c%i+!A3wX5JP5rXhFZIB?YF&z{vkac zjiEa-o`1a!f&{((Oai?Ye~&%AH|snZL~FgJ)Wti0#Q;6hNjW?2oytA9#AUqNN|d`l zU?L1?|^=N~=A=O{hyU-i3HU4J_^qQt$k0|q?)!UsJ0lxw~8-#I*g zc-6cQ0Ia=69;3bOl#V@f;yJyZaS%N(Zxy{4tU5hZ51KvWHU_=Ce4jjDk4!wQ z?Rz`$I}komT1dR+xw<^~g)BWeaw@&6FF8EoWstqTnk2pC;6%OI8ALt7fkr*#Uf;b~ z+BCgxZI8Saop`<1?p3`jnH4=Q>bSfkr5`<>)mJ+!lG8oA-i*427d<_lqbWW2zn8tW zBAvYpc*Q%}u)Dni+(td@*ke7_gkig`w-~*QXE?n4lO8<2QFcATmjS-A-S4~CaoRm& z+$KH07-qbnsS7;OF_Jt7yb?V+DD^!2Fx9**yVtyOcY(cN6aBm+^(Q?AycWHjd>A~g zO0hkB0BSo@mz=zws;Iq>`8+-2Pc1#~t|PtqaI(A0()c_QeY!f;r;9y6rTRNlQzX5< zw^>Dp*vU@!& zfqgyn&ObdSd;~ju)H}W9tqMK6og%#%JncJz@%p{|E#N(-q*6Sv_Xxf4*hD=5M&~^i z%@sZ3oK-tLan3x2G95k8oyt6m)Sf#{Y@|J;{gS;^(TcsZSl7K4;Z!~0!$H0Mx6Zs+ zvlBjONa{SMpS(P+cxAmPaWFkNB9=YD^xM4{^CP{fHv+wB0Khve`I)<9r>wm^n+!XA z1qD2v@S3{_HZr`cj*Puv3B2^IQv=Y97l(IW*pk=)OSWLWlGZ{Rl6{Wl>0Fk_^NY%Rs2e&(V zH>y29f`~mbNTEF5E^55wo{PQSwRpT?5!JmgWX!yohE%;}#bi8}pQ$}x{R}My;pn7%u@g`2zt1WUb*xzD}07AL*u4jVmlMK?SawbnhjpxV4U2yQ(IyR5t?F0#Cr z@})h42`N32a+*8VXo)(pOwv5u%vL-j(%C)H0$aQyL+86+$G^OMfiOHXkFL9sUy8kB zsH{84HB&sl<={Mww&A_pBM?1kzU#YOuk^f=j48ci&oMiKxP(2_L`^+3kq*2YA9K7` z$D2H9)K5JWlPx?=5fVMBvy(l%v#>piB}lz9KuO z)8sv5qTf6SK}o%|6@k2t!BRb`OyxW$iI2Oy=z2ZkBnrN5OZYoZ^btKf8Y;bS`nEg9 zZQi`;#M!(W6x}@eZ+JcNSx7myak;%rp&7kzWlTIu|Kq#@cq%;!;~~5YS8l!NXd68t zH{-jPn(w>NqS3q*?HIkObqhQpKy|$h!{G~VMC-i0FE+iD?4-O#Tj#t8h9Wy$%ecI)i^RLuG`73I@SHoEZs5JkPgT5V zHkmyVj}X1V{DC}uJeoV3FSWeX-d(&BM2o#eZjL>U7%ROw;^DmXq5(cscFDclP1HQ; z;Y_@2RHMABXp=p+^o%{TW0X5m{tdkvAiO=HR++u?zfC+CGfli);+4JMT8q3F`{_NU zV=cX8Fil=7qhyDbBqq2MWFkYyUkHPX#%uFu%Ofxg5Ot&0D=7=83(F(l=e)hVb5&Dyz{(Xppd=COzgY_W0X9~Ol!U3+7LV-N8h|G zuiHB?Ch(O^PM|!uJmI{!Y=ON8iY6e~CP0N+CVbdFs5q zsXjg9Y9hUtd7ZtqWFkGSSg5?wq=&qlb`m_p%O$(hhQqrJ5iPtaGS)k%RyEd{*pxU)Twf)PH?kflBM8azGwG~PSP(;Pj9gOSjF%nwC6W{Z>6z1hMQSCekH*-A$`Mf-nG(Ei1F)zKi zbT>VqArw6nywJRF!DYMxmOVVhE&{y{5Hh_^PlUXUR_?r(1p~c7m&`o54CFkUSwuWT zek45?7MZ=k$5*?RpcK8+#u&Y%Xoz zSaQ7w%u>7p6&w3fXnc_X~}rAa+_k7d0q-Wfg4_3k@I5s$t1bSb_0Mi)KA z#N<59H*USmRO7trQ$f7KZwx#R;sU%XcOpEKetW&wW*NP6tam+N8YMeRO9MUR zOrbplpnW@_#J#+&6*#OVuqC}~ys$ieEe}0Th@!m`jY7RNg=9QqNz6P!Z@N4qG+w=-<0L)kNo>4} z{C~YP?>IencmcjVv=%&`sw=%>FLgXb<1akC@ie`H-F!WXkf^-Rwza(a+1I`N>Po$Q zU|>D=fDgQKQ@}j5)0RAH_!m8Q$+f-sa+SRbIh4K7*J{0=3@|-5Ak00%HLX2A!r8sM zjD|hU_ewomp@2P|Yw$gk*x5YZfSf$e?=w8#AbUH~bxl3jX%jwSR@b~dpF%x&(0VWWj(#X{1ZLZG!nhyd4av@1+l!=$nm_|V>i7AlG;6J%nd!xoUA;Q zw2eIloKU>R!%*6rqw-B^timYC6+wy-BUfV-s-&goR7SG>oGl>AVNIP7i+z& zkfFTJ35mNgK&?Gz4J178j5|FNC#^lS%zr#nbH6(aGl#tlBRRe9HmE(EuOL0W6{)>g z;#)nOWEH%CA;`NA^G3YsU`f5g>fgLZ8Rb0LKI}Wf9A!O~S>Za5(HK4KQgu8ic`7}p z`Jp|RqZ+((?Seh-3v0c2)~r1yy^y^^SSPzz(2_bOh)cbAE#SMZ5XU_?4>~=BC7`^( zkTAXX#X`P6C)K=$b9TLcqwPHad7HhoOPW1}?Ml5XT*12^uc*Cm9l^UkW}3XI_}9DVri4Au;Ih1E zDcigkL(IG_Oo+X1rExvou1-AfcrZKz!g$D=#S;@dk#t@1pgnBu&0n1a0k(X6~9E)%_Ut))D|GJ-t{ zKGr;iIX}IqU0c0AS~oph=+Zk?*=sz_AT~X|2;MujEWx~|wuwDOZF9ZvQ|rCCoP9kH zLFGJeMa{gW@I|}O!&kh~FCn}*cv`(tS$#bPiN3tCf2zD2h9te`33|ObC+|F{ov=Jr zV_Ut!T)aFwnY_J0q})8Enfy7@v7J5T0=PZt7&^UJJdr)uzn{Gsic35#rOv#p1_C>k zJTW|v_zJz{Et5P3Y^u92t8+XY=yW|}n5w)2P7OVeI}SaMpW;26v2DFqBpy8HtPVcQ zyV<;lF`~Uvw~{>$zZAV&pKU!qd=0*V<9R)|7q>jRtz^9i5wkt~J+Qp^vG=>dZ414& z5b!+vxgEWu7I(d4@i#noU0S*07Hd7UF_S&SxjnnrLe9M)g?T+NIK8~1`+&WWhyXqR z|FylZ5Fx$qQa!yd{9ZiC`UO4VEQ~#rBLqA(XjDCF&AL2FVl}WjT+YNow6SBpG3 z+9W(J$REC4eeb;FrL(;md<8vK)G9qe)QLUoO1M4b9EUw?Nb|dO0d+i$@4C9;aJ)R( z>!Q6DTm?O?6k0t+?z21Q#qT|uYN9+_c?i9&v12{R6)3&EjJ-W^r)#}`=rcV0)_uCm z7@55_ieWtVBFVf>oVhxJHKjfAZCJesVLdy@^+G&9K#shCtCPH_r@Oozc}6`YCS$!9 z9d$jJYNWk8zstSV!0o-GcJMq}jIX>7s0BSS1u4CM@1wl_bWuGmMR2@LtMoi9>bpE& zh}AsUWmr5J>RY{tLSMYarm;Oc?Cm_ggET!R&mcaEvah}NEh@XGOYb_UzE-`l22#BY z+xR>lfLgp+Z)d$*kY>Gm*G#=Mszkkj#b7-%$EQ6cMmjynC)_-__8GmtXUM$j-tarb zaH~BDh4#GZV|u-97VX8}8|geCf*U>V z?EyWHF{8W+yeGRvgMGbvJ{`Ml!)HCfGQT}%en`8TYUjNKwb8rpxU{`Hmkqs5{+~Qc zHmyB#t+hPv0gOG%s}#N!%7#7PF9*H%j($9Tgg!jYZ$`XQT#>x6;;6knk~_VEQ(?U0 ztE9asT&g^7FNHnqPZ&Mxhn+p?SdF|2Qy;xaid?*RwoE;>WJEm!TdBNJAx6D$d279# zv_n0DFuFZ@?~J|Z4v9TK7~{N+!)QBnyMsFuLdCuO=cv3gzyrQRL&H7N;n+Nu-wHjH z2VuR_>G8a!501Tgf3Us9lmR?~EIYhSMj1SsQ(V2K0*5`11S`Cz_!&KOaMe60H;uh2 z$AP= z7b83#nn%5}k`X?S3!Ob#BU-$-pFO=9ghoAt0l7O}9U{FcAwj$VQboMQ%X2%y!a2Qm zDxtkUetA73ux35k$qGAg0}DMl0zo`)dSJc%YAw77NP<1&DsVka7vel&%tSpsqs+Nj z;_E%hJ&V1Kw`M(6B!xZv%)&je7Rag{vStC_teeM-C&@(MlLj4r%JUZ1@{ z1k1cO`X0R1Li)UNgg?CnW7)me79hQGkte-@P^3Kwo)J8V?dH2G3(7l+v12_PXb!!X z=zTq8o{2rmVx~Q?t&hD?h_by$w!gbDJ+3_8+Qq$t3lcpz9Fn|RygNM)V`4nHvo^gJ z=`y`^t$aOF*_ge8?S(zg7K^-nN{c-amhMua>R6Ma2WU5LHZfG9nRK>xfE zhK@b8eL}sDoH#r;o)Ep*0tP(I9|Ao@d)ht9r-VF`s)N1YYU4fp@E|=3y{9|p5+}Vp z1MfUaPZvF?JY>AkB=!-eW5+Z&EdU#RUthQ2U)!!3K%`5ml8cJjiMDvlzWN&YwIrG)cTe8>79EOGCXvJT^Rmy@$P(y;HrI;&;8bK(@Rj z&yzi9ji0?aWraPwm{mQ0``$a!+upnw54k;b9;H3LP*y#7aST0Xy;8lol3l&zDoZ;) zPE|dxWt=?MuN}Oy^Qt|S)#SRf({(+~BJI3FT*JLTXh^)#uL?cq>E67YrWL$7!9_dm zI0U`3tMj~2V;#LVtlquLn}Q2%5J@O*jl~u^ZC4e_!m95CS*K~vw=LW8GF4X zEEK%}8Ra}F%2d4FghxDnplQ8CCha`rU`;)qc@I5~1^m3`0wliZaymTm_su&F$^$)U zKBm1A452;h_gTH3^0Pe+|Fb+q;@!M2XcoN+)f2tXJGs2B+PgcFbw$1Xh~7LN{RX{S z^d~(d>6$&zjut(?ZMr?R*1Kf1X#UFZGya1 zC)m9v3ZS|v?y)@C(91oje&snE_J}+Zf`+}TQjk3_UfVkw_rW{gs;0ed*mk_Gvg?-pyxauJ)b={ zZ}dIr!BRbZ{q{V|K^DEy)D=Fq;dDOqKfpZ#h^ss)hLZv*T*#|r`H^{tgQvtq#P=vjYaP2&wbQe6+tIWK&*lxX!sK-2DOr|`) zRph+j3=O@erGUNK#jCskVKqI-KpVc&Nie-z=$_YRx>8^+!B6Jc~RuQG2{&sXo1inUFnV;VeCd2>(4B zvMIfJ386h{Gax;Gaoj!RlovjGFkZdJl0m)EQAWLfKt4Q&5b!(6ktaLob2YrV!<;=k zL8QIl`(C}4PiwqfUi6%^`5-6;D!kw@BzLm**(3v z78pIX(Vsm$0a!g_eh0i#vC_Rc6wkZY{pq|gX4bt`REoV~Ea5#DP7FQLJV(7on}9uL zYrH*SL}xspXg)n^(4@TkMdxmZ1^!h$^~ z(7C*d9dW%yA>TZU+t520=a@Yr^3l8<30pl8#X!C2+Qhra6TrOa5(7Q&zRbOz(!D%E zaALjj@e@60Q!c$8DT%j~2>?4wZu`3#mW@2|3Ie;vGb=nGm}NOB_Od+@+&VqsLaaSt zLA^X`2zb21^bNe|K;1lo;EBDZcRxNC=&`)zrii`5DZ@R0KQ%o3V6;6Nhb6rr38%b3 zqM|(d!fd@RFCV=|yTH8|$BVruhDbd|q2IjA{a8H-q|3e4q<_5bZNI$z5PQAvI|e*V z%?G_NlZ-uIx`pR`kg#6y!E`(qaHfp;~hO2q_e#rC#bxx`jEWZfet>1k%2s^Leab{KP5d%xv#tG zAxk^I>yTFPh7pU zOD;SzQKY;{CLBD(v#33>uNFLAZT7p&&jP%P<*vP_Rs=q_@X$N+1VcRuL~}eNxW_$$ z`-Huv4xha%TDLtw=4(CVO|863nQpzXi5fixptZaN9Wy=8u4KJDsYE@jHm^KU<4?U& zoQSN`) z^(Qf9Cy8ZEEhcuOP4(HJbk>gLm#{bv8%jEqL#gHBvC!?-poB1 zh;F@fYofdA*t9%QpXxkIn2tP+!i7ASyQaKq3a2~xg&4kT9frM~wM#j9jsQK?QDi+S zlMcK4T`N6vrEa|}Ft5B7qv1Uoaa21OSI<2J$00p{1nnh2*>*Wre(O0g}9$<>5U4I48WbdY`?{ zbD6w$DIUFUDb>7i=oLQ1hGRWGre3}Int(lDXv(}3P@BEM!#%uA(sn)kS&zNQjdVRx z#~Zz#tvtP7sGbKIb+$KHO z)|$QCy8%5ZtExRiPue|-NG3f6e+Ikbp^!Zx@sYfsc8xsf^4h&&H%z_p(=ogu27bJy z!7e@Y`Jg>MM>{-#+AuvEMF>8+rW3wS5(qu;uT#DGFqXZp9u>TBKOMarfM7e$2V}Z@ zmnl3&^sc-Cy5u}#sbW3P>_t4@ny@@??~=W0KSVqC;S;+^&%e77GAzC0{&~G$9d^PULm})7o5CE zU%Ncgj8{8hrUgA>5Iem`G<`f|imkmGMnk;?BMv=Bmtnoa-ikcpwl+OvD*3%eV+%eG zg8{s$nFYN}w%NSZ&IUYYH$=VcD^$FE!hF4rtu8%}g$KML-7CFy{*S$zy^Ou5(i*)G z(2u=4@aVk4GdMl2(FwgWEb}~4))Kvzu5dlbktjVkr>46|ZaX~?va3AZ)(SpL%qYE< z26nxNjPpE-26Mf&=NG+pHu1e#r$oFY7+t+0-)X$Y#JW8dE_S?8p;|o~qs}}Z0@*#t zp_Dz0!j8Kk%;vl;6ZE`39Rt2J8&*7Wnnk?sT93SHo|HTzT%5e1NwhtC1Ka4%b$l5!VdCk0ZUd+7*wAQ?fBuYIOz@a_-K^{G8iV?kxxR1Qg zf)4FA1Z#8SPJw3NLz!dJb@lC8Z6VzE7z)Q3GpEcLx3 zN%}l%*@nIKkpw<*_}RV1VdA}0x_>=?M&7)8rwu)p*b}`7=E^-)QMf#gdlEfKC$YW5 zv-Lf~UogF&pT9k@+r2shS{Xg>=&ihgBI3N%j3GUU6|6iRx*k>Rx0NXvaS&qHd$2Gh_6FxqV4DmcHuK_$wP!T>SA>O@|b;-NDK8-zZ#{|8kB9XnC zvmQMsq?kMw6`eh>qYXTXa}7LTZ6&=!bm2VViljSPn%KSNjqE(((daxkb_#+%3HmDWW_TC5t?4UqL&B-wM3|*_=Hd5;Q%s zJo&uZw}8Co4tu?0Km|MvLIb@(b{D%ru7tepm32MTqO7}4%*;F#i<`XO3++8b37)$Q z{qeiPcpE)gn;^W#kkCB6kypK9e~3NgR60G|i(R|`VO_qM##=pBWAHuLJO(=k)fPPr zx%@n_Oh3FUJh42)!>m0}DJ49no`bqbFuA-%THZW%14ld#?!3Lat<$_d7bCrN-U>Z8 zwdXyT_mn$|NHjg$<;1;2Q)a!s!38~TD-fPbUHnH(~rHCwTQf&hQ2*|QGL7- zJ-)qL+K;`Icvn1zmsCA_bVj_bzXiPk`ocXBjF~+&w6#1U%EG<8u~w!GdTg3LV_{xUtfQCK}LG?u$X zFh@O1gqgj`7@<6wStz}%d!;&t09HKo`nvK1Cs9?RE zb0IyW0o=PmxB0tM>nS~??W{bf@fp3cF>pOEf<`?6#n&p^DR=_5VH;7&abnSs4Lu-3cnD~mm$qAER9FCM)YS-CvH z4*@+3ubMnqbI&|GvwFLFH~l=TNGiPtHDSHr5oA5;z0*Ax)!944;x#?@{02EnE|0v* z%mTjuKaxFG4TZf35_G(dNjklSi_Se=W|zHlmx{gL{5L(&x70i`Ce*t{HeWq}HK;tY z?Z-SlHMhMarzgBrfF(Rm9XCDp&Cf z__n+SB;dVHN4h(Ih629d`?49nOHrH*~Gp1e?h$OnN2-5c4@@pBS$^g_^v(E`m;PAmXSOGAt^l*ZG^lG zLzX?z$i_RMn@PPWYePF_6~Mjq>Y2UfHN3s=9ihBsA=10Xj70Ns-RCc{#v&%j6C_X(zKes&%ezH5W_Km%nx<0&A zt}wk@Fh@N{rN6w%p%*>VBh|fc%E7zH?Fzk(R*XGyOeQ_@T_C=;d6K*OVb?m{K(V`| z^$imN-T7r45Nts1>Sw->yY;vGGs z?72PpqDehlL)W{$u>L*7jR`%=vAjH=4;sD9`9Zx79+N%$mfSo@h?hMXJGs2r_h!A) z81}rpGJ-sdK(;*5Yv{ZuQ$an#>?=H%cA`AAqjtSY8RNZ4Be}g^>ZiR`Kpi}`iMYIW z(uusW|Fk^k12nuF6sNpuqd+|nzC%3Q`qjO6+l#&J_@BIUIi9IVAHIck{j*&Yy%>unYLyNtr zKO{XQE*8CCD`mZ=nYX=++2=amD@Ht(Q93;L1SvgEvX;G`q3Atj+Z;Y60+YP?1tGm8 z2TD8um|VT^_?5iq#biCDd7C`KFzUTM(O^A8h73DfJD9zvUXZ=7L9x9y|?!?H8Z@Sj{rT=$Yi}5<<&b4E2O-5=$$>Ywdg%ofSEikT5rAkaDcrsMy0zVcG9{_ zC=ES>1*JWdwS+x-3GF=oagM#nFMPdCoVGm!pPjv+XfM2h*NQx~g@!y}tsp(25yCxb zcSJm(F3dX{1Ohyo0+_ol`^LO$BFMd+Cy+cjT0T4-ijO;w25~)Uyl=hXqX|7px(Pj2 z9`C&Wx3xSS>skN+fd79y%J{6k<2VjHvqYJ_1`-xM?B`~^KbY3L0n}@~nfHRd0ylBJ zk16oHZ3OAOGEj}ZQhm(5B?|(+>#CPLH#h$~4Cp_-G4;f}yO!F#Lr^6>c(_ZwN5qyr zl?yYyG!{NRkHILt`xO7ZGGju#9~N1=sK%_jP_P$0a`Sh*J{-2YT3?Pm0p^xH0|*nn zYI@>1NC?e6pJa!;U6qkNL2*L8MJ7u-1Ok`5*?9{+1cwj2FA^a=Jzyj}twz|_dPy6yPV^@&Z@FKox1frb0_w^80?Qde$tmb&k?M>3gcHj34Q`SqT3=p zMzUT!;QXDvzfL5*6^^I8X=A0leV63CMYbEgV@%e)KqWN2+k~sTrSh=7@HnNrhO1S* z>|mR{U6xBdd56h7DS>rBW=y`mkxaA|Kn zh{)5tr>H-@rOZ%0Eq9PTev93_3gL&ld1VW{%HVsvUOW&zBv~^&WUcVLzma)8oRti{ zN3~Kts$a4^k+31XFQcVB!?pLl{|0QmWWKt+P;b^e?-!6feqo92N%pPQIGA;+4%=t)z($PJ;rs!Kk-V?~<0 zh4UvoSmY7BTo4JnGjvcqQdKp*zyGm3c4>LN^QpK!4(V*XVgX>i4(b*?DE@Z5R6yQ6 zcvFo%={H-wFM|a<7*%PzJ-0_aH|Lf;Mx_NkcoLAj-~EFQT8 z+8!UgYnA|-3RPMgj=p66Y?uTcZNaVHDDm$cVBG|PNFVLe5?r!g}<;Ja@; zY_c=G-U>%O-;%FAX~Y{nkpOPJ&pr)2+sPul>c;Lne>NsPUWw(r7tz_g^F9JS4*Z2Z z|C5Y8sOXeE8(E;dCQZ6MY}^>VsHPe`(7)5XNcb#1)e@Gy0|^(sfN>5yGEIR!ChxgD z8UYKwTafO(@H4c$zsZ9=Hj5NJ*`;GVV;gQgh|lo5cbtShi~pNFVJA(!+wYe{r)^eS_1qJrKim_QeZpaqBAN~?LPG62ZP5>~y(Cb@0;{5J&cU1E{_c$*-ykwU>BZEslYV*21XTLl>#%`d!1-p&BB}DYR zOWDUf749fK3$_!yWX+AeLqr5U)+Y%)>s6|~<$VUd;70a63NkjmE7)QtU+J9)h5Ebt{pwt;Xf>yXZhkI|lVos<%7|_SN zO|JaBEhfFa@Ctf8QB3GO${KLJK@T)NK5of8#y4ucZU}|E4|Uc(b@LCt{zC;mJHOdI zm^akBrxJBMcs6i7{NAX%)G3<1PF-F-k&L4~r9K=rQ!LuNdShd~?spZv)%iKSCdJgeo{ikRZ>)B`;RItmB=xVojhnqa z^v2M?b(4mUzmP9vwQG7U?r?QxlBO4 z`oSu_>3pj_ZN#~~)iZ&-<8_EVkVL~f8hEWdw64cFXVf@7PP`etQL+a;4r-u1*qn+z zw??)5C^REIlMb@Ge9U*fM|xE}sEL3*M(<=iz)S=^Q3ueyQ44Rp zNl6SnUBIBcbxb}z_bm>+(Q4W}BOU-fbyA(Y;$V@O&Ts=hP|<2V<5{FTKHk(lZZ6KezyU%$ zTSq=UjXj^d5e=q25rN3OOFoM|ZOyPeI0QsI?{=)cx@hjaq zV6{xWg#=o?Wmk|rELS%?7PJ043#$D+-g7#=x2ZS0T$vudq+q?hYhEP1UPlwWis^K{ z+a-QIAxiQ)?BRwzz^aiwm$lJ43aXDit2XmI=2L_`32v~vW*bhssMq*C$0Gv0-Pg#x zGEYOh>p7o1+rwAAx10n##ve^RY7w_Q$0t2K`F|KZ*EY30k)B{Y^j5XJ0p^#z5iu}5 zaIGD^T2*^J-%sMaJ}m*gWjANL?q{&OTuB5yTMg2^R*dAms7s~2zk3EeoZpo_xWW!S zlduft0^I)JOuo)UP!=;rU*@8mB3{o_yfE*y8lOxAzac_q6-G zP>kU{^$z2P@jpF1&K}3SP9N7iY6_*h%X7cEodQZcTK1K_)ucPU^-(-Kz4kY~F^DZa$pb#U z48u`9;8=vc=Rsq<`yFAWwTddA)i)E}v&TYk1?lX=1NDGM!{SyRz#%+294eq)vpq-J6BI zWN3vw--cN|MUvb-Ueb|0Lw3qMebI=#r4^t(w&5#1*QepV+8Me%=ERgejgK}xJvza> z4)?&klypbEc!YbsV2AxY(v;dfo+=zqPv z0Gj(f&KiKdo@|}H`{Lg{TIRbv_8P^#bg%)w@6r`LeGx`H6Dowgy&v*BYy_q}0QJnf zteufO7=-IQ--9(h@d2;B4;OsA+)Yh9NDv`CkH^A25@VUXd3C6}z+DZzu2qvg*9b7Z z8~O6QIGiFpd~uaK>C|z(?AYQwve!gBl?Xz*Voh5- zY2o-hnUirmV#38dyeR}dY@Hvxo5P&E8kU2*><`&IJf7aX`$CPoFDzWWPDScDVm4tt zPq=5jL+X_~Wx9#IOFp|iVtrV>jinX6k2(WAc1`8H$Jmj)h9nogKcjcNjMOT_T;)di`@i0yaCy~(9{JxzY18r24{@DyHx%>ust%p zaDOYlZ8Z%(L3lVj)L^4MylJ#Oob%$n9eA(3YnPfmnprkI8QccFl@?RIKL%I4f%geM z5fMB+fLb^`YY$pH!`+BH=dAfVW>F=*tXRQ3Cz{bbmou9^F&d=3QU63ep$|*FceJRz zyeZwi$&Hh}Xe=8&tPnrEYNnLE3vH0Q62Or?2s&K7>bM;|>w`JH1bP%biDVBv3NH@4 zUv!1M7V@LJ!rGEM?>HMgsaX9zKO1Mgy4G1eFLmWSDRT%tUSOKMLG8Z0bZxo4&bNWQ z({viV1vV8uAZrV~l^?r33f7CgIL22zfzkIpy_dhcZ(WW&1Xy#uxx}2ic70tvF?_f@ z7P9EN-)m#MJI(~Xz|4rerPQar1|)~O3=sXj>x~mV(}1HrT|=cj;7cGpXsAj(+{36m zls6!}vOJx=fJu_Pox^**3%3e9b%_qWh~G^;T_6!XbBM(~7Mz#7NFx?JLNXjZ`UJ&1 zEG}2P(nl*j`8Se0)$q8z=%KSc&VD4l;$4wESJIWdT@#qRLcc-1J1}TH|EQC^sGyHM z`I0id7v*F-_}$OEJ3S{ovmB#5zQ&lnO`?fC$QwL8xv8-{C-sOt4b)scQ=v<`Q%@m0 zt}LECH7d`%LA=AePicNVauzGS#W|zAFA12vwhu==6PBJmGJ}A<;Q`aU`0}_tZ6P8( zVnhW!Mg12%ZI8q}yvA(1hDMCN2~Wqp(Z&Ql*L+4j`3xvMJSIOqV5Ee+Niz97nTII7 zsre1PIDZYiU)QERHY-p)aaR(&dDHSd^)Fq$nqyf#3*L7;te0m!^A%D&uZwEEm`e`5 zhRxJH*zS})bneu=o{-l)x21}`AYS%7#XlRpS`x24gg%hGEEuf4&TSt&!ZWly1wfNL z>MpIkUuCvD%v)zY_1NCLRSXWj;fRhsn5KNZcPx@SbkmZ&Db2CH#o3~}pxkY|l~RPg z$lcGpv%#Oe*At$-8VVe~_=4 z{jsXND+ji{DX{FkQ)zF#m36VaC?52@7P|7hJM$|$k*-xd6H0Hr5!igYGsfJyxjI!m ze0zbr<=m4!;{Rkl#TqxfISs76G{eHYBM=-tYMz9>jy{GxM$cxuh;lH!5K9ZaTb7Qy zsCynbo;3%)@Z9garxd)sNYDg5 z!UvMN{W9@9h;-RK-u-8~%b|$8mg7UcQ8K4HUREBxEqq(O8>A;aPZAhCT{H*1?=l=c zf1v@rDk2sk$8o@^(BNo9m|!x^j;~v zvsyhoJnW6Ug1>G(z3-(x_7=lDX;+awq1-<`qN@izisi?>;f*am9R>Nke<1L@d!LWI zp@)DywJhAd8UV<=TfRO$NERHu=%u4PSkt+?scPlCe8Z$Yib@_mVB<18p|FrUh29oD zr?^MGQ={y=+dred0n-7#MvIWWzG-&7lS24Ckw6{2ktqbc5b!2FGF>MwYn`Y(wy3(j#Y>4jk+HivYgh0)f5)>u?%`KG8^q!~i$<=! z25g(X9$!N}6%j+cdHxH%CDk3hHju`>%y^r;=EpWYIV3{8CFK3OC=jB(c>VpnB-fEV zVHys-t2$3SAD?wR9LhqyOUt0Vy+)fo%1DO1-SKt3 z0&5|?^dIazsYPcz4W&#yEI^z+NU~nNhxp>XE0za6LLR+66-&gsUPT|hkz(1sgJ}r9 zpp<~U&4sbN5TztNCQd!PcHYRm%Y$aU7dC%A>;FT%WTdLSPNTuRIgbLp#5++vJS~4b z(9feiK?2}CgstE`v(^echGMEcpv6l)k^70gkMcylM{ldVa7`h-svLH_ek_N*lyMci z3ZNsrYl1Pn_fVR>)9d}aVlB_T*5o!lfI@yf|3E6d_02TAvkZwma5(2Y_dO`R1EO6$ z32yzEt+pVn+nZ6BK!lrR)vDSHoc&|vYcDH z$g@|ynpTTF$sD^qmQg*uM~cF{xBc|H*B2=|SuBD){mB@-{(WIQf5SsPi-`5Se^DvD z*J`yqL}?H_i}$KMu6?z=bO-}HM}uWOg}Lp$A%uNBkfJF){)TP6Xv0}OM#_Xe(`+(5 z)embu)w-LzqwY358ZVVRvF4{eSQ#?CulNVP07hQDF)vI#N4O(B9gR*q7npZF@3=m_ zzK9+@iXY8A%qA(lfk2PE=~HaI%T{2#KptT|DWRS{j{lIlg=ay$I$x4J0H*RirMjNH z@{^IgkglJ+t&T0d>~jph%rJyK^<=?3H@8x~vZ4#UR4J9cqQ5^pSL9(m(G)dsffLbO!W1N}2WyoSZ z`al-F=FtPa%SRPF6xr*$jUODmMbJpSt{TEH#!0WdME^0o4$4uz+e0*DANVKhiss{ zJW$6xe&ETyXTrU`AH=IXNTEZ#y|E%aH6fI|DhX3PJn{9r<{_ax#Wt}#_>o||W*whA zBHVktxxoFsED_VZ(ayF!If^B`kwV|R^&hsnL9n+xS{5U{KHW&X8O;&BD2rM>?GS0b zlB-HR4+*S1%LRM9q!nO1(iTcR=U&3R3T&%A?~EP1oC77h#ISTcr?0lWCuH$FQND1! zUw{0&;&#@(ms-!bjg^wUQz$sSrx}5}rv=75_8%#|fWEA}(m+eSCtF9m-FRfX$vAR7 zo1H;DJIZ6bj@C50diD9e&qKVu5(qQB(!Z#^q-?{zaT##D;`0Z+4E--X%h+GN8-fJB z+l<({yFLcK5zB?We~)cFAU|}y2;@z?PU@yR!QBqMsqVA9U$>;ZbV{;49c@OtbDM~~ zl@OJ??^>?BwVxV2mhNUet2_9-RaKI`zJv2UW9jfb%eGrQiRY}nWUu4A@15Pe8^zi? zPuuIg`8#*LaN5Q^ksABFR4gYw`=Yix5bk=ppyX@4u}b5-72M~%G|8wvGCE7WrB$3g z1HUFcF|aW_>Q`kwj(&_gE`~on2X==&AaBgP7Tr+2=&v_D%KgYaa9h7U$|Ll>?-PDK z<|5d=0duH4d)FDgo0-}>jR3$q8-F6bTLxi0X>6K2hIN^}FQ&b{lA7i{&X0CG$tIS( z*5x(5>(XC6YtEBAdOfl|tPjaM9}|i_fv>_mu1fa|2XcT$i%A7czX4LJ3@@i7Fx znE~KD{K%I)loTI5QW+~e**Ob6IHI~dleq{!9`7H$_X7$&hQbKF+t8dm%|%c>9W$)G zQ3uMs_}Y}cAuUQgT}Fz%otkt#PIT_OOLIm%_)@<;nGgND3@!z|W==l6xrS=J>;nQl zh|f$t+(t7!-i0bVAzPEZrDr|6Qal*j8~#Lttx zUA*bMII0b~H4dshyk&{KJCcjNoadQ65E)@TOTwKzNbB}IjTB!zlh|py64+h6Yh9B( zVw3#5^k4uz=3#)l|1-+GjR%iCZ2X|TTh8LW^j+aSfVeTeG-d+5XTlvlO);B0OU0T! zfdb(?iXlS17lbIj{IEa0ELAJK5@gjpiwd>6{yw$6r~J#htem_&708A>afOFHu_om` z<^TITnY*vMWMLJ(8oyb+spzS_99+RY0|M5)=Ci20dgPeBkb%KH*5!IV{v+SKC%`2= z`78Cjz!}Rs9^{p~OcM@0`f`*zjvjfv=`j2}Fuaf+F=iIaTsK zjy1A8h-po{CXVsEuZ#{pAuEEsj~kdgv`-Yh!09%<^on0Q%;!BkfYnPq9F}-H&B8Xk zt30T>$yU-l%tcl`TzZc^fJa9>WWH#7bv>t=J zlw%G((8B+`5Je_F1iWUw%9#2*)u5uiq)CQ59Mk)}9J6n|dp{gKW74O+CsHpxdrlHP zeLJ)~*L9#hu$zRvGT>W0LAm%nKTE~DKoq;Yt*kk^GW5MX$p0-n6@3rAa{_U_nw8f) zPxLW6s27$!8lZDMhQLL=e00`4UFbEv67vDQ@nxet2ZyG;Ut^HHI5!GCkg{pKME#Jw z-N*|&t0I0pI@z_n*D0($fIjWLfu#t&QC4<5q_)7lN}FT6Ld^=jYB||FPsFmkKV4Nl zl-6oIPU71-AVv_qX}Ltak>RB~8^i*=4oU&N1XR^MAZ1Uyg~esOklT*DHd}qY^6D%- z*fWy7C4r{B?qATo=1>|vt2$J@uc-n)zmjpib(&7S0@HoH>Mz4P+c&&C>JlS8tIv?V zN{tu3%zTr)O`(##gX_dSSDBN%Q>hufzrB_{v%ZtP8td{rPnu6XU5o_22d$|+;ii$i zje-h1-&FlO#w4jdbgoxC&h9%sm+(G4wx;2{VI^@r)!0luaYKzf4&#)(D{V|YkAe8S zw{HwmRkuyKtXAs1F5(zHBT3@C8SwDDBH*LEkW|3E z1V)X$6M_f51*K8Ep%E}W0Q-nNBLG@FuV)avmLQ+J5UkIoQiHB^K; z$Y1O{r$ny3Ot>dJc~6+VHBVf-fOWk*&R*iYaM`W9``y_+Twor%nw=iIFy@Ut_*+9g zu?OX4;?igFn}-d~bEJxD)2$!}r2 zK;Ln_Hu7-1!TyCk7)SCt&-w$s8pdKhV_9cCQ|;%xDyNV=y&YJ+Ugf+!EmCs5&a}9^+!?Jr z;Ou0)FUJ7B_v7q5F%$qj$7TFHN)rw|*eL|P2yhI&r;w;T6~m;xI5~Gcu!JDJp+|(h zSUP7tx+x?*dFl;4@2hUTtqasWqF)xhv%N_@U3Fo-^8GWt*U?ryb`vu_jPHFsZ8fmH zdOxJS9P=@~vVWI7iW`@`Hy1a(K}^v+v&;0ntscm|kIt#Q!>ob4n8m<7Gi{~4r`LYH zEU}b5W&mEj%795dLUaN>`;>;gIX6r_EbZ95wCORufBb0*t76s(I_4_Zqd3H{_>)~C!`ZkTd-94DQZ@YlJi-CT< zMSx4a6TU^gp4oOi592vKxPVT*D9g?}>)oY1v`lxsJ=iw9Gk{IIiTuqyZdu4ZqpdzX zUZ2Q2fjgDGZLXZX1Pcp20acScvCD}(%zzEOP2o^IVac4lUG1nnYndB7n}Dy z@LeW7J~v&x9LBaf^Qa6xM;EZY_96hiBT|gLa+Hw0W6V7~YMEO-Z+weAirOYT-OOk` zMh@CMtytK+fC2`-OuR5WTv?AiCsCd~H>Eti1nHfe^R+U65q!>Wp%SVcyQ1? zpNEROf|!OqJ-_(9lip)Jsy$sjvQjTS2@b@FZN+PdRK}(;dsxyPRhGIibJeCJWC!u6ycaXMm?9kZmfSj*-8(+%iY*J8E(=$ zr8W0F^V1!>)faR2-4MZ5c)1`Ag$p?2lkGYe)++41BJu}4HLRgM>wl~}3<8C{cw&7$NzDd4F}nx5dVN;CDWZnG z@GNdULvIT{)0wEe)Z%MBcXgJ%UAreeR$>W001$#bu=~e6;|`2H5c6$4j?N-Hj)hu0 z0`=oNhtui3haF`-kOZPVR2KujVGFN4FfrG?3eCp6f8vNcZ3E#v)PS=+sYNn8m}bsB zyohr=_HL0qRYy=fS`d@H_l2%HZfJTv(9uD>HN6166G@xBpTj!6br&tYrL?uj>BL) zD?|speD>bGUJ3v_N@3AGt#^$(wuBbFft=30iU*QBP{6G{GHy7%;^x`BJwXM%#Cf4T z(1wgXN5nimICi4EcXXh=7G)~E{Pt`;&eTu4zrN(X)t+!X?j~D32%0`U4$4S965*P? zfi+7#GEKU>*GzRi3+W0yrK<3|LNhKqhUHqkD)OwnTp!oHE+LD()ulkau%{Qjnx`DR zO4ffpUiz;+#xo>60nVMhWBuPfST+njE(*=NWbBu{?au~2ItT(iI-gR#7$A#1bf3Pu zSi=iF3I5hRNSD*Rc~@mU_iTo}{ZM&5yj2>#SWmP)y71CFW+Ib4L2y~U3Q&_gBLxM$ z;$^)%(q#C&%mz5UY!i4q2kitsO#RQi>qy4E>b<%<3onqp^H-X^YskC3K429+-gRF+ zsQpvD;DArP7J7)hactW>lL2)-++iX;JI80eA~J$Ktv$WG-~>p$8unSe6%n($$LGqt z?Wp;@<00U^OSTfdD6b#8@1bNpS8oKpYZ?%9R+SsRpqY3)d_fev6q!T2JdUco4+4_BmuQIem%%6qB3 z9Hc<&}L|#)poo$Z28uR`<_N|P)%>|RZ zX+0{v2tt%S>lBf^Lu7ZnD&l;-VCok=6<653cmZ&|;@JGWLZ5`Z)>CG^e&P;35f+|3 z%0d%8)u~Fo62sa(sg_2)IZ@HPeX`ZO+z_L?Nc(L(n5>sNvitiz*kH815znMN$Ocxu zUFU&4x5mXioFg$kUQ=nkxcKWljh2Kx&Ep3>Gk$A5<_Z10b?ooF3CSwF!&MYL!F(G% zB}w$W*2+9QRC`CfioCwN{|*_w6>VufmnMt7kmeS>MaFHsdd{S~6C8rQWvSi0>k_!U zI}FA>q2d6(=YB#xgH`^#C$wk13b*vT`Xj5naaMCWSX30fG2%|WEol|KPf$m^G4G%~ zIkK=k+lW;>k#40uInk`W8|wNyhkG-<*#U^XGMwc-?QR{v^pUR;K5cj;3(E5#8=RB#LFd`B(tFWSze}(&NE8 zNo+m6+?p6Yn1HT4%EMtiMUI=i`qr~OjZQH=@vMeD;N%fK2YGir*?%*=@XpaaMOA}5 zfrFnt@am?!-c>g}P9Zfta~t41e(VQ6SrrpJ=Xv|Q#x9h+XTF)ejna+1fzUd=vxk8_ zN?A`m;asOYxXiOX*amAopovqwV<|&D`7#ha*tGe)TUi`EpsI~Mu0b_DW_%O9OVruC zE?=%aH8>SKmB4a6OB)Zprs27~AUSY78{IuC)5!=@9@?<310#|{^CMCOx3|VtPxl|)`L~MQt1J_=yi}h zjRqP$W2yYS%)M*7Qo#$oiOSo(2wYOTz?2+4D}cW}ikcCy%asBJ>M%l^MSAUwJ~=b&UgisnwuGv~*=|3im6 zcsyggbU;KsVJ|GbP40WVAP&$xSZU-uDTUQN8EA05#p@kAZ-2|Z8z3<~sWZnsx>BXR zxc6W^V-9D%rYZ)#*D3?Mco?U=Xzjth^wxen6kwyg@y{Z?LQ=OqZRHg_?EBHZ9}9!M zpOtPrwdtF^PO}$1O2I2VKS&t8Ic|WxV+ujN@l0$bqN3w-H zp?k?ZKuvEwj4u(qgC9P=oBlsM;0jke@^Ftmdtw|sFuhJa`ue#%H^|Do(zrUjYQfID zLBwM{{ngXEDcIe-+ij^kEU25k4MRIUGqIRGjNT(V*F(%bT@YbBt&Na9n&y1GZSMy> z9Hhg&nyrDoE07Mo$6&EMuO3A_=f#da=RU>oD>n698SI@rxRfQm zZkAoTtzo6TAWWmZb+9PCq;q6EurhtT*_OpT!KQG#fRZCVh#ru=3u6>LtbSNMc5g$y zKi9Clhr0(oM(M9TCsx`$C-0d%3-swc%y2I~*#fsbXxl_Rw;U}!;0ElvXYn;XrjzJA znqgWzzl?Uhi2CF^y=#X(-D@qp$m;{WwG?4I0``l&qr)LRV=@!HE=U-?+bdwa;sh8f z0LjQa>OK~|oMj2U+qcL(n=`__)YSvM3<^#?FI&GnTszM^KuX%X@d_2aUmj1r1}Kre zgPD4~%c)pAR0ia|op~p{z`~Zjlu+5dqYm~wbmKNXWM*=oI zC{0d1bB`mvg9GI}&s^I)Rwos`exBYu#QcW6Qt7Qc{S24A^8PP9mSvGW&~`OEy-#Gk zxurwAk|dA2;_v8awcy;Y9A+&mk- zDx*KW=n9LwF^!i!uQ@8cDD&_-I&BKRsQf^^aru=!9M_LK;H?im{xavidMe2~wtTBS zWcM6B9G0%V`Ie%+!zdy>yJ*k6-z=^@vQ5rB!6SaW8}lf=du0bb&+Y0vJR;(|huv8{ zVHYC2nWncqC5&CYcxlhPh&>a$-c{hdsDUWF5dEb++c4+3L-i&+*hd4rNzu;{SHn4)dWhqoUR|Jl`&k9IA z9|VBC@7j$$|1qV!|BnN`4Ab;Isk+}hm)t(REqM=L=0eIZJjuqvt0+`44qHOeBjv4{oMB*IU9ou8YJyx>)4AzDRC8L{r5)nxId- zacDz2&PlC3Yc4rGz~u@)YbTpM+^6Tg?UofjF}DW2;m>cn`XC~_6;hu&oG>-LXEy^o z@t{t;`8%aORY`%p{@FD>5#b{}!gakpSmph@5XD?QEk3wB6$XR7#%{N}sbxvMiqogO z*nWE(n9YgphJPsq;lWikE4wST(pjhy=?#1q2Q} z?Q(*>5o-;2oI8WOY`K&?Lb!^(G_2RWl)N`#8y=gygzXMJgkTCi1%wH{>Iru|#VuSrPaRG@J}rPfJuB^LGTjmW(z%gD)aIINB0D z?Cp#_U$y)_bYu0rG&I*e1%;oy=%N8W>X4AVU_1}Kr_`pr{|HJvD8qrhU?`3}CE7*2 zW2XGPH_08n`CLW3&dsE}$;CN6`iaiG|1==I3MPTQhU&MyWPL}yqsOm25|PZkkzud9 z{-lIFv{LE3-O;o=d}YqPQrHYWTi&9*8z753HjItE>UZ@z6w|3Z8{`c=r@YfUsWwQw zWMe$N#d!fed2czr=Lm_scbr~4r`cCMa9Dh3pSJl}8@EXUSJR z_hV_j`k&0b6B-%4GNJfAwpKE{SCoUiNA?{(t&{q^N33YQ`Ma^ZHb+76V4R96@Ifk_ky)NExw98Ak@OW(G5yH8Lv{k!b`I}uD6K2 zgpXA{#DIUi6CgyqwdxN%oQD9sk)MRU;;(_dy`;~(zKjIDm~v=5hR!Oz<05@M*R^yz zNjKNL!Pt2{G%Z;@H|JwL=&dNd3k*iRUCc?nq~mV9Fffy zfAYOO=s93L`xA*hWLa6f9M!_TdY;a`hV}2fXqSk+oh}GHt`!ePn0zOg4g+mZ*ON-IG zr0@4V9o)FR{H+E(vZ0DS=>UMe+2J_6-vVg6Vp#S(8zsCvb1AC5W*%@mz32x!Z(qZ_ z%z2PJvgGf)ehv!0BId)rK#%~v{(}cSB(e;>3%aR1-iO3J$o4wCEfmhY_A^2~GJzJo znU179b^D?`3>~k%dvv$FXK`CR-WAThZP4#Ls=%MUtrlmz2>z};F~qn%#ZA7vP(}^C z2JWgoSY8c1mu&<)SobHrL(|c{deDr$vO0-9xIsNV6n==k5EMQ<8CvbURieYZQZVGZ zw6xVcj;n6HqR^zh$zhAVgLWspTiM4wO=hn>Xf=1cDNU`stft<)IICYh3rmSTquaH* z|06~{1YoE<0QI0f^2eIIGDJu{IwPSxdAj<%m<=<%@TtZ;!qs`b(CdUfS_a6yW+T-+ z6}B8b9Mi_U#RQ+c-i-gdX@^q1tka@AyJWUKE%y;TgRA1a27Ca$Ub(isBBgP? zDRIp@1UMJH#fDkDV(j0%kpsLul6aK8%nNlrOp&F#5p_0@I(IV)8>DR`Q^wXpI!9b1e%9=zSUYwm+QB-JTB<4`KSzJNYGcl;7Q`IpN) z*nQqT6wNO?HyorpSqTw7@`I~AEyZ!Yp2;sgCv|f@*S4j+=;#7I4XnLAIk+gj4Ktd$ zzy`9t2H2Rog~|&(2qLyU;0bpq zAApX%U3~aFTKyP4JR7z=zY}#mBhwE&Z%Z^hlWwIwvpI-8xLb!k=F6i!XIGRxe-o6v z`g+1V+^>o}ohr4xoZU%0(sisnK}CDL1{u*j{fMl+fh>hk%E>m3oXlI#MOQ{bHfLQyEn~ z6F%TQaRMVfZxA}Xw;G8&_}(GC<_^|84v}6w{0=}oYELpellTff<4;ODfF{^HH4#@m zv##2_1$-hseP15ENiW+xE&p@9s*?}BG9L^*%E}fzEoKlr%7|h+a##C2Fu!lTa8@Zj zij)*S=GqWFC21qQa}7YfPTes*q^p9wQ!*F4Zf2Z4eqO;m0{Fwcp?^WW^;?Cy1wGTf z344V+#=53G>6LH2fP|L2K-&sEG{sfCPmt2QYiVda3RzM+yqfSkLiWhK`$B5H=&#{C6^;Wv zY)s+316-jzF^qq_UuL8|ox^)Q-7V|AoQ|Qr7ql!r>pzCQ$%8jN#fF7Fbnz{{=*)M$ zXy+O}b-b{5X;1LH zY6qe_KZn9Qjb~at5vKvZKtag7%}N`+`G~eW?eYn|OzF720N}DcK$^w9%wjG*&fWRD zKp~twkADn3766{TsdOhjG*EiI5b%w>fF6Ops3$@_7&k+`Tdd1HYA>ZXsqZ=lsYhM!ct+vn>&FdiSh z^dOQw$V+m)*n2xY=*cEMptTu2z0=~n*nj^#E-S>m8=iALYjG^SX};>cuwx{>bvJ`N z6FD}$EbmLaj_OA}KxIk1x|b-u)hwVqrP!jqbHTDZBhA%34|GX9QuP`=!rgJb4`vKK za*&?_S5fG<1QyHhLDlW~us{|)d0WCf;is3pc`Fb- zr|O$LA^~|k6&;+tb+D8?m!23s=At}354?=M=W0v6VLlJMPt2M<9s+tjlUl63PCp(! z0u7D4*Nkbr{PKl8tuINv0wcipQxsk3o37eRVm#D#1rRnnPPX&8#lH zU<|suv?z?bH5vxJS~TB0p9}-NWquSrSs9@{@MV6z93pnTqy5x9H0PB(fL1xZHYDr2 zyFv;*ZPF&Z2T7eg^gwt$%m%`|Ed+8rd7qCx7a}4({rr!-grRReyN>oe!fr=B-rmJL zPixmbS(6mKchc&-x0F&n!IMP1CT*O&2$%0XCu^`gaM#AX?)Sw!lnAdpVim8viW7&s zL1q#>e+Ys-hsJ-s+*(3CKyhO{G0=596Lq{jDGcd6Xz}#BJ3Dy2QQ7;wt+z@&kx%Tr zI^QI{b~*z+xd0eFK@U4S1l>bCf^+n{{KewEG+WfXG+1@KJ>@ezY)C7-Xc7cGlJ)dF zwY{Fb!b+Pzm<)V943y_Q?0H^2 zjNz#NZXzr_6tIN7FnydlcJ@xakS@c$kRkRxMY#&SkO3S# z_P6Z38{0Cyko(m=J-wAZGX-ZofxkJu&iR48Avw9c`Z{a9P8x+hm1KrF+4f?+LCMp+ zIjCPep2^TXqW2^{+fvKCkm$@ksujn)&5u4jNVr?O=f5Al6yLNx-DS17d!f)hIRkY) zTlq8Z^v)Fn#$w44eigo0G{MLLbc32#4c7nTI+Q^xT`X~tn2$b*qgPy zfwqS{L`YV>Pd&Fi--5QhhZV2ACC#9`r6Gp9f1{*4)wHL*59!>zI$RUI4$3RNCcMQw z)!b4%#NesD#JIOSv$Q3>{wt8Z)WxAZ%hHlN`%LAYrCyjlZL~bR zeJjsA>q-B;N5qXgWyrZa4ug-qS+$itfmAs?KKa7CJfM9&>#1RW*LAz@wA#e ze2xgco=nL-S?rj+QHG4XqC}-V+~X^{)LnQzc@7VnxS<+@Zu3~aMj_RPj zctMms)l6VLa>2g5@TAGSyrLg%GCub?J9kIK6{L6Vic#3GD6kMhX7Zajy)%CXBl z18F?H452YSd+^jfxh29qHrr-Bb@WHQT(HT!tr9#v4(e??XRL3$g%oH#^{;ZgZXTdL z-{=9pm{FlUr8wNYYz~M#ByjOOV=_*>F?NH!F~nxQ%?p4bYYIX+--ZXppYgMScWHPZl)@^<~{m}9} zwQdi*gn6MnNa@Hs{$l02EQ~ZfF*h1Lv0wN-s0>^^vFjGpXXdy1H>Zhkc$r>X)B9epTeWJzX0- z5a#u~-x}>aeiQ6H_Wv2W2OfhxP-&w*T!II^z^WlVtk(*=14%`_zu;;;h0Ah1kQmUr z%_Yk`leg`>1cduMY{4u$XR-@D44#g>(={YKI!PqFe&!y%Vvb$Cb^nsRMxj1Ec_}G9 z66LNvKbxDqX24s$TC>)@#c>Y2CG_IF71lVt=F%s;NjsOiCJY8W(TYU9N{f^|a{#M6 zF=sVB`nEAW-?-pCc)j&JhE?Z1Ax=!aKV0g)t)<~S6z^mP5a zLVppx{qBrCecAK8lnpRF8H}qu+KPd_p2}U2Azga`lP5`)Nx( z_%f?JYC?LwSz3*}JHEL+5%3m1?(twddBpp@gm#F$y_K=N5om?IHoUyN34i`PC0sc@ zr~!yQ@zDf6iKBtNP@!u*E7aIKYb{Z|WcrW1@G#Z9Q+mHU5H;Goy!Qe;V!#)!^DU0O>>o!xiCtwqm2;Lo85-if%1-vY z?DYdZZ#4@%EVeYgaY9DDcD&9!t4PQ^r>ti^$~KR^`z6@C6J{5_aa_teuK=1oDjJo& zr}>h+f|*-An3U|jQ2}*5yE%Z>C^;0HYb3++_KTU=?HYaYP~`|JcTGcz1I0X zIUZI!p`0f@r3U#u$}pzAeoU7;+m7QrrVR%_-wagX!7DQvsDGewHLzdeM#vjL>L-;S5O9UOc;BvYh4YGBVjcv8DP zi~+8_8Mnwib3z%trA)THD+W(H<-Vyr$xP`ztx3N-H)mcwgy=avD$eLUJ>Z``_ht$` z`La?yOA-q{QzQ<(GZJe(WyK^t*??KSMvxjkpGV2PZ5+Y8NK4@^EIo`w(EgD=L1yww9p0C(Iu`SMFoI79w9gA>>d!7v8VE z!%a24S4eC;9^fRsP3c)Z32d*t`Q-7ui{AgdY-Q0sbxpv$HO!?uM=TV*nLxih&FCII z82#8i=P{-|hL%G;(#uml+)^{U^cV zA!nt%rn`td`Z9XGN*zwU-8Y;&L@gLSP*Ar#THIhgS|ggh2%M9=vB|Z(2BikQ5_h1y z<=IcWdP>f`AfrdUXN?WLw~M=?wKrJ31Tq}GqUEx^tmaa^NTr}VUXQdqb3Bl} z6=$S9Z(|p|ML8cjB{X$CH2dGZp-~UL`?T>o2A>){86%^-5dN(>cd2*0=})0OM9X74 zzLdW`7!DFWlG&rZMIFaI-SM(L2Ewtt$%A7&R|?NPJ7odAX}OR*H_+`oS&64SubBls zLp$5NcRwaQh7oT)q%cjq)jYhsfPFYTO)!PLigxKe1Ei)qo_G#Dv@Pts=Maay3L8>A z3+3j#rR}&qbmj#-4WqohuAD!-eH+j`F8T1h=BzS1^8sN!BszsX(`UatG1ET1@ohA{ zAZ|3hE@dITf)Fn}pdWs`ihs;K>W%KZ(*gp#TknND>&NXogkwX!k$q!4@FPCGZdS8B z#&fg0o?@oFYTsYGQegN!a_T|74nCbcyYl3{dT0VY>PGgwZTnF@)5In{)vmleCBI0# z-k*p)c6+BgZe+K-KENY9Bruh|?iO3US#Y$y8fyPM=^qO{C0Tbp+#8L(sHM_9{UPE# zi5x3D5!>55qgOFK;V`Vb;V9iap3{6irAMf}Mz1%$`0k)R&bREm{3QgvtH^)7GM`sG zwJfwezJeva9Rdix1MQkSth>NHA~==3wj4n`n+!ZWuDkC$0#cK_(CSk>`&ykmXFtI@ zX2YSpgPF&?V#r=SDwd$V!e#qB54A|W_OMAkAeCgiB8;y+3*|E*B;}vkFtaTPc;i6OVm8j{z1vw+mssk@QDB#%`Ov!O1#3n^Dg@ z=I}(lbYLRAeQ|!gaDc44PV?-%evHvO{1sZeRo=)s`D`=2$gl`KK~1x{7!!BBE1y(6 zwI@%#4j&f14g-cg=C(sU3?ZI8H?J_fvVeQN(@h?{8k>5(0NEuy?if=&@EYK~Yfjud zV4JMGTogh*Z($uh(!v=%4Id{vC2C*0)-IjBuH61SrjLWV&g{m$OGw(hK^q&qeDuM+ zl!2kW)w0<;*XIMh1L~GN#%RktF1Tg9^FhPCkg_g2Tue8;7L1_1rLp$BjW@zP*0;00 zE84U@UKM3MU7Vu5mNCja=DUx*1%RbJ!A|kK*rBOCH}|u<)|W~>(R*sW8&J(W&tgu! z6>6KjM32b5+r=(%_Isf`;TM~|9r;_m>IA1dn^zCLF``?%$;czUd?J-R z`9J);HC=SQplDY+s&!mFkEKLBnmmiVwBz`^7!BdQk@R{!C%0t1edoiyqCGi1pPUB0 z?bBmD=m6_Gt4vHi?&A5oylF!{mJda}1zJr#Vc=Z6mR>SEq(8yEnW)=5=9q##v}N4A zNTeP-IG8CsRxV|{x}s0Ll!vQ5R!($0r3azBh(`1~{u|poG*;O?0!R+N8xeTD1B5ZX zmq1uOq5p$DflKr{?o7*=q&m*5w@%bdczKku78 z|9{cE4X&X*`eLX($774Sce2SnJ7EVsX8rv=VZo`q`%odhbH|@N5Rsof^fZ?}((al( zx`7wGm$TwMo2m}I!ip)ppjx%PYo$fI0-E+b9lrj&=j`%4pIpE_H?iowApNGjp6{(a zrkv)y6^}tZ%NVCTJc@xmp*8@#$8Qq7;VS$*>F~_G#~H`GI016KnQ>A*M`%&KHkYM6 zE^{ipCQfg>uKsy(nHiQ|?&392Ug9ZdQ7{ z?&)E@-{;u9k7u5|zGq#%qqfeyd3f!;7l^hy%@SojCF%>jY0Vb)MRF>xEd(LbHLYRM)&7q_9i z2QId~xC4eg_Y6e6`SUP5Hd+Tgxj(4Ae(U5s?_#z*%`=!iqVI6L@$xS`H8#{ev&9uX z`#=pmFy??g1t_FE_>MQdonCf5{r(|5Yk}#!bkP_*K^aOtxv;Z6#T6|(p1y*;11n2A zg2|t~>u@eS>1=;JzH2_b5L`k$Pm3=-yhzWz2aTjVyxbPOtrL_yLGU;|x+kT*ec%+mEW;hX@Tvtp5HOxR+(w5z z<%jXRKbfGq>#H@rm~9TdBZ~n&%j@MmTJb`?PBh=Vww*&gpx$Ax~ zjdn}Dxhn=e5k$1S5y3mX!m7Bv;t$xp){(e7g4ItwP|-%b7~C8^1;9o*kH>mFX05xt zA>b#yPC}r)@M~i`)C(UybOD7uF)shy<9#$ zj0pq13I{yB$N4h7To_TkuOCpn@f43eA+Dyo1ck1=lm0e6#biP~R794%8Q+XO?GX+> z%QhK3K^bd1UwCr80Q<4M&sL$mgi7GNLZX#C($WRJC$P#rek2e)w&_;kb=G zd0e|a+5Lh&cIBNt0Hi%Vrm)4lSEw94SzV1h=LW#NiKnK#r6B!13O3ce!CYrN@o1qv z;s8`UEqju@7Yfci*Ki@dLG}ndYU6-AZbF`yhQS=WzG~)uj6qmj{N3is|DmCssXgdo%C>z1L=Hp#FGmT_D$DSv=LuVa5ad9X- zZ!Q_VZ=*H6Jc5rsa=~%E82*DjDF$P_j4c$rlXN(}Gv&cN3{?<4z5~U73(l{`^{T#qLWEe|5<#B^NZ==LKy4W|p&ul(D zwq4=9)bUC^#}=DCuFhG!FCdCNF1BR5k-e0?BSjdzR|JeZW5)43W*novbgB!zT8~~m zqqKp%PcE)K%QJ*L!TzbeR60GoC=_nJsw1wwvUH;0r*9EGM#3^Z z=#WdixSu?|K`5rZ$SW>AtGgz>fTk{(}$EaJpaV!83xF^rJ=96k!FItBUs6SpkM%-Mvz+#xafG`lA2$==ibu2rB+@&Hh+-4>b5MsYS<4wk&QS#f_(S9UZsk?h#!!< zZ0VxCk@icxo~xI1ce|~uy8F&c2wR8==C@kK*(G<$Ox0n;W z9Bc@^x%D1A2D3H1s-oSzC<-S$o5Dan7O96lB21+@KN%-I`LRho)Mi+`64g$<17nIj zmg0Opz5~v^0w&))-jH3p0{Yo26hqnVHYMXv`G6e)0moK^D0^eFN1! zhCQIXWIZH3ii@DV=ny(RY{1(+6*X5q&llCYJ=|Zt&U3WAhDtL$Sl1lBi3XEBn4gxs zILy2}(?Z8Q2S$`V=ukpEOSmJv;8O0pV~sAog#;@-&l{gTj2%Y2E@`U0adwtFdUOmv zavvf+Yg#V7Vm^O6T4(RIQayy(?TPL?o;|lao$pOOJM99#2c$YX z9$}%qq9bv6Uen-LAXV2KO>Ki1yh~!SZ>W=}w$TJAN*V&A_K{D~Y zM}0B9!uKydZgdB|x-B-mlVJls;Sm?TOKN|;h|S%-#Gscw>4e8T?`w^`8bap0Y7wct z4fQm=+}i5A+U*y;Bod`O1ewpg&tY0U6~=bG(VE;mY_~JKABAwe*)5kn)Pg&_qgpvV z^oRkxf>o!zkRRqf0d5w%Vxj~+ZJujA1PmIyaXV1G)v*}9hvVlx3zB3#5RJ(^?Z5^- zS*sa7q6Ce+*F#7>{U8XwhX@Nj@^N>(Tp$U&d^KG?|A&mcmo?7L zp`Vw%0ZGif;^n42htW&D(Qo{`1$UY~`%7587M-0vWzw8Imf})97G15pb&;4o;>+;5 z`nu>megQYVhL*ED&%rJ|!CZYin(~W1D#NS1?wE?a{-;B|E9c3)a`3M_uKA& z%We%lAq^+JRZ_z}WIn9DcA03s6=D!Re|Fiud#@Hfexi{*2OEOC_6wc7O|d<_A(WIm z@29@IENEN2F}H9%%o$X@$JoQY@}!!)56?%ua5lrdOK?{_hb)x6&(j#aC15wbBY>Yh zNE)rYLl7W57XHD#7rNOyJoB&D|i(? z@qX{O6lq{RwUl5zFcyJ5ZBlQ%6Ka#aZt{b?zT%O*uhK?5DIz<)TDFtD%fd0df_Wl6 z?ri`)WdJ<8nf`}7QJG;qQ`3&UqQ?EZf~9jkq$i?12M@=*54aP(DDcF*tRXc#KhM6q zlNE-!rz9l3AaGhe9ZnECW*wD0(HKiRZU(hIIlGoTrapYS%3c{gL`r!)i*B;LQ*xy| z2f$Cg-s`hGEXd!yfgVr2dk(xk!Qke+7gZcRI8ux~#_ZR;;cN{(%xjc94E91jR0RsW zK6N_0{>(hP3hxs>-Q|!yTP<}xE#<_#3lu3k@Tt+fy^^H8^Eux<@S^KH%ougNd-j_> zTg84nGym4RZGf1(=AwnY+wm4XL#|o8!2-O!o3 z@F3nj+BQTycQ^?6-$)8H!2WSA~JOUPwCS;d|`iK#0*U8LJQDOzB?Z9afJ36Li~3_2;jCCfy;J1KL# zzNxRhe!B#{sP29}uY;;P^DEdqRv#O^K3=30cjO2{j_ z2%x(?C=HQ4sv{M?o@cr|rY`io*@3>hdn$w+Ixz9?5i>xpd4tT})fN#10R=3N5R> zLI)MS)2*buQGJfP3Z@)A-2{=n%-se(p*6m|QHJ6?prZ~x&|-?cu`QZB9}j}NGUUa& z?Ayyb7{kdus@^?4H5sQn6LfVw>e#Vkc+0gFiVEt0P^gG+TtAKaC$)+m2=w72c zzrHZNY-cq+ppEFfn|f`$^?e?_H(Tbs-q5c+1<)$Jin9YfQ0C6O%|leZ(aa#d#PvLaNd#=Y=_7)?NM)P6elBCX?G`jV_o^Q}fVOZw1#M0}X5TVC zl4ei6jsy3+i0Ui7RUG6znv738%GWo%A;<4M$Q}c|)EpwcMJI|ppr&rU-LQ^2xT`n4 zOgI`n+aKOMj)BcR@BA8))-4Q1}Eg_CQfWZ{KD!I74 zq^VFn{XZ?eC@Pt~g^Dda@%SS>!IXkM{*8z{^#$BKT9?wheeV7|mfSAA4QpJy<9dTS zCh_&Xc|5(lgoxw42viHb)Zf54TjRa>J1ycdn3R+ONB4IrV+n7i%l`TE^mmtYmYlUN7mjv+E0x;2R14_mkFUf zy3?(^S1i;#NR)@XfV;Hl7ghXmXQIyLyvpCD^2me(sQ)E zFH~7P$)4M0!4{Z=ErXhhRI)Eoglz@p;3 zI;ax9*)F;~o?rhx;lN2ei#;wq*DHZNxY&w4x@yWiRtN^Y8!5j$mCTqu-8^wy zzM2s|uG7Xmo=}=Rkj@;vC}>T+tHoBm^UB0Jb%`&%Y5%3Xlw1V91)r8Zhz6CreEBlG zFQ>n~s`Z||`?;q*JV|6d7Ig_d%ROMdLG(X8W01SN{EWD~R1+6HQ`Sm7SlCj$MitpS zg0TucI@`lN?bLuhpBIt6WUXYp3)(t8<0}F@y?{wP$osOre3~x3YDa`THddKEm>?9o zwkET^S9X28ZiLUg#I^>z&d_>18LcKgngjs6)6I%KP*;9DNx~<*q0~e>c@ts1e)oaB z`W}M4qi@2!>-vVh*PVWVMVvgnCtRI9{3P~7m=Kh__FIR#Fs;@+KOca+ZD2dR5)Vl|-x%RMWzAJRwo(SYu31jJW5lDqUFlal z6)^_AWwtRrZ~V!;mW$%O+bveTn_FQ#xVN{xF72_r7#jV&^-bkG>fWR~U;mUmH-SjK z9i6wlUrVMu$G49?J3`RBF-0~#4tdx-)5%gjLE=%phI}Qx4+hu0c(e7r9;{D1!A0e~ z6?z#x6dOFfG;tihRlAx!#1w)$BAdB9sT|ThFr3Rgn`@^%{?S3afzPMCtlaB z+*FIb@QRu}#We{%yphknK06{k#ZWW7x$_`9pvnNgpx%K!Ya6t@$sD{rp#DNV!-Wq# zPBQ#FWZs`VV~dZyd}@fi?9Q<~^Rpm5<@u94c8>@r)K}oVZ>$o& zVYl79#+jVGuF^$4_DZ2W6ReiJF;&z6--{yinKArzP7&5%QEo;&|*jk>wt+M;Ov9A!l;-z7|HpMYLl;-fg?B6dv z@KZxQkFW*3#swHXFG)$g>G1|UAqkSbYeKBND%3AM+z6(<8=iMO)gN;`oF@%EA)0SI z9`v8Qu77AfQCgrq(SzqbN+$w6NJKL`khp0*j{b-}I+Jic6lCf>3_*;&g4GneInOJ- zJQ>lv!lU6l2CXB!f72a3&Ec&)5V49nVj&Yf@bp|evip|3ze0>X9ly=IEDYd0qXQ_t zSg%e!<$pRohnjf3-R819G^#7QP!JouCwHkkW{;sgYYnSCUxi@3Bw>ub29A$C`0STF z5=<^VLuSpq4f<|8!s&fH(iMt45MI%|=^anKajS+sy|Q|}R>VUK1R{J#$SCp zD%Zz7q=u_I5Hig?wVu4YphdI001Ajb_`YF1PRLWdYunyDjx*o9P-hms66or@5%UVX zV=!wwu?k1!OzbxUjCXq99=`>3isZ1)$v`QgVrqlzn7RiucchQNsh|A zx+uWC5Yvvmd&RQ7QCBIwH-%$7Aa%k92nv~D&g9_ z^<YIKA=mWdv{!Hcdv%>N8MgqS+LDy}#@ z=sV`$YpnoE?t z{ikm{X=Jm!UpC}C$2P~hOJ_7azJwY+C1(UZgMSXblJe6$=_!;t5x_CL2k_oJ7!;#D zGH8!H^sPv|yaL2LFu(M=Rm+9FgV|a6Qh)D$|qWpb`Pz@v}6 z6V9}~P??pzSYKB>Xa!QeREv+hq7`jB96u~Ov;^ur4K`OjN-(CpRvk6H*5N=tO$R4D zDzsp{Pr}Q*sYJ%R{F;QlMNNu1m`FLixZ|ij%RbG#k`T8%(yOGrVDC{qj=&B)1K$X} z{Bx$gsE2<%(uX=c$|LAKm8OO~i2lMoEO{$CfmcR5ipvr`#?gJf`sE6}ebQh&P+iYF zw6RG&0Mhk6>uV=GFdU#fH|EN`phDU_k19|-btCsZqW7b`D!m3i+9i~|OJvqND|*X4 zE2_afbiJl(fEQ22ShXo4%fx8}G#Mcsotj*r~D3t$L7d$|3&E3!hpgguTtiQ@0P z2pBxQ?mff2O1%&~Bl#JDU(_~Sygm8*hwut>}W4NY3tNI5oj>I%~I7n5O~r&e`f+bmDo)^cmheg-rugf zlx%{!WF|vA;d~^$(^*SAoWwD`7Z0*LOGuu)4nN8~cth~KK$#>xMWj+a2He8E zvS9+g?#1l7nrVtXTW1D6Y?UcI!<;+4r~R(I%WCUAe5Z80*OA;kr4yh%OPMr2SXxrO zc|QHSeR+kw?EUUM4ZyfP+i-A5LS^>7hL#Y$8D5~hqHV#w)k{`A zHl$xYgH6M|b`gj?5AVReKw9Oz$H4=$$urj|FmPFE4V;3<6c$1wyD4dZ!)O`g#lbAz1>Q@iFkiJ#DsA)w!Zzi)npqC20tsY6d zo$tcDL&a{qD3nyaobW)rg`elUi2_o*FAB}QX-&{OI(zLqI-Hk0kzv5ROO~EIVdiAQ5&wdZHCP2)zTmPL_>5!bHkDA0PX?pIXtpZF+#ckS#bpd=;;~ajgnHKBy}_ zEU?+UZW)0+!g;>D-D?=Ve8Yr2UP0cx_xu9A9ejyAil79%!33Xvt z9zMOiiYBJLG8^$cI;JSS>&Gs=+Ktt`C&DK_ntBR70X{dpbD*|6HDuzvmcZn^m+GB7 zTb&%e6rP(rqgI(c?LzRq{4~3~6su%CL@%~IJ^$gnp~Id%Fe;Bbk;)4`0Vw*tB-)|8 zPb0WJ^C)*cz9SI5ZE6j@w|M?M0p4T0u?@eyAmI`{fKKE*^)`vUR^SdkYVn>uM#=fS z^Y8h*0M7uuSQkeA(c10wx^f9tF1FU zA1a_bVE3*)Y|Lc62X{L?-*$RC4fJ3=N6MDH!sZyfEk8rOFYB7Ubhd>&#;_>8qu)S0 z^6MYGt;AD3zhBS1&RJZ&!?R&MPf;+jZ5w`~HeO zhJgt^ffANI8-T$*rm^@tX%?=$yQn(7D1se3FblFhog+oNXlP|TC0Wrr^G?b=wAuJP zp9>2+pDmuf2d|Mm9w|0Ga~wFlVhjJg2@l4+Vimr;?G%f>J->@Rbt%0)Q=Un^%s~9Q z=rW2u3$~{`N)uwdOQ1D8)NgD(XeMwye{9Y>OEL4kI&*HkLipD`8AGbQQW|T$N_Kxd zL5p5Ii^Ooe>U3K@#M#C?i#r><$P$x1PWu@=#je1*>M-*?B23*q^IG$~Lho5U%=Q|+ z>2TgWBlVs=TX=cArGyGRF9DW3Vz6|(!P}BNO-6b>rwm>_|Igeza9$NX$wHvLm^;J0 zffofn@gW&Kr8={{d-(3V_B(q$`ty}NqUbC=(Pc0@9bQDbabL>3)_@E>w`GbwvrEjp z&|6BqzqPMC{Ix;6sEpe@(klhKrule%39u%WIZs+?vddE4viv4@L z&dQX%93mAxS4y@?LI`kBDwCp^|VvHN2(^hK6=o+ ziv`*}?h(tpN-9V_=;tQ9x3%0ossuzloRG{tI6bnwHm4c9NK2!=ROM#9X0!*rIu5tJ zTSYHDbW%RO!IaKDG0|;3N-KxGb{}}Xbp8W9t9rO6YL7TJ1f9EMDdC}Z5;o+{RRfT-te@&t*L=MOi-#kzk%pH&!NyfNUtfq1c$df zt9_HaVJNsgwzG`9OCsz%r;c4b$^@J|4>ylHSd3o0-F4tRq%^j@2jcg=^u>a^0lrQ> z3Ps#KhkrFaMe2t=TPg&-5kopXdH9JvpEw`8MWQvk<`xz_Z!~y4OY!_WQ?e|*mK(^u z_U^Mh%DFi`ZJvldL`f?>l&>m0G|gQ+YYCb=)EK%wh${iTGZ#U<0&xnxTme?Sgot!K zM4^hjU~VeCrX`#_z+Dl&&Cpss*K-a&)(Q>1QFz=vEDa1ji^`0>n_;Lu@3;=VB$9_c zx#WO5d!>^+wJVuDSY$)IQV%Y>o$cMcrA9@)jw*J&F7dNHrO(&9{yguzVM4IIOB0(t zl)O7V1?h!74Ykd@eR!t4WHe{I6d-Lpt15=QO!pT(8vzx))%TD+`a&vR}YxH z;q-Mqps)lz2}E4HICBxc{c9V&0~D9MP)3tHWJ$d|bgFW_M`WG6gE6f2U|Qn)K!)}Y9&NH+bmfIPG-3ZOP3%Cq$FImYjFI0*u`|VH-9*H^0w4y!?bc zqH{7l-*-VhrDJiuKwt*F@_my$i>ypNwf?L<&+e%`Yf9HVxE&h3NXmD;V6(0~?Kr8t zw7AGTAI%~=jJNdiWa`AcibFv> z*G`;08M9=)c{2<>3`!_H$PrMzncqIVqJD}zy`V_F$XkiM6y_B@ofLyTK;l2W)XNRM z)@Q7}n>Cib`ca3y=?QkdU4+2B*FOP08^63fS|e<{!{SuDmSR9WqWC^MM5>9rwI>NZ z!`G<17>rcC9=|<3ju!d5d6fdbq^*-Zh`Cg~Kgc*e#Zsv}^TMFVlGgc(L5zT}> zlE5xK3m`DP7-_Ya>(+aM&o?uu-^E-6Pnloy}8-7H4EfS%Yr zOswC#oa)~=2-T0h7#WtsKmSJ$bYrFfspTvVb#cZZLk-t7X@3;VziHpsriG&?KKc7=fU?vU!L-PZTt~K6`dOc)Gp2W3_g?Nibi$ zz(1_K_wjSQ&Jee|qolgKe*Im&2uClyF$UhffK3KHTVN(VlI-uiw+Y3(V*fHdUxbvr z(4wq8cgqYu8u=GIH&`;gKyjlz`7(Sx8D>+wije6!!iB&+s1q+WCq1Nf`bV=#{W;euK3VAQb=(N45Q>bKpllWh@;88 z2ah|uAI*2Y&S6MB5cuA_s}2G^h>y`dOHR5yFgOi8Aq70W@OF$n)-+x{Hb9U%;iU+@ zi=oN9b%KYyw$cJV8wmnFZaauQ3lgimxw!1Spql`_YlHASFJ0Tao4f@)D~0vE!Q-bq zU36|etG+V5eW^D+hdi`ABYY@5m?pP9d)S;k1*{o&y7yIxM>f&v&+`Kc+Vz1Y3;x~Ce@O=SU{P*ubzv&zx_PD{#hrxoL$R3 zeUb&euq<4?JxEPG{qjn^*9kp6qtJOePR>d^+bF)gh!ldoLIEOD~ycNE^%{`wxwvEcYpktjo?(g-ygOLxtV`hTA37s-M zKfNKnq{B13!&Jb$`P6Sbvkx~t`)i84i}OW0?A$>-A8&}fdxeR;m)&Z-*I#`-NiZlq zL+q@(cBnKuQ?72jzihQV*yAWW=o4qWu>3qdxUN7w?h{@-;@^tB4v<$op6Wt9u17qNnvf7ZsZ=YyOsqb-z|TlM{-=q(kf{#6$C>ZBnCkqxm23w+P-LRL^3l+} zpwgbb=3EH7$K?RM)28G+*pYWUtaZ=4V1=SR|3Qg8zNaTW?JNhq(o_MvWvbIV!0?wn z(KfL?KXf{}lhvO+UPn(nvsfX$fOLYrM%Q9JT*y#8UM$^Ay4WWXsr5j!fo&I8E3vzkRc$J9(aE!xaIBrqsF z2SHLj3gxyuGjScgnMq2$O$OsU3dH+6vqeq4S#}S;2-0Ca+V~nh$9t%~1oBEe{Pg&} zQTeOAjb4+z36}gl(j{s=A$lymr_Glf?~iNT@0dxXY3u|QM3LT)3wR%4qz)^FE5(JV7Pix4xtCIz;nTY+_5_K%F4IZ98Ztw@g~q$RC6Y9~QS2l=C-$zrq2=AXT(KLxW6+2_ zMw9rwDGdNTkn9va7z7o(pMs#hQxmQ?#VqW+8Q>K>=Lr(M5INVp3Q7&VMg18(Lyamu z^4Uhd**8}^JRDa&jzEz-W&^@I^5Z`}U!wrNK@Ekx7`u8s=o@^zsAs7>EFXtGZTmJo z*#EOVgC@MZJU}tMaR~#x2jr)`xAXeD)-Ieq3^x1g-uV>0iCR6q z3jZd(Md?Dl3-c;HtfW^xwqg@J6yXRwnd?G5M-maf{jNbg>EOD(&cn1kn58AXV^S5p zt*e18G`Wbq03K{T zUGU^Ppb}WU;B$dJYGei<=U?$TZA7 zib!O;tv81~YsUON>sYxxFVZ$VB(f&GeZ%2AB8P!J^`zoFUQ!4?l-fMKMx)j}2#i!c z!MejeD260Ft&&;0gB?UX(bajqr<_(iVF9N-V>e2@ar1?|_Pbxb$3sIs#3Y@)#}qg{ z*>r|IFiK;+{tpVhPv>Jj!R6jO%q`$MppVMBen$vAvF)k7KW&4(T)6Z*&^evFNb9M* zziRS4jRMd-%cS2t5GSBJK!6iHMDxJCz4IeGR)wBDHH}q0d?dWP?hLHF>pGl0=6}*X zFd-1Vi78jTX0bNBGbr1=vW`qWCzp{tDxOun^LKzfGIT0D8oD_>sjv3C{e}8H4oT#^ z-uq;|$ijL&7@$JBPiQ$k&;BUAEo%il?Fd*rJ_J2IA`Z+vOzjH2xJ4tpUa>~JA2;;7 zj5~t69BiLF;(ofl9Z@yDFxcR|7NG$>R5J%XSC^YTM$=q8I0+-YVSD?$qUB1x!&^nY zk{XA+;fA8UCwqXrbQw6jdfUW2E9H(o4}Q)(yDrB)qS&51D*u$c?%r~}ZD2IJr4YG1 zJxRMfG`-k=yImJcj&J@6D_bkXqHYrR;?R8Z%olWAun(| zwT3@E+$z345LFk~oP>iqn{yjHg{v*Ro)#OuYc9;Z z6~vRhfBE=4(K{qP0{lrm$a84DeG;X;M_|i4@9%iM4a@pG@CC*_3UdiP&~tt~wwZ%H z{n$Z0?&qC7@{@bK@U?2a+sU51D;S!+Mu37nvLk0ba3QF?#k1VKzJaMcyt25wiR{=r zgIKY>o0JB<_*{NHYbw7wFJiX3fJ@l`0D%90ypS3;J7VN|z28X(J$Tv|z4+XfJ6EEy zJ(be*yQq47y@o2EJn(pcI^JX1JzT~dJ%wP{Je}OSJM~GaJ*;p|Jy(KNy$-hzye$KW zy`jotJ!8Uwy?z|6J-eu{Jz394ybrIkJpsr8y?8hay{dUxyoZxy&`oOy-w5# zy^ZhzJ!x}oy;2?{y{oAKJx3iQI&A+GzSeYry|{_RyBBWlyqU{DJPC~XJ?FB)z4op| zywQXJz3Y&9Jln=`y*FTFbJub6}J=_sIyYM<5yEaqJyszP1y=WWuJeq(EJcjFf zz0?4&J$OmpJQ7`@JT-!^J!6zVJ%bz|Jh;_Dy?2T}Jn&-9y{(8SJaKNDy()m3J%-z9 zJtbjXym)z(J=vwTJMOnJfylYz0)7~JYPbgz0zc?Jt9j^y~ZvDJtk=eI$9?aJ-1By;5q7 zy~nW?Jc~eRJtQ6VJi}qUJieWsJ%1djJkC0sy#=h!y#1=cyow)_z4+N}J##aTJ@;6v zJ?0FZJVv<-K9K@=y(T|iJl} zy|1b{JO=af6yCj^a~Wyc`%+yMh>fJe?g6Jf&VcJr`jQy^JXo zJe&(WyH242K2OA;yEyF?Ju23my%-l9JLtC8y~;0~yth+YJ!q89yBMCwJ=j_4Jh>M) zJ*}{;Juh~~z4H=(JuoLPz7522J-hFBy!<0|yDh0bJR;7}y+`KlytzjnJ+4zyJ%Au_ zyfC)DJ%)y{Xr5JoF4&yl?ZcJ!lJgy>RM|J%^x( zJnyUfy$_V|JP5>$JB0!ay%U4UI~OFHJXlURJvmusy@WOJyp|C{y!50zJzs^2yj0?z zy)^Q&Jc#vmy(S?OyogJryqxSvKB*DoymDfuJdQlLJlV=O zy|G#tz1Hm*yp*$My=z95Jqm0wy)Jw=y{%0hy|1m>J$$-Ky)f8pJ3GFKJ>sG4JSQU+ zK5eD}Jy>+HymVMGJ-7%8yi?sZJ@>%9Ja=Y;z5ac-z2nUeyh)#nJ@kyk0L4y~}SGJz{(hyoSbh zyKo}3yzoOmJ-~VjJlK?GyeKIDyB7~Xy>`5=yDA5iJx(pwy} zJdI7ez4q=3zI-Q{yJsGIyZ`}%Jww*hJ%;@cJfid|zTQaRJdP!kyk0*8y9}!@y%(+p zyp>Faya1M8J#$V5y%&sxz4d}wJ;KUcJ-Mz0nPAJpFeU zz3&*6JsN9`ysrFYy%VgMJo9X0yvbVEJbL90I{-@$yxc*WJTq1UKHuJ9JzmJ3yH~>J;}pSz2_b?y*GDxJ$3aZz2#H_JE?9yJ$?+DJ*jI4y#`W?JuuMl zy**ggyRIjpJ@7`xJjC)*y$igyy?Zp$z4{-Fy~y(YJKWGCy>TO?Js;)0JdYmXJo*4Q zJKqdRJyh6@IJ%OhRJ#b&9J)#Roy=o3^J&S#k zJu&-QJA7DTy;zC=J7;7oJ(yIZJOxtiJjNXPyl&euJ*;l2yO?RYyS{pgy`3Uqz2;WI zJpn^Eyb{eqJ)h_1JRXH&y~J^!y!Iv7yMhe!yi0EIJXL$eyxw6gy*c10yXhZ&yZU2v zykd1OJz&aWJW-qMyqz{;K3Xg(y`~i2JgL_NKA?ATJsqcLy!Z99J!45ly*mg|J$3p~ zyp3O8J=wgByvhE#yeObxyqdA`JdA2VyoQ`2J!G_vyOtz1hwbJyr{wy~_u}yNS1Fy~E)KzUu=Q zy=0y8ny(Z@Byr~qdy<2{q zyzPL{J0v%gyw01fJ5_hTz0;SdJ>}1@J$bAPy!M{hxoN3RJ?qrQJE!blJPOqGy-#2B zJL0j1y@;E#xlD=Dy(In#J=m2CJwSnWJz25jJU+R=ygFJ9z2RQMz3|8vJ^i4uyRE^5 zJa9|(yVijtx{3IQJv(%zJxYD1ysltuJW#TSJWADnJ2gOeJ*~+Ty)sa-y=7Y8JY*KV zyk3uhJm24=z1$KFJ~UykyH`oHyiU0Jyjvn=y@5EDJwTC3y^jSJye4?gJwRF%J?}6d zyu)yWJyj)yhKl{z1@2|Jr$J%hWaJ4xA`y;!f|JM|>dJU3KaJzCf~J=xaVJ<}g4I#!_gJsU(XJ%4g^J-j}=J$l3n|J*xnN=J42gdJ*_L5JZ9j@ zJpzJ<{>_yhe5`J?J@EXy;n(jJA@LVz2LrYy-b7}Jgq}^yyE+oJQ!yYqOJJ@WSiy>~*hJgxsfJuSdqJ-yutJ#1*JJ!L-_JbbJbyrPbtJ;3I4yU)e% zJ7f#^x<4ztJv*>IIx;iDJEyf-Jy*0Uy)e>tJ@eh;JS`YwJ?T`Xy+G}DJ@FAKJuS%v zJ5|;J+RxCJp9;My^MFQJD!vWy$xf;Je}~%Jm&-nJeO|LJOTb2-DJ^Aq8JO_Jrz0AF(J&jQ6y`qIkyg%PxJxEIv zy+6$%J)r|&JN0)Hy%yENiz47TAI~1sQybFLqyzN}WylYrUSvJw*}Ix@w@QJY>dPz2U8nyC7l-y-0UBJ*o3Cy%Ye%Jxeepy_iU* zxkSPpCz0=g9J<;QgyCb_dy(RF8J@7V{ zy*{c+JDwR!yxka6y;U=(y-vkjy~ur^J$OAnyr1exy&O6J={f& zyxE9-JS@|$JpFMYJx|7xJo;##JJ-8ay?AqXyQuJ;EuPJfS^Hyy5iryx(j;yoERuJ#nx{JyG+AJtsR_Jb3j`J*z7yyabZa zJ@G>LJn+gcyv(CrJr&*`y;~p&Jy^?zJ)hb>JqW!Oy+U4dwN9qBJPZJ#3}hJVj9qyl*B1zK$Ai zJs~J^JQ=Uoyve3}y%rv{JUsU-z0BB(J(P8!z2t7ayigkly;0ChypJFVJ7CWyy#%ps zJ@|f9z32I&J=ke@JUeU#y%~{Jy^ZS3J<);qyB0CGy~miSJp(s>JtrT-JQ^y1y=VR# zJ!wQUJxQhfy4=b%JR3w|Js5wTyzh0LJsw1RJxUUSyyp6Fyg}|ky<|p*J$P-HJfeO3 zypX@>JWA*DynQK@Jd$zJysvCrJUepxJ)cP*y(4)2y(>t(Jr^YhJsVc|I_~#@y=@D( zylvMMy^BgBJ-9MSyIG}vz3+!7Jy#7qJ)&w!ysqy0y`|X!J|3>dyd(ZnJftQnJOazV zycd&Wyy@*KJhGdYz3rg)J+^a{JcP)yqh*kJ&}-} zysKM@yQ?Tey`9CsysTd0yP}KIyu0#PJL=>OJu4f0J*4K3JOZ`tyoz~BJo$aqyw7+) zJ-Yq+Jh2C;x=_mtJtNqRJ&sNQJzkBRJw?TuJgPeSy;_fmyKts#y}@p=x|do*J@^eS zJ*lJ#J?uZ;J$e%yygGGgJ*G4sJ^y*pyu+cmycse)yoCILy*3awy)@hQJqokqyr9W4 zy<8?Xy^o*ay`W1jJXl3vJxTVjy}4dSy&fZ=JU5%yyYZkEMJ?h1~y^fqPyk10?JxB>Ny>U5-J*yi1J>SCuJ@DVAyVbsgJzbs*J*iUbyy)rg zJ&19*J$V|yywrazz4Y2;Jx(4JfJune_y;t}Iy^#W6x(1+sy+kODyg?^YJhOhr zyisl(y!i9UJ(5R|JvQ}-Jt~Y8Jq$|1JdH6_ykD%7z08?Ty?lruJ%w$jJk7Y=J%rVl zyb;zvy_WwbI<4e`JwF=&J*;Qgyq;A8zSlCGy?r?=yr+J*DxQJPr5Qy{jV=y?HiIP zy#fbAy`8^SJ>fWRJ1fqPz2V^6yjSl2y%M4%J@*pByUUJTOJayMA|2J#$Woy^NeSJ=uvRyeK%}y?td6KEP1iJ=3CJy>pq$JWrb$J(H~o zy8)%(JOKJEzID|cy;wd3J*Oo5yr~uRyifh1ye9D#Jt)ezz4+&Qy&o1lJ)!YDJz7SW zJL39PJ#JRHyDG@zyr``cyoBo*yzpodJ@6sNy#FC*JqN8EJ0yshyMmCWy_x`hy^h;2 zJkD)Ey(e=cyQ96Yz3$Ax~JkqoJJ@;lGyh>BD zy#YsGy~sI6y{)(qy_~?YJ=l;AI6;>!y`q&nJ!aGdy){q^JttOuJwrdbJbhVNJ>(p_ zyuWu0zQzeGJ@2{#yyd-zJ=_=;J-}~yyUFN>JpqDAy;a_#y%wx~JjTD6JU1VVJ?_kx zyGps{JU& zJ*PpxJB>DuIyscTJjo!OJ&>%)y?!j;z0L}kJW$(J?Y7NJtDYnJeHsVzC5fIy;1FcJf5jXynxE_ zJn6HjJow?pynN(ryx|~XJsB?ZJb}4bJoajoJt~k&y{)17y)Lrgyv4B;yGr>zJz;xl zy;e-CJo_q$y}0piy#p~2JeldaJ!%Gwyb$z1oiwJJxi9zyt$Os zyl0cfJV1D0JgQmnJa5}Dy(IFTJrz`#y+K_%y$8dZJ%FaMJm%wAxl3Vfyqe{dJjdy<_*Kxio-V zy)y^5y{td}JZJPqJqOzeykjyfJVgIAy)=i5I^Vr~J!b;ey|@#ty?><>z9XbyydJ2| zycNp;KIB4TJVo)8yrKXuyfk@;yu(okxhsYYyz+{PJoF@=ySRTa zy{<{BJ^6aLJwq9gJtJfry@X2+J#NDTJ#0AcyfOKGJ>O&9Jd`tsJcJX1z2^sgz5Y*D zJ?P~nyfDsZJX0el(Q82yn_;|y(_>NJ?WamJZxqe zJd3N=yzYW#y}ZS~yx#pnybzKbyiu;fJrWnSJ#-uqz07fnJMVKaymoiAJT31nyr@J0 zKJk33JP2;uyqO|ZJ;i^VJj&B*z3tk@yaL#&Ju1iLJC|7JeJS+ zyi}&Jy-e$8z5M8?J&ttHJcdwBJvkQJg&c4yv7d6Jmf}`JeBMuJsMWJI|iH4 zJm#)6JvcOKy=JTcy@eq%J+Fk6JP^f_y&D7gx+gR8JT|gsy&M{XJ$QLPy;?5>zFq9k zJp&%?y;=pxyRb>zJTizwy*C2wJRgaYJ+rS>J!nrjJt-BhB&y^oYu zJ*oXwy(k#Ry~m}kJYCHuJ*rO4JY?5-z18;oJQ}y&J4RM0yeLk}z36zjJ(talJ&Q#O zy~bjYJ?L|;IpB^2JV*tOyj6aiJq2fuJe!$JJr(9ynjZnJoZK|J)0LhJ=+D4JPrwB zysbB-y^+)HJTm&Cypn|XywsUEy(yk|y+VG*J*GGNz1PEMJ(_Hgyv(Qytd#aJbW0)yis73I{Uv)JO@l{z0jPVy`HC#y`T|VJdEd-J%#$s zz0I?fJY#y{Jn{uAyjmhIJx3<4yBuE|y+{9$J*Q9#yeYgMy`dO>x`@ZLJELckJbuHY zyiui@yagFgygyBZJfQwCJ20$vyjZyrJzLj@I?+NDy(Y14y+$lhyrQEmywznAy^7w4 zJ+XX9Jz(>oyaJ<3yV^*MJ^XFQy<40Ay)cmly$1i*yhx)~J94lAJw zz4Gw|y;;MTym;#~z0!4%yqq{(J*5f{IZpx-q?hJh>@{JuiEuy$HlvJ%9&lJ>*zwJr_!YJfaGoy<_Nky~5yHJwmz|y)cAl zy$;19Jw2ZSzK-|PJrUprJq23Vy%8G_Jy9c?ys*7Ay@o-SykS6nJ;?imJYCgLJ$QLB zy%pyVZ7Jl@KwJynB~J3qI5y~_=^JlC{I zJhRGQJZx@sz1_DBJ;bZ`JiLx3J<$+>ylf=by0gT>J#TaRJR@w~JiXjcJ(r*^yp*xP zJnOe7y_VEwJ(GidIrVe$y$c@zJ!KnnI`EG&y`d(aJx8&qJsBo;y=hAXyeVblJP^iW zJrh|xy;Q3qy%PqZJNJTxyk^}%JJsNZy*SvXyy2%UJrDy*z0Jh=J-Hl|JEBRWJv*QD zJP!JTy(Mf-JzEdgJoBrNy-8&>Jhq}8y%AlpyJ!B7JjiTry*IlBJ=c>sJt0PeJ*kGH zJW5tWJ-zpvJ&C`cy?_uGJ&x44yKjsOJtcyry@$4|JW?t{J=x@)yq?DcJyJs`y$q$J zy{Lsry-!#bz0M3)Jp(A9Jd78Vy{fl;Jq8HWJ0Q^jy#ZUUJu$zZy|G;gJ%?J~ zJmq$wJ;F>6JviOHyi%^ly+MM*ys%8Zyxud8z0EKpy&VDKy`64wI;?4yy`c&MzNy=u zyz8?PJmqTYJ-fX7yufkPys9^EJ>IG)JzBE^JksoYy|vG`z3gDsy;iBBJZm=8z3}b* zy~QT6JrAUYyPo9Ly@6$pJ$ot#ys;}iy4w9gJcqcEy(38byhiQvJjEy=z3PmGJ!n>B zy$}4@J%!nsJY$~~y%;HtymdpEy{h?9J=Hi^Jp^_hy^T4rJv&jEy>c!3yrr|Yyw+ik zyl_AcJ-MY)y)Cw#yH1B4JyLEUy$Ey0Ji@v-yL_%dJsYjQz3#mSzP#_Gyh(eFy+}lW zy(*%#Jnr3vJq;s_J?$phJX!gEJw~@SJh)ApJ@G6!yKUo1y=BnRJ*D&jJhB|gJVrOh zJk|I5JXN+pJPComJxas#JKSjoJxOAOycx_!yvmqOy%&73yqw^)JzHZoJSz?$Jz+jO zz4_7^y*&_sy)QQ(yvJ`0zOk|CJl&!zJ&4L9J#1?wJ!r{My${gYy-TA2JXU~oyq zJ-~~VJyonXy%0gEJikttJ;7G9y=&R?ybB*}JXnM&y#hOAJrMxyJJNSky%dI@y$II+ zJgF(!J)uVHJcoh?z0&`=JmEgOy?^?2z4>x~yweYiyb?dHJ7KUdy$GNHy^8!MJf~O$ zJQlH0z0MrAJgKZWy*YLoJwuM|yll7%Jl-lly&=mKy#NmtJp#ZIz4#h4z4;=!J-uSJ#2fByj%VlJt)JhI@wNMycG2PJobhLJ#zOy zJpg>aJqv~gJzZbPJVRu=Jk%Mrx_eUkJg>RZy%B|xy&w`IyTLoVJyR37J-Ew7JviP3 zJ=9y!yrJ**Jey>NJ8vWtJz`DtJX>>uy#^TsJ`ykOywFeuy*PQey_pt*JOB%9J?d|d zJUElGyKVNyJ#z8|JqDrUy+lBZya=%>y$8`0zRHz0z3OzBJu(QBJ>h&rJsYiMySKOb zyhCKAJ+TWaJuZaZJXapDyziTry|CECJ9p;`JqxV8J@P(7J%tr=y*XzbK2-qMJdHNG zJyJbsJ&BdEy|kIDJsBZxymf8=yl}CnJ=$%GJ?=ffyniOwJ^V4WyvUTKy_ZTCz4SBU zytvW~IyyyryOxJg|evJh4?{J(&fQy$}pty0ridy?83Qy!L-}yq=YJ-~NZy93e_y?fmky@D{sy;_oQJpg@sJUVXLJrGvUySY&N zJal$jJ&=`-Jz#L2y=o3(y{yHoJ%p0Hy_fjZJnqtSy@Ii#JR6y^yb->~Jx9x7yZt5D zy*>bsz4wg7z2}*%ywM-7y{#tUyCUqWJX3!_Jy-h0JiWGby^sB>y-rB2Jgc_|J!dO1 zz1#TgyuT3jJdWuLy)eUfJf-xEyiN})y)9JNlUeJSHMp zy^6(8JnFXDJT6x^J>3ciJvgKXy-T1cyANt9J<~vgJ;Cn%J${uuJ#CeUJw(Y_y+i~m zJ&AgFyo0*xyVot=JU+K$ybG$-JIWD&Ju1@fypd;7J==S-JDhY9Jv>DKy-}2uJmJ&? zJqM?ly*!-xJXUKNJg|(EJi6qkyXI(Ny;cUeyS)T*y$*YqJSUDLy&x?MJtb)by(x>5 zy~<%py4Yrsy@f)NJ-dAGz3p#PJ)duWJ?>Cn zyG|{Qy|Bx%JqSzJJR%98yvIYYxj)FSy&6#)y|vzNy;=x7y<$t>y>3#$yk#q}JJ}{z zJ6`mNJ9JtTJ$NQ)Jp^NwJzoDMz3Js`c%yi^w8yWOmoJt^lAy_x)Ny$zY~z4)Oey${Ijyka6LyYA`}J=L(ny(l3d zylPpJyAZj7JnYzlym&Vjyv1=2y^;!oJXMc8JsQVUy(^`~J=1rdJf8MOJmr=(J!y=X zJ!0Bvy!dzIh@sy~z|ny*4Y!I^9{Wy_u{1y_Bs^JsW&C zJ^8Aby=x;&y%^=NyRBi1Jbf68yhVcRJX<*zJ<$qOz1rH&ymR|xy5P zJ*}SjJ-b^Hz4u+Oyhg3TJ^Pw8ybtIiJRr?Hy{IbSyg84TJi8xfJzryGS*z zJZ}3PJwOA>J=KBaJgr!@J+4Ysynj3EJMA&ZJwR5lJ$M_hyq+)1J@iUKJySZ`IzUfb zyK4h|ry|e?HJEd$@yi2)Gz4_mAJ@IiuJ^rV&z3L*I zJ%+%oJe|e{J?2xLy+`Omz2ElXylhxDzSB`Ry$Fjay(G~qx>Z2?ywWt+yr!G@yrW8W zy~(xTyit+Ez48~IycmzlJ-XGfy&_98z4+8>JtlQ4y^i4^J~1tcz3jI?J;?}dJ$2R! zy-c$CydRT`z00CBJZQ3lJ(kBhy%~jJ?$3Qyh^@Cy_0CNyN@qYJn#gSy$v2+JBLcS zJgq9hJvQr@z2^+qJvdbryclwDy#gx8y&SN$JVk$2J&-Ijy%&e4y~4^0y|_Ygz3U)c zJ?1umJePF6JYVBdJOi&9Jplf!I|u|Gy>@uQyFd}3JtnhKy!+~Yyhg37yeP>2yrn{{ zJiv9}J!+mDI*U=bya*DwJpq*wJq0vlJ*9Yxy%FvHyPGv5z3f__JZmd@y!b{0y)=Rn zzJ;jByb5ooJqo6}y{q;Jz0Y#Vyd0^Py|?B8Jw3XEJYD>MyJxSkyy^DkmJ%qtMJo`pUJu^<2J;B+az3RwTyhcBdy;Z@{y|ys_Jcz7I zz4IMhy?iXNJ-H+)yuDW$z3N$_JD?bKJqq}YyetwYy|WK4Jruwyc-=wJppnwy{qVrJRe0pyEEOpJ(=pP zJZ!CZy-XmJJ*3u(JnpTFyy&|Vy{OkcJ(h^=J@P)Vy^lbLz4ZJCJ4=WGzSdUUyf%jU zyp>VTJoUneJhze7Jg`u}y&f}8J-G*%J;?ZPz3X9Uy`9@Qy<`k4z1-gvy%y|AIzK&0 zJb&_;J*t!-J-C*sJE)`!y{mNOJd4*uJh0R!JsQTTz1@8%J+Tn}Jn$%~yR4*dJuP~My|Lg>y;T*)J*k$gJzR%UJwYEWy_w;Fz2(mc zyx?b=J=q|#y}|>CJy@}zy9d7dJEK?cySy~TvXJ^UT!JMvD8y^zUNJ(^pEyf^ohya}Hny+jvwyhIq3JuVn^Jr^6RyjjGX zydH{VJr@T9z5fDhy%)GGJ*MI#y~}04ynSDgJfkpfJ@OlAJ%z^*K5oSIx@9UwJwiNK zJtcEJydd?NJBnN%z1-MCys7u#z3dA}J#M=jzFe0EJx;#Gyc(lLy=?NvJT4T-JQRVv zJqmb-yd!-#y_4D`J-+_)yrpNbyq|Q)y0Y!eJpctoy+nvtJV7c3JO<{gybqA3J(1>t zJ=-T=J%RFbJeiGpJ%>vyyhvqJJzP8RyjWTeJ8`Q6JT~x{Jthj8J)ap5z0rp?JUE)= zysx4cy=Ag4Jyd3gy-w!5y~8d|y(t_vy>7n+My`BV^ysY5mJzvH(Jb3YnJ56uNyxdW(RF zI|)b;J=#vtybBmLy=mOOy^4@{y*5h`zEwLtJr&bKJtLG=JOzKI{TrVJXc|R zy~$yuy@L7eJ-{(az4y3@ylz=jz2UEgJb=(>ym{pby|T-?ypP84JkJTOJ?9Q8JvVZa zytaz=x_!*1J<(=!JqJxAy~ZwHJ-m>Jy^e>AJxffkJ#WCcynQ8wy~OVYJlidyJ>r$6 zJ+U#aJ)j(qy$FkHy>WG=J^hIQy%S+KyfQXcy-i$GJyt(VJ-%JDJfZKKy`b?rJZ;m8yumL3 zy>XK9x>WAKyo!s3ys)KlJ$p>1Jz}G$yuV3gJysapz1S~By_d1HJ9dsUy=br&JTyCg zyWbOzJ>2n1y(Qv+Jblt0y`6zy;8h{J^2cEJeMguy}lKuye{nuJ;&@vJaT3! zKAX`tyfRyyJ!Rq0y&V=`z3HAVy`KKayqTD7J=>!Ny>p7HJTcayJT#bmz1E(oyC-FWJ)tNey$wcV zy*fIwysu4^JZW1VK8!B`z2R?+JN=bFJzQvaygv^iy^ps^y*9#Zyr!5pJ*mKgyFW;Y zJ=tKHJ&MB=z2i?9y-<>uz1OOOJJD8by`@Lfz0^5BJadnLyaCY>yv%MdJL0i2JuvOZ zJo6bJo{3Dy=|FS zJscq(x)%1rJQYO_z3Vlhy7G#DJwZXQz0Mq*J)gQsy(vSmyau1fz0^ZoJqbcwJusGG zy^;GSJr<9|JSEpwJ&g;2yv69Ty*Pz!JEHu5J(+NTJ(j4IJOJllJyIrfy@bzAy@4K* zJxPO@y?+76JVAr{J4__KJ^O<$yKrbz4)Jq(mHJzUvdykwvNy_za;z4mq;zJ0SWJwA+Y zy$zkAyBVseyecZ*J5A^Zy#BeaJ5LaAJ$z_(JwJ3|z4+O)J#zA{y*H`vJzS8%y_8xf zJVMUhJcXH`JC~psyvGA9y@xY0JsmR$JK2VZy$r>Myj+EvysjmgJtvH}J-QgYJkXv& zz2L-Dy|Wd|yhyjwJAC(Iy}KzSy+6G-yco2NJ*#_dy{EvSJqW32J;l^)yJbB4$y*t`IK3fqqy*F!^ zJR~WKy?sZcyaPncJjM2|y^JQGyzHxSyzKuFJVwg- zy9+-Gy(WzPyoHjsJ+^tnylkzSy&_OxJw;!Eyvu9ry((b zJS?k)JVZZ;J3I#xyth;Lyf56Ez10Q^yFTy&hAiJwH~Jy{VxXz0hEry_~kP zJYHU3J@DU3yd6E0J8M!2yax=?x>$prJzi#lyks??I(|OJJf0U1y$2V9y?CizJ*yb4 zJ!yS#Jl>?NypzOLJ&<$SJggI=J$~$hJ(&|-JW;?6yAy<6N?JYuskJlil~yo6Q=y`7tRz3h_`yWF3gJ&xKl zKHe8Hy*nU^yz{%3JEu&|y`8YXypj}>x)JA|yHN9~ysmzYJ#kLAJo{nxyfm@0Jm7cd zy?f^?yu{aWy$i1#z3(~Vyu1$!z1&1qJb}ipJZlt)JU26{y??6hy&8KfJTa?zJ$Ao5 zy*zzPJtQcsJ!VB` zy=kwwy=z0&h|z0WNU zJx3s|z2$0dJMfKcJ!?!YCWJ%z?mq zJQt8nJy?yDJ5(_3I%~)xy^mOyygNEqy+j(cJRpMeJQ{KYK3LI6y=u4kJQQ^qy%590J-jI8I(rzNJhDB`JAuALJ!T+? zJVRO^y|edIypX%~ykK^DJU$Epybq^#yII1Hy>jB(y?f+kJ({ZI~$+HyJ#Iq|y)}fOJZa*Wy-!>N zy>&>~JjMrKJaLqWyaTqEytcE9JH16kJYCabJd@Bayx~i2Jb$o1yl=P@J{ZP&yo_XE zJ>8tIy!VI;y->D3JeRThJV!x)z0fa%y(J2Wz0!yUy_3?fyyE>XJ@;O4y#<+xymZ3! zye6iBy>9brJ%Hw)y{COGyu2=9JwSa(JA23JJm?rHJe+a|JWJEcCIy$T?>y&-vh zJ$%wZJ#PUQy&6@`yHCOsy*Nuvy{?e4z1U@|JWj^=Jb-+FJrAe!yiJf>y}AXsz53AE zJwhWNy-a|>x(UW^z2y5My+r_5yu-)SJQ_M;Jiw$zJk2sjyoA`SylV)Iz4GgFy*hu~ zyY8dJJk~iCJ#+q_J-&9rJmf8ny=bw7y=#UlxO}sVz245cJiF{VJ^9s~JcssNyaa&} zJ(!rRJ#5VZJkUR-Jqr}9J@ig%J<{KWy)%ubJy2e;JqEKSy>tZ-K75z`Je2*Jy!M5i zJHsl_Jnty~xce{@J*Vo5y_=vxy~8D#I!Ea2Jh&_VyK9yPJ;PfKJ!!J>yqd@Lynq~| zyt-DcJx$*3y`9h@yx+1hJ#Q6ZyhbhgI~VvMJ@R9^J%bn)y_S`pJNNH`yr}%7yeYm3 zJq7w7yk>bTJu#=4y)4I!y%HT#y|l!XJShP4Jg2WvJj!=LJM5CxJ^IL~Jkp#MJsy57 zy^SB4y=Fg|y9XuQypaL|JzFdkz2z{Sy+j+$y~7X3JXj%Oy_O;TyU-}RJ7QFqJwmjB zy=pB|JU8+-yGxIIJJauRn zyln6AJo~rEyAr~ry(%MYy{1J#yJ_W(yI=QGy#?MpJ-}OXy?sz3Ja%7~y`Ef|J5OYy zz0%zSJ({TwKDX6FJHPMhz2+V9y$#J|y}$16JZhC8 zyoJ=Ry)&tnJ?CM)ynx5RJQ7j6yl&P3ycJjoy(s&8yXVSCy`;$Oyd}DQya?ilJ=*{) zJuhXBy`a#TJ&&7lJ=MqBy@c6WJr;E8yZY;bJoHJ@yu3LYJ?uvh zyrm>ay^Q2TIUT+Pz2IMQJ&GYEz3~`4Jv#nfJpdgQyilRMJsQomJT2I!JxEfXyw$V2 zJ@zmVJxM@}z04t0&JzmaHyQ%>;J=y7< zy-#g3JTjOzy<{6Ez2l!dy@Kgny{l93yt{(tJxFltJbVaKyb3Sky{~?XJbFJyhd%y=^jkJn8MkJ;d4zy{)XHJKX{xy|F2NJYj%yJjK*EyviFp zJtQ=Ly}pCAy$ZNcJJlEidy|+kwy(BXUKE<_zJ*X{jJ@_aXJicRvJhm2wy*i5kJlNaFyph2%z3Jz} zJ5ay;x|50Rye3)Gyh*eMz73C4y;D)(I>8ENz4J|iyx||CyAcL`J+-1Tyz_@MJtCA6 zJpsBy;j3IJ!ng^JT|si zy?ZYSJY>*fJyj$pJ&5SBJelI2ypMYly%dWoJ#Sr+J$g+_JgP9OJVQl4JvCVXye=Lk2JBF5gy}&ZDy(Ef=yw;Uqz3O(Ez0o|fJQqPJl23@J+4ZOyezYaJ$`p2JnIpjyqcE^y-b?) zIpGGpJ$=TxJW9qrJlJB7ywL4Fy&Q>;z18gQJVJ>{4^yoq*WJyik=y+py=aw3Jgv{KJkdF)JYnsWy$@pBykdxtJkrM% zy$R~KJ?m$IJD=8Jy%n=^J$2|ayb7&Tysh?;y<0sey@zZByUuJfyoPOHyqmzWy)Li^ zzIF<;y#&)=J1#~JJ>^7z4U7r zyW4+cJ+tTkJOiLsJuJO9vJJPHWq zy%#-Ryyl2fJwy!rS}yghR6JV>I=yl-gPJc+!+z5I!gJOSRrz4KM9Jr8YYy%Q(v zJpo`KyjiEByefkgy};yjy{Q}fyw-luy!WIbJ=MxEyKCE(Im|8xyh!D7yDbcsJ@l*y zJP89KJt}D^Jx&JP?WNJ1ZQYJzHZny|J<$}ay*R*RyN09zyG6Pyyyh_{yt&1^y^H=~yot#iyGjKQy?~XJ zJc-=xJkgS3I}t?&z3VuDyp4fpy@lU(y|5;eJC+Vly*$($y*3WAy`tP;y>Ju`z68q@ zx(55_I|-m!y&oWBJt%6Vz0%xLJi*?OJ3q#5y!Ff4yg0@2JbI7QybVo@JnDA-x<~>>ycMpdJSU!GJxzi+J#~6jJ-ePLJ>B9ez4MsXJAsz= zJY@4vJ*+bjz3|9ey}mC?J?A66JV%6fy(*kTJ#`b&y{TNvJVH0Jy#)9sy&Fx6J;?IV zy!^B3y?eazyoK$Hyy={;A zyYHc*yaE~{Jt??5J#JmGJ>v0Zy>5SDy{eWey;egBYDJ>QxYy-$M$HJ$s&dJZnW)yi0)-J@@*pJtc*Uywy7qy$ax0y)Rs8ypaIdyVqJ#J=V?tyd~kO zJQobRJw>F5yd}H-yhR!}yEL6}y~@CLJ(?3*y{;5wJqV;ByL9#8Jhz5KIHz2<6@y~16My>wTbJvH9Vyuz2& zJiC}!y+F&BJ3RE{ym_l0J=pOEzRU{oyYvv!yh^5vy<4o`J@k)|y%C4@yvN;Ty)Zm( zylcmTy&OH|JlHC3ylYLCJ(cwXzJjxsJ%T_jJB#dhy-kZOyl0yxypO2|J(lt3ycCg{ zJvd0}ywUVmJuC!*z3h9)JbBe1ynR-kJd<^WJUPCXykct)y}}WDyr~5iz3@!4Jq3e6 zJwTrax(6C{y+?Spy8~yvk)nK1nFcJ)ljKy0Ej5J!cowJ51S)y#OGIJz{gT zyxq@9I<17}ylzV=Jz8BpJs7l)J#-0uyi^2Jy|noHJIGYay$BIRz2c^YJmy&_y&kjB zy!yuFxpd8|JyX+AJ$E8Fy^ZTGy=tH*yQ3E;y*x+;z0$=bz1KX2y}}{3J-OAQy={ZJe7i;JP|>6J*41*ykPg7z1-$GyQiy9ymkjwJeHOiJ-K72y_x-&Jmoo}yF(Cv zJu0Tby@{TjJ^c5%yx~{HI+k#y)}V6y)tK#JmHUyz0Q@UJk0bWI~MEDz2qF9JtSy*z2M>_yBm9gy&36q zyqqm2z5nQ^JyBkpyl#S$y`_2_z1S%Ly=vyAJPcZDJxLnRJPS&by!=Cnyil%$yh&ta zy&Zg@yoTNzJh|eZykdfpJ!Z*GJZ@Fkz4Khyyo@71yxLuhJv;yaJ*OadJ4cL;ye?`J;8keycgTKx^&y|yo$_Ty*%f3JXzF;y`03$JsBkMy+Zq+ zya?qIJ%UkVJPQ=3y?Ht|y|*I;y&@ocJX0hAzJe-|yu^bTJdjY6ya3DdyzO25y!c^o zJd-mIJ88s|Je2FsyhVZjJXoRy$Vqhyl`$QJ$qm? zJza1eJ;zCgy3T)yJx?6!5J^J4>JzP+%I0xyj zJfa1cyE+~sy`Z8UJ^pp*z4wg9Jjau}y*RntJeFWdz1#jhz1uI(yA~G4JdSJ*KAB>v zJ({Kly}n)sy>_ery&QB&y#)E;J-)e&JLA@(JUsb*JVYe+y(1nwx`t@cyENmlyg;ro zJ@5nZyq6g#JzM!JJ1x2@JGM*dyjmusIte4ehJS9ZWz2RgJ zJZC?tyNj}+JjpHoymk)6yYCQVJ!oa&y!)DMJVY46J-bxJy{rlJJ3?HyJJ@}*z3dXw zJ*c~4y(Gb$y`Bdoy%T4qy|ftFyv98Uy~eVLx=S`(I}XarJpe7RybmaLy&DX`z1ZYx zJ)K4FLyOzmCIX0=cJU9M{ zJZbWsJW_utJ=}{0J(@%_y+M4Hz1%xRy;V;Jy^~$iy>4}hz0v6hy=41zJvXF#y-tOM zy&*!#y&&+MJ+0@CytCU4JyOuTy`gffgyfG`eJpUxJJ&5naydG4PyyY%DJxk<^J!bnHI}Nl6Jz=1}J7}1EJxm18y+G)oz5fbmx{F{- zJ;|2Ny@vq9J*&&4y`YN>y*7!yyxo+EJr`T6yv8>Cy+g5jy;bxOJq#0Dz2}b?Jgsmo zyxdzmy*uAByaP%$y@O+>I}5mny=2z|z0wfCyfZdLy--7PJgngOJ>O;?KBV0ay%Q4G zJl>*$yG{uMJuGjPy>lw6JP{D&JP;J;gJx zygS>!Ju=iy&!KLy%KesytwyvJ+!AMJuD2hyl=2;JUsLyy<&iTy+%ljy!{V@yy~0;J!*hl zJ?V6-yy`dWyNzC>Jw-Pdy~>swyzxd>ywGYFJ$3Zeye+lmJR}euJX4%fJPPaJh@KzJm(3_JmR%@y)sS*K9`B2J-l@LJQ@EU zJt=jxywBmJz1rU7z0@ACJ>4zVJ>3hqy96GxJExfoJrz?TyYKLZJr#q}yb2|oJ*AHv zJqIlBJYH#Lz1lmFygky_yM~j0I}Op7J>rZOJ;g5sI|!TVyzGFZ+!J$<&|yXl@MJ&)6Tycz99z4*P+yaxZMyg%@Py{VVbya?X= zJ7pM$JzGwSyE)iy~)j9y?|WUJkG*3z0ZRYzAx>OJUgASy~PwEysQjjy%*b#yaseNz4~k8 zyw}UfJ)AI8y~&C&J(O=`ylG6Qy=$%FJm$ytyelJlJtg1WIyVCQyNIu2y?*3Kz0ThUz02&yJ=If|yV{zyJ>?zaz3j7Ay?6&Px~}KbJh-P(J=m8dJvSCa zygImNJemaVyy3-WJ!^*&JPk!Jz37HxJ=9bUJaY6&JuLnEJb7Y#J?C0ZJls>vJG}A% zJ+~HHyzBpkyh=P2Jr#0=Jy&|fJ-c1fygwt&J8z0Gy{<@;y%7C%y#_a~yfzsTy@D*= zyfS$zJ&kadJVm5Py(plqJQv&>Jq@FUykOD?z4rWly(;Xnyh@=DJsKNyJY0d9y`>ch zyjQj;I;kxOzHBR_yme*LyS#SFy{T&5JSZ^qJeMvtKA5w#yDGWMI~8HdJYX;3Jux1Jy+R#a zz0|iKVJqx-mJ$27dJx+-xJWXQMJY*3eJ!~8b zy=Iafy#rZpIdLm@z0nyKyYJWUyk?z&J+PD&J@8kcJcJ1vy`=D0J!E2%yfUXIy&aRC zz2DQCJyng6y@M}xyD{|oJuJIyyhM%iJek_7y?djnJR^d0y$EVLJ%yf!y@DbUJjoZb zyH-fTJ=r*Sx=>LOJv#=jJ;#gnyme~8WJ)$pwyu?S6J|gBylGhgy+8H^eyJZB=ly#BsqJyhHZ zy=8}NI=Lkey`ZbAy_*PrI#3W4y@u_rJJ^Mbym#3?J*^J~y^d&?y_-FzyPw|xymyt~ zJjROfyn8U7yBQ|{y~C;sKHP;k(JyS1iy*Qm#JvFTHya&in zJpP`-yJ$6yygs{&I~ggDy+W05y;3-%I|)_|J-z(rJ0PBkxf|d*z37rsz4^}ry$3o% zy=VwXy=iSWy*ZrqJ6}1Ry(HBGz2v_DJq-A`X{Jm7q;yvthy?d78I(V!eJqmijya&1?JSbfSy}xymy~c4|y$lxr zJg_EtJ*SomJpvH+ygK}lyf=MEy(Jw_yj=%>J-uBdy)qL;y!#c_JU-vHJYdAGJOdJ& zz4<`Lyj_N_J=bpRJ8nRLy?ZSKKC=TBJ>d0AJUzBnJyY0}I!Npgy~ENTJtpfoyNU6y zx*KevJqVM4yVXe`Jzc}^JVe?|Jiy$1ynEO9Jj^q(yDqS%yoNM1JTAluJVthzJ@Kdw zJ&JT?XQyp)oZy8;_Oyt_oU zJ%kjGJPB$iJ!hZQJ)?ZfyJA-cJ=B>Ry#|h$yl5hZJzw|{J!6>1y>!krz2HX4yr|a8 zJ@4`{y-^*DyLW%iJH!{Hy_q?)J-Q!$Jw?OZJXFhsyauD`JbG`mJ+=l4JaUH(ykyd+ zJ=ZfLJ+T7%z3R&bJ%)hUIuRY#J@?qIJh;2jz2OfHJ%gV-J=C}QJV0L@xh+J8y(NHb zy@yVpJGB2WJk6UpJQE1Hyd%|xy?I}kyG7>8y?s{Tyj(YEy+~BAJhnPnJno~2z3nqf zJR>7BJ+rr`Jl405Jx3ZbJ@|dNyr{onJ!Fd`y(7kDJsS$byxMpjJwX!UyvoieJr?SU zI#^t2yV=AQJb@BNJz7m(JAv7+Jin84yc)sTJJVNYyt>aWJVlG|y}|JWJy$b@yvD0b zyrqH{Jsb07ycj+mJ!yGXyC}I1J81ueJ&QH0yho6+ycZvZya}j$Jl1VJz2N>sy|=%b zy-cqeJoHKYJ?xF~z2HqBy(geoyJOYOJ=^i-yEzW$JUNSbJui%qyJ(vRJWx=6Jt^8; zJ^uTny!Kl>y&OU)yum$|y)u*iyyi`|yT~*HJeU;#J-kO6y^%MNyA>OqJKAHgy(zan zz09h@Jan!jy^9k_y&g!Xy-|G=Jy$0zJ$>vEJ7%0YJzZ50ya8vUJ%KfVx7`}DJtZC8 zJRme%y>iP!yo%XVJvwy)y;d4=y=+kEyUDWpz3;)WJE9Gcy%x@Cy+Wvpyxm@3JMT=e zJ2Y`pz4(7dJ%Zwwyb#ooJQksly%k?FJdhlMyPvAy^qLsJ=L(Wy}9!My~yuS zJg|9?JO)CGy(~~PJ#($QypxpcyaE;MynLCrJdB0>Jk7ZXy?I}JJx5WcJ?e%(yVz1< zJw#OrJz}1^yDzwgy>y&`J^q>-z2-A3y&oxoJhTmHyg0^fyM{cPJeHGVy-aqyJf43S zJ+{<`Jxd%Iy>fkdJSNa{yv!@EyCW88x(O13ynToaJ_nZ1JXF~Sy=@sDzSt}~y@8I* zJQtt^yEIJqFF9J%Vb)J@Z6`Jj}+eJwX>WJ%e70yao4xy=$Crz1GSYJ%yi4y-{3N zJsA=Zy|Pr7z2S(ZJIUfZy|f78y#B=}yt?1MJ+Ho1JqFzBJCj#_It`+Yz4^C^y^SXv zJY777yUZ#?J@AP!J;@Ywy*76wJ;nJ^y;gJq7e?Jpw3(Jz}t&HD*vnJx)cqy{0&=y)?fQJvUx&J@f}dy$Q~} zJV$yAy$loPy*#(EJRRDIyrNo$JX%!SyiEvDyn9YxyrylLJ8rrQy&u6%Jc69$z3->8 zJS@2%y%WQ{yhJj`yh%=Oy-snpJhHw_y$^WeJUcd}Jq?FZyID zJ(r2CyW~@mJ-Q{ayrQhJJSsXOJ`uPCJtN*_z4>*(yn?&uJFyHywE}+y(;s3JisGUJ=NzFK3Av#Jvt_oJ5pOxy>}avJQo-R zy%d)|y?7&my(Yxxya9W@ysC0Wy-nz1y?Q+aJqCM&JpCt8y+4r|Ju&>IyiiY1yfzmX zJ*epHJW*{RJhV17J;_H$JjxE_JEY>Zy7EcqJpMG0JgtN=J)6|1J+^N-yxDK+yb>yc zy-Kt&y@rhYJTVypJ{o$HynCiGJmXNNJ(_}-JPyvMJUv<1y>6tzz1iSBy)KhvJ=@rj zI~*zjy<&DTJ>evkJBA*?yBXmDz9aXTy@@HEJuHEnJ$UzZFy;=j{yB0bNy2LoD zJkD7`ydzs@JSN9tJ%9f7yI{2cJ9kb%y`}P=y^fJ8J?~0OJJ;G*>y!6!+JpfiyJ*Z4FyXQM)Jr=gpyy<4}JfG-5 zJy{UzJhib&Jq|mIyxcYoy^~L|y=56kyt^%lyhsQ=y|*wKJ%_GOyrumiy^DsryrcnN zJ#)U*ytU66y;ISdy@V+RJ@|plz4j;cJ=zATJqv0!y>W~ByPQ}0ydf3Sy~K!oy(>Sj zyZ^(XJx0--J@Z7nJlQJQJkbwdyJud;yQ+?wJksI4y?fxcy)y8BykS*{JPiIqy+$0e zJ@CngJ#_o%JofHny=;2Cy=Iw!yrRU9y|j^GJ;jC>JwZRAx|@gIybFZ9y{9Zry?cqP zy+gQ|yg9z#JcK5^y+s@WJZX&!y%X)EJf^ksyqliZyn1@1y?XrFz5Y&6y|pmAJ${HK zJa)R`y@+_JJA$y0y%gmQzVCOmymybu+gJZ&hXI;orgy%^}^y-BeUJ%FaxJ=H_*JBXo0 zJ&$N!yi7icI<7B6y{+(pyqJW|yxk;8JvEFXy{yjylgNTJ@lkA zJXR0-J@6$eIwyz3JLlwoy`E2(JOY$}yd5=y@i8hy-67XyhPZFJex`wyvkr3y}w?My#^Z(JUxz*JhM%^J+vFYJPbH_ zJjvElJl%G7JodwmyU))Uy@Dz9>ykf<+y@q71JX0T+y<4RWJ^z4|z4uV> zyj8BBx)P#*y(N`oyq%`7J$Y}Lyn8(ey|ilhyie|@yp%bRyE@IrI~2VHyudg$y^K5P zJRPTKy(b~2yrvuCJVdRqy3ZsUJf-gMJmblqy>J(@yxdtGJ>mrlJ197wy;|t1JIwYa zz5kMqy+wbeysJxOyhyj^Ju3}1z1jT%yv>`EJ1|lKyeD>MI<%NDz4J}4YJw}Ovyf${uylyH*J$o`Mydk~_z5LPnJPUbmy>S-NJ;v$uyswA* zyqdlMJ*M`GJ!?c%y=UqVJld2%J!cZkJts4Ryu7eOy@YE%y&rq^y-j||ywY~sJm4tB zJQa71JP`F|ynU(=y~_0my}4kAy9&zbJO$Q8qRJzfu8yXvfxyX=qy&~p9ymE*@y>7#gz526>y^JFOJ!F{6 zy%dhxJX!(`y|O)UJG(B5J;*4-JT&A{J*bAbyy6!j>y-4gPJ-XcvTyx;9~y-H-_yRZ%kJv3o4y$>m!y_(0tJ)-fJ zI~|z1yzE}oJg3zdJt!A#y;dJbJ<{`-JpC$Wy(Km-yq7UNy{6w1y+Gk2ytIY&y9eld zJb&x!y(yPy=g7> zJurVxz4pVYyrrSbJb$p!z3cRJJcT^!J@WwBJbzvlz0y-3y=iE-y!pv#z0R-Dyeej# zJ^3Bhyqm|oJ*vH4ydSu%y!APXyonfUyqc!5JXDV2Ja2kiJ@zory!Rueyd}N^y~o;` zy?eq=z3DuAy~xD=JOT*HJ60} zy%`FtJyIwBJlrxuy>+V`y_nbuJ%wUgy34HJc8UfJosByvKN*yfbet zzOxV`J$bm+JnpH?JcCpbzVO98Jposty_#@Qy*nPAJ#EsWy6T)5KBC_ayl&7gJdY@s zy~yjCy$D~kJ-^Y+y#B-tJ!l)1JX!UUJaVbHyeR>{yp)fOz5iy}hVQy=`u>Jn1~AyGo@UJu@kx zy-SnCJUlujyxCNXJg>(Qz2h}FJQiP1J*J%9JOOW#Ji`)0yh!k4yb1N8Iwi|6y~b)o zJ);$8yT?Jt>&-yL2ryyjZdp zJtkqHJljIwJY_cpJ(yrgJ;hjlyiSt&ylnI9JnSfiJ0vWwJ$v8YI)!Zpy=I^< zy#grBJmyxNykt$kJZNjUJY!LsW zy+X2uyyHHhJng8CJgT*`z0~6#yb;(3J>st~y)oUsyy#JgJ!g3jJ;H9`JWH)GJHl>2 zJv}D)y_>|8ybbcPJt&VJy?z^{y|LfhJHN^kyVxaKys~i>z51+TJ$qkNy)8_uz1&9x zKGINNy-wd;J2~gZJjAu5JzYz|y~wp@y&SR*y~8dLJ;>ZtJc81zJtDrUJc%N7Jlh$* zy+nRZz0e9vJta)TyrBeyikVsJ5`z?JtIP_y#9l~J9T^uzQOOaI}tkoz4S#u zJ5^leyQK))yirV{y~eunJf@_NyFm;JBD>VJ^Btayi>9#J*sdqy}3WoJlM>9 zJh)zVy*sd)yi5u|J-lz=J1a|Yy+S~9z1VFPJWzd1Jy1m&yxo^Ey_)GqJW%RsIu9S= zyzu_Sy`^7Ty`SB?Jf@A%kynm(2yjr>dJ#6;0yfRb-y;kEAy_oC_y`eDvJWp@N zypsk!yy$YWyNqvkJ^U;Tyh(h@z3Mduy7BVhyBzn2I~xNfy^UTby^Z4SJSRfvy`-RR zySu@;J(JjMy}|J)y>v6VyfN^(y;n2tJ@N0|Jdh>jyW$4ryuFXMyd@cbIA@2XI}&mn zJD+Z4y)J0!yP9t_JUkaLzL*`5J)y{rypON7JWOB?J%uV5J^A=lJ^ZetJrZ!Ly#NAC zJ#bcKy#Hu>yv@(gJh*;sJ$7~lzD+dIH~~XkyA>Nayi2u;JqE)NzFS{>yx{0+Jcfl+ zJZJN&y{Y`wy>~Hyy^`}KJku)-y!CulJ)930y+{cbKAvylys>G@ya8wTJQ7#GJaCBC zyiaWHJ=QcbJ*}VLycl5=y{K3JJmS~1ynRTAJU2V3yr}GZJ(RbyybBK{J#O8py<*VP zI{eR2Jx`jHy*?eSy>NNXy=i8ay<{|TJfqZeyusgByn6bnJ(&FMJfIrKyMS*Hz1@hK zJ+C>BJX}8(y=db)JE&@;ym%~Hy)k+=J*ts1J-twnyv#mrJz^VVz1*(?zQ*@zy+{fR zy;b5Qy~E*>y>Ed5Ib6rSyxRjjy@hm8yo!>>y&gRgx*NuMJ(axpyv@6_y+lnzz3pK2 zxkTQ#yj=RIx}k_AJzZF*yeh^YI~(0Zy}GJvy?xJSy`TCyyreS>Jg**XJ?gBixnIOl zJ+i3Jyy%7ty^Xc5J&lc`J*F4kytecrJ+PmWy{bNJz1ONbJ%3h>J9X;Ry5ac{y?$m{ zy+weey>2RqJvMNRJ%Pk0J###WyuX6HygkPmy}kUiJ@kDWJ+U`Ez4lz|JW~h-ydrqIMJA}@BJh=y~J8P$&y!+fhJ=@y? zy)kSMy^?4Iy@_(ByW&;Ly&na?JAojly`2D4y`iDQJ(21~z1M4&JMFO~J*WUfJ(+G@ zyGRt?yNDh@y~A@1J<7muy&|RZys-?1z2K#lJg4|_y?#WTy<}MmJ&j->?-z0HP#J!7^T zy}@*Vy^WE*JqT;aJr?%~Jj84>Jx8j|yzcABz4xe7yy(Jnz2GXuy(fb1JB8^bJZ|j# zJQ_QxyJilUC zy<+Wfz2#mGy+tK-IHktII`I~4JTy93ydGoMy+9s7JSkqYJ%QAYyw{DpyybGSyhLgi zJyM`wJz*Eiyc2&+JxJS?z1{>)J)LGoyt|2fJ--~JyrSugJUyyAz417cy_eB4yvfSP zJ(*Z-J)?cbyz5iTJN~kaJR0$pJ*QhgyqtB*y_RKEy_#cyydvE6yKAKwy=ALHJt>T* zyuL~NJY#*EymizPJPxV6yt~h_J=oWCJ-dnnzGE&mJemKOy@FR2yhxCPJ?n@kJi=tt zJs*3gxvJXmyj1JdJOwp!J%W?^JX{Q-JkayHJ(!C=y@Vu@J$d8cJvb}HJ50cqymZrv zJ>JfHrpyIVvOJ+h(| zy$O(yyRG>Xy_J6oy%abFy{sHNJ*vK#ykEnnI>YOUJgBDjyb^>KyTERMI|0lHJz|yl(OoJ=aNqy||A* zJzRfVJ@SC0JIk;wy(zvly>%JBy~n5~y~r>-Jyh2vJm@A>Jxp^#JeU3$yzfasy=sXX zJT(IlJ*Zi?yrX$(yE7X0JTd(Xy<)}YI*)UeJY{JcjBgJ)Fk+y_hHvyhUKIy!cWOy{tHt zy{**3yZ259y{c3=y}^UpJl3zMJWg9Sy(jJEya*j3yzCFVybe#4J;80Byc*iwJYsJh zyi-hBJbK9zy+!A}y&@tsJpKFFx}E%tym~;%J@vlSz5Uv7yqU>RJ&1>#ys8i;JVfO0 zJb#HSyG6f?JrIh!ycUz>Jwn!;y3E69y;EkTJdKR3ykeJZJ;{EuymCFAJ-UHeJt#8? zyi(DpJT6Pdy{kx$y?mL>z0%LYymK@_Jwx5qJl%cBy}j@>z16u1KG$$pz230XJCtoc zJYK9BJpB)Ly12$vz14&8Jo)eHyd|b(J!|zNy`ja*JX;dAye`P*yje<%yohm(yHP)x zy}j5sJ&E(WJwi+qy@_J!ymG~(y??`^y*q$!yv*<@JHAw{JOAPVJqKSJy}8mwy%PD7 zJq=A4Jx=kLyGAshJ#xG#y&sU5Jd*tuyAWJsJchXfzSt7eyy0Jly*J2%z4qdRy=0e( zJIKYtyAek+JaAU&Jdo^Zy)W{2yzmLcJ1lb*y<%CII;?pyx>Q4LygE-6x_%M~y>OMP zy>aPhz2Al0JWCkxJ^#Rry`c_7Js5Dgyhjw^JpaMpydX(RYy!rZ&yv`UFJv~_OJg6)?y@+~*JqtzaJm%aEJkH_xy#k}RyDFJ% zJ&OhBIvfwGy=o%9y~OR-Jz!izyGqDy*u@+yt#0~yETk&y`M@= zy%_fLyq43HJgw~2yh5!Yy<-V_J&pw|J*(UbJ~k2%y@v;RyPCR)z0Uq(Jx7^%JtsRD zJ><)}y~UDWJYB@+yK=rXJuUcvysuqkJ7Miz zJp1R6Jd!ZiJt?bby_G0byaW^%J(o}?JwA@myEI>oz2znbJtoC(I|JKIy?B0dJv0Mj zJ({-BJ?syu}!y?*X4z5HXCy}Ji(?GJyG==JG>}^z4MrrJ1zw5J(KCcJogMvJUF-*JRi`R zz24Jkyg(aQyhi4QyqbcRy`-dMyGWQMy{p!ny*|gtJ9YWzJtwR|yB`XOJEuacy9{`f zy|8fPJmo`zy+Im?y{NJqz09KrJ0V+?ytz=$J$eO9J=9)YJrU~0JqPAvI-EaQy_ZPs zJuU^2z1=xCy@cvHy=)8Vy|h(nJ*)k#y$P%=J?ZVOJW!L7y%(L5yg`?QJmKJey><~U zJ!+W?yE$$%JC+U=I~a>WJ@fV(y{rSgy&NLbJ(}e|J;FK7JJ(h3Inj6lz6+8QJ=wj8 zJ;atQJwMGUy|pt_J?6ZZy}&RSy*o_`y|GFeJvQWAy^2l@J*(}qJcKaAIWXCXy>{or zJTvGIyTZ;{yV$oGz1P}IyM81LJ&u8xyf}y&J$zAHylkHmy{*JJyl^b6JgP$GJRk0Zy$eIxJzA2l zJt2MrJzP+myuvB9ysIYEy#)sjJPg5wJvGd-J<2kRy`s&=y(+h1yl?!MJ;95Hy|sDD zJBmQOyk>63y?^wRJlioRJth!FJ-U07y@A1tygI>`JzMu`JsqG8yZZGQJ4_itJpjky zy!*@6J%&d(ys6dxJc(tzJYd$?yzw`)J4+HpJ+@BuJnH@VJQ?>dyoQBXJW`7uJ9C5yye=ey`$RbJI?T=JmstsJTOR(JVC9wJebV!Jk5Bp zJd*oMJ&I)nJy_2TK5kxfy$OYmJY%v5Jaso9J%DzAy(q8oJkjUoJU9^_J)$tCJ#KxV zJ=29_yo7UQyyY{&Je16xJZ$FBz1W4yJJSX@J#q?Ty~BZ&y+T&~JSND8yAFR8J))m} zy%T9Uy%ld2z0T@4J*rVsy%9l_z1-}dymThLJS|s#z5621yyXJjyOI0cypu5My|Y8# zJjNlwy)OHMJzKszy;dK#y}&2HJACO(Ja_r2JyA~EJ#S0Ky~*5Dy(M1oJt+A}y;Koe zJYlrVy_MHKy_^jsyuI2Yyguxy;EzhJYWV9z1#IbJr#AS zJ&Mb?y+uWeyp;49Jv(nzyv$W8J)U=)y<<~_yosQUywnvXy$Xe3JGRFNzET$}y&taR zJ#_%5yST*wy`0t$JrbNnz34KBy_cfmJz9{|y}_H)Jpe~Gy%BUPz2Kr1y`>1?JoVLm zJzhGty_3JKyAyGJygL=GyfM$JJRou1yDpy2yq<-Yz2h3hy$M+Vy+m^qJ@2>zy+%24 zy{9!^yuk%+J?*DPJyR8BJ-DskhsAyS_r>yfu(AJE4XkJpMAiya=qvJ;nUJJXLjry|Ve1y^D04JV$*^yjiPIz4m5; zI&t{IJSJWrJ#D`(J>9kfy^~YSJ>h4Cy#)y)y#j0ZJ-w*KJ%sJ6yO5-{yv>Dxx(1B3 zypg;gyjK7YyhjLjy*z-lJ-sszJ#{phJ1J$-JR#L&y$E%TJO&&wJr)^eJ+>-`JqF~E zJY?jbz49jtJ$fO^yHm0uJbfjRJmOP1y_SYcy(V%^yN=HHyvzj{Jd`VyJ*maWJcNU| zyn$AJJoMO*JRIK)y%8z{yv0U@J^g3Fy>rFgyxSiIJp>SHJZnPAym_HsJSJ!LJeuwY zz3|KWJDpM&J=Gk$z3_veJfPyqJM}E1yzQ4oyobo`yoFajyK`7lJ$d@vJkYeDJiQ=q zJ(37RJw_>nynicSJ;r>+JrA%UJgRL?J(_`%y&V5yr?fJJwy?Xi5y;-!} zJoo=YJS|@bJ-)r%y1spfJ!#Geygy~S$Sy&u&5JQ*%myE1&JyjDT1y;@6oy}GG}IT;mK zyss*Wz49{LJLkEnybqY5J%a@AJ;LQZy&~F)y>~P`y=a$vJs;6tJ2oZSJPwSRy({s` zJX`gcJp`DTJo7TAJrrimyrpVQJwBEmytYdLy=Vijy?p-`y(XU@yPzT~y-xQ;JZ3jR zJ+A_@yWl^yyrDQMy|9URJ>JtRJ&UJOy*?97Jub2!JGLu_y=YZ7Jj=Q}J)`htxl?rb zy$a;ty)Y(@yvnclJcC)`IxdBQJyNGDy{4)TJm7pHy|wzrJf1VeJc-H&yx!xe2J=(WBy@XxFy)>WMyhW5mJ>w!dJ0`vGJmT(M zJdMqYy|xX0J#tJQyl5pby&j2xy%}qyJi__BJU?fbJ-&cIy%}(pJ-2exye~b;yvu3? zz1NK+y@^nbJpyA{z1!6CyKX<%pkw!O-vU%g!{hdila1U+WfJv}UHwmgMM{JZ#!eZ8m$oIJ9!U%irh z#yrO^c)blV9laed3O#m7`MgEy8NIy0(!5E4kvA^g5xw1CBt4A2eZ91mHN2f9+PkB6 zw>uHl7`|~<@xA5EjlHF7qrJseSiOvZf4v*n$vgrC#J&C0uDv-c-#vCVO}ujVx4mL* zWW5QD%{$xvG`!TgygbeUCp=vF3_gLSV7!LIradCnsJ+9|&^!qT-#tXfD!q2Nr@g>N zk~}@bH@(d;0=zUKMm6={$vN2|c^xg1r=NH9S_dh&`>4yS=vJ zn7vw$YQ2SzlDyN-1w3ng-n@PR!@Qj2R=u$%>bxfAue%94f<5AIKfSmg0=;Gp;k(2d zKs!IBK|ZH2jy$IuO1yw$(Fz&x7=JG-1ue?9Y^3_Gj2fjqJ3g*|&)ygihx zcRfFUN9lhxQ%Db`Dusi~~dc0SSzP;Kh8@*LnN1ii>?_B&*< z&Ab5Gi#-X(9=rSv9KKBd%e;pZ$GsKm#yrITI6Oh#EWEF86h4E67(GNy&pjwhth`rW z;=Iz-Wj)jLWN|PehCKa=JiIa8U_GiB&pqy|DZOrcYdeg`gFP`{ zhP@}15j`T}k~>s*Y&>RW|GdLSh&sZ;GCg@MV!h*-;=EPq>b#D*3q9&Fa=oPkK)pc^ z;=B~}Sv&yqK|R=`)V!y{AG^gLH9a1acD?3>k3BIAYCS0qz&(Ju#yxt3 z-Mp!gbv-98fV~XK-MffpjJ+eyu)ILBQM~~Tfjw2oygbY)54_`M_PtLqy*v_~Z@j7O z9zAeXV>||Xf<2xE!92P;u{`33s6F1L_B@tR!n}wwg*-U!AXUC8@wD9kv(g)61|O?mp!adRXplNmphjRP`#Id ze7r>=(LLDPHM^HA7(LG%3qEYoygaf+KD<!K=7`;N&ZM>{w5WOs~ zkv+tRmA%(ik2ta_WxHUvo4pHWaJ`Ncgu90mv%Kn=YCR!V13tmO$GrHp#k{O%RJ}EP z|2tPz=etD}I=jUMWxZVO5k2^1Bt5TmDLuILsXgEV`Mo#wZasUs#65ed(>$BG+B{ab zxjl_w4n54Vw!P^j!@Ld&u|58)X+29*$-FPQ_q%*5i9PYPlsw*lh`ef6*Su@;wYn0Dl04^C4?VlFKs_BGjy;S`#=Wj`d_Ck=!92I1TfFS7 z3%!FRFTALkhdi*o-n=4<ZkvysgraU%$C%x(z{JjMGc)iWD zti6z0K0J?)gT0`-!#$6h13lKfB0M_&aJ_Ti*1beXoV%Ine7!GB1-uD?3cL}U$i3+e z6+8^mioM*qwmsXuNWJpJ6TLS#v^<@})jhm-F1@oOD?B(=WIeeub3Jj)YduJ{V7(@$ zguR74{5%R=8oY@hh`ZI14n21jRJ%schCGJs3p^ASp}a?0ay`+ixIGuK+C5ID)Vuus zC%tsKF1 z6}_FpFTM#u*Sp3N&%28-fIacaBRy^sguGM3(!Bfe7d=BhA-uim?YuG0n>}c5DLre) znLU58*S(S=#yzPQ>b%KLOt}iIw7j#}Sv&~Zqr8sNn>_)n8@*%z-Mb}d;Jvxhuswno z2R+?JhrAtpfW2Gbl|7-Ft-MPXI=mV{fw_Sk6+JZ*hrOsK1U%w`Z9EMHhCNd-ay-8k z8NKAt=)G|pp1r`$wY}y({yd)bx4oz`<~(Bqr#+Q3^SmiHOT9#ow>wce_B`4Q20c^Y z$-Nu>3%sdCrafC5V7!0(v^>H}NIjV8l)Q2==)C;_f<1axxIK=kn7p}vJ-xo%2)$Fl z?z{}*Yr588;yj+WI6Sqg>bxm!b9Cp?COioL5*13d*dZ9UAPLb@Xht-F6$SG|kgRlGY21il0c zzC3p2@w{Q%b3K|JKD;6z_Pv=Jojj05@;qqi2fSN&A3bUnjJzJkCOy})Jv*8Yr@b8V z`#g8Pv^~NsU%U|fBR$yEhP^k5l)ca4T)kt8620Dd1wGgcBR$^QZ@n-L61_3r*FCOo zsy(XQ<-5&la=rZcvOUvp5xmTq!#c@yySj|KTf7N}xV^|QEWI!5-MpPxAia%jp}aKc zOFgR$lsvoGa=g3cySqY}M7+6qmArv6^}E3RkG!uW#J#_0ygTei^F0laSv=F|Z9NF< z1wCuAF}y;$hCQies=aeff4yl)ZM_-u6g|v>a=oai6uf8E$-I#{rM!cz96ijHmOX-4 znLG%ZrM)J$4!xtlr8)ditvtWMr#)Nb6+66uM?HBN9XwJq1iiecmOT;R=RN#3m%JIn z1itY7I=!qd!92x>!n}xiusrWUD?M8|x4a(Wq&+Qv+&p;fv^(=@(YyYUB|GDe&O8f<2M0%RFVgYrJqK zjJyi>COzOpfxV^(K|OcXDLj`^YdkV%06jtJy}dAGCXE> ztvysmBR!8h{=5VXg}sVUmAx3M^t%mEXS}#HBRv7Cj6KW~mb~_+4!zK213mvi&AfA< zh`TWLZ#}NVvAc!in7i;Qjl9FSg}XXFOgv}IJH4)$jJ=3h**u_UfIVYx#=SiGdp*7> zNIZJ#^*opS&^$9?7`-jEj6FEJ!@UHXuDw*QhCTWvXgyGJEj=MttUX24l|5MW`aL}a zc|B3!mc7gPz&t;HF1+Dm0lq$uay|D~v^-NaUA>1FmOV@Ax4buD2)$vGojtc&D7-i{ zGrbEz>AR)j(!6?7#J#4XdOd?Hl)V<7L_LYd6+I#wp}ptiGQFWV3%#$eA3feTPCbs! z>pWYbI7CnvQbG`R1dAu=>PrNW*4H2tA9uUcEGq);+Y?pU64o4mM%y1QQiQ@!Q_f;@OgIK5PGdc72$z&s*{z&un*d%T-kx4mzX zLOrptH#}mtaJ>5|cf2!tusXSH_dGaqIJ`>*hdmiIi#@Rz2|Zl2$-9tZ&^;hsmOKEx zlRaB!pgl*ZDLuV-)H}2a zWjeo`uRUKn*SsMh7`>|^uDmE0j6K5sSiQBC)4WLz9X;+7jXkM*-o1Va!@L1N?mDrf zDZERnFTKzAlRZ1j2Rwv`%RGsl=e%hAiX(NOFe<0 zt~=I5C_OU`sXM6C=R9*)%ROFtZ@oWHmc7@V{W>mpw!EXQq`kopIz0hgPd%1i2R^1x z89M?Rbv!H_(!3OUBR#BP&%M}<_PclpFuE0gK|PL~g}nhPeL8YRG(GrmO1(t>`v zxI06n!MrcCFg#({89jDnDm^G$yu4EvBR!v4x;TZiIKAC(1ieV+B)!bSPrVL!p}iAy zP`$I*IK4x(U%lYQg1p}KfV^C`aXgvWEAR#i&bl7#x4kwX zx4hJ@b-g0!Iz6E`kG)tU8NBGsnY_zURXk7U6T6&BWxRIR7d;skiaaX5nLL2gT)ZPI zMLg4#%)AWk?z=vd$h_A#0=?(0jXWPHAUq$dTD{HY3cZbbnLRA}lf4OyN4%yHg1zA~ z>%82PRXuojdAqp79K8*<#XY|!&OQ9Z^}9cZPrWn4g}s()fV~0?DLn%OsJz%?*t~XY z?Y!gN{5-Nf=sf%-M7?gzyF4qP;TZ zR6Lm)SUvN@@4Mp&sJ-F_bvxhdwY?l8lD&YxB)y_N0X|Zfkvw*#fjmU;3p`-8wmP#B zT)kJ;I6Jf>tUbO@>OF^nU%buElsp@M9z7?Xs6EZ3nmhpn$-I?hq`Qimg*^0Np*`rG ziM?lT^}N^lkUe?L9lTJITs>)O%{*=ao;+n|cf2+DQ@uAd-Mu}-%)Q$6uRRH_T{|k? zQ#?8K>%H|TNxYkY*gS@+v$`G1SiBl6T)o4FV7!7@u05pea6PRswmqRIP(6C^Aw7SQ zQ9412rq`U?EBfQ4MI=voop*<0BOFjN=1wDU) zC%M8aKfMSL{k#A&-n?80g}KH%hP|sQUOo4EaJ^7qiamjUv%GhT`?_A%lD%&P3%wv| ze>{_8iM(QbmbmIpV!ikFjlD+yqC6%f7rka)XS}`+v%Ps}-a8U~!Mu#I7Cos2t-Ua| zNIlY(13q0DD!e?=jy?0hsXUXyaXsIs_&hLydOg3`8M|)t9zBD9D!qSd4ZT_^$h@Xu z7Cd4$5I*L;1U_QI1--^b06plBkUDzv2|aK%(!3)4A3m4ACOuRu6+N~zM!jfkB|XFy z1-;Z6%RL3>@w^h$lsy`t+dRg-6}=%?jl)dcL zragMQ&ppbLioN2x>AT{jo;%tFfJv~+&WIg&@sXTJ93Oq#oExvelUA_KsE=zf4WU=H9cQUT)g+$T|M>FJUwkq0KIznB0U7^&pk=u z620%mhdm^A8@;FqwmrZjfIX7kxjZ~N7(9_1&AnHpsJurAcfH^?tG#N<)Vv&Ul0ANj zAH7e!F1?a2*}PE$NxSA-i9OvAYs=MLh2X1iQN#alOvc#JnX)J-otOHa$lPNjw*{7CrYPrM;5wYCRxmwLJAO z8a=9Gi@n);Vm-OIsyx1SxIGe|WW6+N89hz-+PrXIxIBTQAH8W!G`)TcalHXX@;qNO zVZFN3w!K~k=)7@a2tDJOhrIPBhdnHpqC42@pS&!!VZEpDp}eIhCB1}&g1qNV8$GY2 zP`t1&xxKtHx4eZcJ-vZ%j5|dGP(4@Kzddc6syw>o5W9^DC_QVpOFdMi-Mmu&2EB}n zp}khI6FlJwygcIWD!nkwsXRseb#DiN4&)!OuhPEguPy>h&-o&1HE*=*E?kbhdiv&pFFlUV?9q^$UX8rG`(p&lsgD! zv^*h=a=giVpS|dUMn3n@w!D((-#l)~dNkUa)$*1hi3z&&Mk^gO1O?LDf!zdbg|C_U8dw>{jXnLQnRGQE<; zGd-p9y*rlTn>^msYCE7{Ha*t$&pS3Sj=j#DIK2fG|GgkXE{k{yS5WS;?1w9Ckdp$pWNj$Ov+dNw#XT1?LfW0|_=)A{cwY^HB z!@WEHs69(;3q2H0o4vgjmc7?j13gh2zPs&1-n}v0fxIKMYrK-RcD=&zkUg=p8$4>o zF+5h@5j{7auD$zwF1~!nc|Chy4!st%YQ6qJGrc4EQ9HCuM7>bV)IEUT3qG9z{Jh$% z5WUKthtUS#P`#cnwQ@x>Dn>}kod^}MkPCS$luRG`aF}&mwq`ekS z^1M_tEWCjS&%H~Cy1cI2W4z1N$UL6W0lkBJlRVBhn>{-etUW;!W;>qpZ9TN12c3qA@|ay&y#m_3p82)!I8IK97duD$sa&OIt%raOc*96U!t zgS{!NF1+d)$Go=p8NDBDOubV&g}fFzL%d=IHNAkmgT2UXZ#_jf3O)be1HG5B2R#Q4 zjJ@awx;#e+jJ;)+sk|pk%{_6=lD%O0PCaXYbUpGuWxQ7e>AcBOCp}A9l)acn0=?(p zDLQqxAHCwZF1(sptUa-QAwBx2MLn4bY&}j3=)4?E>%4X40=@V^g}Ss+oxSEaFg@6` zFulj7Up->Vh`j#BP&_-(c)U8O&^_W`Z9T43UA^D+oxJMH1ihZ$gS&~GEj{;QlDw93 zbG(yN*1hc(mAZeic{_|_p}eVIg+1&mpuC_BlfAdqwLRGAZ$0uXV!aLJ;=N@pXzOcfAP4jy?9O(7XhH=enjCjy-Drmpr+a zMm;3o;=NR zcD>#gm_5bvK)r5-0X+tBRy>Eq-Mkx>1HK^OzPm{3hCPuW_q;p@iM-d`hrJ7xEj?S* zp*?$~TRqZf{yVl6j6E>)`MQ*Q5<5)Eh`el@5j^jO0lj&G6}>Vql{^L<=)7_}Iy|MG zvAmL^?7UmP3cm3LExql?z&%0M&b%heFTISnB)ynkL%s7njlF*~7`-N7oxN^rrM-L@ zXgy&%2)*OMiM(-1&b^Gff<2H2@;!*GCOzl30zD}bYCA7-+Pv`h4881;9=(}2%e=Jj zEIc^V2R#4T0X=6_t-Lcxfjxs~n!Li;p}f~uJUsyafj#xBIXu*pVt6PrVEV zp1pUAk-c>++PugphCLfMbiF@?RlV~kt~~wS@;f0?8oe2JsJ$PXoxM-4^gEQ2j6Gp! zjXdfDdptZb3p)(+S-t*V=Dg{A&%NCkQoP|x*}RPsEIkzQqCLv;61@hXpuJfvA3Pqk z20WPVc_KfS#>p}lAphde2Qlf8{5*gI@E%RSZ#X1yWQ zC%w{vqP(l`4LU0K)qF9!95u>mOa+MGQ5jU1w534XuT0!{XA&Auf4L66}|P6 zz`OuX`@Em*oxIIeioF=}X+1*M2E5(`xx4h^p}chRwL2j^3O+XwA-W#z3_bJ=#=3lt z96fJ|dA*0Wbv==hRXuxniaZ^m?!6SZZ@g7LJ3Xp2B0Ua%D!dYKp}hRxNjywp2)l-l z`#rIK>%2vWh&}QzyF4E}4?7;$sy!yb9K5S4`Mk=S3Oz^e;ko;zx_N4%I*vOJl_MLq4Nm^=XTX+1{9mAv5+Dm{cpGCgDho4k}m zU_3~(5j_{BT|G;{96gWcD81q*ZavbN={)epr#-25e!Ud%d_A)fN4>|YfIL$TO}yPm zH$5ahiM?Y_vAyMafjxfb&pV@}I=zx=-8%($Iz7cGRlOR*nY^{K(Y>Lv?mX$KH9TS_ zQav2BvOStBQ#^ublDzOijlH+Q`#mSF4?T>-G`$?DwY@B6b~|)%8$I8}2))O9oI6_R z-Mp2vHob#(jXEl8qrI>o_d10)gFP_?hdiM-Pd(nu4n4MLlfBXsu)LKQ8oeMEw7l0u z8a=_jkG)DYaJ@fRK0R&nm^_hH;5&-5UA@g5A-#GxsXe5a`@J%)`#gjq9X;nOCOz6eAv|XxxxCKg)jZ6mL_PLgqr9%J#XS+O>O5VsaJ_ABwLHUv z|2*?%e?7@E&OHQHay`@|Nxg^ZvON>1&AlG1Gd)j-KfG63?>xj;Hax+?j6IjqJH4Fq z%RIp?EW2lLDm{ia2Rwl-O*{#XdOOe4Vm)vQ**khsk3H|=jlB!-vpjwroIS-1n!Fwk zqPa39(7eygs6E73KD{iCnY~}s_C1g+kv*46f;=5g2tD%qygYCL20bPN&but!SUpo1 zYdx1#6g~Ln9zBbzxV#L^A-gDB6g{ZQW;_{|3p|&+dcEE*1H2q2Ts;LHFTF82FTHxl z)IAUMx4n&SnLTdAM!oRHV!dpVHaw4~?>k9P(7azeEwlU*}VS6J3N|*ojoHq-@UTnjlD2j?YwP}w7j+BbUnp8YCJu8480-II=#c3 zeLMoJXFX=jPrZK@tUZ@&O1xo;`8=5rSiSLsi96xWPQA~uYP>Xe`n=Sl8NK>mN4 zuRE#B0KKlj*F3+palPbZ1U;H2$GsXt5WVDtc0Gm9tUb{2jJ+I(jJ-ob_B@r+<2pGB zjk}dqTf9At1H3}#7roxb-n@$T8ogY{gFV|Ei@hMNzddI-xjlV=YdyybCcR=-mp#B! zQoRi#+dZZ?%)KX8F}*-|mOV%!xV;I7AiY_0QoP<=;=Lq?WxHB+ySilt-L^P3q1$OUcEG$YrC~$|Gkrmi92f%u)K1IwLR$= z7(M9iZafP^>O7|%b368c=RNV_pgoRDm}UIK)v>3h`lsV z$~{BL&pn9xJ-w{t+Pulu=Dd`mcRl3yojlpom^_t?RXn8(+PiD=7`+Z9*1ch`g1vsj z3_WY)nLI1)iamDo3B4RK3O%Yf0llW}KD{et(Y@c=ExoWzy}gZyF+FH&TRkzb<~%`= zNIIeR(!5qycfEQoalM|E;=DM2KD`5(rM=q>zP(kLy}PI1fV~q=ue|*QKRg`jAHA%4 zHofOlN<8XKt-Q{!ue}Gus6C>kx;$=~-aL?g9=w%7vb>_J;k>#5ioHD0&b?CG0ln>i zW<5>10X_2q;XIv|Jv}U=%)N5@K|RbI9zNt>syrtMa6L*tgFG!BBR%%UHoa$vJ-fPp zL_L%{MLjI#CcSbq-#cTWy}L%RzPvh@3O&}b#XPOt0luCTQ$0o(mONnG4mmzIhdmE{ zy*#6BxIAbt`aC{h1wPxbBs|fO!97^Lv%RUkIXqI(E4?^6I6WS=+B`q7l)R`}d_5XD z4!t5~D!tDpLB0GYMLoW}|Gf_f&^sfD z(L5~(hrA4`Fub1(5-o2DO1-+qDLA_8{M7@mNFg(Pb_`8tSpS>0lEIh_P zP`re8*}Y~LJ3YE~VZGNt|2u5fsyw}ZK|Ce%5ImIKs6E@BExq|Oqq?lNU%mBki9DGU z1U*HIP`XwLlf78$puI)C!#(t^+}AyS%m&Q@lL7cD!ho$-5eD zKD|^oIy{p%4?S28i#?a|_B(9@aXsx{6+KK$V?8vRH9hvSGrdFwp1l^>8NCfEe!a`T ztUMW{A3b>FFgzFahP-!3x4a*8h&@K{FFhkF3qAf4w7o2SPP+t8e?8`67Cb4{XuN6^ zo;-Lce!N@Gkvtf5ioGtat2;ISOTH!|H9fyb2E7T?)jJxFpFK;*=Dp`9jJ@2NH$Aq$ z>^-|+!aN?gU_BPujXYHwk3Hs$DL0SxX+0SL>%1g9`@Bm4`n#2@Q@w}7FFg`k&Adn- z(K;GN3cZ8ag1tl3syzHGF}^D&_q=H3cRR7kpuHyVq`Zx(pS=*!qCJ3nDLpynwLEC^ zV!K&pLcO?tKs`RmPrY?-YCVmdD82tPBE9!!sl6!HPrV{=nLRLq2fZlMJH1EruR8$h z3%!jfR=sL{`aOS-GQ4*53_Q=Q?7L`Htvsq5HN1TQUOldQjJyQWoIRGZI=u=wS3Rt? z9zNh_2EDvHay?nkcfE%W0X#XM96XLg20b`!g}h(hgS$F=buBRsGtFTAQ>P(6nJ zjy2XeZ0A6B)wgB z0X_StvAlx3EIo#IRK0l>A3fJaPQ7P}7`<++P`wo}1wFG6>Gd(2eUAzYa6Fg2Q%{%XZFue5f_dG*d$-PQy8$BOq!n`%H zp*@F%fW4||p}VZ@W<6Z5Pd%CwIy-RELp_i`wLBu`B|XX1F+3j9KD}ufWIZ=q=Do)q zq&?gFK}Ll)NJ%i#&f1hP~T8^*kJdRJ_AS^*o~6S3T9@gFW+T`917Va=a70j6E!) zyF4Wf{yZnO^u2dkj=gn| z&ppL>LOgp7hPv-J(7hO5Cf zzr1RIk2`fi7`;k~2fP3?DZL~3;XPsukiEkQyFFF6D!pN?xIB&mq&;>B9Xt%qvpw4R zX}!WlD7>%_Evsm9XeyU^}Lq! zlf3PF$vh>prakC_p**l&bG?JpeLS<|hQ02>xjj{Wh`oRq7`u zEWL}bUc5#-n!V5~g1tJy8@m?9YrOjnB)jY)$-Ccm!M#kRIz4OLxjn~Th&_aWMZ0}r zjJ=1M5WPmrAw4A9ue^4?^SrT+@Vp;!lD&tel)RI^NIe!L$2$#^rMx+0fjw=%Grfc2 z?Y!9=g*?M8qrB4-Cp{4YUOghjzPl8_nY`Yx6Ft++m%Wzx483j6vOJKw-o3=4_Pv1| z)VxJ{NxiW)JiTj%M?KbV5WZ4SQ9Q{%Bs_aO9zAOUzB?x(xH)@tn!N>B4!v>!Hocd_ zslA?c;5|*iB)sZH;JYY4$2%l5GCYK=^t>gClRawrR6V_Q89jMIAH9+6JH3Ed!93$Z z1HAQp);$r!#ydNRS-r^ANO4rEmA%@g$-E*_X}zcZioAFi#XQ%pdA)d#KfH^y zhdOp`hC3M=zC9-+M?H#_$h=F*fxUo7kUbFTn!Fxo)ICydk-c}8 z8a*|KXFR}plRPXt#XVIL*gWM@YP*cbLcIyLhCQ`xw>#t-RJ?M{Q$43m$vxAEhCPk# zXT6u_tvyc*Vms02UOoN&9J`*tQ@wW5vpqDrQaqQo3%yt6f;?(l1H7N(Pd(wToV<$I zC_Qf_Y`Y>Z_q?Vv2E8w#4m_7q-aMuM_&eUj4!Y{$6g&V$dp&lq4ZTq^C_0>*lD)<1 z>bu@#F1*pP6TJP;G(GVSBs=Ia^F0BKojm&%UcHJ^O*=U`IXwmgCA|rxEWPSa(mh1e z%Dg5U2fTh=G`m#PNIYt>A-(Kj96cjx<2-`yt-MOkvc2`~PdbdqCA{~;`n)OZFFh${u|X}sC*4?VP?6+Ta( z>bwz%p*!-i8ohu7Upbh;&`2fX1wv_0{r$vllxgFWZ*j6JgO z_&vOiCA^lZT0PPclD&A=4!zH3h`c6XZM~Iwuf2g^7Q7M9#XKnYR6X`C)jhqAjXf1z z`8;}un7wpdSUop)>O7P1GQHy9%e>6noxGh}@jPv_Ilb)x{5%uWy*xC+C_Hfu**s5C zox8w#*uB4P3_TYerajhcy1Lcu{5)Vu0z4z0i9MC2%RHd-E^$;+guVJwf4padb-ic`sy!@%tvoAOtGpcCj6F!;Fg@y*k-brLnLO|XN4#^Y zkUjj4&OL+NFuaZxe?2tjHoeI6t-Q3mZ9Vu*JiJd&2R*i420UAz(>syanYy}bSi!aZoXlD*Ksbv5D!u5n?>j#Lfjpwki#%tglfAOb4?Tvf z-#qvpLcOY)1H6kNjy&Dl;ysd*V7*eLB)ja=Q@x5kg1v$x+`ahsh&{}gEIp|95t-PNfd^{SUJ3Y#7jyv4ao;`iIxIOJcPd&y| zwLHjpCB1Z(H9gpLg*~~u?mW{2oI4w>0zI1izCFp-3cRV8l|5n=Fuf&4bG@*&oV+|A zhrA#nTs`PrXtJ-aKR3N<6r0-n?54>Arf<5^19X`)0e?3p>NWGOtb-hOICcO%y zfIWgMp}d8kZoTfba|#l88JRy`wYwY(iu<2+2ttGykdg}wBwlf7Hsggx5vIJ{ay zAU!uc)4kN&Jv}O<{JfC zgS=t^u)I(!sl9tzNxcqrWj#MGeLY%IUp+ihjJ;6LNIk5tTs@ffggvTrW<5u?wY&eF z96f$W2tCLo+`Z@20KR0}mb~l9fV{NCPP?v($+~9NnLKlLcsvSyyS@5N$vqi$~F{sJz6mbUn-)wmsa65WR*rmpz`5d%OyNKs_?8 zn!TwG*u0zXnLPpnem&U8@*D*4!yzpoI1fKWIP*7K)iqhsJy!KjXil+ zxV*qM3cZg&TD%r~Ts^axemv2L@w=}he!W13iajpq2|Qu!89X0sN#Jtl&L_H}LP`%M*`#fWE0X_a*>Adt{8#+KWO1v77EWJm&C_Vgs z1HGhgq`j6~&pQr`%{|TC$h|(*IJ*e%#k~DHFujG`^t|LgFFgm7y*xU&OudxMYdwXJ zjlH9HhCQZfEWA(s0lDjrk~<$MW4%#iC_KzzC_H1VzCB>Ti9I;xcD=~)J-jy8CcXKU zvO73#sl5&6)Vz6*&Aks4ZM}wZSiNXR0=>r5;k%d|Ts+d;2R)hRw>^!ng}nD*yuCUw z+dYZuguQdr0=)r?5j|^P#XQJB(>&T1AH4*prak8B1wGh$B|h2)jJ?>)CB18l zJUtA}Wj)(UB0WWq)VoKfioN#GO}&AqTRMm@0Jlf5EXM7?!VDm^+sC%s882|WvM?7dMXjXcmbn7bb% z=)7g@+B|Fr3ccAn6}+8(7`+ez!MzSCi9C_yT0LdiFFW3$nmz3lZ@o}!6+I{NuRUbZ z0zEcY|2%fUV!h1o89nSQgFTjJ%DvcjDm)rsFFi;y$2}`AS3S@^{5<4mh&@FNPdp?r zw!DdZoJ^cy*-tDXT6`t1HB1r9zDshlsg}5y}MTI{JRVkFT6_@ zTRrUsuDt<$u)N0%a=m=eqCKvY06k|zr9A`^^1DQ_kUX+hWIb@1NIWHygFOM$%RI3r z_Pe0EYQ0A|A3Eb(JUy5Xp1p8-Ej!yOZauO(YrSy)(mhU5OTC;XBD}^QSUp=5pgSXP zi#!=`lf{k+o;>ATjTM7vmIUp+BhzP+N_8a?g)X1!b++r3OkGP-o^T0JFg z8okmD4n0Y&mc7juo4vKQoIM3wnLSm^S#P=fV?j}5ZXGrhW9y*q3)nY*Ab$GlK)%sj2D5xp#&*}TI@tvxUEi#%H*k-SY| z1U?KfnZ1%0sXf{&S3K(*C_TdbGd+70@Vw#D{yid_rahkWUOli^EIqA!!MuapA3fK0 z_q=MBx4aGA06R5E20U2T zB0cBR8N1~hD!mVAT)ldwTD`sQ2t9Sz;Ju6Ti9Hm-WxO8WXgyKfw>-3P zhCK`8Grf3UbUkBKB)qO{sJ(51Bs_ZosXf%0alK;RYP<`a=TIa?L6ru`n|^bqCBW-W4wXD3q0<$jJ%*> z4?Bq~f<1V98a=@~FFkJHu)NuCYCV4zP(hw?K^4C z`@Myw#ymu_TfI-W4Lr6mPCdU-&OGi^aJ)aNeZ9q28NM3&D?N;+E4`pRJ3Y|T;XSMZ z96TUA2)z(`l)WgCJH7Rc%e?{FBE6QA?!1I8$vj;~SiMZ%$UODvbG_x|nY+9!);&x> zCO%+41inXoe?7%Uc|4q8|2*fR9z7;K#J$o7(>q6(!M!oOQN4>l_dHj@SUoRA4n4W% zi9GNhn?2TR=afkc|DIV8$386B|S26^1OW8guUK-Gd(8FlD*dA zy1cJ3qC6CE;60{=useshsXUe&M!Zhr1HQ_;mOVrfUp*Js(Y*~%_B;vQjlK7f;l1id znZ5gk7`+`8{k;9%YCE&Oy}i;yV!f=9wmhb;&pRL9RJ?E8)Vx3cw!NdRjJlL0v^|8p z2|WT4M7){kw!sPCT8nEIkvOC%t`wTs>urYrLC0^}G!?Z#{KniM-|BmAo%>dp%peGCdBh z2)(hYY&#ptg1u_|`8@xMhdhi_8NFt{y}bj{#Jt|b2R;^!LA=*806pSCGd*tmYrPmL zjXc?B0=)~cB0WG`AH3i(8NA0(@4F$w1idc5k3EKc zoI9xgn!Hn^-#gcPr@amN$vt3(slBX)dp(IPnmnBb*}UyEu)IY5yu5%@YrUQ?>Ah24 zT|G@k;5*UkIlTwp9z1bZiM^rA+Pu3Fh`oP!uDouv7CfMPZ@j^xzCB+qY`hc%jlE+f zhrI*li#-9SP`zx4R=xMJhrOHNemy%aEj$`qpSvM*U_EZ{cRPM)!Muv-7QOa1p}gU! zLA(}Uh&}E|mp!dzX1yRs$2@Q(Ha&Fg61`|f2)tqK*F0v<#ysrMYQ6uiOgeNA{5*`8 zalJCLlD*4g!MxJ4m%Qhbio92-6291e!92ohU%lPF{yY#ig*@+nLp|SW7(GZN(>uB@ zn!UoYAHB0WH@@ur*1Kb>NImEzTfF{UqP^QlIz8&E&b-?smOYjt=RAmCX+3eOi@oY> zySy|r54;st#Jsc*2|O?6ZaqRN~K*j6K;P^F8jD-#p#rmAw*IK)vj++`WPczP-CwtGq=Kr@duf_C5a* z^}JFxg+0Bp9lo&2p*)?D%ssh8sX2~0j=gbu%e-#exxEa6u01Yx7QILfvARKt zVm-b&U^)$t6ut4r0X;@ID!m=jDLv$}sXQl`ZM~QiMLWf$5j~AEQN7BFg*{pW1HI~k zhrB6!X1()=X}y7pySu#yuDyv1>$}?g-MomZPQ7KGMZJr$0X(IGF+E__g}o&Bh&%&t zJUzWei9MGVg*-~J0zIe37QF0Ly}hm%4n69Pj=d>Xcs*z}AUzmfH#}HBlsx^ag*``{ zwmqzePrbD)uRQK7*gYjAZ#)CUvpgGWYdl;EJUvTmvb@n}l)aMK=RMv)Q@o_CTfE=& zhP*);zq~XpJ-jqop*+B30liIal08Ix)4aXXhCGG^&_vqC8kStvm;eQoX}BzC45P(K$~5 zqdeDb0liX*e?31wU%2-|F};#DL_Kw5d_2v?|2;20YrR!Pu)QR+SG{5*GP@{XtvlFx zjy!i#HatvX|2&B>n?1XE_`NNoJUx}aJUnP2{=9<0;W{1!g}ec{V7)ONiM>MALOnr@ zL%m+Vti8RUz&-YY$UWSJ;XUA+^*umzQoWBAYrWoZ(!3*YqC1E9SUm`un7#3RBs@xK zusnsY^}V=v+C3HYm%SP5A--Uk06h%sk-IGcqdUUX&%LCRm_3*V96fkf&b%Ax0lnkM zR=p+w?7Zo{W<4e@`#X>ZB|O|+Iy@f?fV~;7wY?SzYrJJFYQ0Ug89OAp!M&30OuXe^ z)jY}nPdqwNdOZqpw>5)eHa+E`$hwHT2R&6ao;)Su z@jEA37(Jb@zPxoXh&}L2aXYVGt-7)eUcE?S6uvo9CA|bKpFOy|D!f+$X+5fzK|O~- z20ohuWxarQ3Ot{wS-Vcy=)BDDKfNOvuDt=k%Dmv7MLibJk39;K(7n?C)4YTUKfFdl z^}B+agFWf=(7d>xYdx4(s=Pya<-CNMkUhUfu|4HUg*}iyox4fH4?VcAsyxt}vb}o{ zv^}R2g1wzNmb`V}@H{U_s6F=Q1wB-Mvc2l%zrAgFC_Ed^gguh>6un}Ji#(Bzt39IH z9=$}qu)Dg@XS_f-m^<^gZ@s<<6TS9X{kyk_&OG}KHa#DYRXwDh^F1#Fq`egxa=m+l z*}Nrxn!E&^Ks<=5u{nZ4&OH~`${*mg*&9bGd*-iAH9?rHa%18H@!=+;k~wD zw>z>m=RC!%96ds|`MrTesXc^a(>=Pdm%Il2GQF097rax9DLnzi*uBmuH$C>pZoB*u zXFS0UcRl%}=ey%|TfB~fC_M-%MLc7qggwFkl{|?T^gQLLd_A#b<2xuij=f;T(>&x5 z;JyCtojq`draV7_#k^dhpuK)GfxUODD!msa!o1DU`8?=gl|7f*us!}Jn7zqmc)d=( zlD&Q=+Por*k-Qx3 z=DeAec)ZEc5WPGfpgiCt(!2^(kiE0Qr@YoWin=mRxIM^pvOKz9Sv*-2@;pwBnmt4a zA3cBloxCuU6TG&A8@-~em%1{Y;k{NRAU%`12Rv2|M7;=vnmy4Ge?8i;U_F@a47<}< zoH}I{n!IU?uswk5eLR@J|GP6aNj=mJ-aYJ&Q#})AM7{7c!#geFQM?A3qdkF&`#nx= z{5;Jk7rpAs-Mf|j+&sY2q`h(&=e(N+fV^Urvb_dKvApsn*1TlW7(7@8RXp22l0CH6 zj=k6%_B<}8Nj>l-YCV(q#66IK(LJf2HN8nzkG(#oKD`r{v%HyYp*=-$RlOI&&pd4< z6})O&kiDQH6TK-~@x2L6$~~Ailsmg*HN6&} zVLbU>u|54=S~;=>CcIel0lub`yS>c%m^=oI>b-J^2)&^ol)V^DT)ev;y1c9tjXe)p z-n@kzPCTGBWW5}asyu0{gT3)tjXi1mhrKm2kUcQMW4(k|J-tx5iM@G0);(HL^Stsz z&AZ(fV?8_E(7pB3UcE)Ai9Ia54Lnon$hzP@vAlZ*U%dq~t4!p#}i#??*qCB)wDm|SAV!a`2e!Yham^=AF|Gb^MG`$znHoZ7m zPQ8Ynk-Q}KP(2X_qdjpnBRwsawmi~0EWNRqguTJCfIYA*+&eAgi@ofkPCdn5fxGvH zracOTqdmne`@9`|6g$_T=e?C`em$Ou2t1H8GCaOsa=n6ILOt0(#Jnh2x;)2OAwARL z7Ck`oT)haE*F4PJwY}X72t5c*R6RCWRJ`z>06lU_%R5|BHoZEoti7BFJv^&|#k@JI z61_yZ-#jKQuRNj!i#*@-8NHH7Z#^v$fI6!o1igUeoxRt19XEl0AnT;JgE(!n^wT zi@gzeyu9PYoIL9Q8NK>5$~>79FTGX29K7=E3O$0Qpgp_PgFUCVIXw3nhCS1!Sv_q6 zu|08G*F39<6}=8Ub3ApYmb+TfHoxE8owLAANxk{hyE@O9q`XV*g}evzTt3w}GrY($ zH$38mrMxVtgFJNVi@QMmPd#1qiM_)s+`VZEvAnJWbG<7!gFQ|*ue@?T13ji~FujH0 zOFhf^>AaZ-fIWt!!o4^Ffjr4|dOTI-Fg$60X}vc&X1)7C_q{^CJiXdOq&&oN$vi2d zxjk=7bG;L5BfXoHl|1`H#64pSl)Z8wtUKgINxb!*={;Yf2)sU09X%beu)Ho>jy-qJ zguDTuxVz0&=sho|7d>4LK)q^^u{?JkX}xEJb-ic*qr6rmK)sSp|GYHAQ9VU4n7v0B z2|Ir&1-+k6qB=1d9=wp*#=9X;@wn zo4f9DFF4l*;k_(}1-%V;Av~lR9=;91O1&}7roEKuV!e8svAi;GiM;B7qP?NqiaT;q zggo8Re7$q8**uJihrH96&%2penml|~1-{vc6+Cs&;yuRw8oH~htUY$Jvb>sf+`M@$ zJUvho)4b~;LcPHiSUscXn!RQ`H9fUd554%Z(Y!^Qw7etmvAh9L-n$KCtUS@QnY_zD zF}=)umc8p6lD&z`3B7)spuOw}6g+&i47^SpvAk)5Vm)wRAH3hk3cW!<=e)(~EImg5 zb-X_`!aPyvRXvjw1U>5D(>y9Ati1eWLOlQO3%!&sggl=k0=8+&k+p z(!ESrvOVg(C%qM7cf9)l!aZkuguK?Vu)G>~B)x5c(!J`Ai@m$D3q6dF>^y{s4!z!4 z3%$n4Vm;1k@;vx=l{_ab%%)E!lZ#=#}y1W8X9=&?)N<9x2 zTD+KCSUeKR$U7S=B)#WE3cV=u0X{FS)jZEx-@IRox4iHF*E|~07`iap}gt~^=$ z5WPlT2fll$XgrrEj61Hwfjv4%6}?b=6TI)uh`iRPy*&ipo4Z{bfjn>mF}=mR;yf`m zfj!e(Ogsw)<-J{|0ll&?*Su*>q&ujdq`VEeAG~?!Lp&^8U_Ik$jJ)=r?7VS9wmf05 z4?K`i1-&bF*t|l%vApd5^F25C553Bw06nhXL%igq96e-DIK48T-@F@gz&&-8^F0r5 z8NFA(mb@J+3OS587QLx$4L$QjXgyw%Y`iKPl0DK63qEgnOguHLfW7(8nmzEmGrhV$ z#5`OM3cS&8Exn*fG`;`bGrO+b!5xuK2Exg$&BE1uM zT|7LTuf1KNA3Xs!cRY$;PCY5&_`K*{n>|r@XFHK5cD+0be7$I#fIX{dzB*+|+dReD zYCXc~DZRcpy*<q3NxWU=c05n` z6FpGSJ-X4gz&vRuSG@UaE;66^SziMX*|2hJiVA)mc3{p zy*!4%gS~T8>A3`6OFe=;nmx*Kh&`yNNj-S|#=T8S&OEd}yu7xc4ZX%*AH6;KqrEMQ zy1b5<m7+ zz&*~zFFiJD<2{{iu{rgf_PgaQx;@*EguGz&hdorETD;D`l{_?!c06d=HacNl&b-9J zGQFn33%#6#`n$x-tUaeXFFkPvus!>1Og&fX61~nkti1rkL%k4tgS}we13m2v&%4qY z8$G**7rd0E$UG3H*1ejGdp-XbH$5Hf zA-!Y$O+9uJzr5b19=&gYl)X3b5X$UL#y&pf(Rs=Y@hEj8@+)c2fcQxgFT8$?7ZBwGQBO9 z;X8v+(>>n6vAQ47x4pdSNIf6tBt3_(-n~PE6}`ghEWP95y*m>^K0VDE<2)c*mAVse zKRpLomOH9nqP^TLhCFa0y*-sRWxYr@KE2x7sXf}-f<3f~mb^;?cRfFZb~`SRx4j$z zy}SU|o4qm4-#j>Mt2$V`3%g1=GQ8_Ke7(K#XTASmRy`D|K)uq6b3ITaK0V4X2)v>| z1wFj;#k}6fS3O3K0zFtAqdiMdfxVCP);)$WCA#x#B0X;J1HCE8uDl`|U%WCAH9S)2 z2)vm-bUgQEti9F}!90Eg$-LspBt6wI<2~#3ygUIoroC38S-go>7QIy6Jv{J9RJkDb zI=z319leGqc|BWrpS_d--@W)Ky}R5#i9Ez+ZoJLvYrV_8uDm%|bv=?%%e-Z50Xw2| zR=tsWDLo&$o4s`mgS|f*MZLCs%RQe+IX#k4Ej`3)R6J@%W;_nTcf4-c*}cf^TD{A^ z_&W=L#yk}P<2@+R)IGoq204ad%{%}vxxJ*4m%Usrbv(-ZM7CB87>jJ!Ulv%F|5c05Yp1ib@V z&OAHD7rn*2!aFBrg1v~UM7@e9dA(X(20b!Ft-Xg)r9Gog{Jg8sjXgNl2t7GxFusFM z$h$83l|3_qO+Bm%>b*pCc078RS-sYgkv%!isJtr#B)tE@Bfa9SQav#!=R3MuV!I(^ z|2(%>t~?KTi@fH>6+K{Lri@d&ZrM+FyCA`EMuRFl<6T9^JTDCOc2zzr7fk zg}sMHGCiad`aGym9lSQpc|CWCg}oW5K)obgvAp}YHahYn2fc@DLpy|B4?T7ll)XRe zj6K&Iyt{ZOM!i3B551Q|EIkv9R=w-V>AaWnNIc&wRK3{@O}(+)@jYYSeZ8ly2D?(P zWjscqggsgji#;9Fsl8^*^t^HTt+|xbxI8QroxKh_?mYKhtGpc5UA=AU^E@b;hCNuE zC_O{Hl{<#*Y`nnB(7nIFI6KTIP(6S*i#!Yv2fbh&{=IrI+q?p#=TbqKfU1AtGqck%)A&t3cZ>8RXs^7mpvc*#5_6E=)69Ov^-x` z)ja2+J-zL4kG<5RUOi+4n7v?jf4%a>t-RSQ1ig6>gT1wKkv!vaKD>=GK{_(|O+6b~ zsJ-AZUp>~vlRV4xM!m_sNIblyuFIX=)AzTF+C;IYCXODyXXuWB`Pdk+1m%UP+g*|AAggfZEls)jMZ@l`* zt~^71UpyBZem(PZ6}|DE0KExNZaghP*t_RfR$~^C!k3A?$d%cl3h`p@_vOVxC`@A~Kz`e^?alMbp%sq|R%e(?uVY||H2)#i= z0lWt;{JZJ4BE1e(q`ekmcD)Knj6BI~c02(DM7=^bG(CawGClqkM!a*d)V;B1wLBq6 zZ9OuAeLXKE19Zn!EV%0zC$_+q|(NC_T@QN4rZq7QNN)*E}VO$UNQArM=sn zl0Cu3wY%*5emirG7`{d)3p`%>n>&!S(>(V$FFTt=yFDUdO}vu#qdmz0g}sJ_j=fy& z=DiJ0-8|S5X1(n4g1n%jtv%5}UcK#caJ>q3tv$i0%{=a3JG-{^mOYT@@VqsfSiKF8 zuDrm|4m@~V0KKHtc)Z^Y#XS{8J3YrNC%yLyQasEtnY=9?J-xagmOHl*%{;Ro!@b#+ z0loG;y}XRNyS-WyBR#OOtUEgv!#sXjEIl%oX}$hAOFff#l{}r&LA~-KPra>qm^<76 zG(By{TfM7~T)hUXFFXNuPdo(U=DP#0g*_NWJH1y7Y(0vNue?df&pnRKh`rX=w!Axa zbv*=q@H}pHfW6FiAHC5c3O(+qhCBN)xjh}JbG<4stvx+d1-$w!hP{XHrabw}hrDY5 zbUhj9I=y+I8NGF+7Cf8qU%L$Wggqo~%DowZP&|z|A-)im8NJ4TfV^`sb~@RBB|VW^ zhrEdQ^1UVlJUxHz9z5_uLA<*SKs`gHw>=0HQ#~vrx;x{1IK8Q@-n)br8NFIYPrXt> zkGy3@Ks>6QsXXO4Nj%FhoIMys7d@SR#yfT{13m{HC_EJ&3BBA+<-P0GlRY>^3Opg^ zV!UP|623qd;Jg3yqP&p?iM@kO06gdjXuXI`f;@QwT0Q>{+&$S|Y&`2h)jT(%vph1d z89cpPyu3Oe$UK$N>^tOmQ$1ojO}%lPqr9$x)4V4b485YCV7#5@%1Yw zzCD~w|GWXI?L6n;*gWE^zC0V;6upkov_q?}%5xfNc)x5B}cRVkZeLX-A zIz0?{lH9b*;emvUtggxNs^tr+W{k%VOh&{{J89r{q*SrF0(>%f+ z5WQ4QxV+7a1U$KMv^_%oIKAExs68j{*SwY33B9T^?z~&0X1(mQ3cU)S6TH;*DLs>W z620~Bq&!{=raXe1%RG^wOS#h0Lp^FRg1w9P5WGA2 z1HGfyiaiwNJw0TQ<~{O}ay@Es(Yy;me>yetaXo(&c)S2=LOs>YgS~3yK|PB@*t~hp zC_QEH#yu5duRTQotvsYQDZMUd>^zPTC%yNFlD(11>N~h60KN1hV!eG0E>VFv%Prc4!w05OT9Z1iaiSJQoWdx9K8{qr9G?l z6uUn=*Su*$GP|QXm%Up*(>oEj89gwL$30Y}{Jabc1H4!}Dm@;?i9N#z@;uMze?8%j z9XyFL)Vuvwg}tvC!M$!`>O1Gtlsv~pyuI+d7Ck7MMZNI4-8=^cRXu^si@h>+6g{G{ zqdWUvsk~J{VLdg{p1n~XJ-w)9XS~e8p1dNhbG(4d*}Z_Ue!W&r+`MG4yFAJzdpu+J zr#vH;X+1o^9=v`8kvo_oG(9L!_d05niM@Jz&AZ0juRY+A);ys&^12yqdp&_(Og+se z5WQl)al4Sg*S&Dm!#kmTL_H#j9=)&Z)x6tCk-VO8)VyK^6}?{jjJ>JWwmZ%w$Gx~5 zG`hTe3_Z?q?L4OJ3qI8}sXSf0z&uKRL%sJZJ-tNZ^1M^vT|Kn1EIfn97Cjw+$~?&7 zRlQqgt2{u}06tfzN4iahaQ`8?+< z+&gowhP#oOK0Ol%fIU69{k>@krafD3Lp-X47d@k+O1k3xC%re0t2~`0HoQD6pFKZy zbv%I>3qGpB7rpjUHoX8RJG~7SUA<=^j6K&Y|2oqgcs zKD~iEt2_+re!Yy(6FZFLGCVbAf;~dw2)&0S9y~$DL_N`%le`4EZ@jv_{5>P%lDtmI zj=b2(QamixfxXaL>bx6Qe?9(LoxN3Xz&&}sHofnoYrWzw_B>uTl)Foq?7V@~@x9zj zUp?8$I6e9Y=e!dK06hmz2R%6KrM)tDcsze;#Jn;M1icD{5j`Ky9=-RfKt0@&61*_8 zk~}~KWWBwqNxV*oqCDZ+lD)>6&b%JVgFO+CYCV$1-#kaj-8}ZE4!tQ*DLrzXdA!Ei z5WkSv=uL0=#6D-8^556FxX9a6N`g=RIw-DLrRS4n4>C zxV??HpgZDkXT6aF6+I*EA-q5IOFLSJoxOgbyF5ktqrGm>o4eQYXFQCj;JmM7O1;?& zhCO`r7`=@si9Mg(_Pvs*iaKAMC_AHt6}%sav^@vsTs^Fvvb*`(QoLxmMLqm(o;}ud z^*o%q7Cl@_`G+G3Obuan7q|CslDBTxjXRtJiKu>kUb5_ zce^Mf&AE5_vpoMYzPl6pP`zt#T0Cj5#JX!&hCMQ>RlNr8s=Oo>XuVE93%vdA zB0Y|{(Y@_Mm^~YeH$A~NRXsR9DLqxVm^dfV&%Atb2RyN5!94tKhP}Ac`MlsM{JRX} zJw2pUA!h`o^v+B{OG5k1y}Gdzz;B0b$asJyJO1-&5ae!WL24!p$L zp*;SLf<4Sn>^v})i9KUC7rmt5$UOKHy1gq9W;~Iu$2<{?R=v+`NIm(=e?1)Xtvn`5 z>%73idpxy1#Jt@6<~+!t0zJqk^1X+T3_W_!2s=bGK|SUyfV^1A@jW}ig}mfaHa+Br zcRhpOEW7HFJiS8iEW3W8w7pwl|4=s zC_ZhS(>n%Nh&=3q6TSSuwml(xpuNvrpFM056uq*CU%d|mnmx~eMZA?gKRsW6i@kpg zSUjDMNWHKX7QDw>xV^xVF1*&UKRp$|{Jg*^s=O=Y(LIhwwY(mWn7xWO^1Ls0v^=Xi z+`P|eD!Wn2Q#+M!=)Juz7d*nD^gP&^O})t!Iz4@UdOb~yw>_Q~=e!NrxjhT94?LR? z$UM_796cj+?!CI(9KG;+CcP^U1U(2drn@84S3Rb%dc**q=o zKRtHaHM_PKuDlj-%Dvhn7QOeX)I6Qz8@IfIWkG(>#=6jy+4A zraVmg%e~q=$UN}{P&_QRWjZbPlDrIhwLBj(sy)NVpS)RH@;qinuDw9D{JVk{IK97a z7Cod)%De1p#XOTg{=Ar~OTAS>nmygfX+0}5jylcD)s@(mj9tP(9k@;XNu`T03!9H@#IdEjmb4c0K!yti8w6-Mw#- zX}vobT{;Du-8{cE@x1goQau_ljlCi`yt~16-aS6!7Cnw%a=nn!jy)o+1wG2aw>&dA zn>%b{gFGUrue~*dR=tO%)I3h0FgpYGLtGsq58$FxG zlReK|bUn@9d^~YgVLeiG8opA`;=7O(ls(Y zf4!q$Iz2>eqdcOm=DlCF89iT+;5<;UAw8SQhP@W($UUd6lDwoKfIJd}TRonAx;!!) zyu2g1sXdnFu|0dD2EN$Zc|1}*XuOI|cf29Dh&_=UtUcgGfIJR)p}l6CFg(?5g}tTG z6Fzj5oI7V$Z@hh7)Vw&n7d?w@&pN+npFOOe=)8~mqdog40zHg8C%r^s@Vu^7ioN*;U(G`;#1I6W+^JiWJ}X*&yiqCL;APQAeEjl8|)06oT_+q;Lv zgFQUp?K|7oV!b;MfW2RgUOez?vAm@f2tK3PraeW=IX$*Tn7z9}emu`piaq!%(>yIJ zlsp2e{=HX_<2%a6z&*|_j=iYXt-aX*!#s5nD?5#O&b#^?sXg1u8oOlRxjb|~BRw+B z-MlL`ay(1I4ZRGQmAyaem&pYI1#5@O@l)PY2p}mUNeLXVQ+PyC+w>=JmDLhr(dc6v7g*gG0(mj4_5WQ;wygS!+ zBE8x7OTDOY5j~S-jy+i{zCCf*1HA*nMLg};F+H<{H$7K8Fg;EW);m6^@x1f`KfN$b z{Jdosn>#5YIz6l4oIDz@XuJ=NnLI&0AU$i-6}{HoF}zk&OT8)AS-sf*Fua!XLAwSS zBfQ1Gu01ODc07S?;5=xWpaaH8oklAX*_AV9zA{}1wB`90=iGq%{^_b!#r;n zi@YyDr92+0P(Aje&b*P@p1n_ck2sg=oV##SV?3uVhdpyuV7*seuR7oc+&sklp1szHy1b8JlRZ)0t2<=CfIUm2$~``?2)_3-T)mkorMsI!Pd!H~ zzIlTbF zg1l>EqP$WUmAoPc>Am0FlsxyieLd8Jk37jq0lcDDLcO{N^SmpQK)rTYMZHBptG$;# zlRd}EalI{OdA$>@ojhFOGQHs7;k+A7r9J(#p1s+s={yD5$h-)EJvliVmA%|lHa$}R zXFY=F-#lEPH@g?rNIlYQs=1dZy1g($wmj%@|GbUSue|-#UcH&(89bGR8a?XOfW6ps zOT1dz{XB3NGrs>PVZ2daAUr{(Xg$j{_Pqp5Hocm(>pbVN-91UmF}-Zw5Iy*b4ZWEM zsJ;95Aw8UMgT279lDmfYsJt>>r@i6wSiFT$vORurcs;r%&Ap!Uq&+m5&Ah^svpkPw zXFU*|61|Neh`p>m@VYOf2R&pA=e@64T0Klq(Y;4~vAiYUUpz-iguIaRgFGS+Ts*OK z(7c-aF1_*(0KM~&qdh|YoxMJ;qrFZYw7iro=soQvpS?*}06wMYV7)^Rzr1<8@w>tu z;XI^hb-kt%vOLJhue{^23cN>v#l81!AGv4Em_3aBsXZrHV?EePlRdtZB0Pu; zR=o|>2R+2K2EC%kguIoutUVkgvOUNL%{q*NgS}QjQ@!lTI6U6>v%PxsWjqZ5GQId2!o1%d zox7lpx4m}P;5_+tl)X!oe?40z7Cp~PExja$t34yD3O&!gz&$tGlf0%-xV`9z7Q4R6Q(J3_VU8k3AM}J-xeI1HF2nt-Y?Y3cX(( zD?PVCzddY)PQ6B%Jv}sJPC9mMN4;n4Vm&N8TfJAVY&^ul)kv+9#(7bv$+dYv(GCdVQ zl|8jo6TaPJOu6XbkiDf&f;>!jtUQlyg}s#OCB4bLM!oE9^1GV)bvs+4Ha-2$u)UVh z{XCte&^=hJ%4sl6}_Ldw!Gs%sXbwnBfPy! z;k-)1Zao3+r9DpOojd{ET0KH>f<4#7alBJ+mp$%F!@OGeggrIuti7^KHN6|@@;nuU z>%8(gKRxJbQoXX~T)hMV5WZ+=m%HmEj=d4#O1;qRXoxE<2;ARJ-y=jB0c`>Vm+t;p}T924!vfC^t^gQm^~BVA--3a@x0w0vvphaMSvx$B^S!k)vpl?a7CjKCpFKnX_dJN{1iZQW&pah@hP{RAzCDrUeLVA? zjXlC3Yds4*hCSBCmc66>{=8J1(mV2?0K0+j4!)dMUA^2m!M$G3MZG{Or8$bA`#kxQ z13a1Yy*raR20fcR@;or*vOM&LNj>*H20jK5Ts@Bh@4S?3f<3FGay`d7wmqn27rx7? z2)*b6KfI}&QoYVvsyuveth_lm6}`FkY`qQ|Q9Q2DV7=U5oV;=DbGjJ)n!TE#;Ju-w zg}v<}iM^bLvAx`OhCKQY;5`h*6ub#l-MoY^fxLTp)x47{CA^ZR zH@)HuBE3g(_B`XtLcJKdfIa6BslBe`&OMCfuD#J7jXn43R6C8X^F6Ua=e^6Q1if+f zM!nHYbUVxAuRL^@V?6#bSiJUI;5<@&8okOaygIS+{XGt@^gJk(F+DPfOT7DcT01iW ziM>%uBE90|8$BbfWjv%V=)4sPa6GZtvAt(>ggjXGK)ud-6TXXd6g_NHI6QNEm%RVi zFTDW*gFR)KD!kTX-8`@(biF7<#yvW5`#nwwYrWqq13edL480vHD80qCUcCcpPTVgT0KrtvxN9GQE)2Wjp{OTD>Lt0X=HL+dS9C4ZXuChP`S1 zr9DOPusu$ zY&|7@9XWtJk2_dP2t7_LSUZGz(z#%DmAwF0#yijXAG{h3b39;p zusj9EOg%PN!@Ux;P`gL)X*;m>T)jWtv%Ou8i@iqdqP;=D0z8u_0zSEINMcsfiWC%n9m7`+<1h`lxp8oq-bF+3W%ygVeFXuUl(;5&9o zjJ?+Zjy-?2gS~qIroCYB`@Ku8pS`T+aJ`8f96o}kM?KG9+P!p!Dm?bJdAWmyVLWW( z=RB8YAUs56fV@+2cD>&*2fXZMn!WfFVLgeL$32z$dO86An>?X)ggikr3Ou(pc|9xY+dI6&uDv0&Y&>IM zWW8V5F1jSh<2 zroF~*F}-KP0=`1KkUbnKZavLh20cU)5xm4i#Jj%lxjo!lN^&bxuL_&bgt7(R7r z+B;WK_q>dFN4*z3UOXtV1HBtc!M(zGRK4|MioD>_ojc(44?QMv(!3hTiaq&8s=MRf zk3BiWtUa;Hdb|$PRy>+X13hz<*gOqWhrR!?{=6vkh&|p66TQtEnY zhP<2M<2+7bsk|C0LB2}86ugQQth-p~vOG6FT|JFBUp?mI)V$Gd(7j$t$UPIUTfE!U zI=#M62fZMjA-&>=Grfh4Z9R~G1wA*FhP&Km_q}jnj=lGoslA45?Ym3mz`N8(t-Ke~ z9KHVPf;?K0Nxg^J={#Ow8of6iojgjUmb`&mz`TI~2Rzw_-n>{(N<1_%vpW_bTD)Sm zdc6lE3B4g36TPg+VLifr7dAl+MlfBs8%{?Y28NE}h;XD$B z;yf1EC%t(7)x4*aXr}l8og}? zjJ%^+%Df;56}%t5K|P`;$2?gT1w0^?OTD})gFO@9IXe%Yx4c#xdp%byq&<(Sbv+xB zjJ!aCi9Gx46F#1*TfLoU1-!+i-@S6I0X?Vne?6AU$~}2{0KId4e!Z=CHa)9J(!3v39z8?IbiIr- zlRSh}3%sWXv^(8aW4#7E5j^r(HoQf}f<3Tvx4mkRg*{qj#Jx)qiM&qeAU>^IFFo`5 z`n)&x@;trSg1sdQ(mgW8lD+UQAUvVvX*}Wis66eJD80SboxG}y483MW^1N86&OCVp zDLtJC3B5e%IlXfC#ymob7CrkkvpgXrz;@%e{qkGd+d4P;a6EqD z5WPJT7QICMvAuR^4?VT2X1oDVdAy)<@Vsj)NIhT@tUXChusw<(V!iPx{yaMhkUcc| zw7rjA2);Rjb-kLL2R(}LJUyaet-KeRXT3gap}ecD<-HNfEj^K&PCX;qK|SyKLcP%E zNj-qwu)KV4hrRwbbG56 zsk^-xUp;S!`n>vU$2>Ct9=(9S_&f%Y&Ajb_0zJNhKRu2qhrEN{5k8bWo4w%F13dHd za=dOrAiZn@LcMIiiaiqfi#Iy(ypVZ8eV z4?KHxLA}5ugT3!ISiMf4LA^$s1invJue~;0qP*WZb3H!_XT7nA)jiHis=U?#AieQF zNWBmARK18^*}cS-vOMqXbiER&UA++ZojuB47QL;2TfF~j7CkkXP(2*tV?A#?9KAB8 ze!SS(7d%S47QBe$h&{}=(LJc~UXW4&uCx@%B6)%$~iimC3ywSF^m{LD0P#m9e}>{Eod* z*XXp^msj>T7|uDhHgD6nG!wP?Poo!O@KVI^*p=; zdY3&brfj_)(1g2h_ocl{VP3qFjf_1j=>*PF-od7*ND^5LoNCdr9mLk0dFt$B41|U4Y(Aqm-s`9AS= z-YUGtoZ~#{#da`3 z60N*7tf@Wmi59*k4SBr{ix{G8Mh?_!>Kj z3Xi-Bu2dhI-v*sDBMA>O^^Sp&Uzs6#!kRE<0w?ghJt6zMx% zVQM|~72!QVM0LF4>j=CEV357hh#Wi=MdrL-aLzq_P6IoNzhk|2M$|k&{Ik6Zg@-*~ zD(yWFy3{??&Z4~!3#2_iqJ+Gts>Hll${fAIK;*nWZm&I9%R)Tfosc{R5xhK1OMyJq zSWZ2}SckhB^MyRO9gDo=)SbO=*|NP8TEV>YR>8fMNCG_jeSJKBYCpXBU5GuJNbCPM*gHLhG5|f*Gm$+Wpvb(^ol6pN? z-fKNac7nY6Fv+~od&WFhodrFdzYsl8hHX6LJkq;fMa(-tVSqe0|AoCuDCE5W;W|B) zxi~zadv?4Jw2VD}#KAmre~>&#SWi7rsLvHB;GtMITXG(VL3evJ5)Os zE2_PdcZakDlMB7!F^4??N=7}xTmwBPHZiKDDUmZ-c9xraSQZLK^MU7fv%AMrhXK$5-sX>UEJFxEVEmj}Iv>G(V@0)@R_ zIkCNp&IUc3FtEJqJ%+uVKMOpZF%~{AsZ%^DHn~0W41GJ-*El^9k4ij!w`0BQC4s%b zFJC+({9?V8qItbau#mk-Yh^v`!R@-e|IWRe>#MvH@`JtFrm8#l*j~MQ+qOFcJ)ylQ zlZQPj#n`jb_cx>rfECc3^2X$+&jEs2wlBiHN`zqjla6>wZXit>y^9l z+@QVo6r4TOosm2ytAxE6jZ3_knNK_f$ho}wFmSwWvgJHx01UkgWnR4xmCrrafYv>g z&T>6=iWt2F(|Nt}FathE4B9-d`Y62+*egAzODerT)FnNXiGsXgEKj`>StdOcK`1>q z-ZDLJVhlazBZj>f&Q!h2dceI4Ze2Si%BfH}JdSj4?d#CvP8C7Qe! z3&=gMx&gg|q~JZ;fjhk#D$zZGa)rIbDrUS$5t_UQZs@%~37);Iwr)J|j3B)Ac$>Qr zomf30hIu_X=eN6Uy=uL9Z~?xdf=NA>FO$5yxOP1iecrpT_}#ov-Vr;XRdl?L@pHZS zErh)fes;ZyaZo*_r@K8Z@8dj0B+I*He}%mydEh+{TI;>IYo9!(F2g){3|+mnsA|2k zN~OH|>%6>5HH^GfRmnWUxM{s26!ttcc89%tf1o^>=Bm8A^uImo?$bK81$4a;njO90 zqFOz(c8@)Ie55`2-weI|>y=|XB@q?iiJE8W4yfSr>MN{Z->1U zF0nmYR#H77d$~P>Q`@`_0Li?*3#B|D|5!X^K_0yqDIUGvo}9ewP;I@mMXJ1)VjR5L z7ur0m9qv58`~bZ^G#0$qY@9q=Z1TJeL-9P}^1eJ%D7(B%qcFUqyIegAMO3^H;fOtN zRG_`F%WJ*Tn)SPv21q@&*1$bHuARM^$N@cTA{4!MYoEQz7q-1(lTJL&)GNI&wiCV8 zE`~kMW*0qT=5W0fH=4a0)vmjUVw^idl~uj2iy%GM_ME+vk9EB7?`AyIys$m3HgP=( zm4-Yte@MMp=3_j-u1Y-Jb1*%ZZSg!(j-9>2o31@_cBDHLNSZy5CgMAoK~TLOibXyD zR`fiXHQ+o$f*n0+$g#U3O~t*d0m3|5@m#$(Go`&2+XTL((igiIgw8xjo+Q0D03<#0 z#2dU;X4bv+I3K<5r3XB9c|^UQH59pzaVEXnCpEnHZL2*}?T$TH=a#)p;8;Dbh={x{ zIh8$v|2;hc%o;r6fGs`zL^r%5!reSJD<8dBhZ((5ioHD8h1wk}s}H$OXNYs*yb^j@P?7_>;YSDu_MPc;LJn zvtPY3(X%_U7y&&MIoiBaP>eh#UrW6Arm(!jp`bi|8_>MAWE{P^oMk&{zq5Mq60yCx5ZJud2lu?fv4Xu2oG!gm#;82!TtYorvsb+rjs-no*;T#Z zwB)={E?zw!W{ti30JA+m=FGarmbF5+1$LpEbQz;*z|)QzN|r z?O42?@ddrO;V(Urf&{(Exg5PTOS3&58f`sVQggkE;$S?RWeU9MY*0Ovad|xyaYeoD zE|NXAUwl1ZW$!$yHLg8F5|};Uc9Olr#-=^r3Jbl7HO)M0qlGzg$DX~4yN*0Yq1C)= z5zoAvuk<@g=Rm!oZVNqqS?oOiOp?9$M%z2sXnwtG^A5eHoNhfX8AH70VH7(|1k=2JXl}ja3nV>S z9r?V9q$@oDLdLtY)2+Ns23tH00iwOo1dzSHV+FpXw#GcrqnbR317$twcM-jgTlYNK ze?*c9%VDq8+?a{Mx$>1DZR~!)Uz+ zz$iUh^_e{)TG%~=!;m|Fy;VHe-vmBSS7^N11&F=XoeRDD8K=D`wJ|+)-=@7-lMB5O zSkgR1fGWM5qGG-16NWwEl3%?-?<75!M}<7B39UVDAqG2(W*ohH#+1BDVJJPs0PejY zNv^z^DquWTjaR(<*Dt-SeG9#JS>rrh_bI!GvQj)({aQU*W;ndQjVZiiS-QhiTxxPH3=z+b27hOFOHb%YTB#1r5lj*!n%dyzjmJ#(TY;=EFU)GLNL5UVKcnn>wP`kEWW%)vGctS73sPP11UYn)CIi^pb|YpnQ%P}KDE2j zrW3st=omexS`I!;N)kP1_9s2V$YH%#E+o7cB7!`5$@Mxg#1cIL+r2y~iX%ID{c*jA z>N7mv0>HgvSXaEPZJj-Q)(ky1A~HQdHGnIVJ?6W-MF_OH)D@r^g#iKn$7t=h;9(X;_ zBZ)mBMuNSE9Pz!b2$j8XkfOcWfSf&i>i<0c{XV@8&@nxl$AvvV{r$WjZ>c<7wFW%` zBL}_7aq+xwu7x@JbBw)bnjbu_jPX6dnA5zKJ~q9xxOu!@KQKMc)ucTYu|GYKES{aO2$H=x z`3=5yQ4T&?$KpNqUBtY2?V~$N9e+J8pM$;M4a7XC=DNz|V`&_(ThqXO*4RpPDN)Nq*vo^bEe9=9SN>{!1e8Rl7x-C8CZ;-tP7ofcS zv@yNz8wfn9hY&r!v_L&H#uB`W?}R*SHiNvf0k^$if_uHLoHsrHL+HID?;^dEft@|q zIU&6oH?6&Ij(|G8)TcdIGEO|ZDxkcYv68(&mkPZ{`0>2+9S=T%l{~vM(yY3h(o4IU zc>q1PF2g)I6CJ%F6a_s34$M6tr1iYNmr%VU_`$sz1UEhd;=eplJ54>o$)&skKZ?EU zecwFSDww=Ee2P7%1w}krJ%~GW#Vb6HO%c2K<61qotO32PgF-#q*mb@1aVkANEBiZK zosB$u@36fwEup-d=n%by8iGAEP0Bqq+#0+)QxQE{iFCbANk2XJ2)DiIc$hl@-DtgA z3>7?$yimL)gO5FH(hNI8NU1!UvClkM=W)HbTPHoL7@@t6KXkm6FfF|u!&bV*bk(~* zTot{fFEKp@_=vpFa00!7+JU|Pn+804i5xsm)&o7b8U4NF4eh-0fq%T@Y?Hicfy6we zsZ~1h`prBURB*jGB!WHND?mMps=Yk?!9~3&grPn3#4|lN)~C8>iR(PxwClXyegwUj z>rTB~ZKXZpJT|>)9r8R@ipe`uPSU(x9U43bgN(h$$Gp3kjI=yos>D6afzi9seug}k zI2^o=DLTB6-Ksq_%agq9g|)ryPCvYnA@sb2#G5_k8Nxgz3iG^NNgTWgX$(GE2!}ns z>twx>8B{$>%@96Rb7wt^d#*eSK%YGe+^IeI>zTb!{V2V@H#og@gXp~)=t(>soZGzX zm^eN2QF^@uILAGBt|z^W+{3AWM@1VURcLY0D$Tq#t zcd0y*rv^UR#j?Ej=O;Zf;DNj1?%q7VLDjsICEUF*W>US{L=`^qR7N~Ba*8}&Pb9qm zg#$eHM9IAWmLt8)4I@1&ru#h5wE{iAYTP`VK?^;mc0@fxnb17b){{K0XevEI90on& z()7I0Ps6tM$Rs@{vQE8C2O7P1fC@d}0J*)at&}})uE;ztbZb2# zqp-c2qLaPgRjfVrxa>Wssu{hkA5y%@%QL))uLixAt0TRRJvlr&V}QI?<2k%9f7d;Y z@$Ebrn#VmfdjmaLhc`RZto=NDEeO36UAnw}h)TRFo=dyJotL|n+UUCzlaV}}pL@MH zQL(+#mPWjeeM7uM%k{mNf_uA$FK)e___Dk(C>uPI+*Cb#lEA%{iZ{JMB0IfUU)Jc(na(>rMd3Z+RE9mzHL5(9TzkDf3Z%WZeXcwgjFCOQ23I`@Q@*`FItaXkBp19F zA&fnOKbX9l*dabksS7+?9l1O1n3g@o$sfGMjWxa1e1X0E70|q5&jmdb&6Pd5H-$YE zK-0WCOesC=3zofdUV^>jF|oVht`|L@i=jMr!bClsi}SqD#frS#0MNbDWhOlZ`3t?N zExWz9+yp+s{Ion*%zr%n<6}KGR*O4bB-p)&WMMoS!7jb*y-+;}#X-7R^pw0LDQ3Nz z$`d?XkykzJR(vbDYQKz}_szQH`buphk&9}+z8kvqI7jupPN zTvffkrdYjN-W$8ZtxY{qL#REJyZXGY2SvTuT|T@NqxU;baFe}X?|?gulmR__sh_(s z57Imt;=er0*8x3;V$3{`ysf-?Tzb8%^W;5t<{!Oj$)mkT7I-|KUM9U`GMv4RVvjs* z&IY~5^#Z#>SQ0y2|CqfSrqVm*0ARfaY!^PErdd6s264TN^=`dX49>W;x`sOysq4I4 zza2YK5OqB@9t%FF7!19QAb>ol^s7DA(lxy|$)r5->HfTt(CfU|=#{*{+H1T#U8+3o zR|>rv;d(t-I<~!@8-%^HF{{1HTWCBzLb*LfsCT;itwucTQ2@R%X41WS_@X@dMI}8! zmI=LEo=-hpOh`N#JkGrcW>dX8Ql&e!(zm_9H#R)l--o;eb@jWTO(DIST^GJ?aJajK z7T`N>J-oa1IAuFoJ4e0s^&C6VTD&_t{HQ%*R+&BCpq0ICxZS*$vZuV94kJAhOT4`- zofE$8Ta3Lkaaz4bPt7}1#)>_?)xJGP5Cpw3p8sZ%B{ULMx;C@0)f10Esi8C{n!Y zIR3loU$4CgY}UM-aW_5MT*Hx@mZOa#8*l;}H$8hAZfMfo~8?wUNjI?z2JIk-Hlfb%@~)`vX+I(oWI zwobh&!rnZaJNUfDC1AZ8+HXBBP=q~})tJ2#T9rLjFMT{Hzt1`zmC8J_1q3`_j?}#F z)FZusD#<-q%f39Ne?&dG>47}c@}<51w?n;awxhh8WVpN5QJcKoPLaIg%wxT36tTL% zL6p3-%09gfo25MuqO?8K{1m;m9Id+^`@lT?ZZJLnjD4LZFh`1d{cWotc^ z+=jhrs6@N-tUkTzq=h~7PQFT_2-GkU#M z3^2W5Zc@FS22{QLD;hm%gx9>Me)+sQeE7VYoHx9d`H;Pi|3o~ozOOy5|6#o1vok%n zlU+S)YrMRVT5G+Kjf}nKM0mXl3In}G6sI~Pg-N?P3dy=5VRSs7oohW_Wr#h39FaZd z@$J0AD~Y^!PT0J=2$8+5HG(~31(3Y^ zG4x7CYnK3-dNq`+kOsZnXSzL_npeEFzH&U@5BI#ep%%O<3>ZBuuK~Pe zJ-NLITZ+42WUahSREIrEW2n7dq;xz0?;gFaglxSvMa4XcjAXsr(J4J2B-}kB=qEkw z(MY`ly3;%i2#`Fz%RfDE+poQODp)oc_E6i95YdONc$MMR7f4Ixf90;ibKB zA(g$v`!_wd)*C&u-c-Fb@liaI5Hmg7jHx_*nF&4orxm`SCda#gCQdy~+7Z5^r~*A6VmUnp3d%iCcA~o>t{b}; z7FNBBHr~5@lGeHm(>lDRxG+2=k2XDbSV%n?Y!$r9o6$V!Iaa+}9#p)N_R2iCg+RR_ zRq;GO0&KnhPozEGs%O0(UJkrsJG4E>GDJP2Wve_5e?~p(-bB5vQ?k555IH@wAESbE6b)&r~SPs1qC49XvSa`ewBa^*81ChPog%CV;k%PU<`=Pwc8AClG z-L1Rkgh4%-MHamT9Oyf!Kft{_kE*@6H)uULw{N{w9Wp)L%ay#_?w!2^8=^hNXsJL4h$D=%>I+?p|@}9k?Br!c1MP0oY7N0zw^5Z=`qc%Mc zMQgm#fJD1z@B_Ww>xez&Sz$dZ;Pt#3W_`Vv34yx_RZl&oXd}H?O|U!!ZNxjNa00&G zrl~zQO;^3a)quUnu(dq-JC{8~Ruw)w*&;pNm|i_CWSBh~dssb%*9*O2YNovp0LQ%T z);hhCNR7La6VyA!=z+amP6)n`885wP9frO74YR%CARN8k41_!Zy@9>FIu1Q??kK$# z{tP@U0b{*RkvP3%qyRhTy`8-62`RpIaF)C(M@l`RiE+Jo@De>kqvX35q)k zvn4%9CcQj5@-;lJOfo!Due`mSdmy}-7fd}VoRdA@Ik7yBToSw#F8jQQY$d!Bj0C+# zP#(R`p2Iw@>V!S^P_DcbElE605H&qWF~&VsIm10&Dqy^k|GK^4IA}dbAa6alq(Hs7 zFdaOJui8DygB3lI-(o#6_((j1(*eAR(s;d}UkW?{v#mU~1<^gO5u7|mMd>}TLjyg* z(YZVnc#l11_mDg@zKy(HRPnqm6!^Q8jncho58*jo<1#$u5h^|7T%EjBtirur;sU&K z2e3R0qLRHLP;e0w_G{2n0NU=9|4zs60KYc1gUF+3USkx#PTnon5`|tBbuhyhT0Lxkx;wz{I@) zrg}Vbz^Xj}$)>zcTW3A`Z;iaR?qs{yED1c?n9Ds@;0L{Uho-#dI@h82Q`XfD6 zrJud!*T22UF91Hc01`ZT)^0sK{WU#+mfyVEZDc+4eXKo(K*7Ddwwy8u1_`*OV+{sF!A2M9ek9tAzZLPx!x z$|k+|$W1$5%nv-pFeE*5;YhvP@?ku}Wp6!FPnbR6#LK<6Ux7VSq657V_YOS-#FM>r zw~@S6t+PDOnWVfYH{-pwY+=0!nu|R(tbjcQ)N;Jgww-M!Mq@oiza%~3cF4RHcTv3;EIK^^FH1d_XG}di7bCr42Kzkg z0S~>#1(-cHW`?`rRHQjnYUe!1A^f~h;y zWNW;YW>`I;rdhp`4;j4*#Ob|ONWneaezU#F$wEBxv;(~K7R5Z8DAzkWc62>i?*KiL zArn0u<+?mwXMntNP%k|VsExe3{){}IJR!U%=w-bJbRoT^UZ1@iDmy&^@4!7~B|^Og z1p&LPb7(x?yRW-I_QJj6UyQwzlrp`Wji5Wj-5$MEDOSD2Y%;x)o4P#OrBOUDJODkZ z4u`$CLP|a7dYe4KiTgZkwe-9H;}<=eX1Ki`7U8|f9*w-l%&a}_lOnrp+6X;Rz%aW% zyM#Qe`IEe8>()F&h9^2lz@EJ=r_wr-54}8mB*HwGN!#^qD{5!pv_&mI^Z;iZ~Wi32> z-!eUo7==6~qD#GS5F5Qblf}HfYVh21< z9mKttv#&hQe`mZ$OP9UGuhTsas9rsfHA=la{+T?$^ZGqggxEZY2n9SE1iHNku#dgw z@`XK;JGj032n9M9AcnjZ-jF=T-&wp1m>WD|!*ac8ZJ)c5i-tU8cZof1YNNf6hNnGy5eYrAQ5Q71j=g5f-&^CG?acND!SMhd-w*Xg{mF19?D+4wz1#Y?=9;7C0$NM5`G37^!~mXFI%DswF%J zNr=5^;t{)Q%C)_W@j$&4{m#5OcCWokWMDlPH3hu&;10ZWP3*gFs0zJ3512fsq%*yp zs1LohQMbKgO~Sp4HXXfX=@2`TIYhnTn&i3- zIeR?=@g}_ulxVyuOk_QdAI3c?>c6|)$<#Y?AmqBc#DhJ4@C!W?2IsxhY)-veVu(Gr zr4+o2=wmvBTs%C2Ud%j`@CUumlQ=yuyuCZW1Ijv1T9-Y8S|mNGA8EaTKo&iG0W`gk z`~N%rbcVbGSfM@S-W$Cd`SHARqkKFr${xE@LB~AS>0-MT9|k>!6ZAVx*ciN z_Y6GC^#;8Sx|%#-q1wFpnle3hXsVddIxELjb-Jqc1&;?ft#0dGb6tDk;9$zNS2vEQLK_3Nbyx8j8Ii zwK~0LCy>3PZ!^8F4Y<52EpWYfMasQKiKM(o8WFw7Y8SmU4uicg`&vCW)kVGEn6W%4 zijzHn{S>{Tk^H<`#%jD_s)xO$*J3@GjhQ@z;+8yRcptlhaK}7?MuEL^0JXfR;|M*o zIwU=M?2^4FWd^u9xzar|lcPOteht2A9PT{yZ1g<&;JrQf$8|idUV6QOqSHNv<0`)VBSt-XiHg1D zFlaoIwGBKWEf~EzTY0?QJcB(zFo!$3=1x6{o<6+b&k#HtM+`h7t{OcJyZX9U=oCDM zP>(&;68^iGjj+7K`c6H8Q3btF5v@E}w}HK)iPk*_X}P?z1e!epx2L@ej*&eDMT=)*j_@1eY(-f+Esn%g}U??^q$)e|~FafiLR?Z7)v z(-Xa?i%>oCgN;0tpvXMTOmjVGo=`nObG$um)J476(t*3kgF`)5Wm3JvTo$}ixGX(C z7Gk}YJBmFBfULZ^nRmPd8Js;}C6*OI+HtaH5t@$bA4#sfVC*JM2lPcuCs^Ble5W=TC?>ES$uZ~nZY zTqV5;g`>SC>=Ql2Nv*vph=4o{8M8gziDJFmpwqlf2M0ZJ#??IC+tj@WA;&yQ=@>oj zOSwCN!-qY^Sgt%Aw(7lAlyN-cmWw>VRqnmLF`hhpVjw-oXyQEMxC%U4FoQez7WBLV z_ES91BLlqcZTGwv`oF!TxCgxyp#eS6eAc|QjLAHAMvo8>Zv@) z#lSo@<~2PRx0b!>0tvnUNC7-99T_}osWiPhY3ID&1QESX{4qRiOwT>zxE?#A0#v;k z(}_H)qAot)O_4py1LM6XvP!(iG9JDBSE;tZ6v)D*h@U~ z$CJIWmRh_gMP)rJDAPRJ-3mQ^!Mi-K?T)<=yMR4osmVN1d&Il4fr!1P9tgdmWxKqb zj>x=?hvB`#yePdecuzgkzur8_VphEoeE_?phz!21ptZaV#WlUa_J6%#2FASJav(j@ zkAS>e6K6em*fKnUePF#%M^?O<|6{%Xd$POPFlfBPY*@Vns`0x7n4>!Gg`d1*^07Qa zk7T@TfLS~Ey{|pAK!v=N7K1&wmnpreJN!M@mcu*{EJ{6lb(Fl%b(KB&_J=*V>6ttp zvP(SI^1Ho-1*Sa(bI?6Kddod!iGIBq4?;b~-O)UVe>S{}bHBWZqvX3oG8Vm{?0>zz zDwVw;(09CUOq0Ea-3L9{gX6t0Umv}2U*f!=bAmkmbOSwdvZTG$FBiQhy)8cHn~psy zE4IA@4~4r|j_bTj@YX#56SBR9Vfj2CHMTv2h7-MQ^_@LJiqn|u_$D_S)y+*usN1454S~I#Lf0I2c=8wGq0qne>Zf3l=rdquP z){ndxdkDQ+M*_PQE6Y4k$b>!XDGWRhKLR`XC73-pr31bAJr%upX_mdEMD#q$nYFx* z-;2E_SaZF5H6XnY?Z&)N>_9vh_kg{BrzpJ2;TOGj<3YWvyEi>nWsN<|uW~&+7dAa} zjX1ndM-aWq8bUj2bwxd}I_o<$woW~OP_Vo)V+Osunx#EooQu6tj>0_d_lms&e78Jx ziLbqTKK;GA!S_yxY+Gb_CmICs3a z+8Vqq->*IK$(p?>bilmI&s4pGB&5CG9`d_iqDs9ocg{VsndLn6bkjRt?j*e-)xtc8 zC?P#!hl4%4XPdpD4LQB{FonA~oTWS>e*L^@?~uKcSY5r+LIOSaCv-hgSc5$CIXb=E zGK4%^)4M$>5Wu}|3%b2%r)s=)WJSC?&MUpNIflG=Y{}H=<$|t=NkG#86hnqddyfeGv<(xc81#Z0) z<*z+k{7XHSaQ?g5bO5{1na@0|a3DNi@-;osTdqAxu&+H=dj&n9?aDps=1aXwn?*gu za!;b(hof|zj(2hMyk=eUuJnB4VAfvo#OIE$&m6g2gY@I#e>=V5q zu64ce!Oc7Hhu^%2SFAeF<3Bz6ve7y{omsuNrr5n^oU*<1Zx6jhg+aZ`50Jg<0+GGY7l%Dwho(L5lF&WdQBb_^ zez81&QbE1iSSdYXh~hl6zk@xeJ$pRIzd=2!&$T=;XtceBl#{zqS}47BoRqy>KnJ}j zkes~7(XqS{utUAE;&{DZkxxB1rir{F`ue?JTIxKca!|b5XiPo%SBX8@E$uuO zmA^d%@zlLPX~jL-lpVc7ee1j)pRK$s0&qOrMW#D3g5A4sx@5d62hzOS;Pbs76^Fci zrB^**EHFIc8y&sI3IRJU%yqq;D&RRMjIFy6qmsN)V3xc#r@=h}GP=72bWgm#wuHR# zdv?7?*dVDLZ#H73sK4H9k{FOY! zj~_kJJE6Q_L!P~fa*Vw1FMK^^8bv)>2+uv~HKshaSGT>(G1)!I^47f(@~k~O zm%}~G_XIsz`+&Um7tg(ptZ==D=@mP=E2KP*bJjXxv7)^yPYOK(mzX^s`u99nt`$D0Mlw5>D1bcpr}~>fXBFumin7nF72-s2By5&4eUH?>W95XR!qH<^4~jQ$qzf*@UXnf?#w%8;g>xq%*ZbkwH+abNCZI3;EbD2G{tsuQV0suUSrsh1ug2@O2RXg= zN+!K+&}KczzimC!j*~oO^zl7Jbt!PEOI>@II22RYlpq;I19Zco<=>Bwh_I2vH-oG zL8!ch1R%W|-)OuNnz+18#0NdMS}wjHY8Smj$3;7{-~v4CH(EU)O7cCk7hk>E?3KOY zEwVi0R|dT=hZwz%>AJkzoIpGfchHzO}qIUbj5pVz9lgS7JMYg-5+GAoo1M4-h@}yTZI)&sw}^ zBELQRd0xBtMa#UkL{7cHQ+Yih@B%%y#3H?z9$LL&gJHe(_yoN43w1p~$|k)KoV`48 ztpq;qf&;!Kazi^%n>)Lx-8DVL7lXaX8;ZPe!y`Luqe?upnA*Jdx{^IFin}~7`D!cRR=rOG@PU$8ycrv|*&KZrcehI~EW!|J_+(#^c2d?LLq z&5XT88t6Q+0;fFSlj^*k?Vmj0%IUmb1sFVE)SSFse2=_a3Ku<-2+}=}hmAbw7%V+U z9aFo+^O!wd3bMUd4wF5JiI2Q4%tE|N!VSHk1%bSp>c%}x{7pThVZ^!+JW4%Eh~&IX zEv~)(U>LlIXSTg6=hr&;x0$@ik{Uff6qr1xafv;_Kd(I{veUeN6vn)%vLHLpS|Ppr zz^A>72^K!kkEFd2Rye!`=E6Pk8YMj)X4X9s7=S%!KNq}-2YJ0zG}=6xCtti^Ot!qQ zmxesdSLVDE+vqzJ5L!HrPcJ<%PWZfpUkyD*aBMu*!7jaDA00c3d=))Ok&e7hczrto zD0;j5j1N5tn1{WejhMTO&EGr&`4hd9t%bcb253AxSY|!*aZtUi8aBO;8Hc<(3Y9&Z z#S^_3?IOGoJa@f#`wTq*!lgZGs!+WJOPxF?`*l5N*=W7R+n+pcV`Mv~5YapgVlzB& zb>h5yL`^-l;EBAyIb1xziB!FHc*8IHoo4dW_m(@E1`m8)@ZiG9~ zeJ4E^wf#K&`%}G>bSgYaCK^4pk?=i)1_M0!$zi>-{L?)KPn$gsmukHXe;~Xo!xuhX zRhB(h#2h{IgPcA7aDu%LP_Dh?W6?dk!N)!8!@xYe1xvb)2OGU765hPe9ZWn9xeYwz z?x?-7A>q9eErmT6S+u=2rFlFY5}dt|G@QM`zo5Dlxy!v&6Ei(22Ae&DZ??Ql`GmX* zv;w|)Zb7}`u&X`rV0AmHMXEuKs>#5kgYw}3yi%q zA}_tbw??}xG7i1&k&!(v*h{@RUIh;ZwT+)T6yi;tV}^-orhH#sNLGhR(gs zZ>YR_=WaW~`@lU%7LUD?t#-X?HTFDPY>zzmG3-1r<}1Cb*DE~$uX#Ka+0VQ)9GJat zLRmd{nl!ywZyUW=ZgITwlaoCcB3Qjdt;D@d z;>SGGeiJ!k@jlS%y6M&a%C+2^YPvzj(bEw{^VTot-@Z z6fM1Hje9*QqOH7|*p0hg?v1=kU(UQ#d4)WlfqFfPMS?uEfcd*wF2Fo@+D1B&W5zlT zdNVx=19Uy8){8xy1OvTUjuXANc?>*E6P3M#;ApyeHHN+R(uO@i&`-P)`pP{gonAd@ zmv%kOuYA0UD@#4?O+CGWd1O6_-zL3M@~J!6GTXf)C8Im@)>1vDl0Ll?`gFba6;{2? z!c@J@qCveV;=nxx-oQN#u|>UM$ud2@O98#6Y+$_{goC`}WG20;)UCW!Y_mPfpUOO3 z*Ll70&F4JLsdc?ki<><`27x^YeZf6*@(R8L?AScrB~81dV*EN3L!-MUUsXKexLG|- zN{T#1ps+l1Ra?C+{Sm!t)bKr=?gqT#qdvSz#@oHpKma?2vsyiG*D$^}QbasHl&w5u z3jn?RNF2N{DTF=KAdbB%>Yll-A2T{Z@+CcA|C>AgX{J0>0hYaLS5ZAW2d%sxU9P=& z3HLkNP>8vR%^kf=P`JH?OBFnLQnR~H6FfYU2M9c{8WX%=qYXVkmUBHw18TjPpWVEY zAXPoiw#Gf8y`jB?`RzGM%lJG&M^wEV$Q(UBLU%n0KNviNLaaL?oT@$XWotb%(t*9b zT5deLfzdpe=?6XF0mnUEkG{PHSBknodquo<4D7ws!AU*y33LlV6IKF>T$tDU^f@vc0RE`vR&NwU2aAho(oaRt4$DDOJA(8s(e zT&_KvgNi+YKY+dM)zG{!s^Y!f>9f4i7nC|gUJ5Z+E=x zf73j)41>I?0l~fC`-r`!|B^iK(uFaErWXrQ*C;0Sdmf2hF^Zerr5UgMz(ucV|2j-Z?$05G}oGYox{Fk}Eq=@})h05golek4(ERx9YschXlP5xDY+gaIHOF zQ``K}0=Gj%K}>aGbm-jzv7% zh_}27sHeQKcicR^%^1BbGSEG%;8Z<%Zuvc}q*A$PW3Idxb(+15XTiKEckjFy9TGeu zk+(c}*TlWt_}Dz6GeNyFih(`!xJf;Nk6u0ev=2QlkH@@;)(kz1AgQ{cXOBGXFj>6_ z?q|D4_NqIS2d+F;Ah|rf4T?Pmt7g6KDRn$pzkWUCQV70BPyak;blyD!`!qe$94Eb= z=t;f7f|9)rVkEq5+|Rs8NCLeG(vUri&ZIq^x63>L_OCn;hcvyd+GRXoz&bs3?Ki!G zY&gB}NP0an&w;(^>YBVJ=k>fNd%eBTBAPr&i-SEr87#Zn9$r1-hOaz066U=aYv8?1 zG~zwk(Y(BrErL9$ZFRj~brC(Rf)YKB)yzCWjTaP?UqHsMQ(62jT!;rlo zYNoyTT`Il62&6p8sqj1!rV_oxl9;{QFB-fBS^vAs=|esKS9!aTt$@AJQs6wup7Fe? zdeb`@O~JiP2MxWrc6B?ntH!-OntQy9`x-n^%T_%*-bX!r;Eg@7gZw-|YK1%$@2|W5 zwGzHwF1tNyyC1#XR-irg7C}9jpQJo3v0^+`$xl5kmubB(x&XZh&(%C>yr;bpQfa-K zMy@So2Ka0HsOnN*nc$B?rrH@=C|kWVGe143 zbwxcAs*SvT`;$GT+?u`r6G=L6QrbNI-Hkn_g>${ho@u?hMW(#VqJ}-$%uqdU*{QrB z%BMT0>!dr?*L}P${aL-zF6=zbu>d_G8b&>qDqX#|3`0FRURpi-TaG=TL*P5H_J_RV z`;)z9YG%FBPU1U)%Z|M%Z0bA#Jh!}Ayf8eYuAV&%C$zm4@SnZ7&&0bhuSmTsYxunC zKNr37s|&px&n&&^=d!(plBT`ehUGrzs8$Co{07KlB*?XkT&6udi|`t>|cdV##o z5s*C-|G2!7&u~3XzB;^#o&mfR@!~z-$r!y|W(PiJ$&Edp99uond+$62tARY&jW#_e zopQT4k6%5J@`=3$jz~LTg-$&vC;>b4WMn-q`~Ey^C;B{;>bE`d-FQ6&x`VvA`MAB< z8Th>>65PCn;Ep}{FNwXX(D6M!cQQP(1T{Rw`6s=%ISIRpQ5rmz?zp{#NVU8c1}Hr$ ze6u^yV}QLp^De#TRPeg4qWiioK;FIOn6dWk(JMV`Bn z-=#dwSXe!hs(if#wQxI(F||DD#bmuZeSAFg|Ia=1F!nnq;>|tf=RG?M3Y0rt=Vm;0 zeP2CbMS?xa!|gl`aR)ud1UNm2X%fBfK25x{393AtA|$=8g#taEa{N8yo4-B0l9D|x z^fEm}EQUQRF)KZ{gy1}w{E0mFxIDdX#j?G`X30EC=O8?0L*2aCwhTU-P}97&@bkH- z_&PibuqZvZESkKo1|q%K(_1|P+Dtt)s1?29ezZM8oW#A#^VPjDmH)g>0-`+oHzK>7 zXe_+P2FAQd0@A$f!k0ajzH2?=nN7Va3X8lD4;j0p?1MdN$KJeNfwnwFs#U!_^Bg@! z3D`XRuDCoh!O%U3oPfReMNhpHqo2LKR-`+!G&Q}UmIXcY`$)a7EyTU~V|+cgXtX`@ z#yP!H#!@}bopikY!&|*^kEJ~a6ofrEMKis|+WEUmlCnM5kk~t0TBE%*a>KpoWS2eU zDjGfN48^=2IF`Cnh@-p^=O8=*8f?9@)q_2(Gu^#QZkIe8Dc8IHSyMb4=NY}T&s{xH zyl%W}X9qnagQPtDz&kvI+Pb}o9F;uC+gd$!8j!qTr|LaJw9dOF--|mc*T+0i0~)=R z`ARznaZS8lGv7QrleN9NDvZ5_xrDt;To^o!_invagkimbC1*XJz=1ppQg=P+yAZp8 z2LZiy60JNq7{5InSe-p{Gw8c`g222Yg~vVK@e4gu3%I=G%uzk6AtyaUWM(~s%Hq7z zCU(5j@9I1-TQ0m;$IiX!mwG+)BFj8&$QixYVOqS{=+e9p03y6$;x9dZ2$sACpN+f6 zhEF}agvq+h8kM|ssfj(7sl&aJ;WNE>rtdvY@G`trr4T&4;DS9N8$vzF;$u8JM0vgE zR_wj@?Jzx-Xm31{SU|kcvLC%cn!3GXW6`^-qvySvD4@Jwr;5FGRkytM^Ts_3)Tunj zl1aVrIR?Hrc#}Qiw>oL639cMlLUjjYk zMzK9&8`Hd1Es{O)hbg?CuPeSb({??>nb$nRaM(TeTtK~}q3k_~XR*C662`sRXdpe$ z4`)3w1Gc>3cTzpGSs1;VR`ERkK!-d3|NK2=Rz$rU35GipPQX1)Hmkj2m=ZlSJhD6o zXxF^0NDsdMD3m;!VI)1mXtq4<-Ko2-%oaUt-MBn3qewi0M;^O`eaE{OI(R(}(+57c zzQsH<>G-_txVF46ldn6R#N$R{jdZD}4K2_>(*?K?6N!eS1BOFeAKHR4P3dQ9(RNBgMUz61lxx&00J)h_k(! zL7Kh6+t|BbinToIExx_CNrOB=Umrd4t3ka_pxL~6XS%&ts(L-m^xVATju*X!pAfye zH2geVx^g`rQRqBoW`8^?!GOI3g%CY0l%&0hwTL~Cw^zN0ppZQvKXp7mi;_L|ZbH3N zztKE7O1Zs~NC~~g(qcUdiq<@+W7NF5jEB5w*#EoAkDxsyitaoK$&o$I1|B_+gn+&K zC`>#V{$xGWiugQ|4n{g?h!MTRhI2cGp36PI^4vVCO$oh(AelUq8SFg25}3M|ZlygU z?W#PM%9lMkl=VCI$KyNn&ptib(SSWN>hL=?+`POwuv)zdE2BIx0@*ys90gGJu_iMf1 zzV$qR@&P`}^AtUKX(YVZifTPQr2jnjs!%;l_@O%^l#;qE!PUH;@NK=h1A4uz8XY~q z-a5T&Fe1GP>p?wt)C)cs%+b8GkQ}do|v!uO|db~Xa zUQ9h5EZn^$4qm)vCRsf`7ot6Y=>TI3>MNcqKbKE`zbx)nS?uVy`m7^poM=chcWg_*tAxk5crnnk=|zXU$qZ%94MIDfrGfy}*s!>7EY z<10Jro$Wk>QL()(co#i>DcL0Q00^(4J<^>kd6aeVw@#-y%KFIv733 z-~qgzpM|_fpaebB>4Los_Zz*Zab-QBx)(jm&AYtABoaI(_Ov^adL%rmLfJgujdwk8 zJ3l-+%^1BT&;h%S1|d9W6FNI{_}M&Hul&3?-}t@bDVscNrA|GQkRiR~T_?R-*qOam zT@1bRg8w|U5thC3iE+JZc!9mN|Lr|5y9qvB$A`VWo=-b5xD7l{zAwG`!yLRNaxy*o zTyH$bO0+#^MV7t6jtM>G7Mi@-LkYeFF|WLvb_Knu#!$Rq$+x`}9DKSHm83i*qO(1P zj3hlJxtKex^=v&WZ|=Q)(YU)Nr4&3q*S5WbOjJGMf!4f&`Z+y4nCCnw>wvr&W0k#r za#y`qmb1J)#@xIDB27IiIek6jOIf@dI&{72aN9fuAmFC2x z3w^z(@}s@NG%CDxKMy@M6#+d)UrD^HFtNPx|CT-7SJb;v;-b5!B(6Nn&z?IH8#le{ zZy~({1!}!Z{n|X~s5w0;#uq(2(HOnkIDEXJXgK{IwZrr?qSA0CD!iquw5mN5v?V)&l-fPL%(FZV#7RBwDD1pD z$r3#U!+X8xE6F^-NCUl*PM*Dxq8Yq}%Okyqsi?dJF1b7?V>rEi*c?5gS%^K6sg=Ap z$}zo_$~?WK^~t>{%e}pH_sKfgA6dN_%>%uY$eKO;-{C!{3J|^fF2uaVz*N0w;#9rK zYZN^siy%DGu7AB}v!^}rOYpjekg`1aXm>qmo;ST+d!D?~=Qh0n^3^;|4;DOq!CE~z zQ`Ei9%tAaGV`RM|`n9|z;Wj-9IU7C>_}9E6GT1vke%!rJ1Pi@0Ea*IXS|`1gwK%<` zGJrk4MdZ9RkSRSaX7s(qIxae|yOcWIf(<<=A2mH$^%K1mcqF}k9p}72+}ym*OQ5|Y z@^3xs7LPm;*3`QUsf;}dv<1AX{fIr7I3+!4WPZJbp^CloBwW+*RtvtPax(dBC9ZfxEVM9Ee2x7do7yi4lYJ9vLAN9N*YmU6AH%Po+i$}d? zZQi>}Ee*X>_&Yl{sGL3ItPZ_Igk0slq*dvB$k! z1Ux;#LnytQV#B(0*Lpl)@1niQDW^OJY&^WhP=P(4vdX-HF5f)YQuDmB{_H$NcPG4f zpM*THFBm+55oJA_T64TQvxL3!lXg2XP9nYhPG~*v^p!lztwTIWOEo>lF_=8AOnf~* z2*o}3j1;@>P@25#=OVp|8CpGOuHicTb2vT2HuJp3xTU@310FqQdds{Ok>NZ)k<`0f z$!a|i=eIqxkLtT5JQ+RxIcPm8pEbPG1arONK2*IpIqp(;H%T1-4H zh~>LA^|id&gP%Ohx!b$ReUiOpM5#SOo(VliPy@Y8oH9KM&N@8_XxY5zbcH=E>W94$ zQntO2^l>}&e^)%{13NvdJEuL9{KdVz@7+A)7#+P?!iBtJUD!QjzPUU?IfOl&C;`1r zSdTrE3XvjUY`GLI#SPDHhoJG6}Y?r-=s#ra#-P1eA z;uJk(kL?#*97hojN7Pk^o~12=uN%vMn}9! z+!ni$2LrvRL#RE&RyMty)nL6iS{c2+dTBi`_GZ1qw=q54h@-vi*TFrwHsd|SFgraq z2?4!K!k{~rMToqt7Z*KBSR1|c@(aBzV6wbdlgqsL^?|)xHG{pxelb1R_xU{T9BsVa zAR@h=w^hB)4I@3@1S~x@q7S`_vJ$-y;wQbGGAF&}aPT}kSh~IO$4?gdPN@hLWQ53#o z9ko1Ybm=_oLN2}1EsMQ&A49x;59qv*pj5qcJQ6)^UxK?Rcs@PCurWQ>CIUTsJ~h3l z*$_R+(~!M3vW-17?UFr{-YY%etgyRJcy_%_NPN0{YlFS!pOrionan$mB^W)&c)&dL z?P)uAZGXLKbO}9M<9EH>(nUOcA3eQM)j&O-5vx5!Vzj+u2a3H1Q(-*|o#eT;^CZ1A zJ1IThXIngo^&h=)Vw*kx(1^WPI~}}w3}(IWiaI@BuXQ_|p%6WMsgb<1dVjsigW^15 zq<1<)*atfCpr}0;v^6~c0LDGRPUO8)Cs8{+5`n$m8U{RrbRInu)h<1#%oMzd4>}hT4%juZauy| z5ePeQJs~|QqMUfNu|5RYj3?U)DXRtqJce!#PB_+KqWfAV$wa_dFefSt)V-c7OuQ)bhvR1vvfG<6u`_4TeCT=}=KI^>mrHegdX+XRZ z_-#D>^bb8O%s;)(270|+Gs!&5PBz?eJA))u{2G48w| zRF1pl;xD~f(~G?2QzSk0-Gx2c3}QWbk(oW&PEx(=NvJ*graL_(I~F}G!?8NshHg8X zoUy$et&qJ(qbEG!rI0++t1LZ|JAXWiM#sJQq3AnX6Rthe1&qC#l~TNMvbVjbX&$^f zpPM}Z9re85ZLB@;hJri>laxKX`8YZY9k;#yAj!S#V&gpG*I+#+eRsX(kl;MI}UyOc}kSSE@ZsGQhn+g}6JB`Vc%#ABDUn;Vr!mcN4uZc8R->E^xi~m{hzka+jX0^TJ15i8;(V4y0 zv(UTy#D=|x;4!=xf+W2y)R{Yn5p%s$b*8;7Np!unhUmS@%X7VYl2g5_pW{4yZ~nYN zConxwoxr>gtHiuDCs@2cz@WVkWsa#r@ zktaSzPj@_$$VR;+kPbWK#alc14@JF|@c=wu_~1M>LqEO8h^;*@KOa1gN-{e^ca^*xtNjC8j(jTG>0oeek_< z_#-{97q2{sOb$EGE8D#C44FL?m4`ht0k=Gsmk_?9Bh);WH>150JiF-IqMm&5b-?Lx(-9$O=98 zw{bnyk9$3K?i{@sY1h4(ljFR?qtU!JF(p0Cg_1iu=6pRC@B=$P*{(bap0T`Q*Q>pE z;R8Lu=DWH}Wwg9sEw4O`)W4+Lk8(ZfB4s_dlodP8W{Eunl!-lfeTO|dC>^|6 z$dSEZD#bhHp0>P84Fx?c{#?B=aA-WT%+S5itaZIEu_iqEK&CsBS4}(gzXd&}*_AwWjO#sa8Hl`g z?wh@M|JJ;!-cUWFc^bTUeuz9Q7U(;e+PS>Rr+T_d@Kik3^rAc!wb4Dm?c_Y`cOkpC zGh;p8dD}duDkeMj0d+hXLsUIKJ%T-lx(B_Cj5R#`V#~aVIj}v@=Gwi*BE~&^KgK=r zwS7Hp1S7qbiK9Kb4VS%ocH2C)4IjO9VxPM&)Q!B__|rV32l6~uw2eKXt-(Bn1-893 z!n`~lS_i#1gNwXDC~3W{+FQM417f_EFS$GAp}4$ljBvf=KbgDdn%F#+M^rl{2~IuS zMV3AAfB(GHwGX_uC8Is0%!a)Rs(?KjBg#FrYxuowU+p}x1FF5lubsWDNtL{S+p9Z> zxyWu=&4^X{1$PGQ?n?F3$FA}}vsmML~(tJIQxnDiALW4af^*y~VU$#AdxEZ{- z%~d?WwF*7i?x?&m`SQHhVGz6f*#JG%?A$v;N#{Jo3MxI)W(2#4Q8c}XjAK0$R!qHh zQ;)n7egi%2Fv-1#>wmk^>e4;Hfit~C1+ zk+;1GZ|J;{WQje0jd(pENw_?R=ZQU2T)8}A;IO@k+nPL7O*%byHPgC97?HcJw>!P$ z%SpZ06DT_#3+BAQ{CPbmSlT>u1tz`+n9{xFQVBjoY??g;m_R+t4TZhv4m-Ot94x(# zSkpVY!;8J$jZ{73BBs5may&iRudThh=l{IIUpl?x=9oPQd#}559Y?(}W(z(y+F-kQ zIB&c{igdm2rVu@8sdK!0_cA=PMyk7Tz-2s6=t{lqfGIo^7|T2lTvok4bs9b5{^h*# zKSVqXr6;{?;S5>o+}9j)^^P+eAG?d5kW5QAm%*ajI=#K0U14gOOd^-xDY&W2^YQTpUpg)v(dX?wxqo&nEE_e{uaI5 z341*j{SiFI{zW}I>*c#d;#)nV^<6yhRJ^@XA`iWXF+DxYIHA3uVJy6FBE7swqo2Ib zUO>E4Kw&*K8SOmuPz=4+Wu!fXW`w;PlOR3D!;rmv1%x{z58u3ty2?6M?ToxXne#$oZoE85v4_0r9acRdrc*s= zf{DE7_-k-AqzdbJqJDCn1?*S$|k+{ z5bM01)vdh*->E%9ZKJxJ-Qm583tYV=$r`;D$zZ*p2oAl=0*<|;!Zy7XeStgzv9-J$ z*%dvw@~b^*5~RIXgBd(5dB;2x_JchHB9=X|lI%N11F1dmb*(#`T#P+WhoC(RjiS8O zw&^?!<&C`ukIT7dg3q{u!cIN1Rl>Z7Ba6JJzUn*a&AYt(-{n0ik;J`OC}KTwoXx!U zEh{`@Wf46P=f=IvezCm`%ppAuEnK~;nNB^M^@+W;A5lG-8$3NC$lE*2%rL&6qs#kd-{XROGw^ zDzdzT-nhG?$GyGAMw~r5Xg0l#E3Lbw4HPEPXo^1P8nR;7L6= z#GO4Xk|DjqM>D;RbX&c2knFv@Rwz0n+E6{Vp^3e^9sj()f8{;F|ByYu8lk=5)S*1( z*n&G>f#ba%;~YH~(E+-=$X`8JahE!$G`G9s5H~%=CAGcgn_s<`x34@;YnMF@0=vDk zwfVek6r;URp@Y4TM9n;xGD^MUof$p0>BzgwSDn44F%dnBRsK9wArQRarBl5KyA(Yq z9}7D91(rR}I(WPu76H84rkK1cCI&t5;3c~cBMrVv5!E`j?l!%#)i1q}h9fjk_5evG|j1~ffRNm{+Dl3%@D06?&YV2N1vI@1hSxk>dn!Hr zpaDE>(#Smt;!r(TEU~@VY#llX7^1xm@2)-7TerNqarnGM+?c)aD;+&u1Y^9UMWMa1 zUGO}Ia5KHG87sUocWpeeV0%4!&;vaRNrb%^ADcbP3f;Vj%A!5va~{39SFgN1^uIl| z0~$S42c$iG3thaQ<&C^bNg};YcFervW!=1mdG$HqGxj^nFd9AecHg}n7Cb#PzZgA* z*c>{Ctn9qM&4xFdHo7~JhJ(FVF+x4jn)xkf$66Cpi3*;u_vbyvK?a{N3RX3@NGMmIh0FJ3(sRTVrIQ!+i%Qgl7htX4dV zlYMnh^twKFVQ5(Hh-YGqbWXn8F&5yhhv8KC+ zfb+b)jFLUl>53zguFen8UCCIdZqj*Pt! zDLOrYhd8~ke%ZUI?l(O*4WGR=`nNqQ?TS0ogRML=XIMQIbwE4=k!n3?DlWYMKVZG4 zT%x_bJEXlZcPzZE2~|Aue1W~$!6>|NExj+|s;p z_|ZJ1My0*U#IyP!Q=Rpvc*x%E7gw-h~AQ^P%4u7*6aFG0K{ z>nXdhBEY@k+YGxB9Ui?SFjqWyV2Qm9IK?`srog@5ZfrR+6LLJ0ztucd^W(b%b6vdv za3{O@`lh|yUIRYSB89s-LXo@#PHnx}WbeEzI50gihTgq0GRnPo*H^tp;TXLy79P6- z@p`?aHr%{Bfi^v8dL_KCy*WDyMW;PjFj+kZyluU(|4zK0ibp+;nEJhF1ZX{svI#qZ zp&`8?N0+_skjFh=-E+N)o?AS(uJgQ9LXN#%^TWG$#Ra_(d5FD_>SVnZWw1Le5_r7Y zs#`npNj<$XAiO+`arivL{~A2zZ`Qn;JkY!XiMu`hmHj*(BbU3ppWZy%AG|!iaicuJ zv`IXSV}89UkQcqvo@YIqrno(+xRSkP9jZM5&4;|P%7nQKP)t1-I~P3oPOm*x5!Af$ z#T~t=05QGk!+^U3CzQO{7&km@BKbVQJytz1gAG2hw4yz+gebj%C=xwCpHDq$lwCa} zeZ@W9%oI>$E-MG0HodIuyNp^!~hG(%QYH z^C`W{S+qS+u%WyIn4`V4u#-Jp?aRCveviGZNQgb5?Yq1qh3vfjUxmGnBEG!Stj{}- zp+Y^p|2{qK<3~L>d=S0S=QBNJn;<;QPNF^T?6N%G4tqOtUbs9Hwz9pB53{{1$&71)RK69@agj^O?K?Nr^q_ufn`}>2tc8tqZ;EeEU4e-?BY}CW<|0 zP#C@D0@plFr1?CPfR;Vg@dLaiPe;Ai6$3thG2T4artrK@>2*D0G4H#6!w5Z7Tvn9GN^@a=*N9PUpQaJQX~#!0$XG=t;dJw-UYKr%=7bOtL#4Q<1&M zzTLbO_uD%N-Q_)N-Qm37GZek7naR8=3_ZO}R}wo5leN7Cpo+ZA8e=;FGYmcai3~l^ z89P0i=odYiKi56cN*&?if8}uKPTq^EW-;af7=-AsRg?GeJF@>5#l`LjXMizp^~zcAz{0xTd>E zgAcv&n2J3rEUdgx)2=*E#g4s77f8LQILtdB31&SNc~d?6F}%DlU)ekLb;-PV*TKAp zEHb^m#5%qvMGrhSU$48B6C1q}bBw%hZZKoK#V;P^BO()(zU%6roO#VuwXqEG)%mGmW;e@pIti<{I|Uz_E5cOjyJuOed9bm zUQ4?PSS`JyZ_2#~i)6iU8-Tpm7?Zqe25vp{+&Q`l)SoXtFGr-Qu`50tzo z7jiscdKx?)LI}RECl)-wsh2#Elv+LYUB$ijE{(m>$qR~1dlI~?k#{_}DaySw&viX#x?jEGN-({6O%gpsB^o`0balOM zQ$oG$hljfzF04GspfSC1o~^vhI1s$L;mSQ>HVeHA1VOy67+^gQD=IyN7)3e|856t3 zTn#-ySnWEz4LUoxND4ixXu7;5!l1n1*_6E(4X->BTuHs;Y0o_Fjb^;lr*J+0ax}g9 zpAtJV&k#LJ#W+1H7(hMRsXDw;1C6{p!L>WZ6vVug#L_&qaV>yoT0lx@p`>N z*v*{Ik0y6okB)h%3FwpOih*wI02P*FZe) zv8266#}_)PvZA?=3{X9BFsVEs*Y-Oy3XZ*(v2nXeAymCln>;=KRS3O}0>C_NV6Hth zW30Vy{$V|bYG}P1Y>T{RsO3G16eB%~j~cwK#8W)Bv}?T(W8b`)@xwg{I*YyM1iCwE zYl%7c3tPR)$g(_*UBo@0pCrBgT6H~%en35fhI_oBUT8hqg`GU`^$fjb-KaQFPs+Wz(u+Oh6y7{e$}UlEymS&;q@^uU5Q< zlX1OVHUqv$+}Au{@~=Dy%bGou^WQyFwhlXY7`wcvQmegD`Vl-=;|x9B5f(h= z3tYS?q_;h9Bn3N_Y#Kc<8_v8l#nU}BD961m`D8tg_dvc%sV=?FHvv5+a11>{Nyxm) z!k#?{2_HO1my5kGUJ^a_%UQjJKeWA)M|-`eeu}%$ZAQLcV0OE%O2WGbaCg0Cs<*rV zw9&kh8t6PKp+vo$eV#oge*is^^i92tb0oc7`=q@>YvDX_4351Ji(@>>G045QFH}7j z#}T`)a4S79%Gf-`GXlQ)Bs{!C(sn$?MfE(jtJ^&X5>vgqJBPg^IsrX3+aWzelW#q= zH$**%@uNIVzGgjkuvEPm+5$bQ)44k|*@-(M%SAoEZo|EIo(MexLd!jLMMORMDOx=( zp|ZUg;^n;*WsAHMBEvj%e~vro-3Y#8T%WoYviQ4k9Z0*Lgp56hb_Q^GtrF?BqD;UqmLy=py$$W1)X?b*FI*fu?6B2T>}Fg87ErK>zHB8R=r+v>a_ zY0o_Ik8Qk1@)kT^2n{?f7|1*p*UzNT1&>FmO<5E2|@;5vi(w;r-239>BvyVOC22s7#o}xXO zZdN^+84SH(TDCpnvrN4x%pW~9Jrcb(!%aJhT1h={vIV|9oAEp(C_=qnju|~o)vLX` z5O%%W@gqFox{W(jSb#k!;V3+>`oO$qc$+;aA%Q)i8G<;m>VmzD8dbe+ST?*WiATJR zmX^IM9{W7n&7-}a-w8c#iEBN+4Wqqe?Jej`2lbv3<14NJW_k6S&t&iT7ti3B~;T`s-+Bk4Sh%0oSabQil# ziebGStPQ$kxCT9)LNC4FcegsKLTo(r`!l_fGeSLXS4}=_)y=!1JFB~uT1-8t;3hr3 z6Qn%T92q*^*PXj2f5g0+D5gD}%nUtv+C07VbOt@-$eFz<+)+Ii>?%D3%+Ndm<&VAX znf*P`LX15OOOU&W|{|UWL6| zx}QC7a1uU&pB=sbubMjcH%h(rc9Ff=MwUH!%~3t_nW4NmDxy3I17JOF;>kNQqqDp! zA(%Zonn%51D}+4hRR=!Cqpmxrpi4dbMK?V_RgS$_ya~OZ@tM6I0T;c6Lx;UpH4MF} zB}+XckiI*?7DzkN%@Dq4-7CB(5lp>yW@$ZR_*6ZZQx&{&3Y0sH#dbY>Td6z+OFld& zFmJqwaL~L=U$H$-X(qj}5MR7_-d8-gBSt-G?t(q=At1etmM}dHSlYbMpZL5-gBU#{ zRRq1%2`0Pa=E6M-QLsCHQbWD0C#<=#@q#;SUogBK`4l~yA*4OTq?)}MHpaYn330ql zfb=}GQ^CCx^3uIwSaH3-4~;#m-GMy_ew4h9Lv*~8QK{EC9W{JT<)fG;=-Y(Kx+~LlnHe;|V?E(~CTB4}Uy-CBD2F-0?k~U_doh-`L( z03^H_YCS!^rTja4R&c$|b1Oanvzj~s_@X_ot1`WBbK$)pO%Ofai&wpMfA+gu&$T=l z+=D%~-v~WWQSCfLtAxD?x4^t+`LR5Kw4gl)42C@^x5d1!=fJ#qTsb`}8$-I?Jq5mZ z)Q7x~s53pi08PDAL}0zGZFs#O5TiXTP2W6rp}4(Z38=ii7$UuuDq}ql2&%no;zPZQ zZWFs`9soUG{HZ&Kb2+_%ffT(Ll&m~i!O=W#9N9g7>sdYUL|;2do0>gG7nZxYqftG+ zt-iX4$5FjSzFRxlio-m_B_2H?uK+!~WS~3#1z9|^2=Y7|3}3zPBy7FSr*=Koy?i~G z;yOJuih;ZWkA=JdkU2e~G+Dj#>XE%TqlZ1(%Lls|WB5Gt%K^RHt%AM$=XpJA4x&Bg z<5az@XIH(~CaAovtBAcX$b3Bbv5LEh3MD*p<0w5wF?Kv-@-MyPOe#L{!m~VyW!yZ9 z#%8_WkPo~XeFwYcZCpIO=jOezvrRqvMToo=z7jpmnJ~SYOg6osjV?WQx|}`0h#S2% z@x8s@v#Y%W6%##5ia|Xqez-k>4okdQau2=)5h*;NbEP~~I_fpm;q>x}Ur}FUGy7vJAb?cd0zZIkG)$A?rLn@QOT{l@L8oyz@KE31dC6 z>1{nJk>0&rJAyp?Zz#T1U^6>l+GjmVTi89jzbd}ULOwmSELps;=0iQynMJ&6Pl!D) zpS(Rk2JJpW(df zQW(8TS1Y?f+$O!et2wf73!yy@ z+`YSW(q+8>*)Y9?h`+r7fN?z`f+xK%$VohG+nv46qgg!$n}9uzCy_mwM!P&Zk>Twz@l6Hx|9bz+XL_aD+Wil7~GMBDOq?l_tGuac8@H692k5{7AiS zeC0dh(!ssubSS>mVSqhy-F7`a7Mi_DAGkaN%!WJ#P?|md z8!A0(_?5fP0Bk(!_=>y%$&)+umXtlP1LnNhM;bi_r6IlR86mwD5?DPcL*zWR_XWKN zJB+%@@yER<)|oy2ee%3yhMB!pnOnWVk&3;xVX3_#WBI%pI!-)w|JW(+=X%#=Ledd|QfU7+;f`&Z&k$^id_q;r}lOH}5bNxI^DIYy{3tc<`G&(&@SExHY14})# zzHmJzEO5Q)MYy`oS+zZAfy6v*P?kMXK!?4bg6}-H&hNb2V(q+_nf^RQwJ5w+adEtX zg(y808k0SY(>OiyUjsbx5{$i%#?iYU8lO7=2W>o&E%Cjk7+t+4)up_-?8-cnu^zpc zg$%u%(BHisg|j?R(ULrDiYL9WP|LiymySJH;cLBYQ}{f+K?%OrhS0oJXWPAdi$*=n z(Xzd2O6j~h^q9OuxSG8DO_jWvlv+KgvNF9Z=H9#3z^c83D%rfZyJo#})s4KEEaW{A zYLh*%@C7{8!y7!KJT*P*0Smp}m!-S`@q;}%nM%DpBa}Q3Lp43y?MpmGs1dyLax%WG zT2?*k)4e)g(dN74QK;??Pnh^&*;=yS>&K_|+yN#;5`9OHQbLJAg z20Pk4Pf-j#X5R=tcl2mH_@Kf&J)oXFo_0C87*KG$x8DlA6{f(un_n9}5|6sP`9jyd z2*ap5Z^2`{B$@;~USEy8EK8F-y*2^9s>Rd1TcP7UmTnupcJqxrWTMBsW;MRN?!+iP zVo1R~T?Qq+ieRg~*Im=REPWu4EUYA%S5ofDF_lhpQS=Qx07SMTDgO{UOIcd?w66h*zz*H!-mW~?~!gj zi)39r3a3-LQJAMY2VopNa?yjmjAP-vadykR-F+ZDe0hDnb7L|+sUg9=xWO;I($9&! zBh`#N56T2RHhMNac>2mcC!-HNUT)XAtPxQ?pqYw0=*?=qL0)z}PWd4%gcHs>V0M$%qAF+YX8`jJ3A zT|v;i+Ss%`!HLK`n4##snF+(ddJ0#0J=QD)7@uEPzYjLc-=xTGlH*70Bpiy$Y{2seI zn#1-zNKjTh>SAg=F*Y2$g6^R_doRu9sQK5vY@Z|m*6&+PuZ*nQBvDHr3t_*$+zn4rMDS;>RFVdqypj=HlvTN3;{ z3a*U2P^t~S)8cWw9q&FpJGS{ey$rHEt{{rN#rGS$8C?H5gQEMqb108J{wB^l1nnQa zQ?mCwY_Ehpdoq!{Q$(Y^%14GfBf#%GQg~TB`DEU`6NloxmDB&dhA1q(tE~;acr3NO zYc6uVK3Ooja_uQSqlI?62C{QHoehn=dD)UYR`Iz!pPcPIY-Z%VElKdV6z__?S$GIM zma*hLO$cW^?pxM9*CZ6Z-~D~PdHR05z1_0B+Svy@)ScG6@&y<=IyAPuBe#>hrJ}>V zgg{+7QXU~ZB<7kuR~)Z9S1f3}1A3u73?V!{DyF!+4|svST#yaD`QNd4q5?WHd zhD@tGaM(b-YSm!915gG&R_ez*R*?I=5X^|Zo1&(?begL?D$$=kQXZMSDXQB&;u1eT zg=j=QnXWCpS-YRTrJe)5N4LVf2I4op!EshR?)xXb)YyVO!+)(j;UH$c={Fj@Mu!8u zoP*T7BDkGApRQ;;iH2W22^osLU}!i!>O-78ikDnHR{N1X+$gg>*ky~oPbeO|qjR9W zxk;nF!?zwi{#UWQj6YVrDW0`G7II|0#@uB*Ya>KGUrQ~#TB4{ts21M52@Qh1_gf=9 z{K=%e&}uHcM$8?(hjC@SQ;)DVg2bM^aDvOcD|)^> zyM`mZXsNwCiMby#m@G1l$8$P0@+^BbBy0|92e;{pvllZzTX^GCToV}psk`yC8B zv&wwE#1_FknX39c`-IFqp=fxyjf*P1KPAw-Zq^aJZY;CBtUc_!R=fqhhWEd_)8@{+ zpOB?H5im#hJSpcKFI&-SM?EAJo3D>>6l&3U2@@-$e|2y3~pQWWeirz~+ z{0HzmNO%lA0S=HmnPeEfzSd$qFdEFgf^jyzMZN$%$^5H4C|5r{D=5D^(B>vQk{vfZ zM-gPbmDnHx3{mn=HYKWA4Eqz=Dx%{qmx z>hbit`5(%=!y(x{@4A&dWV63LSiJx}3v3)d5`e6{CDz=$hAkAkMbB3~KRlT|X1Yv0 zY`T-Z4%Yd+K;XW;kas6N-Ha~1DWW;OZx* z3NGh8=(AS6H`b6mAH4>=39-&SC`NC+(DMjAJ@S%05ku)b)txWB zT_)qY-(4R)$te{)q+6*y^F%~DXDmp)YgkykX{}2=b46Ue?diL{R@{+2bE;}R_sYRN zoO3ljiJStxwQ$S5aZPu<`ut!$^hH-a41C1B+SR7KFNoDUGVdEb?sH?k`@ohx4q7Qa z+Ca@b)qU^0%czMvmYboy@PFz(45Q^dvARG#*?i$UN`xRhp&(T~;5jC`eI2Yl z=U`mC?`VWPCk$`B{<4WYHWqCKV5QfuG53h58MmkG_iOnA*aR8kqq-B>Nvc+me>Mz;kE1>k7_1I`bdAUV!Yq z>%3jP5DbRA6mY9ON-5wxYx7OLVVs&hJDnaq!?;I0626nY6|a)g$qKws4R87 z2E!J;GKWFEmRlOV^RCOh4TIOac7ymldS2taK#w}T^A$zC1KcgW<+KI9%y4MEn~0R^*?(O!O2z z`RE6|1j`jXmds1NmKR#Q)@isri(%6|!#%LP0VeFba;N3InN6m;4Y_+ge~8|@U&Rx> zc_@)RgW>$Wz@t08ely>@m-ETIH zeG37-;59iro0%88yKibe-c?{d7R;AD&VdU&j{~MXN!2{PYh=DVU4kpUJA7`vkICk| z(Ifdh{R^7BP3$1L5VIw{b=pHb384wTrEMKP;S;evc#TE9rPsE-y;q|b=1{u$A#VLtXPcPpq-M6K?FhVi|0`7W#HP zd`=HNcL%{dcjGg?`jIxhtYDKpkZEYW*tIV`r+zuThy~)juY`HK!o##ZgIg56KgY1W z0ztLB+9(OTL>o9g7!}vMyq8725R8RA2r{2LaLCR**MHeO!ivhgl>4B(w8?3_n&&BP#QV>Z_{#u2Cl{Eyc&t0UH$4hHdp)qdcJb=GWG*qiovCX*J8CXHqAjaD zsb6e8K!B3GRBDyHFcpkFw}!4f+h}1sOe>SUHzA|Dm4XdDnzrt|LE3XWZr7i^)uGEh zlvtuYVL@j+!m^`0K(UKFBj{E;#3yh)dZrY;LDu-Zu4bk^0niS;>S=(zUbp@{SJ%M1 z>Kai!HS#1mB_2sSR&uF4gZi>NYFQY)1#T!ik^gqRf)2erq_ uasZCwwUTX^f+HT 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

=e&4-)?=`*e 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�orn^~}BLFf+X^xY;}T{}w&U`~|&9v2r~y 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 z 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 z0CPV80DV6I07pLn00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000009HQ$0DV6I07pLn0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000009HQ$0DV6I07pLn000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000009HQ$0DV6I0BSz~03kmB03kmB03kmB03kmB z0N6bM002Ay0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000009HQ$0DV6I0DV6I0DV6I0DV6I z0DV6I0DV6I0DeCJ02n_20N6bM06;td00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000009HQ$0DV6I0DV6I z03kmB0PsEl0PsEl0PsEl0DeCJ0DV6I0DV6I0Ng$R0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000004zQL z0LDH500000000000000000000000000DwLK069MZ0DeCJ0DeCJ0O~#f0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000N6eN0Ej*S06ISa0DV6I0D38z0H{3x z00000000000L(rB0DV6I0ChhA0Ej*S00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000002G!0BSz~0CPV8 z0LVQ60000000000000000HQts0DV6I0DV6I069MZ0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000003<#D z0DV6I0B}D50000000000000000H8ep0PH>h0DV6I0DV6I098K#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000003<#D0DV6I0CGP703<#D03<#D0K`53082jr0DV6I0DV6I0ChhA0NOqP00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000003<#D0DV6I0DV6I0DV6I0DnIK0DV6I0DV6I0DV6I0CqnB0N6eN z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000031F50C+zD0DV6I0DV6I0DnIK0DV6I0C+zD07X9l z0GvJm000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000003kmB0DV6I0DV6I0DnIK07O3k z0GK`i000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000NOqP0DnIK01ZC? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000001!U_ z0DeCJ05LxR0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000009QW%0DeCJ0BJt}0H!_w0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000017_<0DV6I0DeCJ0DeCJ0DV6I08T#u0H8ep00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000MI=E0CGP70DeCJ0DM0H0A)V_0DM0H0DeCJ07*Xp05ClO00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000060GY0DeCJ0DeCJ00}<;000000K`530DeCJ0DeCJ z0Q^1x000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000008>8z0DeCJ02e<1002Ay00000002Ay z002J#0DeCJ0B%1300=$+000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000008Bps0B}D50O&mc00000 z000000000001!O@0CztC0DeCJ0AxM@00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000001Q3=0JuE> z000000000000000000000000000}<;0DeCJ0Qx=v0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000Fpic0DeCJ08c*v000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000AM`;0Bb)00C_(E00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000N6bM0CYY8000000000000000000000000000000000000I)p(0Bt`2 z0C_(E000000000000000000000000000000000000000000000000000000000000 z00000000000Lnf909`)-0C7J60D30BJt}031I6000000000000000000000000000000000000000000000 z000000Qfxs0Kz^105d-T0DeCJ09`)-03AO70GvJm0GK@h00000000000000000000 z000000000000000000000Kh!}0Kh!}00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000001!O@0JuH?0JuH?05LxR07gFm0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000001rO^0DeCJ0DeCJ0DeCJ06ISa z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000DwFI0N6eN09ii(0DeCJ0DeCJ z0DeCJ002G!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000005ClO024m|0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ002G!000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000003$yD0DeCJ z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ002G!00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000008l*u02e<1 z0DV6I0DeCJ0Bb)006jkd0O&pd0ChhA0DeCJ002G!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z03AO70DeCJ0DeCJ0D38z0DeCJ0DeCJ0FFKY0000000000000000O&pd0DeCJ0DeCJ z002G!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000008&2y0DeCJ0DeCJ082jr0H8bo0000000000000000O&pd z0DeCJ0DeCJ002G!00000000000000000000000000000000000000000000000000 z000000000000000000000N^|T0J1&+0CGP70DeCJ08Bps002G!000000000000000 z000000O&pd0DeCJ0DeCJ002G!0000000000000000000000000000000000000000 z00000000000000000000000000000007gFm0DeCJ0DeCJ0DeCJ0Kh!}0000000000 z000000000003ba804hHK0DeCJ0DeCJ002G!000000000000000000000000000000 z000000000000000000000000000000000000000007gFm0DeCJ0D300000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000003JU80DeCJ09!u*0P;Qn0P;Qn0P;Qn08Bmr0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000AxP^0DV6I0DV6I04_fO09-!+0DV6I04P5I0N6eN08l;v0Khx| z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000AxP^0DV6I0DV6I0E9jO0FXTZ0MI=E00ce&08u{x z0C7J604zTM03ba800000000000000000000000000000000000000000000000000 z00000000000000000000000000000001Q3=0Bk=10AxP^00}<;05ClO0000000000 z000000JuH?0DeCJ0DV6I04P5I09-x*00000000000000000000000000000000000 z00000000000000000000000000000000000000000N6eN0DV6I04+ZN0000000000 z0000000000000000000006RYb0D3w0B1h{08T#u07gFm0GvJm08&2y0DeCJ046^G00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000N6eN0DC_G07O3k09-x*0DeCJ002Dz0LDH5000000MI=E08c*v z0AoJ@0H{3x0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000075?i07*Xp0FXTZ03bd90DeCJ000000JuE>00000 z000000JuE>0DeCJ0OURZ000000000000000000000000000000000000000000000 z00000000000000000000000000000003Sa90CGP70Ej*S00000000000000000000 z0000000000000000000000ut*0Bb)000000000000000000000000000000000000 z000000000000000000000000000000000000DwFI07yRo0OCFX000000000000000 z0000000000000000000000000000000Bk-00CPV801!R^00000000000000000000 z0000000000000000000000000000000000000000000000N6eN0DeCJ0PsBk00000 z00000000000000000000000000000000000000000Bk-00B}D50Kh!}0000000000 z00000000000000000000000000000000000000000000000000000000AxP^0Ny?T z000000000000000000000000000000000000000000000000000Bk-00C7J60PsBk z0000000000000000000000000000000000000000000000000000000000000Qfxs z0CGP70BAk{000000000000000000000000000000000000000000000000000Bk-0 z0BSz~000000000000000000000000000000000000000000000000000000000000 z000000G>Vo0A@b`0JuE>000000000000000000000000000000000000000000000 z000000B}A40Bb)000000000000000000000000000000000000000000000000000 z0000000000000000Iog&09HQ$0000000000000000000000000000000000000000 z00000000000000002My~0BSz~0000000000000000000000000000000000000000 z000000000000000000000000005CrQ09HQ$000000000000000000000000000000 z000000000000000000000E#{U0DeCJ00%z+000000000000000000000000000000 z0000000000000000000000000000000000005CrQ09HQ$00000000000000000000 z0000000000000000000000000000000OURZ0AD`<0FXTZ00000000000000000000 z0000000000000000000000000000000000000000000000Lnf90A)V_0JuE>00000 z000000000000000000000000000000000000DwIJ09ro)07O3k000000000000000 z00000000000000000000000000000000000000000000000000000000CYY80D3w z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000006;we02x030DeCJ0D%90003G)000s{006)|0000000000005Rg z003q`002Zk002Nf00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000007QD003w|004eJ003-1003)0 z003-1004VG003e?004A8000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000007uM0090z z004GB004eJ004eJ002-w002Nf0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000007cH004bI004bI z001{X000y}000y}0081X006K(0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000002Ng z004YH004YH004YH004YH004bI004YH001FB000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000008hk002!t003t{003t{0028b003-1004YH00447001aH000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003Y;002`z004YH005{y00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002He004YH z005{y000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000z008zr000y}001sO001RF002@y z004bI003w|0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000137004YH004YH004YH z004YH004bI004YH004JC004YG0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003A%004bI004YH z004YH004YH004YH004bI004YH004YH001;U000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000007iJ z004bI004YH004YH004YH003e?0000#008hl003P-003t{007`U000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000059Z001RF004YH000|5005dk006)}0000000000005>w004YH001sO00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000m@002xs z004bI0059Z0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000006W;004YH0022Z000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000!003w|004SF003w{000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000003-0 z004kK004kK003A%000000000000000000a>004bI004YG00000000000000000000 z000000000000000000000000000000000000000000000000000000000000008(t z002`z004PE004YH004YH004JC002`z00168004MC001XH004bI004YG0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z004MC004eJ004bI004bI004bI004bI004hK004bI004bI004bI004bI004hK004YG z00000000000000000000000000000000000000000000000000000000000000000 z00000000000022Z004bI003Y=001aI001aI001aI004bI004YH004YH004YH004YH z004bI004YG0000000000000000000000000000000000000000000000000000000 z000000000000000003-0004PE004bI004GB003V<0090z0090z004bI004YH004YH z004YH004YH00416003w{000000000000000000000000000000000000000000000 z0000000000000000000000000005{x002fm004bI004YH004YH004YH004YH004bI z004YH004YH003-1000p`000a=0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000059Z007WF000v|002Kf003D( z004YH004bI004YH000|5004wO0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000O+001#R003e?004eJ004eJ004eJ z004hK004eJ008nn00725001aH004kI00000000000000000000000000000000000 z00000000000000000000000000000000000000000000z001^W004bI003@3001sO z006c=003A%004A8003h@004bI004bI004bI007250000000000000000000000000 z00000000000000000000000000000000000000000000000000003}4004bI004bI z005vq00000000000000000000000<10037%004bI004bI008Db000000000000000 z000000000000000000000000000000000000000000000000000000000000001OD z004bI004bI004$Q0000000000000000000000000008hk004PE004bI001UG00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004kI002)v004bI007WF00000000000000000000000000000#004bI004bI z001;U000000000000000000000000000000000000000000000000000000000000 z00000000000000000000002Ng004bI0028b00000000000000000000001;T001IC z004bI004bI008Db00000000000000000000000000000000000000000000000000 z000000000000000000000000000000001OE004bI004SF0059a0000000000001~X z002%u004PE004bI004bI008Db0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001yO002)v004bI004DA008tp z0009&004eJ004JC001&S004SF004bI008Db000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000008hk0031# z004bI004bI004bI003b>005dk003}3004JC004bI008Db00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000z006i>001~X001~X003Y;00000007`T004JC004bI008Db0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000004|W004eJ004eJ008Jd z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005{y004bI z004bI008Db0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000s{004bI004bI006u`000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000059a004bI004bI0081X00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000004|W004bI004bI008Db0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000004|W004bI004bI008Db000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000004+S004bI004bI001LD00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000004GB004bI z002in0000y0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002%u004bI004bI003}3000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000787004bI0000#0000y00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000O-004eJ003P-004A8003Y<006i> z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000m@002=x004bI004bI004bI z004bI003k^002=x002@y008bj0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000062!004bI004bI z004bI004bI004bI004bI004bI004bI0031#000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002-u001dJ z003G)005>w000a=006W;000I*001pN000F)000I*005Le00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001OE004bI000#~00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001OE004bI0006%00000001yO008(s008(s008(s0059Z0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000001OE004eJ003z}001~Y002-w004bI004bI004bI003b> z000d?000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000787004MD004bI004PE003n_0031#0031# z003=2004bI004SF003$~004YG0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002-v003}4002}z006)} z0000000000000a=007E9003G)004bI002@y001yO0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002ln004GB004bI000<2003}30000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000006o^004bI004bI005Xi z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000006)|000U< z004eJ003Y=002Ne00000000000000000000000000000000000000000000000000 z000000000000000004kI000y}000|50000y000000000000000000000000000000 z00000001yO003V<004bI007WF0000000000000000000000000000000000000000 z00000000000000000000000000009&004bI004bI008bj00000000000000000000 z00000000000000000000003-0004bI002Wj0059Z0000000000000000000000000 z00000000000000000000000000000000000001RF004eJ004eJ002fm001~Y007`T z000000000000000000000000000000002-u003D(004eJ004qM000000000000000 z000000000000000000000000000000000000000000000005Le00478004bI002Ti z003A%005vo00000000000000000000000000000000000007)R004bI004kK00000 z000000000000000000000000000000000000000000000000000000000000001UG z004eJ004VG003$~000a>006{3008Jc0000000000000000000000000005#s004eJ z00106000000000000000000000000000000000000000000000000000000000000 z00000008(s00199004bI004bI004bI004eJ00416002Ed001UG006c=006c=006c= z001>V004eJ001OE00000000000000000000000000000000000000000000000000 z00000000000000000000002Nd004A8001>V003A&004eJ004eJ004bI004eJ004bI z004bI004eJ004bI004JC006)~0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000m@006i?001pN004bI z004bI004bI004bI004bI001{X006u`00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000007WE002ln00105007iJ001~Y004PE003A&003A&004PE003q`003)0 z003}5006{30000000000000000000000000000000000000000000000000000000 z00000000000000000000005dk003b>004eJ004eJ004eJ004eJ004eJ004eJ004eJ z004eJ004eJ004JC0037%000d?0000y00000000000000000000000000000000000 z0000000000000000000000000005vo00447004eJ004eJ004VG002}!000a>000a> z000a>0062!0000!0000!002Ti004bI004eJ007`T0000000000000000000000000 z000000000000000000000000000000000000053Y004eJ004eJ001OE0010500000 z00000000000000000000000000000000000001sO004eJ001&S000000000000000 z000000000000000000000000000000000000000000000008Db004eJ004eJ007uM z000000000000000000000000000000000000000000000006o^004eJ004GB003k@ z00000000000000000000000000000000000000000000000000000C&003b>004eJ z001>V002Nd000000000000000000000000000000000000000000000001LD004eJ z003b>0000z00000000000000000000000000000000000000000000000000002Nf z00447004eJ007iJ000000000000000000000000000000000000000000000006)| z002Ed004eJ003S;00000000000000000000000000000000000000000000000000 z00000005dk004eJ004eJ004qM0000000000000000000000000000000000000000 z00000005Le004eJ004eJ000U<0000000000000000000000000000000000000000 z000000000000000005dk004eJ001aI006)|000000000000000000000000000000 z0000000000000000000#004eJ004eJ003Y;000000000000000000000000000000 z0000000000000000000000000005dk004eJ002`z0000000000000000000000000 z0000000000000000000000000002%u004eJ003w|004kI00000000000000000000 z00000000000000000000000000000000000005dk004eJ008_x000000000000000 z000000000000000000000000000000000m^004MD004eJ000+1000000000000000 z000000000000000000000000000000000000000000000004|W003k^007`T00000 z0000000000000000000000000000000000000000002lo004eJ004eJ000g@00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001C9003G)004eJ002`z z003}3000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001aI004eJ z004eJ000v|0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005Xh z00447004eJ003k^004kI000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000003}3003h@004eJ002in0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000004$Q004eJ004eJ005Rg000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003=2004eJ002lo005vo00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000003`4004eJ005#s000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000003`400137007`T00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001mM000#~0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000006Q+004YH000y}000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000008(t004JC002-v00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002rq002=x000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000105003z}000X=00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000009&004eJ0000#0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000009&004SF002Bb z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000009& z003G)000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000001RF0037%00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002Ed0009&0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003M+0009&0000000000000000000000000006K( z0006%0037%004eJ0000#000000000000000000000000000000000000000000000 z000000000000000000000000000000000C&00416000|500000000000000000000 z005Le0037%004eJ004eJ004eJ003G)00000000000000000000000000000000000 z0000000000000000000000000000000000000000001C9004DA003G)0000000000 z00000005Le004PE003=2001jL008zr004DA004VG002Zj00000000000000000000 z0000000000000000000000000000000000000000000000000000000001jL004SF z006)~00000003k@004GB004hK000v|0000000000000a>004eJ002-v0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0009&004eJ003@3000<2002-w004eJ001jL0000y0000000000000v|004MD001mL z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000<1003P-004eJ004eJ004eJ004eJ005#s000m^006>1000C(004MD z002%u000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000<1003P-004eJ004eJ004eJ004eJ004eJ004eJ z004eJ003b>001aH00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001~X004PE004eJ0041600447 z00478003-1001dJ008hk000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002He004JC z006K(006K(007uM00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z007iJ004DA0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000081X001mM0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000<2002}!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000<2000+100000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000000<2 z000+1000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000<2000+100000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003z}007=T0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000005*u003Y=005vp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002ur001IC0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000001yO0031#007KB000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002xr004YH005vp00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001pN0009& z0000000000001yO006i?005{x0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000001OD z004bI002ln0000000000002xr004YH007KB000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000007KB004eJ002ln0000000000006i?004bI004eJ001mM004MC0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000g@0031#001C8004MC001{X004bI004YH004bI004YH007KB z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002ur004eJ0009&004eJ004bI003$~004bI003Y= z005vp000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000002ur004bI004YH004bI0006%008hk z002}!002ur0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001{X004hK0031#005*u z00000002xr004bI003Y=005vp0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005vp002ln z001C80000000000001C8001mM002ur00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007QD004hK002ln00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000004A8001mM001C80000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0068$004hK003k@00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000068$004hK0087Z0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000068$004hK001gK000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000003k@004hK001gK00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000068$004hK001gK0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003k@004hK003e? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z004hK002fm0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001gK004hK000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000001gK004hK003k@000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000001gK004hK003k@00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001gK004hK0068$0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001gK004hK00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000087Z z004hK008Jc0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000068$004hK0068$000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000068$004hK0068$00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003k@004hK002fm0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003e?004hK0068$0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001gK004hK000d? z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000068$ z004hK004hK0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002fm001gK000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000003G)004bI004bI004hK004bI004bI000j^00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000005{y003-1004VG004VG004bI004VG004VG002!t001OD00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000m_004VG004VG004VG004bI004VG004VG004VG z0053Y000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000005>w003-1004VG004VG004bI004VG z004VG002xs001OD00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003D(001pN0053Y z004bI004VG004VG000g@000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002}z004hK004bI004bI000j^00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000004YG003P-004bI004VG004VG000g@0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003w{003t{004VG004bI003q`002Ed005vp000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003D(004VG004VG003P-004A8000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007cH00416004VG004VG001;U0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000005Fc004bI004bI004bI004bI001^W z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001yQ004VG004VG004VG z004VG001;U0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000006u`003D(004bI004VG z004VG004VG004VG00786000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000004kJ001gK004VG z004bI004VG004VG004VG004VG007)R002Bb000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000000y| z004VG004VG004bI004VG004VG004VG004VG004bI002@y001;U001;U002xr00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000y|004bI004bI004hK004bI004bI004bI004bI004hK004bI004bI004bI z004bI004hK007uN00000000000000000000000000000000000000000000000000 z000000000000000004kJ001dJ004VG004bI004VG004VG004VG004VG004bI004VG z004VG004VG004VG004bI007oL0000000000000000000000000000000000000000 z000000000000000000000000000000007!P004VG004bI004VG004VG004VG004VG z004bI004VG004VG004VG006)~006E&006i?000000000000000000000000000000 z0000000000000000000000000000000000000000004MC000g@001vP004VG003)0 z002Ed004VG004bI004VG004VG004VG0053Y000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005{x z0053Y004A8008(s0053Y008(t004VG004VG004VG0053Y00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002Nd008Db004hK004eJ z0022Z006i>0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001C8001RF004bI z004eJ004bI004bI002Zk000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000003Y;001~Y z004bI001yQ006i?0053Y003G)004A9000y|000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000004+R z001;U004A9008hl0000y0000000000001C9004GB003A%006)|000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000001gK004A9005jm0000000000000000000000000002Zk003S;006u`00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002xr004GB007`V000000000000000000000000000000002Zk004bI z001OD000000000000000000000000000000000000000000000000000000000000 z00000000000000000000008zr003e?003}300000000000000000000000000068$ z004GB000?3006)|00000000000000000000000000000000000000000000000000 z000000000000000000000000000000008zr002xs0000000000000000000000000 z003w{004JC002rq000m^000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008zr004SF007cH0000000000 z00000008Jc003b>004GB001OD0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000006>1004bI004VG z007QD00000007uM003S;004bI006>100000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0062!003}5004eJ001#R003b>004hK001*T000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001OD002xs004bI004bI004eJ005Fc00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000v|004bI004bI004eJ001gK007`T00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000z0034$004bI001aI002%u004bI z002ur007WE0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000008(t004bI000?30000y z005vp002xs004bI002!t006)}0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002-w004bI z008Jc0000000000004kJ0087Z004bI004qM000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000002Ne z003k^001#R0000y000000000000000004kI002ur0006%00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002ln004bI007iJ000000000000000005vo007E9003n_007)R0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000a=004A9004A90028b000|500168003@3004bI00478000a= z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002-v002`z004bI004bI004eJ003P-007=T z00786000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003k@004bI007QD00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003k@004YH004YH005Xi00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000m_004YH004YH0081X0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001dJ004YH004YH0081X z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000004kI001*T004bI z004bI0087Z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z004YH004YH004YH0081X000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004wO004YH004YH004YH0078600000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000d?004YH004YH004YH000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000d?004bI004bI002He00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000d?004YH004YH000X=0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000d?004YH004YH000X= z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000d?004YH z004YH006W;0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002xs004bI004bI007`U000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000004bI004YH004YH007`U00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000004bI004YH003Y=005Xh0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000007E9004bI004YH001aI00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000087Z004hK004bI003Y<0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000081X004bI004YH003Y< z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005Xi004bI z003z}000y|0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000?3002Zk00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000005vo002in007WF0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000005>w004eJ007QD z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000y002=x z004eJ007QD0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002Nf004eJ004eJ007QD000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000028b004eJ006K)0000z00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000003-1004DA001aH000000000000000000000000000000 z000000000000000000000000000000000000000000000004mhe*gdg0000000000 z00000000000000000000000000000000013J^%oCKL7wrKL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000001(J^%oIKL7x#J^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002=J^%oIKL7wc zJ^%m!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000f zKL7xJKL7wcJ^%m!00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000WJpcfHKL7xJKL7wcJ^%m!0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000WJpcfHKL7xCKL7wAJ^%m!0000000000000000000)J^%nUKL7w? zKL7w?KL7wOKL7w6J^%m!000000000000000000000000000000000000000000000 z000000000000000000000000WJpcfHKL7wuKL7v#000000000000000JOBXZJ^%n} zKL7xJKL7xJKL7xJKL7xJKL7w;KL7yuJpcdz000000000000000000000000000000 z0000000000000000000000000000000001hJOBViKL7wuKL7v#00000000000002E zJ^%oIKL7xJKL7x7KL7wSKL7wSKL7xDKL7xJKL7yEJ^%m!00000000000000000000 z0000000000000000000000000000000000000000000000000fKL7xFKL7wQJ^%m! z000000002?J^%oIKL7x7KL7xZJ^%m!0000000002KL7xJKL7wJKL7v#0000000000 z000000000000000000000000000000000000000000000000000000000000KL7xJ zKL7wHKL7y0JOBUy0000;KL7xJKL7yWJ^%m!00000000000001ZJ^%oIKL7w|KL7yW zJOBUy000000000000000000000000000000000000000000000000000000000000 z0000?J^%oCKL7xJKL7v?KL7xjJpce@KL7xJKL7wXKL7xdJ^%m=J^%pZJ^%oCKL7xJ zKL7wJKL7v#0000000000000000000000000000000000000000000000000000000 z0000000000000000000tKL7x8KL7xGKL7xCKL7xJKL7xJKL7xJKL7xHKL7xEKL7xJ zKL7xJKL7xJKL7xnJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000000000000000002yJ^%o9KL7xJKL7xJKL7xJKL7xKKL7xJ zKL7xJKL7xJKL7x3KL7v}KL7w6J^%m!00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001-J^%nTKL7xJKL7xJ zKL7w`KL7w9KL7w6KL7xPJ^%pdJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001VJ^%nGKL7wHKL7wH zKL7wHKL7wZKL7wSKL7xzJ^%m!0000000000000000000000000000000000000000 z000000000000000000000000000000000000002sJpce6KL7wlKL7xBKL7xGKL7xJ zKL7xJKL7xJKL7xJKL7xJKL7xJKL7xIKL7v$KL7v#0000000000000000000000000 z0000000000000000000000000000000000000000000000000mJ^%oIKL7xJKL7wg zKL7yIJ^%ogJ^%oSJpcfRJpcfRJpcfRJpcdzJ^%n@KL7w@KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000001>JOBWS zJ^%prJ^%o)J^%m!00000000000000000000000000001*J^%oDKL7wxKL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002sJpcf0KL7xJKL7x} zJ^%m!000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001}JpceoKL7xJ zKL7wKKL7v_Jpcdz00000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002kJpcd)KL7w| zKL7xJKL7wcKL7v_Jpcdz000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000JOBWsJ^%nFKL7xJ zKL7xJKL7xJKL7xJKL7x8KL7wVKL7y2J^%oqJOBUy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000HKL7xJ zKL7xJKL7xHKL7xAKL7xAKL7w@KL7wMKL7xBKL7xJKL7w8KL7wgJOBUy0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000ZKL7xGKL7v+KL7w+J^%m!0000000000000000000mJpce&KL7xJKL7xXJ^%m! z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001FJ^%oJ zKL7w7KL7v#0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000cKL7xJKL7w7KL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000GJpce!KL7xJKL7xjJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002aJ^%oIKL7w+KL7yWJOBUy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000013J^%n|KL7xEKL7xHJ^%m!00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000001rJ^%oCKL7xEKL7yIJ^%m!000000000000000 z000000000000000000000000000000000000000000000JpcdzJOBUy0000000000 z000000000000000000000000000000Jpcg6J^%oCKL7x5KL7yIJ^%m!0000000000 z000000000000000000000000000000000000000000000000000002iJ^%nPKL7yK zJ^%plJpcfZJpcfZJpcfZJpcfxJpcgIJ^%nhKL7wyKL7xJKL7w|KL7wIJ^%m!00000 z0000000000000000000000000000000000000000000000000000000000000002` zJ^%oIKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xAKL7xdJ^%m! z00000000000000000000000000000000000000000000000000000000000000000 z0000000026Jpcg6J^%nFKL7wGKL7wGKL7wGKL7w}KL7w+KL7wGKL7xpJ^%ooJ^%o~ zJOBUy000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002MJpce|KL7y4J^%m!000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000KJ^%oHKL7wCKL7v#00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000KJ^%oHKL7wPKL7v#0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001vJ^%nKL7xI zKL7xXJ^%m!0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000` zJ^%oHKL7x9KL7wAJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000?J^%oGKL7wrKL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000OKL7xIKL7v@KL7v#000000000000000000000000000000 z0001xJ^%n1KL7w2KL7w2KL7xDJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000OKL7xHKL7yCJ^%m!00000000000000000000 z0001ZJ^%nWKL7xIKL7xHKL7xIKL7xHKL7wrKL7xrJpcdz00000000000000000000 z000000000000000000000000000000000000000OKL7xIKL7yCJ^%m!0000000000 z000000001_J^%oIKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJKL7yWJ^%m!0000000000 z0000000000000000000000000000000000000000000000000OKL7xHKL7v@KL7v# z00000000000000aJ^%o7KL7xIKL7xHKL7w}KL7yUJ^%pVJ^%n{KL7xIKL7w1KL7v# z00000000000000000000000000000000000000000000000000000000002EJ^%oH zKL7w~KL7wsJ^%m!0000000011KL7xIKL7w=KL7xtJ^%m!000000000mJpcezKL7xJ zKL7w1KL7v#0000000000000000000000000000000000000000000000000000000 z0000WJpceyKL7xIKL7w|KL7wEJ^%ouJ^%oHKL7xHKL7yCJ^%m!0001ZJ^%m?KL7w# zKL7xHKL7xIKL7xXJ^%m!000000000000000000000000000000000000000000000 z0000000000000000001_J^%oJKL7xIKL7xJKL7xIKL7xJKL7xIKL7w~KL7w}KL7xJ zKL7xIKL7xJKL7xIKL7ysJ^%m!0000000000000000000000000000000000000000 z0000000000000000000000000000000000iKL7xHKL7xIKL7xHKL7xIKL7xHKL7xI zKL7xHKL7xIKL7xHKL7xIKL7xJpcgUJ^%nfKL7w}KL7w|KL7wgKL7w1KL7v&KL7ymJpcdz000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000OKL7w}KL7xJKL7xI zKL7w~KL7x@J^%m!00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001_J^%nqKL7wgKL7w1 zKL7x>J^%nnJ^%oYJ^%m%KL7v#0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001_J^%oIKL7w} zKL7wEJ^%m!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001_J^%o7 zKL7w#KL7ymJpcdz00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000OKL7xIKL7wDKL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000aJ^%n|KL7w!KL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002?J^%o8KL7xtJ^%m!000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001}Jpce-KL7wrKL7v#0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000002uJ^%oHKL7v@KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000%KL7xHKL7yCJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001fKL7wgKL7v# z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000001e zKL7w|KL7v#00000000000001_J^%pBJ^%nWKL7wrKL7wrKL7v@KL7yCJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000OKL7xIKL7w2KL7w2KL7xJKL7xIKL7x9KL7wrKL7wXKL7v@KL7w$KL7xI zKL7whKL7xZJ^%nDJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000OKL7xHKL7xIKL7xHKL7w1KL7yUJ^%n9J^%m!0000000000 z0000WJpceKKL7xIKL7xHKL7wJpcfGKL7w1KL7v#0000000000 z000000000000000000000000000000000000000000000000000000EKL7xJKL7w# zKL7v#00000000000000000000000000000000000000000001}JpcfIKL7w#KL7v# z0000000000000000000000000000000000000000000000000000000000000001> zJpcezKL7xHKL7wrKL7yqJ^%m!0000aJ^%pBJ^%pBJ^%pBJ^%pBJ^%prJ^%n;KL7w} zKL7yUJ^%m!0000000000000000000000000000000000000000000000000000000 z00000000000001}Jpcd>KL7xJKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJ zKL7w}KL7wEJ^%m!00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001vJ^%n0KL7wMKL7w!KL7w1KL7w1KL7w1 zKL7w1KL7woJ^%plJpcdz000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zJ^%n`KL7xJKL7wbKL7v_KL7wgJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000001BJ^%oHKL7xIKL7xIKL7xIKL7xIKL7yeJ^%oyJpcdz000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000001BJ^%oHKL7xIKL7xIKL7xIKL7xIKL7xJKL7v{KL7x9J^%m! z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000026JpcetKL7xIKL7xDKL7yoJ^%n3KL7xGKL7xJKL7xI zKL7xEKL7yyJ^%m!00000000000000000000000000000000000000000000000000 z000000000000000000000000000026JpcetKL7xIKL7xIKL7x7KL7v#000000002` zJ^%oIKL7xIKL7xIKL7xBKL7x{J^%nfJpcdz000000000000000000000000000000 z000000000000000000000000000000000000000AKL7xIKL7xIKL7xIKL7ygJ^%m! z00000000000002&J^%n?KL7xIKL7xIKL7xIKL7x{J^%m!00000000000000000000 z0000000000000000000000000000000000000000000000000|KL7xIKL7w@KL7xz zJ^%nPJpcdz0000000000000000001RJpce8KL7xIKL7xIKL7xBKL7xnJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000|KL7xF zKL7wDKL7v#0000000000000000000000000000000000SJ^%nTKL7xIKL7xIKL7xE zKL7xrJ^%m!000000000000000000000000000000000000000000000000000001} zJpce-KL7w{KL7v#00000000000000000000000000000000000000000000?J^%oH zKL7xIKL7xIKL7wxKL7v#000000000000000000000000000000000000000000000 z000000001nJ^%oHKL7v*KL7v#0000000000000000000000000000000000000000 z0000`JpceFKL7xIKL7xIKL7xDKL7yKJ^%m!000000000000000000000000000000 z0000000000000000000oKL7xJKL7yqJ^%m!000000000000000000000000000000 z000000000000000000000000vKL7xJKL7xKKL7w-KL7xjJpcdz000000000000000 z000000000000000000000002MJpce^KL7xIKL7yoJ^%m!00000000000000000000 z0000000000000000000000000000000002kJpcf2KL7xIKL7xIKL7v(J^%m!00000 z00000000000000000000000000000000008J^%oHKL7xIKL7yoJ^%m!0000000000 z0000000000000000000000000000000000000000000000000CKL7xIKL7xIKL7v( zJ^%m!000000000000000000000000000000000000001hJpcezKL7xIKL7x3KL7wY zJ^%m!000000000000000000000000000000000000000000000000000002uJ^%oH zKL7xIKL7v(J^%m!00000000000000000000000000000000000000000000PKL7xI zKL7xIKL7wMKL7wgJpcdz000000000000000000000000000000000000000000000 z0000$JpcfGKL7xIKL7v(J^%m!0000000000000000000000000000000000000000 z0001nJ^%oHKL7xIKL7xIKL7wzKL7w=J^%m!000000000000000000000000000000 z000000000000008KL7xIKL7xIKL7v(J^%m!000000000000000000000000000000 z00000000000002MJOBVuKL7xIKL7xIKL7xIKL7x3KL7yEJ^%m!Jpcdz0000000000 z000000002MJOBVdJpcg4J^%o6KL7xIKL7w&KL7xTJpcdz00000000000000000000 z00000000000000000000000000000SJ^%n9KL7xIKL7xIKL7xIKL7xIKL7wJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000%KL7xHKL7w#KL7wAJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000001fKL7xIKL7wXKL7v#000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000002?J^%oHKL7xHKL7x9J^%m!00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000mJpcezKL7xJKL7wgKL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000002EJ^%oGKL7xIKL7w1KL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000jKL7xIKL7x9KL7wA zJ^%m!000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001eKL7xH zKL7wrKL7v#0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0001gKL7xIKL7v@KL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001eKL7xHKL7yCJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001gKL7xIKL7yEJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001vJ^%n{KL7x9J^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0001*J^%oCKL7xDKL7wPKL7wiKL7xJKL7yuJpcdz0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000001(Jpce`KL7w_KL7v-KL7wMKL7x0KL7xIKL7wvKL7w6J^%m!0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000JKL7w-KL7xzJpcdz000000001vJ^%oHKL7xJKL7x0KL7xh zJ^%m!000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000`Jpce_KL7woJ^%m!00000000000001NJ^%oHKL7w1 zKL7wzKL7w>KL7wgJpcdz000000000000000000000000000000000000000000000 z0000000000000000000000000000000002eJ^%o3KL7y0Jpcdz000000000000017 zJ^%oGKL7wcKL7w=J^%n_KL7y4J^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000002!J^%n*KL7y0JOBUy00000 z00000000000000wKL7xJKL7xIKL7xIKL7y2J^%m!0000000000000000000000000 z000000000000000000000000000000000000000000000000000001>J^%oHKL7w^ zJ^%m!0000000000000000000GJ^%ngKL7xIKL7xIKL7xpJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zJOBVkKL7w>KL7w6KL7xdJ^%m!00000000000001>Jpce}KL7wnKL7v#JOBUy00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000002;J^%o3KL7xJKL7xKKL7xJKL7x1KL7w=KL7xKKL7xJKL7wjKL7v# z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000;J^%nRKL7w`KL7xIKL7xIKL7xIKL7xJKL7xI zKL7v*KL7v#0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001RJpce4J^%oGJ^%n5 zJ^%n5J^%nrKL7ygJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000`Jpce_KL7ygJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001>JpcfHKL7ygJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001>JpcfGKL7ygJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000001>JpcfGKL7ygJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001>JpcfGKL7yg zJ^%m!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000` zJpce_KL7wLKL7v#00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000(KL7x5KL7yOJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000PKL7xIKL7y2J^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001_J^%o5KL7wkJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000S zJ^%n?KL7xJKL7xJKL7x5KL7wfKL7wfKL7yqJ^%o~JOBUy00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000009KL7xIKL7xIKL7xIKL7xIKL7xIKL7xIKL7xJKL7x7KL7yoJ^%oSJpcdz z00000000000000000000000000000000000000000000000000000000000000000 z000000000000020J^%oDKL7xIKL7w}KL7xTJ^%pFJpcd%J^%n8KL7xJKL7xIKL7xI zKL7wdKL7xrJpcdz00000000000000000000000000000000000000000000000000 z000000000000000000000002IJ^%oHKL7xIKL7x(J^%m!0000000000000000002c zJ^%nuKL7xIKL7xIKL7w;KL7w=J^%m!00000000000000000000000000000000000 z0000000000000000000000000000000002IJ^%oHKL7x0KL7wkJ^%m!0000000000 z00000000000002EJpcejKL7xIKL7xIKL7waKL7xzJpcdz00000000000000000000 z00000000000000000000000000000000000000000002IJ^%oHKL7waKL7v#00000 z00000000000000000000000000002UJpceiKL7xIKL7xIKL7yOJ^%m!0000000000 z000000000000000000000000000000000000000000000000000002IJ^%oHKL7wa zKL7v#000000000000000000000000000000000000001@J^%oHKL7xIKL7w#KL7v# z0000000000000000000000000000000000000000000000000000000000000000p zKL7xIKL7waKL7v#000000000000000000000000000000000000002+Jpce)KL7xI zKL7w#KL7v#0000000000000000000000000000000000000000000000000000000 z000000001FKL7xIKL7waKL7v#0000000000000000000000000000000000000000 z0000 zJpce+KL7xIKL7yAJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000000000000000001FJ^%o7KL7xIKL7xAKL7wHKL7xjJpcdz z0001xJpcecKL7xIKL7xIKL7xPJ^%m!00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002aJ^%oHKL7xIKL7xI zKL7wsKL7wBKL7woKL7xIKL7xIKL7wkKL7y8Jpcdz0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000002EJpcdz zKL7xDKL7xIKL7xIKL7xKKL7xIKL7xIKL7wuKL7x*Jpcdz00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001(J^%pzJ^%oHKL7xKKL7xIKL7v(KL7xvJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0002uJ^%nWKL7v#00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000bKL7xBKL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000=KL7xJKL7w^KL7w^KL7w^KL7v*KL7v_Jpcdz00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000=KL7xJKL7xJKL7xJKL7xJKL7xJKL7v( zKL7v#000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000&KL7xJKL7xCKL7v_KL7v@ zKL7w}KL7w?KL7y0JOBUy000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002+Jpcg4J^%nT zJ^%m!000000001rJ^%oIKL7x_J^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000qJ^%oIKL7wRKL7v#0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001hI{*MWKL7x2KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002=J^%o1KL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000002=J^%o4 zKL7wwJpcdz0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0002=J^%oIKL7xZJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000002=J^%oIKL7xZJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000002=J^%oIKL7xXJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000CJ^%nJKL7wKKL7w0KL7xRJ^%m}KL7x2KL7v#00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000QKL7xJKL7xJKL7xJKL7xIKL7xIKL7xDKL7x_J^%nPJ^%nf zJOBUy000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001>JOBVnKL7xJKL7w(KL7xJKL7xJKL7xJKL7xJKL7xJ zKL7xCKL7wSKL7v_KL7v#000000000000000000000000000000000000000000000 z0000000000000000000000000000000002EJpcfHKL7wiKL7yGJpceSJ^%n|KL7xL z|9=1gem?*Jem?*Jem?*Jem?*Jem?*JNk0Gp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000P(1(uU_Sr=em?*J zU_Sr=Sw8>(em?*Ja6bS5%02)9q&@%uCO-fGZ9f12JwE^d00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z=so}dem?*Jem?*Jem?*Jem?*J@IC+l000000000000000usr|(usr|(0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000Ks*2d)II9C000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000Y(4-00000000000wmtv=dp`gGdp`gGdp`gGeLnyIcs>9C00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006zc#eLnyIeLnyIe?I^K zT|WQ-000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000{yqQzdp`gG zdp`gGeLnyI%02)900000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z{yqQzdp`gGdp`gGeLnyIcs>9C0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000{yqQzdp`gGdp`gGeLnyIcs>9C000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000{yqQzdp`gGdp`gGeLnyIcs>9C00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006zc#eLnyIeLnyIe?I^Kd_DjG0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006qW!P(A0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006qW!{yqQzeLnyIdp`gGdp`gGdp`gGdp`gG zeLnyIdp`gGdp`gG4L<+?{yqQz0000000000000000000000000000000000000000 z0000000000000000000000000000000000006qW!Qa=Cydp`gGeLnyIdp`gGdp`gG zdp`gGdp`gGeLnyIdp`gGdp`gGdp`gGdp`gGBR>EDU_Jl<00000000000000000000 z0000000000000000000000000000000000000000pgjNpO+Nqtdp`gGdp`gGeLnyI zdp`gGdp`gGdp`gG7(W02zCHi|R6hU!dp`gGdp`gGdp`gGeLnyIa6bS59zOs8m^}ah z0000000000000000000000000000000000000000000005Iz6^RzCm$eLnyIeLnyI zeLnyIe?I^KeLnyIeLnyIWj_D_Y(4-00000000000pgsTqHa`FWeLnyIe?I^KeLnyI zeLnyIRX+d#z&-!~0000000000000000000000000000000000000000LO%cidp`gG zdp`gGdp`gGdp`gGeLnyIdp`gGdp`gGC_exI00000000000000000000fIR>Jcs>9C zT|WQ-bUy$9dp`gGdp`gGdp`gG0000000000000000000000000000000000000000 zz&-!~dp`gGdp`gGdp`gGdp`gGeLnyIdp`gGdp`gG_&ops00000000000000000000 z000000000000000zCHi|{5}8x{5}8x{5}8x000000000000000000000000000000 z0000000000Ks^8eXg&Y{dp`gGdp`gGdp`gGeLnyIOg{hs+CBgPfII*I0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Ks^8eygmQ`Xg>e|7(W02zCHi|xIF*>0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000(000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000fIR>JC_exISU&&&00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000l0EEDeLnyIcs>9C0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000Y(4-0e?I^KM?U}n00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Y(4-0em?*JMn3=m0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000wmtv=em?*J@;(3n000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000Y3l$em?*J6g~g|00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000H9r6VWIq4^ zKs^8e000000000000000000000000000000kUjtaY(4-000000000000000000000 z000000000000000000000000000000000000000000000000000000000000Ks^8e zWIq4^Ha`FW0000000000000000000000000fIR>JBR>EDem?*Jem?*J>^=Yh00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000Og;breLnyIH9r6V0000000000000000000000000KR*BfeLnyIeLnyIeLnyI zc|QOEiar1U0000000000000000000000000000000000000000000000000000000 z000000000000000!ae{1eLnyI2R{G+000000000000000000006g~g|bUy$9cRv6C z5kCL`Sw8>(em?*J*ggON000000000000000000000000000000000000000000000 z0000000000000000000000000+CBgPeLnyIB0m5C000000000000000000005I+C_ zeLnyI);<6L00000jy?bYem?*J*ggON00000000000000000000000000000000000 z00000000000000000000000000000000000+CBgPeLnyIH9r6V000000000000000 z00000WIq4^RzCm$Fg*YO00000#6AE3em?*J*ggON0000000000000000000000000 z000000000000000000000000000000000000000000000Og;brem?*JWIq4^7(M_1 z000000000000000e?I^KYCiw~tUdq$H$MOXem?*Je?I^K+CBgP000000000000000 z000000000000000000000000000000000000000000000000000000006YKyIzIpa zem?*JKR*Bfh&})Su08+&Ts{B*em?*JeLnyIeLnyIeLnyIeLnyIR6hU!U_Af;00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000&^`bFem?*JeLnyIeLnyIeLnyIeLnyIem?*JeLnyIeLnyIeLnyIeLnyISw8>( zu08+&000000000000000000000000000000000000000000000000000000000000 z000000000000000pgjNpP(J_weLnyIeLnyIeLnyIeLnyIem?*JeLnyIeLnyIeLnyI zeLnyIH$MOXxIF*>00000000000000000000000000000000000000000000000000 z000000000000000000000000000000s67AxxIO>?FFybPeLnyIeLnyIBR>ED-aY^T zkUjtakUjtakUjta00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000);<6Le?I^K9X|j759X|j7 zeLnyIeLnyII6nXY00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000C_exIeLnyIcs~FDf<6EM0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000C_exIeLnyIVm|-?00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000C_exIeLnyIVm|-?0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000C_exIeLnyIVm|-?000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000006hQzM?U}neLnyIVm|-?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000usr|(eLnyIeLnyI z`aS>v000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000usr|( zeLnyIeLnyIx;_8^00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000usr|(eLnyIeLnyI#6AE30000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000{yqQzeLnyIeLnyIU_Af;000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Og{hseLnyIeLnyIAUyy800000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000006h8m}eLnyIeLnyI%02)90000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000zUu%eLnyIeLnyI(mntH z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000%02)9eLnyI zeLnyIAUyy80000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zP(1(uSw8>(eLnyIAUyy8000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zBR>EDNk0Gp0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000T0Z~)MLz%l000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000T0Z~)>OKGf00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000006YKyAUyy8000000000000000T0Z~)s6GGy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000006g~g|N)&00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000mOcOgaX$b6T|WQ-000000000000000T0Z~) z1U>)&000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000&^-VEem?*J5I+C_0000000000 z00000T0Z~)#y$W500000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000&^-VEem?*JSUvy% z000000000000000T0Z~)>OKGf0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000hCToQ zem?*JSUvy%000000000000000T0Z~)>OKGf000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000096kU5em?*JQ$GLzd_DjGz&!u}SUvy%Y(D@1DL()JggyWOU_Jl<0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000s67Axb3Xt8em?*Jem?*JY(D@1c|QOEem?*Jem?*Jem?*JSUvy% z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006zc#b3Xt8em?*Jem?*Jem?*Jem?*Jem?*J zaz6k7@I3$k0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000cs>9C;ywTX;ywTX06zc# zc0T|BU_Sr=06qW!00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000T0Z~)NIw7o000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000T0Z~)dOrXF*gXIM000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000LO%cie?I^K=sf@c00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000q&@%uem?*J+CBgP0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000m^}ahYCiw~CO-fG z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zUOxZ;C_exI0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z5Iq0@#y$W51U~=(1U~=(1U~=(az6k7eLnyIe?I^KeLnyIeLnyIeLnyICqDoHBt8HD zKs*2d000000000000000000000000000000000000000000000000000000000000 z00000wmtv=Sw8>(d_MpHd_MpHd_MpHd_MpHWvfII*I000000000000000000000000000000000000000000000 z000000000000000q&@%ubw2EDd_MpHd_MpHKt2Ef00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000Dn9@KeLnyIS3dv%xIF*>0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000s67AxSw8>(c0T|B)II(06hQz000000000000000 z0000000000000000000000000000000000000000000000000000000C_exIem?*J zY(D@1kUanZ0000000000000000000000000000009zOs8em?*JJwE^d0000000000 z000000000000000000000000000000000000000000000000000000000000;5+~T zT|WQ-em?*JL_YukAU*&9z&ro|00000000000000000000L_Pojem?*Jem?*J>OKGf z00000000000000000000000000000000000000000000000000000000000000000 z00000z&ro|OFsYrem?*Jem?*Jem?*JT|WQ-S3dv%IzIpa2|oY;8$SR5Z$AJ4em?*J zbw2J00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000<~{%bSw8>(T0Z~)cs~FDem?*J#y$W50000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000096ta6e?I^KNv z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000003_kz>eLnyIC_VrHl0E(b3Xt8us#3)00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000H9r6VXg>e|00000ygmQ`06qW! z0000000000d_DjGem?*JG(P|U0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000fI9#HKtBKg7C!(000000 zC_VrH00000000000000000000@IC+l?mhqj000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000fI9#HeLnyI zus#3)0000000000000000000000000000003_kz>3qJq=00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zl0Ev00000000000000000000000000000000000000000000000000 z000000000000000000000000000000fI9#HKR*Bfb3Xt8s67Ax000000000000000 z0000000000D?b1LeLnyI5kCL`0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000R6YOzc|QOEbUy$9#y$W5 z6g~g|6g~g|+&%yRKtBKgem?*Jem?*J5kCL`000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000ygmQ` zem?*JeLnyIem?*JeLnyIem?*JeLnyIX+Hn}eLnyICO-fG00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000Fg*YO<~{%bMLz%l8$SR55kCL`rak}wFg*YOWIq4^Uq1iED0000000000b3Xt8eLnyIeLnyIusr|(00000 z00000000000000000000000000000000000000000000000000000000000000000 zfII*IH9r6VeLnyIeLnyIeLnyIGd}EDem?*JeLnyIem?*JeLnyI zem?*JeLnyIem?*J7e4?1000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000NIn1nNIn1n zNIn1nNIn1n13v%&d_MpHeLnyI-aY^T00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000_&opsOg;brem?*JeLnyIU_Sr=pgjNp0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000BR>EDOFsYrX+Hn}d_MpHeLnyId_MpHqCNls00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000_C5drem?*JeLnyIem?*JeLnyIem?*JEI$AM000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000OFsYreLnyId_MpHeLnyId_MpHeLnyId_MpH_C5dr z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000s67AxUq1ie|eLnyIKtBKg0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000_C5drem?*JeLnyIq&@%u0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000RX+d#d_MpHOFsYr000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000s67Ax0000000000000000000000000000001U~=(eLnyIYCiw~Og;br z00000000000000000000000000000000000000000000000000000000000000000 z0000000000_C5drOFsYrUq1i<4nF_@%sv1Bq&@%u000000000000000AUyy8R6hU! zeLnyIXg>e|0000000000000000000000000000000000000000000000000000000 z000000000000000P(A8z0DeCJ02V(0000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000C+wC0CztC08u{x00000 z00000000000000005v}V0DV6I07gFm00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000ch(0DV6I z08u{x0000000000000000000001rO^0DV6I07gFm0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z07pLn0DV6I08u{x0000000000000000000008&2y0DV6I07gFm000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000RBDz0DV6I08u{x00000000000000005CoP0B%130DV6I07gFm00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000J1&+0DV6I08u{x00000000000JJ^;05m@U0DV6I0DV6I z03Sa9000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006abb0CPV80D30Ny?T07^dq0Bb)00Bb)00D38z0DV6I0AfD?0Qfxs000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000Mb4H0DV6I0AfD?06;zf0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000060DX0CqnB0DV6I069MZ00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000003|;F0DV6I0DV6I0E|8W0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000004P2H0D309HQ$0AfD? z01Q3=000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000002J#0DnIK002J#0000000000 z000000DwLK0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002J#0DnIK0DnIK002J# z000000DwLK0DnIK0DnIK0DnIK0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000006#wf0DnIK z0DnIK002J#0DwLK0DnIK0DnIK0DnIK0DnIK0DnIK0DwLK00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0DnIK0DnIK0DnIK000000DwLK0DwLK000000DwLK06#wf0DnIK06#wf0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000DnIK0DnIK06#wf0000000000000000000000000000000DnIK0DnIK z06#wf000000000000000000000000000000000000000000000000000000000000 z0000000000000000DwLK0DnIK0DnIK0DwLK000000000000000000000000000000 z002J#0DnIK0DnIK00000000000000000000000000000000000000000000000000 z0000000000000000000000000002J#0DnIK06#wf0000000000000000000000000 z000000000000000002J#0DnIK0DwLK00000000000000000000000000000000000 z00000000000000000000000000000000000002J#0DnIK002J#000000000000000 z0000000000000000000000000002J#0DnIK0DnIK0000000000000000000000000 z0000000000000000000000000000000000000000002J#0DnIK0DnIK002J#00000 z00000000000000000000000000000000000000000DnIK0DnIK002J#0000000000 z00000000000000000000000000000000000000000000000000002J#0DnIK0DnIK z000000000000000000000000000000000000000000000000000DnIK0DnIK002J# z000000000000000000000000000000000000000000000000000000000000002J# z0DnIK0DnIK000000000000000000000000000000000000000000000000000DnIK z0DnIK002J#0000000000000000000000000000000000000000000000000000000 z00000002J#0DnIK0DnIK000000000000000000000000000000000000000000000 z000000DnIK0DnIK002J#000000000000000000000000000000000000000000000 z000000000000000002J#0DnIK0DnIK00000000000000000000000000000000000 z0000000000002J#0DnIK0DnIK002J#00000000000000000000000000000000000 z0000000000000000000000000002J#0DnIK002J#0000000000000000000000000 z000000000000000002J#0DnIK0DnIK0DnIK002J#0000000000000000000000000 z00000000000000000000000000000000000002J#0DnIK002J#000000000000000 z000000000000000000000DwLK0DnIK0DnIK0DnIK06#wf00000000000000000000 z000000000000000000000000000000000000000000000002J#0DnIK0DnIK0DwLK z00000000000000000000002J#06#wf0DnIK0DnIK0DnIK0DnIK000000000000000 z0000000000000000000000000000000000000000000000000000000002J#0DnIK z0DnIK0DnIK002J#002J#002J#06#wf0DnIK0DnIK0DnIK0DnIK06#wf0DwLK00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000006#wf0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK06#wf0DwLK z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000DwLK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK06#wf z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000DwLK06#wf0DnIK0DnIK0DnIK0DnIK002J# z0DwLK000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000B}A40Kh%~09HQ$0DV6I0DV6I0DV6I0DnIK0DV6I0DV6I098K#01!R^00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000DwIJ0FXWa0AxP^0DV6I0DC_G0DC_G0DC_G0DC_G0DV6I0DC_G0DC_G0DC_G z08~E!0PsEl0000000000000000000000000000000000000000000000000000000 z0000000000000000RBDz0DC_G0DC_G0DV6I0DC_G0DC_G04zTM0DC_G0DV6I0DC_G z0DC_G0DC_G0DC_G03JU8000000000000000000000000000000000000000000000 z00000000000000000000000000RBDz0DC_G0DC_G0DV6I060GY0Qfxs06;we0Qfxs z0Qfxs0Qfxs0Qfxs04YBJ0J1&+04zQL0DwIJ000000000000000000000000000000 z000000000000000000000000000000000000RBDz0DC_G0DC_G0DV6I0C+wC00000 z00000000000000000000000000000000000075?i03kmB00000000000000000000 z0000000000000000000000000000000000000000000000000003$yD0DV6I0DnIK z00ln)06;zf00000000000000000000000000Kh!}075?i0DnIK09`)-0000000000 z0000000000000000000000000000000000000000000000000000000000000DwIJ z05v}V0DV6I0DC_G09-!+04zQL00000000000DwFI002G!06ISa0DC_G0DV6I07yRo z00000000000000000000000000000000000000000000000000000000000000000 z00000000000G>Vo0DV6I0DC_G0DC_G09-!+0RBDz002J#0DL|G0DC_G0DC_G0DC_G z0Q^1x0Qfxs0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000Qfxs03AO70DC_G0DC_G0DC_G0DV6I0BAn|0DC_G z0DC_G08>8z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000006;we0K7f`0BAn|0DC_G0DV6I z0DC_G0DC_G08>8z01Q3=000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000Qf!t z0DV6I0DnIK0DV6I0DV6I0DV6I02x0300000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0DwIJ0AW7>0DC_G0C7J60AN1=0DC_G0DC_G0DC_G0PsEl00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000DwIJ06jkd0DC_G0DC_G0G>Vo0DwIJ0Q^1x0Bk=10DC_G08T#u002G!00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000004qNL0DC_G0DC_G08>8z0000000000000000H!_w0DC_G0DV6I z0C+wC000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000006sqe0DC_G08>8z01Q3=00000000000000003tsC z0DC_G0DV6I0C+wC00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000006#wf0DV6I00BP$000000000006;we z04_fO0DV6I0DV6I0DnIK0DL|G0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006sqe0DC_G03AO7002G! z0JuH?07X9l0DC_G0DC_G0DC_G05v}V0DwIJ000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000006sqe0DC_G z0DC_G0DC_G0DV6I0DC_G0DC_G0DC_G0DC_G0G>Vo0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z02V(00DC_G0DC_G0DC_G0DV6I0DC_G0DC_G0Bb)00J1&+00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000006;we0K7f`0BAn|0DC_G0DV6I0DC_G04zTM0E|8W000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000G2)g02Ds}02Ds}0DeCJ09ro) z0PsBk000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000I)p(04+ZN01`g{06sqe09`)-0DM0H0DM0H z0DV6I0DM0H0Q^1x00000000000000000000000000000000000000000000000000 z00000000000000000000000000DwFI0Lnf90AN1=0Bt`20Bb)00BAn|0B1h{0DC_G z0DM0H0DM0H0DV6I0Bk=10O&pd0000000000000000000000000000000000000000 z0000000000000000000000000000000000005?AX0DM0H09`)-0Pa2j0AM`;00000 z000000Gd7k002J#0H{6y0H{6y0H{3x00000000000000000000000000000000000 z000000000000000000000000000000000000000005m=T0DV6I0DM0H0Hi(u00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000002n?10Bk=10DeCJ0Mh0C_(E0DV6I0DM0H0DM0H0DM0H z0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H0DV6I0DM0H0DM0H06jkd000000000000000 z000000000000000000000000000000000000000000000000000E|8W06sqe0Bt`2 z0DM0H0DM0H0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H0DV6I0DM0H0CztC01ZC?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002G!0KPr|04+ZN0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H024m|024m|0Jc5= z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000JJ^;024m|0DnIK04hHK06;zf00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000K`53 z0IEI!000000N_0U09QW%0DV6I0DV6I0DV6I0Kz^10000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000001!U_ z0C7J60DC_G0D3h0DV6I0DV6I0DV6I05m@U002Dz z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000I)s)0D300000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000Mb4H0DeCJ02My~0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000Ej&R07*Xp0Bt`2000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000E|8W0DV6I0Iog&000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000MI=E0CYb908l>w00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000007X9l z0D3Vo0Kh!}00000000000000000000000000000000000 z0000000000000000000000000000000000001!O@05U%S0DeCJ0DeCJ0DeCJ0DeCJ z0DM0H05m@U00000000000000005CoP00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000=$+05CrQ0DeCJ z0DeCJ0BSz~0Mb4H00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000}<;0OURZ000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000H{3x0IWU$0000000000 z000000000000000000000BAn|00ch(00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000GvJm0Bb)0 z05CoP0000000000000000000001Q3=0C7J60LDH50000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z060GY0DV6I0L(rB000000000000000000000LDH50DV6I0LDH5000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000PsBk0B1h{0DV6I0000000000000000000008l*u08>8z0DC_G0GvJm00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000H{6y0DV6I046^G000000000000000000000AM}<0DV6I0CGP7 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000H8ep0ChhA0D30DV6I0DV6I0DV6I0DV6I0DV6I09-x*00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000LVQ605CoP0Iog&03tsC0DV6I0DV6I z0I)p(000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000JuE> z0DV6I0DV6I0I)p(00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000JuE>0DV6I0DV6I0I)p(0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000JuE>0DV6I0DV6I0I)p(000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000Qf!t0DV6I0D306;td000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000N6eN0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ09ZZ%00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000C+wC0CGP70DnIK z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ0C_(E05(4W05ClO0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000Kh%~0Bt`2 z08~E!04qNL03<&E0J=T^0H{6y0Ng$R0ERvQ0AM}<0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0ChhA0DeCJ0FFKY00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000ChhA0DeCJ0H8ep0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000ChhA0DeCJ0AoJ@0AN1=09ro)01-a`0AN1=082jr0H8hq z0DwCH000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000ChhA0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ01ZC?00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000OCFX0DV6I0DM0H09!u*01-a` z01-a`01-a`08u{x0DC_G0C+zD00%z+01!O@000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000Fpic06;zf z00000000000000000000000000G>Vo0DeCJ0DeCJ01Q6>00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000Ej*S0A@b`0C+zD0LDH500000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000003bd90CqnB z0DV6I0IEI!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000Qx=v0DeCJ03|;F000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000B}7309Zc&0ChhA05CoP000000000000000000000000000000 z00000000000000000000000000000000000000000000001!O@0Q5cp0F*ue00000 z0000000000000000000000000000000H{6y0CztC03AO700000000000000000000 z00000000000000000000000000000000000000000000000000000000E#{U0DeCJ z0DV6I05U%S0DwFI00000000000000000000000000000006RYb09-!+0FXTZ00000 z00000000000000000000000000000000000000000000000000000000000000000 z0H8ep0BSz~0DeCJ0DeCJ069MZ0NOqP0Ej*S0O&mc000000D?XM0Fpic0CqnB0DeCJ z0M00000000000000000000000000000000000000000000000000 z00000000000000000000000000000008Bmr08>8z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ0B=740E9jO0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006;we00ln)09HQ$0DeCJ z0DeCJ0DeCJ0DeCJ05m@U01ZC?00=$+00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002Ay01!O@0DwFI00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000LVQ603bgA0DeCJ031I60000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000FXTZ08u{x0C+zD0N6eN0H8hq0LVQ609-x*07O0j z0LVQ60Khx|0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000O&pd0CztC02)6400=(-098K#0DeCJ z0DeCJ0DeCJ0DeCJ08&2y0PH>h0Khx|00000000000000000000000000000000000 z000000000000000000000000000000000000000003bd90CYb9053lP09`)-0DeCJ z04F~H07O0j07O0j07O0j07O0j02My~0BJt}098K#03bgA031F5000000000000000 z00000000000000000000000000000000000000000000008l*u098K#0BAn|0E#{U z0DeCJ05(4W06;td00000000000000000000000000H8ep0H!_w09`)-0CPV80FXWa z000000000000000000000000000000000000000000000000000000005CoP0DeCJ z02My~0N^|T05m@U02e<1000000000000000000000000000000000000000002Dp| z0A4=;0CYb908l;v00000000000000000000000000000000000000000000003ba8 z09!u*0AN1=0H8bo0000008Bmr09-!+0B}73000000000000000000000000000000 z000000000001!R^0ChhA0Ny?T0000000000000000000000000000000000000000 z000000Ej*S0DeCJ0P;Qn00000000000000003ba80DwCH00000000000000000000 z000000000000000000000000003kmB0C_(E000000000000000000000000000000 z00000000000Khx|0AW7>0A@b`002Ay00000000000000000000000000000000000 z0000000000000000000000000000000000005(4W07yRo00000000000000000000 z0000000000000000000002n?10DeCJ01-a`000000000000000000000000000000 z00000000000000000000000000000000000000000Qx=v0DnIK0OURZ0000000000 z0000000000000000000000000000000QNor0CGP70GK@h00000000000000000000 z0000000000000000000000000000000D%900000000000004kI000F)004JC001dJ z002Nd0000000000000000000000000000000000000000002)v003=20000000000 z00000000000000000000000000000000000000000000000000007WE001IC004eJ z001{X008(s000000000000000000000000000000000000000000000004eJ002lo z0000000000000000000000000000000000000000000000000000000007WE002=x z004JC007cH006)|00000000000000000000000000000000000000000000000000 z004eJ002Wj000000000000000000000000000000000000000000000002Nd005{y z003h@003M+005po00000000000000000000000000000000000000000000000000 z0000000000002}!003}5002-u000000000000000000000000000000004kJ007!P z003A&003z}00106005{x000000000000000000000000000000000000000000000 z00000000000000000000007!P004eJ002Wj004?U00000000000000000000005jm z003q`003$~00199005Xh000000000000000000000000000000000000000000000 z000000000000000000000000000000004kH000p`004eJ004VG003q`0034$003J* z003q`003z}000L+004kJ000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000007`T006{3001FB002xs z001;U002xs00168004|W000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002Nd00000002Nd000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000d?002fm003e?002fm008Jc000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000068$003e?004hK004hK004hK004hK000d?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000003e?004hK001gK003k@008Jc0068$ z002fm000d?003k@00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008Jc004hK001gK0000000000 z0000000000001gK004hK002fm0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000087Z004hK0068$ z00000000000000000000001gK004hK004hK008Jc0000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000003k@ z004hK003e?008Jc000000000000000002fm004hK000d?00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002fm004hK000d?008Jc000000068$004hK003e?008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000003k@003e?004hK003e?0068$002fm004hK0087Z00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000002fm004hK004hK004hK002fm z008Jc000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000008Jc002fm004hK z004hK0087Z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z003e?004hK004hK004hK003k@0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000087Z004hK004hK0087Z003e?004hK003k@0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001gK004hK000d?000000068$004hK002fm008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002fm004hK003k@00000000000087Z004hK000d? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000004hK003e?00000000000000000000 z001gK004hK003k@00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008Jc004hK001gK0000000000 z00000000000087Z004hK000d?0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000068$004hK0087Z z00000000000000000000008Jc004hK001gK000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z004hK003e?008Jc00000000000087Z003e?004hK0087Z00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001gK004hK004hK003e?004hK004hK004hK0087Z008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000008Jc001gK004hK004hK003e?000d?003k@0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005{x z000000000000000000C(004bI008zr00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001OD003V<008tp0000000000004bI004YH002ur0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001LD004eJ000+10000000000004eJ004bI000g@000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000002ur004bI000+10000000000004bI004YH007KB00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000001yO0031#004eJ006c=0000000000004eJ004bI z007KB000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000008(s003w|004bI002ln0000000000 z001mM004YH001{X00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000059a004bI003Y=005vp z0000000000001pN004bI002ur0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000<2004YH z002ur000000000000000004bI004YH008tp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000<2004bI002ur0000000000004MC004eJ004bI001OD00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000<2004YH001IC0000000000001{X004bI004YH000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000034$004bI005*u000000081X004bI004eJ004bI00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000008zr004bI004YH00000001OD003z}004YH004bI z001jL000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000002ur004eJ004bI0034$004bI003Y= z003V<004eJ000+100000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002ur004bI004YH004bI z004YH004A8007KB004bI000+10000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001LD004eJ z004bI001{X004A800000007KB004eJ000+1000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002ln002ln000000000000000007KB004bI000+100000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000007QD004hK000+10000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001{X004bI000+1 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000007QD z004hK004bI004MC00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004A8004bI004YH004A80000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000007QD002rq004eJ003V<007`U0000000000006o^002ln0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000y|0037%004VG004bI004bI004bI001mM0000000105003}5008tp z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002-u002Kf004bI003b>008hl003Y<004bI001vP00000004MC z004bI006i?0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000009&004bI001pN003Y;00000000m@004bI001vP z00000006i?004bI001mL000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000a>004bI003M*0000000000006)} z004bI001vP002-u0022Z004A9008Jc00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000a>004bI0068$00000 z00000006>100416004A8005>w004bI002lo000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000009&004bI z003k^001IC001~X006>100106000m^003t{004bI008tp00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002-u001>V004SF004bI004PE002=x000y|008tp004bI001gK007`T0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000787002cl004bI004bI004bI004eJ003e?000a=00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000m@000m_003n_004bI004eJ001{X z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000_4004eJ z004hK004eJ001IC00000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000004wO z003h@004bI001;U002in004VG000F)00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000007iJ004bI001jL006)|005vo006W;003S;001RF00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001{X004VG0053Y000000000000000008zr004MD003k@00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000006i>004DA001aI00000000000000000000007WE003M+ z002%u000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007uM004bI002in00000000000000000000 z00000008hl004JC005Le000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003}3003e?004MD003A%00000 z000000000000000006o^004bI002-v00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000106004bI z004bI000L+005Rg007iJ008(t004DA003e?002-u0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0059a004JC004bI004eJ004bI004bI004bI004bI001>V00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000004kK002Wj004eJ004bI004bI003)0008nn003Y;0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000lysD0l@oUg z000000E`7}VPa)$lxPWP3`+oolxPlzlv0!^O94wVg_LL$i~?yiluH0h0f&@QlqgFB zXctaSPD=m(|Nlz=|Ns9>0CbdMi9^T*00002000000000000000000030000900005 z00007000060000600001000020000800001000060000300004000030000600006 z00000000010000900000000020000200006000070000400007000030000400009 z00009000030000700000000090000000008000050000500002000040000500000 z0000800004000080001#bd+L@26Ja*Uu<%eM?dfY000000E`Q6WprP4aAaY0Wn`3S z1SwLKD2xbVZZIxlX<>7eXbETxO8|wGXby*zQj{o50ZSBxlxP!-0%kOnO8`p&hm=y3 zC`$uq7fw!2O8@`=|4RS=|Nlz>bd+L=Lr@&42EN30xx5GQlD(WW8MSq`d;%IKATwD!ssx z3cZwclwyn!Vs0=la&>NQX>MmN zr#;WWFuuB%!#NQX>Mm< zc42aqXbETxO8|wGXby*zQj{o50VqoWOB721O96D0XrPHhP>0NiKH|FLJqDa5K5^Or zK0~N(J%zV;J%-{=JqN?;J%>j1Jr@RfJ+6bUJ!4o2K3frtK16q%K4VuAKCNddKJDVq zJH>yUNU|^A3=gY9|Ms;%TIYfEV^_*7f69WhG}g-z#D@IU zJP$IDyxc!Py~zU^y{1xPykLMHJ2Unqyl}4vyhieZy$c`^y)@Nzy(SR2Jwv>Lyp(j5 zVvG=CZZR%$b#88HZf9R@WnpfVXbETxO8|wGXby*zQj{o50VqoWOB721O96D0XrPHh zP|#U2KVBlbzh7^7KI|y6KRT_AKez*$zda6WKT<`HKj?KPK7b?lK70B<==K9Zzk3xxT`CGd1n$s3 zY!X&LtCH3~lysD0j0$3IF)nvyX=iA3lxPWP3`+oolxPlzlv0!^O94w1g_LNZi9=AH zxQaiDrjbANcz{2c;fX)^l9N9(wQxUchMhkP_Le_sk%K=;pn^Zj6p=stnUFu#Hb}%ktX<>7eXbETxO8|wG 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

Arabto6ug2iAU&Z4 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%0D{PcT0dgH9Twd0JtJ5!FlOL)_~ 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 $9_dL3|F}-MP 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 diff --git a/python_module/test/integration/mnist_model_with_test_cpu.mge b/python_module/test/integration/mnist_model_with_test_cpu.mge deleted file mode 100644 index b0e8ad5c98b17584cbbcdf50c395c553ca1f74ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 1568745 zcmV+W{{#Sl1eH>D3IG5A004cID2xbhWprO@ZfSIsj0l#CT_b!~8YE@N+UWiD-XY;bd+L= zLr@C`?!Dd{O1w4@cfDu!N4!}m`n&%T3%!294LoS%$h;`9!M$%*{k@w(^1K;`xV`H1 zhrMSrD!t$&eY`M*CcXLspS_{JFTLZt{Jf*M*SwT;lwyn!Vs0=la&>NQX>Mmrai>^FTN!w#6Dut1-_b*Y(BYR%{?dc zbiHsu&%H=T2fmbalwynzVs0=la&>NQX>MmP#bWEJ~evgJxAmwKJPUCJse1CJ(zfTJwxhHJs_;>J$Z}qJ>lMc zJ#^o$J)*}5KGW5VJ|In;K3;4SK1YKoKFEX7JrHrTJ<;8lJ&safJ(P5mVvGu6ZZIx) zWoc(P@o9D zz4S#1ydbmOyzmw&y)u5gy+i9ry}MiYyhI7MJ5c8KyrXCgy#gCiy<|I^yxN|vyb=%D zyHKH@yDv6iy%QlLy^U2wy+A9iJ++QIyp(j5VvG=CZZR%$b#88HZf9R@WnpfVXbETx zO8|wGXby*zQj{o50VqoWOB721O96D0Xcmb>P(2(vKep+@zv#1vKJtdSKPS4AKfA7< zzuL2OKO-`gKgwS)KGM4szj{CwzyT=~zii8qKW9{dzw-27Kf`YCz6QbAzsb9fKMN>@ zz5)l9y_9s6VvG-BZZR%$b#88HZf9S1VRDpc31|#U0ELuj4u_OdlqgF9C`$oL6iWe1 z0d$mT7KuYp&AakHSUDp=RY1`{`%U{l1IbN5^|r)6g}5z1q4_941(ozaa?T(?iHH(F z{%!<7+)orhK*j?=EzAo*jb$D{W6lyl8W7$;^>boC8r0-JlysD0j0$3IF)nvyX=iA3 zlxPWP3`+oolxPlzlv0!^O94w1g_LL(i9=9$V2nS~SC2m?seeEDk%&L1G>tzEm2N** z{G30{1(QF+q=7#>WrIJ_ewPmezt1(H9)gM&XtcaJ|%m~=n4tA9UCJ&-^3Fq=Pn zM1Vh(bd+L@3S)0>b}%ktX<>7eXbETxO8|wGXby*zQj{o50VqoWOB721O96D0Xcmb> zP^a{hvPw&FveE0Hu>&G%u?#YxGWig(G6~f=vPI5^G8=NXvSHx8GeVXJ~YkXbETx zO8|wGXby*zQj{o50VqopO94v-O9gb4Xcmb=&<6kj&*>Jveg-W*c+I`NFD+s|y|j)# zv??jSr?LmX2o`5OYC=c7jsw&_LkITvxg1P+Tm zA#r{_BkL``d)iVwK_!E{D-NSRDqo7eV+pUlhA)P`EZhe^wSCCFC8=A!<+6dkS2Th= zHhrQ#9W_e6lZ2@{{4tunh17&S_#84mMr10!{#^FG*vyH&n*&6>;R~$3eu$606v-XF z%W-_ZdoU5cAX{}j7)^M-*DV)5p)kn3^%z{c$hE0G3;mHkV(mpcvz0suMLE~LQNw*`y5TZz`&nAxhbGNum=vlxT3_qN0o8D zaSL3&w`zMl%t@9#bJm-_Kqof6%;RRh3~%|pvG^K3?x(mtXoxYrxS#;OPVO_j@;9eG zByhbwF|C5WV&Yvs);v1C;#iD5nUa^jS3=aiAFCNYZ}$ef!eGrk`AMg|=V0x=AJ<(z zSc_{u*EFd-i8?Agvlj8a z$xKE(v@4K4`KJ{=m{rxi4F`!m5Q#;;2xV!$cq*MfjkG$x6TIC$I}e(^fO+4&A+KA$ zZ=jmHPBjO1R>bMO zNR0D7glVrmDsr#B=o0%qs3*}qe!ZSNr%BGfY{W~xV!eVsp}O2X;km=TLb!9iY2^Su zJ9-U19r3n3^edpfeb1M^CyOdRn>yCL=!e0+sM)hVW0v8)fZ8^`s;Naj&#j3*#6(NI zlrBEL=Svd3TLVbGmmx8}AQw|UH#ieMngN}@;s}bkgtD=|5%UDSoft;G?%LJ8>9fJ$)U$pS@Ve!0ZGBS>04z1dqne(b%z zw5#d7S678SP@AScaZNZqjkt`y9$<;RacLht)u^jH+(Yj^m!c59d9RH;L8Xg6ka_$EVPI|hB-675=3-81^^a5?@@_9^qZT# zGIU$MkLQ*?cdb&sF|lmEHCDO3_tw%q$(&0*m_up3&9d`6YBUhNeU3uDg4}05!p}QB zGY%-eG*i^QmERJ)c%+d%z1xVrWn4u*gS!Ji`6-S*2(kt~)97%$B2+=X&Yms4-x>}+ z+fN!kst}gFN==f;0MEUGxmnCU92FKm zmlBXYxdw^8J?|tuGxsh&<{wtRAKDeZA_j}T+--$Exjh6uUCT*6$0k0$&G9roMP=(f z18EGskf(~iJEV=i3>A$%gRiB$gDMk0hg}c8>a&2p4$a3tX`acw`s24g;$$Jc`yPnC zc|IS$8{%L-T%W%^*rruI#^5$S8i#zom@0few?Uyk5myAi&O$@JMqUiQInxS0-M?GC z3Mc$KcU;ar)-tia=^h)RE zB1JDg8bO6U%#Ni#66`2Gc0>NXr9NN2K#=r4zMKI*l!ewlVUTUSs(}W*It>-Q^g<}U zmrOT4K?kTkz+nQu_{0jmFjs^=d_HwPCb{}OAgc{N`n(rD+LJ}SLDMF_ z6HC)RwdLWxFXkJ*U!B&xIK`4a?@cYf1}~ew!alCPT~(!AFEVpo7M~yy(k4yDOeP zW&X1~WPDb=E8OxthvHX0=~2u+;1vtKc}TIms`~;y#+^SrK1~BY5@NYML=z!CnAN^M zBx(*mmgQg7Kj`6Nv{7t4u0 z-c5MEE^p($hO-(z(Vt8{7E%I3{ zgtRffvU+$vev%NrJBb3mUAUe;L)|bwi=8z-U2gh4G&!0>5%}vlY1pI1Kp)Q7Ve=vs$5>XR@}k9hEAit$)R4p^0@K6Krtjf ztdPn({jb?RQCNb#6)y?C5`HYcYdi(LH6`Ue5pt6~6PGnUgZG)e{7GxR@)dx-(K)ZZ zs5%V3lysD0j0$6KZgw#)VrgM>lxPWP3`+oolxPlzlv0!^O93cL0ZSB10ZRdNlxP-- zLr^XLr?GynkFTeq=&*s}1+m+m7&0Q8J+ZxfT`?36O|jP8JF#Owj;@-7a59yejWFOJ zzOQhc^Dl39jj=SXMzP<=iZG2bQ?dr%n=v>CpRkm4lwynwV{dMDF)nvyX=iA3lxPWP z3`+oolxPlzlv0!^O93cL6iXCK1xp2VlxP--LO`4V06t}+JSIa1J)kZ^J&i|KIyS9} zyLSUWJ+ijPJq&P+yjL6Oyo88_y>MgNJP|Y4JYU7{JaO~(yi|!ez2mrvJ+2|8Ja~Bk zyttR|Jo%WkyhTgDy#X6>yjQrWJS}BgJlYsy_{G#y#08hy$}b7y%HbvyG}+|xtzEd zy>GNBJvS8_J*5sFI+JZXyNBJ<>P=JtfRjJ=0HKy9Q{Q zJ?1^Ayn@uCJ;u@=yhE-Qz0g8HJRPD5JeJF%yp^QFJbm*ny>ehLy!e3}J@<*#J-=Wg zJ$&6#JdpNlz2TU6J)@loJ(ni3J6wU>I!?NFJ=UrZJX})mJRM0DJtpVUJlZt8y!G}) zJfpO$yoLaPy?x7tJWYG7y~Gqfy=gm{JP3r#y?*tHJiIHEz3BfEyvb?bydLqqyJ&5DSJbw5$J!6yoJrLXDJlW#nJ-r7~J**_0XxJvT>zJ$64qypV06J&cz+y*M%nyaZu~ytZZ0 zyy%^ey=_-UJW67&y*_b(J=stuJT2}=GVycb!VJVJ)&y&Y$-J-o{PJY^&WJ<{s7JtUF3JorR6J;vWDyqO0z zJ*^`9Jy>a)3JC_te zyjqwTJ(0YuJs}bGJ%f86y_&BTJcX;`yd6R=J*mu-J$_E1J2gRvyyJXbyjI_>y_#bh zz0S~VJr(z`J82bzy-YB7z2!SSyySbkJqth@y+`+cy_gLpJe)KyjfWVJ(#1VJreJ~Jl(wAJ^4!y zJ$G;#J>CH&JelmpJfl7DypN?7ywpDa=J^lF~z3dnVz0cmbyo8>*IzWq#Ju5@F zJq|aXJnshkJgl%DJs#kIy>X?7Jzb&aJ=gVUJ=Xy$I|BeLJJBy#yWAI_@4oJ8)Dqz2N~(J6s0_J|sEUJn;{&z0r>qJi7A7Js(YiJsD89 zJ(x5{y`EWNJs6ynJ(k|MJ21l;zB9gEy>}0Xyi%=hy&fruykQYDy?BkEyz=Lcz2=^e zJ+vz)y?{~OJU<{nJ>?ieJw@UsyL9Owy#_hJxtlxgJDLT+y-yaCyIc;#z1sJXy-m2u zyzrBIJ1!lDJddyNyfGJ#J5Z;jykQ{DJf5IaJ*!P`J&9`}KCSy9J=kf%y~wJa(a%ytt_`y|&q;J)}d;yzPoK zJseb9JrV}Nypy_s1n zJyi!x=yvCU_Jr&4pyl)HZyfDfMy{2>ywk4(J=08=J-NuGJsuPnJ6W6dyw+(lylJj3JmYzcJsiL2 zyrXk8Ju-S9y?}q4yr&*hy+og-JvIumJo&{nz2+brJcGQEz2u3nxkVp6yrDXdI^Y^9 zJgXJ2z5k2=y+YGCyf;Ogyd{!Ey=#W9ybf8nJXD*&y>LmSJfwamy@$CyyUZBVJmIjL zJ$>RlJOmWWJlxKTJ%`g=y?R6>z38;HyxvvwyoV?kJr=2xJqtL;y9f!&JHjgTJSa;^ zJ-5^fy(9sIz3Q=uJSbl|y%U_Py?mZ0J^dZuz4;-Dz4AWmykhKxysQ*YJf!wUy(jY0 zypNxryD%`Ty&Kbpyz=FHy@yMRy-o2MJ+?@Pymyp|yT$i%y}KC$y~0K{yh3Hvy65IW zJvPJ1y~f&jykE|2yd(w#J;tkFIuxj8J>6bZJ3FxkJ%9Eyy{X02z5ca1yN}rez2>$wJt~K;J+3ITJIY!ky-VT^ym)UMJqk+Hyqr!8ych(c zylgYUJhMWDy*4(By|=OkJ#^>>yHR8^JqnVsJP2?uJv>HGJ=inSJ7Ws)Jv}s6J(*iS zJ#^HryRD?LJi1%wxl?wBJ@Ym;JQzyJy(uHMyh*Soy#a-LJR2c{z5APByz*pcy_LpC zy`empyw9}Py!gwJy~<3Cy;lRZyll&fy~4dIyGknMy-Cd;ycdY4JaTtdJsRW*y?Yv^ zJr640yq}2gJFE`oym8YOyi)VEJT^&ayx3J3ylN>$Jv=1Myy8l3yWJkSQwy9(xDyU?=q zyuhD)yw*#NyMZS)J>6BZIgXZbJ4x1ZJy!dvJyZoTJb`2fy)iz>JBp^Qy)FZmy-1b- zIIkzJ)DZGx@Jw%yv->6ye=L8 zyTULSy@hqBycTt#Jyq64z4509Js^wayXF=TJocU?J+P=FJ+f-*yekg9y#c-NJEQ*+ zz4BCqysk}WJ?eYuyC{}NJTgwxy*+?IJd6knJ9&hlyxXA=J`syyqkHJFypwP1yWc(my)oEpJR+@_ycV-hJm+4Eys{pxxh(}iy$M4mz4T+_z44vWJt12- zz1y?~z9=W6y+}&aJimK7JjR#y@&^lz3h&&z49iR zy~Pl3JTK1Pyo9|dy+K)+JR=qVyE{^Ez0yB~J$Nn@J+cVmJVFS&Jch9uJ)t`oJ6T8- zy+~LrJ+Uj8JbKw+Jy%hgz1n5ryR-cBJ78_CyVU2!y*Uy2yJJ=8y^yYGJqlh0Jz=&o zyG#kHy?0$Zy0rD~JPG##JRBY8Jf_?myyeADyt4I+JtlJ+JSzQCz5ViQJ^myIJR$O1 zy-!4;JOoV~Jb4(xy#5|oz0X~UydX<1y*ST>y#lTqy~V_Gy&blPz2ewnyN<>ayxk37 zJmdJJy)Jn3y)iS(yxtBuJwm<9J^1*Xy0Py3JM{f}y#ZAoy`tUNyn=6`Jo#ggJ&#%b zyI^m;I;TxHyAm>ly%hkEz;JOKl8y=8PeJq=+Jy}vyeEwiy$3JYJ+n}bx>(JZJeD%pJoX8_y_?E0J%oa?J;tXHJ<-oA zJR>6qJk(CeJaA&(JUyV6Jw~t*Ja7pZJ+hY`J!8%oz18S|y>+PaJn^R+y$n~nybBMo zJepWQz3}9zyy~3By{C*7JsUWLI~f3uJ=-6Xy$s>ZynK|;JqrIdJwJVrJ$#D@J9O^4 zJH|!ayxOVOIY@4$y>AfmJlsuVJa@8TJOd`GJV;}7J@e2vJ@OMsyyjctJup`CJemFh zJQ=7(yp;!-y@q}&JT9X>J;|`cJwKs?y(w21y#I9EJxJi?J<8LfJ@f$lJ@FGqJ=WVT zJ#9(`y-$39JU|_rJIG#|ya{rzy~nCOJNbq|Jq_25yb;xfyuv^TyO^=HJOM;Oy_7#A zJOxu|JV3c$y&66hyfSO`yymAcy-^2cy=;7{JxYC zy~xygy#XIRJ@QVUy^&zJy#@=Fy*vtQy`;#MymwkCyk{G(yerW1z3&WSy#h6tJrx5n zJ%wz^Je7y)JpA+nz1_!wJ+RTayahYeJmJ;Jy<)1NJjhC`JVVLDIs$lcy}ojdJRN6^ zJEtl@JH!poz25jKJC{H8yePfSJVTs8z4dfeyU1y+yc_WYz6Z#0yhf3EJfJr&IG~Pn zy@5-NyoaAEz30}lyUuR@yth$oz3_6Ky-Xl?ye$RaJXe1tJ!YM`JggkUye?->Jh=N} zJ+XwIJ#;F?JO`V_JbNe=y`ndWJx6pBy*dSjycb3vJ$R)@y}3Lpy(T2yyk*Wiy<>S9 zycCOyJ;?;aJh3W+y@Za+ysqjoy;QdJ)bgQJ(k#(J#ipjybZ^WJn8=&JzlVhJu+TWJl*NbyaBVzypvfOy%0=Z zJJniB=ysrw=JP6>)y>~ysyq~&OJqDD4y;u-^JLjySyMosgz2W+@J@XuA zJZyQJyeuP?J>&X}y$xYPz41a+J^D9_JXfj1y#%$_yvGZ8J3yx!KK2+*y+4Sey^BzA zy_IyPy5x>~JRQ6@y@uM5JVkcIyZm{lJlQ5~y!KUDywPuJy}!(*z2GcKz1dA0y`+(A zy{&?vJBg-{JyL`-y$C!my`OFCI*rz)JaTTmJepwCyorVJJa;1-JS;^bJs2#qJxWiY zJs=+6Ji>)yyz*Z~y+p*)ypC-&z4zdoyC_V5y~nW$yp6yby(pL7yyY?z4%JUtlNJoYH5I>uByu-)-J1K6?Jb|6$yslF%y=lOlyAA9KJmqM7ydk_`y>hsk zJtG_8y3{dDy}|{Gyl`vxy4Nchya!E=JmkptJRQ}?J?iQVJ+JO%laJ^967 zz2#2J9_%P zI|%14y>5fdI(5u-yTmgJ*jmwz4rZzy{M2@JEO6~yv}5UJxc~qyK0T_ zJ8b)!Jv_I~JkJ?1y-JD++RJ?!^vy%YCv zJln`Oyni1aJ?xRryxXVCyulj=J=~`yJX;)DJ)(3uy%yO;yy;DMyO1+AJvM!Qy}=#; zz3=@QJvTL=ymDHnyE`S=J4{xzy=qe&z5a`9z0X%!z1meMy`Wq=J(|)6JrRB{JzR!$y`$|xz3U>_yvH2EJY!dFJvMfE zJ!$?=JRbL`JV`o}Jg&j$Jd03(ylC8DJ28cTz40BvykgNZJt1_>Is&7AJR3c^J)Xob zJlUhiJ@7sTK2{E?JqilFyz^kHJivR%ysBdEJbuJzyE(`)y`Q?aJo71mJ#7l5JaBFg zJt3Xhy|%&^y($Axydhx@y@iE3ynU?lxjkOWJ-c>@J^T-oJuV*+J2aUEy!IutJA^ME zJwQFHJgM-7yYjeKJyT`bJ46s&ydI|vKGl=MJiU4_y`7VdJdqMvJtuoaJ>PeYJ=!KV zJ^eoGyp%LDJs~&Cy{N)rymK*HylFg8yitMMJ6;gxynz)cyg!qdJ$D>JJ!nd~J!0qF zJwJOIy<0~!y)m+SJu>)3yuK@uJwZ>(J-dAUyoEs>JsQtYJ%F=ZJ>5F4JwK`{JyY!+ zy#6$qJiaZJy7OJ4ya;;#ytI6Tx-_d4y(=Riyz%RNy$r)@z4L<~JwwpkJO`MJydS^% zyE4ebI`LbOJeLJcJ%eFfz1&7$J>itVJCi?!yOKy8Jg`USJ(g~TJzwWXJC$$?zHRCW zy}(8xy?F*JJ$i;UJw4~IyFW<0yA>#XybwS+y`TMwJ^4A$JXLcFJ-FyFyzY+iy;4Uy?(1KJOkExyGee+yCE0L zJwFEqJ?=!GyT~=KJ;ysTy9=q|Ja4HtJwEiwJn%XHyncxIJgo)+Jv%qpyJzSUy#&Uc zy)1UgyNe9CyoqHpJh7Q7y-?v1yj7oVy)+>^y>3~Zz1zeayaE4Ky2YsQJP{gXy@sJ9 zJS(y9J0^!4JY1!xJdt4&K7=x>Jo7t~Jcvn`J?QW{J(qR?Ju40pKF%P2J#L$&JrtP* zy%6lbJ&>ItKAY^!J>e>cybRm7J(2G(Jb~YkJ(tEJJ;xv%J^ zy+?V#Jcpwaz1!x$y?PJnycn#+JX6TnyhrWVJjqdIy`zjsy=vnO zJqQ;~JypPmyv7r^JV3gvyV6uJyNL};JaN>Oy@N#?z2U5EJ?gXcJ)#S1z3aUbJ@c2M zJYtQpy%hw_J%Wd`yd&#yy#1{$y@ZVhy@%>EK6|6WJ=#bXKK6G)ydT~>Jy$#kywj>J zJyy_(yiICny~O_qya#>)Ju?hNJg5;WJPG>5yJR76yf|4fy#nj0JdcS6J=~{Iy$R4a zy)ympy{q(ZJZ)TmJ*zD;Rpy^NpiJmw{nJSSs_yk(hEy-x0yy@H%Ey+@6# zJg{4Wy*k>}z2>&nJoxMjJ)c`-y+(W&y)qGfJr+v&yi=|$J+HA;JN$9DJm0I*JPsL1 zJl*JQnzFys)6qyCGJI zy>9GiJE2u+z3rN&yoxjmySHu)J@dRLJ1HLoJOPW4y#S9rJ;*Nnyg|#SJX3jz zy*M2mz4A7{y}DWUyfNKqy;k##JGPI*yaj%ly$+mDyuyBJH+a=J6R$iJzG1TJLBRyydtodJr^udJ)02OJRsG- zxbfsZJo}o5ygzeOyo>->JWos=J!%jXJp=?LJy)`kJxgZKy~}=Myh%;jJi?c>Ju`Lc zJk0ATJ(pf`yg~|ex^*0Zy zypuDdyfCR(yo<5)yQ;qgJaeKVJ&F$+yxsy7Jyxury{z7Vy}MeRyn<~LJuF1SyELS7 zy(2BuJb09`y~SdNyz}w{yZ}1!yX7vnJ<*#gy_`LFz0N`Cy+vn>y>UE%y~w-wy*t>a zy-dKwy(7X%y~P5=JV&*8z42CNJ+beIJ(w2(J>KeqJclrrJ!R*MJ*k*jyyPo5J(w@= zy=j5%JSrd8ypPJ)Jd}9QyA1{(Jp>OYJVu_9y}nq|ye8TEyd4otz3>B|y-iNCy_1Ao zJzy0cJqga(ytKNFyxC`!yrtA#Jg+szya-_{Jli85JGOnRJc2cMJ@f_WJpAkfKKVcU zI}t`)JrboDJ@_$Py%|aUJ=QX`yQM;vJtMhpJ(`$cI-wzTy+s`WJzVFkJn}k}JX=UT zy%y!Jz53UHz5gu?J;Z+oyxlp;ygnoay=>4nJ$C2}JUNiWJnui7z0{>iy@7K-J-COn zJ!^CXz0e}Qz4%Mbxt4x7y?*_;JvZk6Jy^g}7JK+j}yVLJPz4~c(J&A~yz0FxgywIJQ0yDI&@p0I#y?UJs{G8Jr_iqJouaycAnhJln%TJ+*_?Jd?XOJwA;aJq2_6J=1C0J#>{YKCN1tyif~!ycJphm*JcZvDy{L*}z1lDSJX~z0y!IcNJdZxAyghWgyOP}7Jd1gjJmxqqJ*xlx zyoRc+yc+ANJk$S}ydlNNya6}-yl^8MymmckJTJpjgkJnM22J=($^y|tuNJs%`wy$W!y^fq|Jaxv`JSHm) zJ&8xUz1WRMy)7$Mx>TVoJxNIX&swya`-5x>13%JI`Udx#%Hvyuz@Dy$L7k zI!w}QJ!TS(yr~RTJ3vpdJeapYJ&@!EJw)4ky&3iyk@Spy~0dc zI}O|QJ3m`lJ*fT7Jz@ROJb+)Zyz_93z3(IlJ;}0QJ(FGlJ(@6`y>;rOz1>a0yes9G zyyi5x?ya>URJy}z$yfp_pJS`XSJQsQ#yd-4FJa^lSy%Ht6J#6&? zJrkQBJu`5BJ!Z?dI~-nJI|-IyJsR+~JuBUiJsztRy{OpbylE6?y%`FCyD8>=yxSxc zy`m60y)>AmylA1*yvv?0ytYAiy=Nr}JJoRiI~ovyJS@GJJysE-z0!7&Jqw^Jr$`Ly&mdSJ6zD3y;oMjJviWu zJtTH6JuSW2JX@QrJSRM6y+>5_yUW{zJeF2Vyz15(J$c=7y$AxOy+>|OyeQ-?z4uZP zJinF=J(Xj?JopE}JQU@ryMO&Jy(fQPy#e55y>J5Dyl*tVy~jZ>y@D?dy+|gSJ3`$& zy8!z;z2>mPz0J!EJz{ifJNMG!y(^I+Jl^Rsy=?`lJpIvbJ@AB~yf<%Yyt$DkJw}Dp zyb;q(y(aY^J!TUvy+mV)Jgy0~J<~FaJqbTGyQX{Zygs9+yQwThJ-eG)nzO&@zyBLifz4G{2JvW3iJyfU|y)I@{y-Bsvy*>}UJs0uTJ2lhhJQ%koJ%BRB zJtSE3ys-mHJLC`GJ#JP2K7^!3J?8ppyo+pvy%9jpJh9HHJz5}+J*zy{J#GF|y(X;0JrdHZJ*)I0y-B$_z05L*Jh;Lxy-q?lz0Iv5z1Z9MJVof5JuM4Dz3Up& zJVFQCJJv0JJ?G$eJ&#wuJ@?hoJs9P@J-`YMJCJe+y_sg5J+Z*pJcL&$yu}_5Jm|?H zyc%jYIg7G!I{1d{JQ!=syc@%NJxJOfJ0-1 zy~Js27YJpxj(J^Sd3J=#hpJwj#_Jbby_ zyG)WkyJD9PJ-s-iJ-1U2JYcCtJUjcQJ>lDwJyBo0JWxy}KE~7FJezzGz3CpbJXT|= zJr{Fvy!D@bz5eY5yYii0y?3kJJ9RLnJl$0Ny-cw$JmIy}yq>jTJjElRJ@en7yz6y) zynGfGJdn)Gykxkya|*9y|Q}%J<%45JW!~N zJD_`Iyl;VXy-KLCyskTL+yhx%$y}9U2yPg(;Jv%(d zJVrLxyt7B|JP8W0yiWtPyhQy|y(b;7yJC=$J$}+TJx9@!ytMn=JjlwTy&ylvy)Lkj zJz5``w?osGJjShGz5DA3J+yPyyn0J-y6y^EYgysz{zy$Pb4y*Ajt zJlyk~x^H$gJa}U5ym}l*y?6!NJO}FGJP9EIJ&20pJSPswJk4KXJ(|A|JaH-ZJ=-%T zJEx>*y(U4-y+jQ+Jw2RCyP<8hy$xNaz3(twJ@Rs-y&58)y~(Ogz3R@fytra*Jx;-N zydw#PJOLLjyqWpyyW#d1JqbeXyo!kqJx87@JXuC{J(*4mJ`e8ZyG>pZJ0zy0J-=Oq zJ(jbpJbAJ_J7tQDJrCn*JvM!py=@NUymKghy;b(?JhS#Iy8Mj1IXNC=J>K;7yVkn5 zI%xwJy*Np0J>xfJI;~MJy_l+-yvFP+JS^dzJ%R8EJ)q02y|jW3zLX{Dz0$(Sy%(rx zJoK|!JgP~vy{SGsy&07`JFMV(Jxgw5Jy&%Ky-?Lny*yW#yx7QQyOz5$y>@d3J-e=4 zyYd8TJR`SNJ$r^Wy&iyxJ$`jUy`s;QJ%(*9y=ogEz4KEYyt3Mhy&$@$JHCGPJs%O& zIi&~)z3vR1Jl=}Px>?`MyhOR)yp^axJphJ2JsAnGJe;%8JSd%qJTONMJnxcI zJ-ZDZy|fZBJpjw1JT#s$Jf8b3J)}iXy@l(aJsXd$JB(S7z3sXZJssMMy^r7dyp`ER zJoX2~yn+z~zJ+NCzNi2oJ&dy?y{d>(yh^Flyt^8vJ*myDJuFD*J5`TUy%@A0y`hJZ zyu>sRzB!S-y&0h>z3?fkyYSQ%Jy&VCy*E{dy%c4HyDK~xy(Ih_y&jHqyzx%0JW(uE zJ>RePJZGuayz~Qxz0`Iayt#HZy*bi=Jj#y{f$sydlZaJO|TP zy$r54y>2C*JjZfIy#@~UJPbJcJSZ<9y>H+yy{adSyg6_nyl;b~z53VCJd%syySkxD zy`Ngzyo@jyy(2S@I{TPJJchXVyo{DrJ)|*sJ!qpGI@peVJik9oz3=gAJoRXJo^qy_S+7Js2#Fy!VJUy~KxnJ?yCdJW8xXJ+eMLy&21_JoQ(fJsA*lz5E@jJkRvm zJgTIXJePhiJqkG;yEmr9I(2UlJ*eD^y8+mxJnBAxyb?NVJ^T;`yn>CHJ)e#Ly+(p4 zJ;RL#yB4J}y(*1lJ-%$oJZec`y?eeMy_U-&Jlh|Mz1F`tJ+D8KJ;ygOyjT)}J%7p| zJRMOPJfq_oJ+sAmyyT*(yYmyZJi)lTJZxDXJ%IjQy$_-DylCN1y$uREz3spwy%I<` zJ!jQXdy%#~8y-xG$x`qFOy$A~wydpm#yPcLpy%t?QJ@gXeyr<5=yP2H_K2a&QJrd&G zJlTUiyk^uRy^W=0J@E<)yy#~+Byf*aayd23Fy(Db0y=y~lJUFBGyc?lIy&gjMyOm!EJ*fdcJ?G3$ zy)}{6y^f2Uyy2+mJZj=(y{ngcydeLEyyX30y{5~y~SiXy+kq@Jt;ECy?gS3Je<0^y>}-a zJ3VJ4JATwRy)}*mJQV`7Ji{7aJq6Vby@(@&J!V7y%Q`rJx*20JuZ;Yyut5ZJUX!6y@zUxyg@Ou zyFH1!y{+7)yd3LWJ2FL&VJ(2C4y%$(xy?zu9JzZI+J;zS5JewP? zyd8zNJ51o(JaTB$J?gcGJ=#HVy=8uJJ&oi+J)}#6J-Ry{ya@Bpypc*OJv<(9Jw?8A zJQjj0y<<4eyvZt$JPN0-J+j)vy3HGmy^u;)yJLetqyvSd6y+#?$J#m1vJ+5njJ!e)1Jf%(Ly_myz5U#ryxxQyzA{Sbz4`*5y_=1LyxL_?JXjqwy?lMp zJb*k7y)q1}JYS|Gy~{HCyB?PFyv}0qyk~VrJy|EG*y)Hw#z2gFiy(k??ysE@+ zy)^&iy)8Xyy;#dJynp*SyFUiAysUQvzA=jcK1w98JzziNyoT6UJ<*&rJ)Vt+JYs7_ zJ$FH$J+BnPJQ8gXy$eo=JsuaQJA3@Ez25?YJzJ_6J;4CXyrEX(JR`9>y_k!kyqio2 zJW}Ztycq(VJ&2*uJYjy$J(4O{yw`WyJ*u3yoCwky?P2cJP}$nJ!;UaJe9h*z3|GWJHNrkz17 zysNg0y<}*%J?g5%ynE3$yW_CmyF9bdyY)qsJy~9lyh8swJ@YfUyw@ECKAM#vJ^s~X zylY>9Jx}B(Js13HJ*?f5JxZL8JzkPOJjvynJ^s8QJ>vahJou+JJsZ2DJYd`ky(L6G zJ+gcfJ!vNcKCns0yDlgdy`=^EJgX)!J%jF?yG2t|I}1VcJn3b;yequ4yC<;}JvT=! zy=r+|Jh50nJb4d~J?v@5y-1T6yZI)fz1TL4Jvkg6Jy3r@Ja=ylyEof4Je){y zy^&0PJc8f8JSI3|y)0J7J#Z#2I#K|VJ4>JZyPP}JqJ#LD1Juyt+JT&N|JH8jDygR(nJ*pU#ywV6(z0Rp5y-yphI}B>A zJ>r%-JqMHzzRfXaJriqAJ+XD6JiJw7CuJG{2Gyx_!kJm_I&JW)GPJe`6yJOdr1J$!08y=fAtaJT+NZJStX9JazqkyF0@aJa{@5ymQN&y$+=> zJ*5^MJ;l+5JmT)mz3(@#y;tF#JQi7?Jc!JHJslIRyfv^Byyic{Eyx5H5 zy-XJ-yg^u&I+W?xJtk;JvxqxJzKR?J?wb!JtCo3y>m7iJTzL{Fz4_e5JZ&QZJz)^UIT`8&ytUh^ykED@y!=CcJ*S}qJQXC#J4QvVy_>3_J+qKfy`a3EJj887y$rmg zye_@yo0!!JyqEYy)~OZJ!hwrJ!8o> zJ&`{>y!BCuy%BzlycuT>J!{|pyY}UbJwC0>y#JRCy~n7NyWy<(|t zy)u`kz3bf_JxVwxz4V)#ycr@7zKkHiybGloJww0PI-pshy-nJ=cv3yGD0z4sGey|~B1Jhnn&JHpi)yc+v^y(f7;y*TJ5J3U(Oy_R*ey)?YYybu&PJPD+G zJ?COBJ;hNzJ*r+qJ-H*Zyqu;MyTV4MJn(kSJ2pGDyfFajy{0m0z57Q7z1R$lyc~)h zJVmowJ;zsUy&~8GJ>uM%Ju4rLJqH*4Jh5!#yp(d2yk##ayf!K}y+BJ@+zhy}bZ_@JWLm{J(`W>J*XTrJwv}UJO#m` zJ@7l$yuG*Hyv4+?JeVtmy^rxny=k0wy>>+!ywIaZJ57YAyFeq4JlN|my!!^1y_fJR=YiJm0t*JtY#+y`SIGy?@eky*ULyy9+_*JbA_#JJE=`z1pBRy^Q1JJq1s> zJZ@-AJ^#1Ayk#tcJV&>&yg|WmJ*N;FJfD5jycvE+J@hu8y+Pl^J<9LQJlNB@J^nb_ zJO_LHJuvmAJ$Jz?y*qQ5Ju*dmJyodLyg46IJwcU=gIJy63g zyoa|=J#JJtxr< zy5YE-J+7LpJv647J;yh%yzk6YJ!a7zI}$^8Jn#^kyur0J(NLdJx}y5JYR?qJ^L-C zyh*~RygkV{y;&uPx-q_=Juo%tJxDMUy<|qKyDuv(yfh{$y}lfGJ=q_Uxp2lXJWzND zJU0rEy^!H?y(3igJj76~J)6y(JyfpbyrFOuy)j4Wy9+uoJz(@@JqWbUyoT|Lz4+|S zy^I|6yws#FJnw=yxXe0BJ#POJJ?tsQJUq*Ez4opay_M&HJhrGsymth;J5C*FJxNwv zJ>OGsy;y zKH1tbJy+a0JvR-xz0nT2ybf=syNJ77J*Qrkyc-DAydCxFywqBZJq#;TJ)!;_y$nJk zy>z6&yc3-XJtN;XJyjE;Jb%7Zyc$|{yn$xXJ;8Z=yjmlRJrCteynLQ`I+LGYJ98$p zJ$5FhJ;wjIyo}pZJ&z`*y)(Hvy`fm7y#6+2Jaaq#yfSRqJjxWIJWiyNys^JhJ+WT} zz4*e#yq|5ly@rX5ysBlyn2SJ?J?K{>Jr1IA zymQ`Xy?9?Dy(b3RylHnHJyl5^JvbSVJt{n)ynR}iJL#o8J#TviJyNVbJnXHyJ$yI{ zx=I11JnXljJjQ06J#06#IVs;dy(}e?JAt|Eylh7sy6myK2S>y!wN1J=9ovJe*80J!f!| zym=r3y-wa0Jv5JKJ^sy`JPVk_yhBv4y)u%Eyn7mPJ?!vDJ>q5ny)?k3JenpcJ?-^J zJ@dW%JT_A@y&O>mJ+r*Cy>8%HbJ6bpiy*4#xJar!FJO?L^yhXHIJYRTjy~Ye*I|H{0y-Oi6 zyf&+sJroD2J+mJLK2mWfyqo%Sz0Q??J&3FZyt?p#J3|kcJ;z<#ypGqmy$O8CyJf?ngJP|g5J*rXkJ6p71JQoF|y`P74J+BBgJuG@(yZ5@3y%yKayeLsF zJ%i+bJkwwsy6wM3y5M^OJs`Y@J&vpfJaLB|y!d$ax(Jx3Jlb-bJ<<1sIv?YAJqWZK zJhNbsydMVVyt}R>J^7+DJE%I%JdO{pIz3U^YyxhA#y)GRT zJ;p=AJX|tNyQJuoTXJ%7WI zz27K9y&$?6Jxn>1yX52%J&xlZy_ye`J&|juy`Dx&z4mE|J?(^pJ#4^*J&Y>Ayo-E% zy`IYfKFkMsxu#<)y%eWy`drtyX<)ny}pj@y}oXm zJjdxAI)=96yq4S%y-$5iy}*0~y;4lby&Q0^y<1T~IwMvvJ;3gOy@*{By^81oy-yl` zylJ9*Jv>4OJVd)0JO;m^JoMi0Jztzqy0k>xyw|f!J#YD6JT@a(y$_s=JWj+dy;fZc zJrO>Py|T^iJA>LCJPl4!J;}xsJ=gXSJ$Ls7yy&Noy=;{~z1}Wlz5fdCJvDU-yuBzP zJv2R1Jsxa9ye3%}Jn#(Wy!U*7J&wH}ySdZEy$IDBy$6qAycHLeyuptSJ+w0}y^GZ) zz01Qcy@krDx=54=J~;RNJHTAtynx{wJwYv9J+A0=yJ(IRJB0mUJB6~3J+~XzJ8=!P zyTQ{Sy{6d?yqEHdJ+^4@IuECZJRq8fJr_?uJuL29y@2ZRz48}zypP1fJ?HBJy$#my zykK|Yy(Sx$y;Ud(J^Wj*yd@%vy`TVSyolW;yg8^h zJ!i)3yjTIUJwxX;J+8&VJp#`4JVJaAy(AGMJ&;6KJykLOJv}@aJ+MSKJJ#{})JJ|JuJ(_3Kyn8Z9 zJ&Yh4J?q&RI~fkMJ<wviytm0cy-d`0y`p#hxw*iL zy}|KRy!;j9yBf)Ay~`fGy};)VyuVyQI>iufydY#VJpZFEyN%I|JLt(-Js)l+ykbD zJrKUXyDtxSJMMEgy?XK@Jx7QdJ2k$J0)|y`poy+0MH zyaz3Dd(y(cr5z2)vGye=W&Jnj_&J$qd^JPK1=yh+%(Jlb@MyuJ&+JM7`lJF)So zJTdC0JO*GkJ;V8JJx(r=J%9E^JaE&OJWhrvzIj`Az4qH=yw{edJop_7y~iN*JuzD` zyvuSlJUA7fyvm_jJRRaOyz8%2Jq&}*yV>WcJQ8$(y*Js^JuXBTy-njKy$EwjyQsJn zyyJ0)y_x*(yi3niz0qdMJLkEGyPVZxJXI|wJcKi^y|bETy>o;JJ;?qPyyrE#JJm_b zyu3*Yy)nZZyMy)_y@EB^yjB!Uy*J__yCD~_JlPL0y~5VzJg-l&y}AgUJS@TCJS(ts zys$V%yUq!ByfNi=J>%3QJxjQry&M(Ky<~g1JiucRJ*=M?J&X%Hyi=q~ytl0(J!ieq zJX+CdJ=Ff9yr!Q;J+0~HJfq^2J!(pAJj+a^J-yYTyv5{>yd4!5Jqt}6JFJ0=y@X~J zJU=g}J=e69yky&py_Ut{yEx4Sy{;=8z23S-I^vmXy`0(CyrQ?LJ)Y@>Jt}y>3Ksy=Rd_J(MS`y}CuvJm(cwJ;PN4 zyg%DtJVj|TJv+#YJ&O7gy$!+`JVtbAJz(`dy>t)1JQNs8Jcv=PyGJwwz0A1bJZ2#% zJ$6PgJ)#<=Jr8l7z3{#HyIy3dJqAOGJ-~Tryu>pJ-WPry>b1TJ-m|3yzaXiJ8bp!JVlt8J(TE^y^VJ7tJyDCyJ+bQMJ$!uKyl}6*JkbwsJ$kc&JzMU{J+H!ny?DAO zJAv~vJRiKLJ)v1oJiPMCJVGGVJFHiyJrUL4ywe-UyX0(iJf{JwJV;{CydU^}J**G= zydjVXJ@B=mJ;pTqJ4|0Iy=x8TJc`X|JLuXHJ)rQgyC)C|JQ?4pylvt*J%4MIyEDtk zyoBH~Jc^M4JscNey<7VYJ>x@QJ%15FJ%%?3J;G~*y+6$KyiUNZIh!Fkyt+|dypQwK zy}#lCJ@!bsJWkAuy?8dgy_*|)y`6H7Jqf?XydA)%JHz<9y=ZI%JiaY?ysqmMyKB>g zJ@LYbygWj=y&zn(J!K^UJrwa6J)eioJj0dmJozNFyD8@EJWAH@JP6B2JT9-bJzrrW zJlRPZJ>VlNJ-m0#yHyely_#FsJxd~^J?0ByJ<&Wjy(^&cy~0+6y~J}TJrK^@JbMeR zJxWwLyn8WSy)8ntydmCzJ@0;;ym}5GyMSdYJ>W?CywOS@J^9tJW+Gxyu9H9JW>mOy}TNzy~dv~ zy*NUyynP0uyd$+Mz02MJy`0QNy)kkaI}*xdJmJgTJ?5HWAhJ)BZIJ;1odJP+CdK8et$y{nR=ygA`FyJo&rJ%QpDJwRvyy_{)tyn)om zyryl0x|A|uJPHX?y>3!~JXc$Py){mrJu{(KJe}UVJBSbIItc7`y(Qv4z4A%~z1(mU zyeUqPypv3|yeBLAI&Z@5y!-N`ym-}&JMR$8z0h^#Ja+;CJ!kJ#JHQ@`Jl)w8y&zV^ zyyC=CJj02RJ?|8mJvNSRybI*NJFtZpJO_tsJlKGfJCPR@y@Yw@yqP%zy&Z4jyt>~d zy)Oa)y^50myty6-wgyQ=Yryi--@Ium}Cyzo*VI?^(=yW610y@9#@ zywVowyMJcxaGJgO;KJ!BA7ygny}j};JrIg?y!1-Ny!hH4y?o4qyp;E{x^1GBz4L{?yxLt}y=WH}zNkP- zy@yr`y->NAycDkuJOYy_JzUX`JyBDJJD5FYJfZi+JXCIaJzXr7Jv-(Oy`beIJX$lS zJ(d4NJX*-SJ)hhJz4Ct{Jr&&Pynk_5y8ywTyd6B3z4XSny}IDFJ(0tMym?(%yKA8V zy>{3|y^;=|yo>1ayN!piy>rKayV+96JUI8YJTX42y*<*|yfK>Ay;*^pJiGdlz5REH zJgw~aGVy*e|vyd$}cyx2Lhy${+rJv_pKJ?)65Jo;-=yWLeAzB9)$y-Gs)yQ+i}KC2w%JoC!?yGz%Ry-w;kJ({ORJi@vf zy`il^JyT3nJ0;y*QtRJ8FlbJp8WkyTec3JP+6ry=OhXJr4qry$bzLy_IyhJcP%U zyeWdJz1zyzy!|iVJm$inz332^yCa{Uy%pTZy~YL8Jjdh+Jzvb-yz)TBya5VJJl~Om zyf%Z-y?}FzJsr3wy$*dTyD0*fyk)f;J&mz(Jvb6dyl819I~;(TJl)9{z0W`Yytv_( zJPW9^JUEWvykXoFy?Hz5hBoJsdoryT~mKJqZ3$Jb`#5JM){fJp$+ky_)W;yl2&ryGF$sJx;BfJVUdV zz2tR#J<=8oJ$DnEJ#(U+JeuZSJ>mwbJSbbVJS0M>JBaK6y#)}^JmgOAJJFzlz4xF1 zy`zeRy>HDzz1-^aJLi6^ylC}xy@&-yz22mJy$x|qyAlN)IyWbly}j#yy^q2YymzEj zybb##J-7;}JrK@$Jx`}*Jo^|@y=jvNJsDaJy{LZ5Jm&YFyv;h7yt5mmIser;y@QmI zy%`qIy$r2+y-qVEyb8crJ+$m0z0Vd`J-mw#JrG9L zygb~AJX8Vxx>U}qJXDAQ;gz5iq? zy;06Tyf~8GJVkdKydcTTykCioJh!ZSJi#c{yc=LEy=}lpy&5wwJ&XtDya_+6yyF=V zyfGMLy<+uLyms#qJ?7f| zy(7bex^6=8Jk=M>JW8KQy-6XDy*>(`yBC^JjuCzJRxAWJl*ck zJbq@HJXK~Jz0hO)y9W@?yH1)!Jv`#-JC&F{Jcs6pyf+E7yu56+Jl0Aqy@(&*ywtTs zJB1D;JY#TfJ>R{?JM5>_yisdcJj@}sJq0t`JPS;#Js`9Ny$%e0JwtpFySvAFJ+nfK zJTAL>J@Y@NJV$u8Jzq{hJU=gfyUdP`J)yREJiF{uycG6kJw%S9I{71nJ=y!tJrMd` zJ&pGny}v|iJ=bW#y}`Jyyh6JoJ^6l1z0?A&Jhc(tyD?}aJxNSlJySy$4^Nz2_gxyeBw>yax~qzO5)py;)WeJ=jYuy_;(fy_j$;JP*0oJx+79J$i4j zJ;*wJJw!n~y(4>Pyd2q?J);F9J;Cm$Jla{VJ;-yTJZ!$`ykWLJJz$N)JfJmuJ-`6b zy~U-Yy#xA#Jy)U0JU{RUy|~hiyu+``y)jF{z0=r`ny_8oRJcMDgJe_Kxz1Lh7z8lu!JkiLB zJjqq1J;zjGJs2h+J@5!OI{ssZJxmZxJJt88)JtaSK zJV3Jmy($_yz0U^QJmHXLyzZZ}y$~VTy>bVpJjJ`Fyn9o-ylkc!yz5c7(y9+I-Jm_DQz1u-Hye@j_JE&{1 zJ;J#VJ@_^NJVo`_y>=Uqy#s6{y!#MZJ?zT|yqI2{z3U6jz4F`%y~2%wJ29rWJC0iw zyAX4&I_^QfJgXGDJ9?lXy%|{QJRI5)J@~>zy#?way%{7KJZShTy+Q%LI}?fZI%HlK zJ@vD-H@~o@y%%;uJcygPLvJ^MY6z0BS(yK)X-z4^TZJx`XYJ>O=Dxt7#p6NzQ748JngBryxvu$J2o_;yEyc=c(J&=XsypgsaJzpOSJk!**JPd*lJp`B)y)yC) zJ>ZG!J#WvhJ(6c(Jtevdy#e-@ym*8*JO=(+y}?&dyhSg}JV3MPyFzhGy)>OfyfmSV zJgVE)yUKBnytt?%Jn3}AI^q>dz4y`fJqpSJyqh_VJw}@zJFG9bJ?AHdJzi^ZJ;c*^ zy`0{hyKB$ry#GECy-9lWJVVEnz0z49dty{mKsy`5blJkzjk zJgHQXJ&jaJJoF_WJ^L`YJPRkNyi^keJm3uVyyD20y%z(-yly_oJD#3yy{lV>yk2W# zy*J~{z4EMJJsV|xJ=S36yfRJ&Jrn#fJ(FlwyXdl6J!Q=%y(!nDyh`xq4y)W;Uy=PuMz3yFIymv()y*KPIJ&Jqyykun&y%pl3yeY4ey%z-@yh=$^Jq`|! zy?TIwz3G}bz103Ly{94vy<*F#ykL3{y&V*Sz5YUOyCC&PJ^LznyZjtNy_}t>yx8x1 zy`=LlyhR~{y%7-9ynhxJJ@gJ!y|t4Ay-Zpy&98Fyg%){yzV~WJ7~ZHzN?xI zy{a&J=%{Gy{-qZz0Z4Dy^ssH zyLUKXy{Xq*J;a;&ypDVQJp0MVyp-yMJyhhQx%aOxJ&G*Ey`!)fy{VEOJ@7JRy|@L2 zy}*Duyi4Yay?3*RJ>E3*JHDD-JfY*eJwSGAJm-UeJ(O-MJw3@aJf?LeJl__xyvEI0 zy;lGeJD+yXJWd^bJzt8zy9^1=x~^avJl6}4JnEZ`JxDbHy_hFXy?+uky|b4cJeDM( zJw9u5JZJ{SJhBsxy_9i^yrqIZJ+rN(yjV*tJ@SRGyA`NOz50~Fyq8{uy?lryy(S}g zz0o#xJA*PRy%1|Fy+jPAym%;xyzZf_y>+%!ycTQ>y*@v|y&TO0JjN5SI~c42J;_LE zz55(Oy*5seyseVNy<%tqy@7;Lz3~A%J?*IXI>8^(yd{BIyl8UdJUB0pz3UJsyjnUl zy(2TuyO%<|~TyIZkAy+N&VyzzT)J(}KFy%YU?y^CC|y+ZQ^ zy*k7XJq@>iJSkhMyq4?JJY{>YJ^m)JJ-o7KJvK<~Jj>;V zJnz=GJkqEpJy_vMJo{lUy=dM+yaX83JcY|_z51C}ylnS?JH<&qya%nVyo>7@JOvCM zy=;hQJUXczz4melydITyJ~NJ-iJuT87J#U<(Jg7vhJrK-`J@f)Z5J98qPye9D9 zJE9kby)D)ky$}UPy-VgTy>!Jy;?d~y*}d!JVNKjJo8fWya93eJo}Y3Jt{e)Jliv+Jn463 zy;GcUz3B$GJshYhz2_7GJ@dfPyTpn#yle~~y&zCwz1JB2yr``Lyk(AtJ3&JbJ?CjQ zz3PE)JPB13Jz)<(z0H6LJaVGkycj#+JmQBoJ+RLlJji#|ytz1)JvDT?yfA@lJ-%X( zyk%@Dyd=+Vy|ONgJuiysJ<->qiJer3To)y{DfhJtq99ym@{NJx+pxJ;?Zf zJ^ca1JaWX;JW6_wy*|2{I`Fh+JXYMuJohaOy|2~Oy|JFd^ zyf9B9I|Jy1yL*;wJz;SuyiP|5J)sIKyw>Iyov%iJ=z-Bya8M|y<8ECJy&08Jy_89J!(Y-yqkO6x->xDJ3jOSyACY4Jb^n3 zz3QJ-JkQ}pJ;(=YJ-t?Ky+-b`JaM;3JWpSzJ-d0mI%ORjJ=`#>J)eMrJ-Shiytm8| zK5N44Jh2dgyqf>pyn1z^y$Vcdy{;y|y|p+sy?1QjJVC4ryt(5=y~Nfuy&4F&y*Y9j zydxd=y?<49ysbf*yb`{TyliK4yMCw#yHA zy)fB+hylYIRyT{zdym)z6y)iTyy;6RMJwR52JF%iO zJ=HF-y`A&pJZB{dJc-Bey9D^NyfXB;JsoNMJx*$kyTvwAJzPzUJ>f+GK4G@YJ-!!r zJRsRgy`6puJ#MDvyu2)$JYJi7yLYAzyrZb3yEKT#Jc%_eJG~`(z1yCNyv8k=yxbAS zJD)?$y(K~;ystcXJwc+GJQzJaJigK3I+bv$JBGKEJ>h;?Jh{~+J-O9ZJZ<7Hy|#v? zy{lZJIW(1*z4XUCyYJZyzjJw+UxJpk|~z3EJrxlvqyJ7{} zJm^G%J*x*&J;DSRJve_Qy=vKyypUQJK0$ENJ-Aa;y``l~y|-5uz3rf-y`IE%J-W}t zydb2vI*SroJ?k!uJmb7bJq^>ZJq=I@KA&uaJ?1sqJ&H5#JO>E-Jvb_ZJ1B4tJyfnk zy$nG!Ju%#~Im0<%y_Nn2y!AS>JPz~4yg-3mJqLzsJ@XqQy*9usy-$)cyxGeSJ^Ddd zJy${PJduN=y==2qz4>GPJWDslJw4e>Jqi4AJ@AbJycVhzyg1E?J))nwJ*};ZJxBC6 zJ^DH|J#?qSJXZP_z2Nn}x+H9%z0_my*uiuyKcshyI&HBy?uK?JrrTUJz5CBJoEc%y=GGHydVNs zJPq{FJ&mdZJ{1<9J(C`9JYD~TJfLkgJx)c|J@P}DJ%!KUJQ8YNJhyD^ykTdSJWy?% zJg&Yyury4yVks~ypGP>yvjRCy-iAiJV2-4y!m+;Jly=AJlCWdxxD9VJre_gyh$?Q zJ3q&qyhHX-J;idKJxP;}@Js(?}y+4$ez0Q`*yJMaly=SAlJOHrqyiumnJ2Y;5z2BGI zybO_RJb=mMyjdfDy3?sx=2WMJj>%3 zy@GYgJZk7~Jejm|JzAzky#=o&y;&Lyy}OrOJwJFIJ`modyeGPpy~ndty^1d(y&Yw% zJb7o?J@6gQy{hQTyd+A=y&Z#)J0~S7Jzo4=Jyur|J(<|!ymtkOy()oEJ)Zxfyz;=L zyl+`cyXf5My&ZuLy~g(5yO5I`y+(a(z2?JzJzQq4JVgK0yrJG-J;dXSJ%*@)z4f5& zyuwd7X(y^EIIyp~TAy@yKzJ#I-Ny|0Q2y|qDR zy`Q2qL`IpE!-y>&$>y{P1v zy`S|yy(k-NydS4TJZnh;y~O?(J#){nIrI5vJ6_&Ky*>skJzn@SJ=<{CyOz=#z2p;! zJh|+%J@pJHJ;^>JJwFc2JG!tdJ+n|hz40}Cy)V<>ya?enJ<%5%ydXfZJK2^IJ>mX1JuRXMyaLz=JbGxH zybgALJtT^YJJl?QJ(jEhJPK%^ycaC4JCR3cJwXghJ&`VJJ#pB zy%CM2y@sJxJ)@Hny@ly*J)m!hJ<4i{Ju`FTbJ;apWI@k2y zx{+a8y~Pgzy`_%8y|WL2JriJt23NykTbdJP(+5J<5>tJN3FmJJV-qy@xvfJQ9uyJw}kwyklZTJ!OcW zJ=6k#J)G6zI{+ZdJswrZJxn62JWF;7y)dC6z2-`DyQvQiy)@pgJBy)^JV*%xJVHV* zJ9+Tqy|o?8J)XLJJu29Fz0)w6I>v#Jy>+^BJ;a0qJ?O60yR`54qQJr`5IJ2gX4Jhpr#zN;mSyz?9yJz0#6y?)r)I+Osuz2(q;yfJ!< zJ$yL*JjqukJqT}$yvYW_yr4T^Jz;~>J?-GfJ&N}|JXaWRy*%)NJG}5tJ(WEPxxwr} zJQhV~ytlx~Ja1{mJo98#yR?-KJ<)rfysd}RJ@`1$yqesHy#-f2JKVdVJtx;ey;2pk zyiG-iy$~>OJTVw~J+lQPz0cJ6yaH{?y8s?uy!#L(Jb^@*Jg8TKJx?B)JYiKG zJ-_HCyuUS&J!(&}JVY*UJ-GpzyyQ4vy;Uo8Jbzl&Js9#yJvn^Yy@NkuJV+lvJ+PGZ zJyUMSyiLqPy$bR`JH>`kykzf*J%vo&JP7E*y|}0|ytUvVJLb3Oycf(RJFfQ3yfh|> zyKEjTyl0jlJkRz@y-_xgy<)RSJuT4!y>=K(JsS&ez2WZ6ym`+DJwlmlH{j=*Jf3^# zyh;=YJ>GhKJab)_y&%s{y-6O?z3Ze_y$=j`y(igoyTW?`Jq~>Xy-OZzy|B~|J=(b1 zygrYiyv=%?yLx=7yfDf&I&9ClJL;t2y+VpDyOLkdyPxzTJw2dMy|kwqyf;qjywPkz zz0He;ytD&|y^5I`Ja_vJy#z)9Jt6wfJ!px$y(-Kfyw*pgy#O+dy&uqTJze4eJ+_Rg zz0j{ry+bR0y$Re$J&MigyD$!^y?T+8y@KgAJlmNHJcm{Fy%#>SJeE|EyV>0ey>sG) zI@(ojz19NZJZ6Eey#J97z0Ceqy&+WJJ#MxFJv?BWJotS{ysdyCJm;YRz2}o#JV9EY zJgFdqy#Baly_SrFyvb5VJ(^JScRxytQb& zJgWl~JniFPyt*k4z8#wdI>&w;JXgWbyta%ry}I?RIvVxEyr|;;JX>awJ+7pwJ!;yD zy;5E?yW|JRqsvJgu8ty{AQLJkachJYtOmJhXjtxp3)`yVMh^yBRxmJ-aNby($wXz4h5@ zJZ7c}JOB^J>Uh4Jbf2FJKly#xazy_@6oyke&my@hbpJn`i!Jy5)3Jg!voyoYl*y@EM6J_Jf}V!y%S(&J&cDBJ?AioJwiY?JhFWr zy;CW{J&Q)UJyBXpJ%!#>J){hayjQ_)z4t-oJ+7_eypYeZJjSntJdD)7Jr1FVJy4q> zy~-RDy;X1oJs8*bJPSG_Jn;3oynd@)y_Y+ty^10?J<_(MJotGlz1*(cyJ^z)x*>Lx zyz;1wJd2@LyKO8Ly=0JPJ!^DUy{m$yyfGY?Jd+=8J(`c1y+(i!JR@2?J!)w2yRO>% zJRGxrye4)FJy9lvyHJO+x@J(qAk zJ+O2Zz1$GKJZSQuJrTyy{zoyh-qdJZiyd zyyaFYyt7k(ymAP_ypIA2J#8SbJTz>=yfcaOJASLvJXYtdJv3WIy_h%Qywu(XJ*O3B zJ-I|iJ$Jn&J&4OT zyv-n>y@l=uJ=EJOGNwyt6oKycRWIy~fQZy)3F{z40>7JO?wAy%pQTJWcGdys(|5JRb=Sy9)hb zI*-bRJ!h8Hy|E{Px}M24xj2`=yb^Mnz3v=BJ;(1Uy~SqwyzAlbyaijxy+HJpy>g?h zJe>ezyIc39y9W8&JmmC{y}-X-y@cd4y{p@&J@RO&yBm4Dy>?yAyk(K-Jdb2HJgRZ| zyi@(yyJ!Nr1z2 zy$XBvJ1#mdy(1vOyhUT}yqrCey@Dsgyl`H#Jk3QXz0AH5Jp~@Kyz{@Ly~)@TJjDEy zy=c7Ly`JE!y?d72Jp6qnIXzGhJTvAtyfZH;yLUBpJqx5mdY zJ@%EfJQ|-3y$oXMyC_fsy(CoMJW+GoJW)RyJ7`ncys$;Ky6LAtJ>>x%y*FxsJ!Vq? zJ&NCtyv;az1LgfJ7B#* zJ^b((y=mPOJage%JFhCByh0%_z0!OtJS#F@yN5NAyp-!fJ;-#& zy@utXJSPN$JRn$?yoS?|JU?rGI$5%Xyn43#ykKluy&WAgJqmoOygQQ^z0))szV_WU zy-?D?JXf(jJcf;tJqn}WJyTR5y}TPEz1Z%qyOG_+Jg=#xJ@W4MJZxJIzHVBgy`f`| zyakGKJUCU0yyy{pJjMEXy~0H(y^wvZy%e`2y^0n}y?_Vqy}#Imyj4Fly%6bvy&7}x zylo5`JxU5qJH@#}y^MBpJZqHiyqXzwJc-2*J)R0VyS|SNy^joeJe!niy#OHHJsrK% zJR9=RJh7({zMHzdz0uiSJ%QZRJq1LKJ<=;uyaCE-z0dlNy~9ZbzH9E>x)DB$z3v3` zybw%2y&8c3JfML^y`v;dybweQJrprcJ&T2)y`!t)JOb>eJa<*PJ&Xw~yp6E3yk8K* zyVm)rJ^Hr^J>_U5y}jm?JvwuyJO;n+Jy05qJP#?lJN1o9Jth@LJq}oaJOI9!x`#l9 zJ;mzOJa3Y0J+`1xJQ*e%z5VQ%Juw2xJ)dVfx4^krx*d}!J(8EPJ7SHUJ&k)~J(S}C zJEQyJ%;VVJ%{CP zJwM}!JbNFQz00DTyo_t9J;O)bJ--IgyGhv5In7=Lz0D?7yPZ!DKJtp9yq3=Uyi!Gb zy|BViz4hB2>J&d|-J-zsZ zJt@rAJfLl3Jna>Qy)d^Jy~mt>y%b3~y$2biyts(ey+LPRJ7W54JCbqCJJ>D6JpFu= zyk!a~ymS|>Jjk9wyp<|mJ$%Y+J&)xPJ_I$8ywUMnz5A7jy@|`=ydKxNJj8Elyse&J zy?vhtz7I$$y{SDhy+u5Cy-o?DyhD5sJQRy_I~pCNJKg>-JD?3-ydhv0J>NY=I_(Co zJ8H){y{Ds|J+RJgJb5Ary-`;`J(HFYy*$rLyf2_GJq{?eyu+iAJY)M6y`0jAJ*E)> zJtXL0Jpr&ByOX@fJEHVDy~^J|J?F>FJcM0^z4?P6y&otqz0+qDJ^Q4mJnDavJ(oiU zJId>bJ;Dy$P+Cyjpo1J+0qZJvQseJcKW%y||BPy@?&Jyn?NWJ?NyAJfwMyyq7Pfy%Nc6 zy})6JxLLX zJrXt+y~V&HJ0<8RyoOI6y+5`hJ*1xFJORrMz4Jw>yr1PIy))L3yg^-%ye;(xJzoSE zJ@tAQy|J1DkkJ&y1gyhA--J%IrrJdN8mJ?xry-unuy$sacI}19-y!fJ%yiFnny$e+jzT?%7y_`^Hy;DW9 zJp8OoJ&(%~Jp3RDy&BE$J3dqHJ;DhZJ3c{>yzI3Ly;uR5yXyE|Jv`KgJ)yu=JQ}s2 zJkBAYy~9QgJ>px@Jz6%CJiA%hJ;(lYz2F{@ytGXlJ(~cXypfmuyxlKrJcN&PJE70y zyo2xtyBfHlJy3TUJ?F|XJ=9j_J)dOQysu%TysYmby_w{)J&}$Jp@b(KGz2{yr>QQx|d{GJVP11J+H`GJ%7-k zyqvQuJWs{*Jh&~DJ%B|rJu~-Ay>y+o7gyX~}TyOYb_z3o6#ye+w}Jc-)uy@!w~ zJ>Hg8JOqjrJ*=E^J>Ul)Jxf%Ay{FN;Ja%r%Jr*;UJe6;_Jc7t-Js|%6Jhx>@y*Mw( zJ)C|KJ;ic^yyF&hy?$N_y^!-WJ)e$EJYF0~J)bUuy-8qNypmEGJrt)zJvzL_yocg5 zJipI{JZJ$CysDf}y_TA#yic*Uy|66;Jd|gEJw96>y}0gtJq?m5J5K3aJ6Va%y_Y@| zz2x)uy>h?|Jv#~wK7*$iy*k!2JplelJP?q&Jx#B-yPET8Jm1|sJtIcxJe39Nyla&* zJTWDwy`#XWJSdeHyySy#NvzJ)&uSJ(t87J+3NKyg^eSy!Xkp zy;N-rKBnOTy>QjMy<5DKyfh3cyj7n~y{_)dz06&Oynntzy=^LiJHB#2J(`r*yHF3e zJTN+xJp0W$J+EO}J$?Y4JiLLIJ^2C3J(vKHJ=vRZJ^!m6JuCRfycUJ0JXce5JZ&lycV+=yw_i-yvzp=y8^~JynD$UJ?bYlz2B&Ty=!S0y*Q)2ypmrKz1wG$ zJ-hM)Je*P4JpMP!JeLmtJHO|OymV?7JTgQ+J?JZCJ#jd@y~w`ayLzvYJQTO^y-6f& zJzYzjJdj;my+rIIJQx}nJPLVwJn77=JeUbxz0ty>ycEAPykvHHJr3Zlym{yjJw^B+ zJvY)1ybTDQyf+6}y=M(-J-y5jJ>6gvK3AHTJRl8Gyi=G1y^`5rJhJHnJ)C?FJfIUH zJa}o4J#_Feyid8@J0h&ByF`}2J0L4fy}p5_yt{q`y{35AJu@)Ey#embJb0!Iydx8i zJS9V^J+Cxwz1jQByj|&sy!@(sJWqusy?I@$y9Tk#yxfLzyR`ZeybtS@y}W^=J^VVh zyTkX?JgZsCz2`thy>AY#x{+Kly(E&fyeSsmJj<1Az5cu$y{7CCJgYFtJQD~gyC79^ zy`0q6JV!}|yaqJyyl)kVy){IhJWAMmy$FA|JohOtJx{(PJx*A#IV{?+Jw`r3z3>WC zy>de>J9;>dygMeKytS-#J!wYzysV2{z2Q3_yj=8;J+IynE_UJ?|fjy(w1iJWucqJ1ahwy|0dbyowfZybsWwJnkU)y#ydDy=rN%I|+A> zz2_oaz00d~y>WQ+Jiuj!y^Ts*J!XtWJh7y{JIt?}J$r*8y{Au#Jf@3VJm8l2JT<;7 zJ?n%3y|M}YynCDZy#;BIyz|JRyzWm(y_ju>y*%3-J@vwry`uIRyl(ENyaKYZIx0U^ zy`*a0Ju9mzJ(*ZFJ?;t5y(|BkJPu7zJVf@LJyb6!Jic-PJP&vVJs<3uJ(77fxiCDB zy~X!VJwHKXJgl}dJT+I1z2W^5JUoT7JdiS+J;H(0JQ9Rdye`qJya-_-y`*(*Jm{rT zyr)F}Jok;|y~XdWJh4Gxy=DyJx@N>UJ*VS^y*f?>y$#;*JmZ#yya5=xz0wURy;3Wk zJd$J#y%0YQJ+Rsjy(tPlJb?cXzF~aoyj0pDJBl-WyufOIy=XWkJPyLDJwZccyJI#u zy$0Ppz1?TCJeeMLJ(X)4y{4X$JkeGfJ*5d0y~t~uy^9r>yS=9&JzQD+x_NyoJv!ql zJR9f(Jwxq=J(Z4&JydRjJ>)niI|hN)J&xe6yQRk*JzNn~JbL3hJ!fLiJ#J1WJ-dVb zJO^#GJvmTIyw6OtJnp3eJ!`-HJfnL&JuwELJ2K~Sy@bqYy~DKnylEDPJVIVky{ylj zy)C3rybZxky;sT=y-BFKy~cNy{=$)y&r*Ey>+PEyT_rGyk9omyg`ZvJ^!7cy#Eal zJ$zcdyt%WSz3`M{JprF~Jsvg&J#6U%ybxe7J;ev8JgA%jJ*25nytG zJ?k5ny}dK9JowcoyeXY1Jq*j&JQ$s#yO^K;JV|n&yyJsFzNJ)%pDyOWm1yjJCLJWNDOJ*FAGJjE_RJ^yP{JW$NIy048)J9HM3y=L5% zJM_DLJ-^@4y_=M)JWKvrJdp^5y=<ayF0Vi zy*fq_Jtx2tJxWJAJrG9nyl$1Ey=@##JmGh}JZks9y@*zgy-GH8J4pL*J?nmf zyf|Q3yr2fbyc#z`ydVUoy^o@vJ;i27y%!YFx-=B7y%|g(y-o}XyH6CEy$oUiy<|7z zyu*tJJ*&I$y(! zyxxkry#f$fy$pu2yDW-?Jd?^VJ=Q?LJezCRy~RTQys2f|yKVUwy?^4xz23Ruy*yrK zJW4Fiyk&zCypi&ny@>&Pz0J$CJZ6C@y~}wwJFSZ?IxXI)Gm!JVogJxp$mJTy}%{9Jh1cx zJvRJ*}OTJi@DIyl;S@ zJlwR>z0Lj@J$haBJV_27z1Jn#y`P92y}mu8Ji9~0z2OJeytWa-y?$3rJzBY;JEGav zJIRJZy^%o^J%iPTyjp2{J0!qky%gSuI_unly&D5}y#7DpyqUCGJU%?Mye1^Jz4AFP zy*+g?y}YMzy{aT1JpvD*J))E~ygW zysM}MJExLaz30@Kyb^8JJp#OFyYIfTJIGLhy~Q35ya=%_ysXv=y>sz`J6qE>J>Lrf zJ%3|=J^o>fyRBQ1yhKZ7y&KPTJfSOrJ^J|IJUKE%z2C~SJ#BH zyuA>(JPwzNIxjs5J?<~Oy@_Hryg#NjJ>Q|8J;U`_y|7^gz8&_Rz1QqWJyqM*Jf7S( zyf@Ury+dY0JTbJBJp>8DJS)N(J=ncfy&NztJpe8SJdA_KyO}KKJ6>~ex&VlhJ-D$8 zJ?}UEJL#o4z1+FnJ2bjPyv9QyJst%mJu@`EJ?2+By{?PmJ$oh6yfGGFJcs*$J>aeU zyajLOJuN_Uy)ptwy{HXLJf$NgJj9L*J=#%QJ&(NKIJb|(Qx($>Ly(2<8y*v2vyD^K;y}ZIjy!{P+y~u%9y&(?l zyzA%*ynz%oy6t0hy^9@ZlJyx`fDJgRxLy}dSuy&}4lypUNLz0xAryLei*y}EBly>oZ_ylI8eJm&Sf zyy0iPy%iSAz3Y_oyorP)y_go=yiO-;y~-3ux<y#^8oJsZWUy}<1GEy_3y}g7iy~ru3yc<)5yimxpy;dbHygV2-J*%~ny6O2WJ>VFiydR7xJt4y|J|lnv zJY~d>J-5&fy+fb;JZSwUJ$NUjJ>VLQz4j1qy}CONyxp;aJS8^y-^EUyjs+yy>S2*Jy(X-JE3r%yv&A4ym?=-JY71AJT97*Jlm^oJzGDY zyy@DGy=1@1JP0L+y`vJpyvY6Mz4XbLy>^N;z6F4ny>booy#X|(IxG@hyNSdKy{5}z zz49NzJQu6oyv}C7JD7eSyU!TMyY_)Py&jdSyEJ>Ly)jDJZy-@I$yawUJJvn5pJzb1%J!ej~JuXabJ=}hS zJ=cM{J(s>_Jx>E8y#ls@y=1;JyUu?#Jv39J&i>VJ=d^-J&CW{JqrA_J<(ESJ*9k2J5ko}ykvU-JJ)?x(yBwMXz0oH- zy^ZmVJQyNYJI|=7y|&B2yE1^QyTusMJ;)*JJTiraJueYnyg{+UJOiaz4ey3Jtx)`y)k-)y}W7`J+?QAJzc8kJ!9B~ zytHpny{6XyJ%TVCJ=hk}yg2KMy=QPxybbtmy+D&V%I+O0Uy=LywynASdy^4ySyoGfay>~N|J%y|D%uJ!i&!y_eks zK8p-2h0J<;uWJ6wp0JqKm1yeC=HJ#r$3Jj^b6z3jg%Jy-UTy-}f$ zJqj*qJ^Bw-J+SjpKFA@6J>1@ZJs2nbJ%eTfJ}D}CJoL~EKCo>)J!RiaJQ^yqyly?M zJ-fT}JY%qgy*9@?y`M)iykQHZz5gXYy(Ta`ySGtAyy-!b+yOH;-J+ctUJSOF7J>)sWJq*K{ zybWMtyQk-hJWuneJ+i`AJ;ne&J)-@#yAtmiJg_6qylR*EJi?cWz0sKJSQ(KydAoLJrZxpJ)Z7|JyUy(ETF zyjS$Py^rDpz4{IJyhF}@yrcdkJT;!8JtQJfy_sOGyNC}>z4wcnyr7?oy*qgEydjN? zJisc5y_lC%JvLk*y-lCTJ=kO}Jp3o=I=ip?yPeVnJyooDJ@EMvyn}d8JZ?UKJ<~l6 zJwt{RJ$wWjJtJ5KJuvMGyBPJ<~It zyvUh+JjU0Ay|uXpz4F&d zy*vYJJqO%4y-{9hycr-rynlu@J;`%@J3hIUycJUBJpUTkys9L%J(VnQyygWrJ(u=x zy}9F`ykMF~y|d0gy|SysyE`suI{?W9y_~D~yDqPeJ==E)yJjeACy*sW=J(t3{JwZY5Jxi;Qyjf4CJrq=+JtoexJwmI(J@3^6yLu<%J>(*s zJ#JzLCEJ;B5^y=6?hJ4q!_yfR|IyIVwg zyzL)HJu>rfyIfB5yjM-gJ-2VBy)V|7yc)1GJ<^t`y*4>by;tHW zy@PlgJu@jCy|OQZyIV#Yy;+!ryQ)2Dyjw;)y-o;QyY-xqJxYyjz4O#fJ?<19z1AUB zy`n+Oy#)a!y`kipy|H1*y&#cQJz*|^y|C^-yyX{dy&4}PymO~;y%|l>y}+4nJ>!Fg zIyD?ny|1#My@m|hIoQ9uy^!i2y|V}XJXk+&y&tupJLW)uJS{FoJtC9pxG30(yh^Z? zyn zyf^Wuyt4d2JaLVwya@EDysHjnJ+XVgz3)O@J##zJJ*CbAJ^Kfjy-QDFI-OTPJbM_n zJf(h>y~mhBydkODynR{DJi5J=JxkumJY(pryqz34Jz_CAJuWm{J#KAQy{4T;J+6)2 zJ%iH;K5PsRJY>kbyTZ|PJm~M*J#grgJz32~JsbV#ygDd)yt5CVy8jkZJ?TTIyyCF< zJ7TWiJmY%5JXKYbyYl7}J$Gh^y*$D}JRwlJJ;j8LJ$(`wy~gy&Jf5s!8ymRByyfjqHJbtQ$y8--SJj2JWygNG>y-jaJz5MI0y=?Rxz6zA5ytXPKy2drl zypea-yFG4=yc{kEKBgx?J)+lgJpy}LJ(Z^xJ`lGRK4vAkJSqZ7JoD}&y={QSyq5xj zJl2uQJY9hDJgUs7JmXxk(TJR9~9y-LWeym?}*y(M2&yla}ry^rjYy@J!+z11T7ySK_RJ@aGY zJkmS)ypbEwytm0mz0kb{z1ezDJfR26yIhZ5Jz3UbJwD4IJ*LdKy`dVUySmG*Jwl>} zJ=wtVx<7;mKBF;4JsHbSJ-&iUJl;xRy|Sv?JlK5?y_2i=yLt_QymkjWzEd$xI_y|1 zI&8U-Jvp;Qz4X_uJ0@&Pyy|Smy=Z`uJw(8?I-AXpz2tDKJaO73J)21ZJ?!N?J9~l( zJcH$}y6IR*J^DXuz4alIyIV4-y>9}pyxnLqJq`GYJ5K@Az57}pz1jrwy|TMHx?A^J zz2|ejy>D~^Jn6cCJ3EW8y$9cUy|97~JO|`XJ@H8%z2urfJAwbIJpm|By*sXmyoqx) zJ3jK)JjmRPy;$8Iy`ztJJ@}Y~z00yZJwXyjJNT1Vybqf>yr%>Pz2RkOy&kOFy&%ej zJm2_1JpC?4y?~rtywYZmy~IBPJxP(vy;mEsyqGzRy<;j$J+WhkJpWWcy@)-Gz1#r4 zyDbdoyoXq&JZ=G$y&m~9y_R}7y{_lGz0kGSyzyW$ey@#6NJax?1JE8No zy`5N*yy+OPJOIMCy)8mlJywvCJ=lofyj$V9J=vTXJU+?Iy?Wd&JrMS^y-lK5JOyek zJ=w8{y#O*`y@z(HI{^d;J_4o@yfjEWy&{!)J$$G&yyledI74@WJ>P-}ym`a5JO#R# zJqdJfJ(Q|UJ$*p_J>6@PJw}XuJ*%lIJ$P#~Ix~K?ycGy$J(^a#%Zy(9OTy;g)Ty>v=yy(Z(&yoN@Bz5ZSBJlScjJ$np+ zJO#ZKJTCh|JticbJ%YT8Jt)>sJ+oy_y~=Q-z53NeymfLcJJf!rfJ;-OUJrokd zJ=FS&Jf#;$y-EqqyL@)lJ(DX|JzJj8xJ@Egfy!2icyd1Ze zJ)}RiJrySoy)lQzJ?hhmJ@5?HJ);wlJeFRKyc^Oey{xw_y$`V;y}zj!JgKAyyLDrykGaUJU+APyw9d>J@JB|JrT{pJe_N!J;=B6yLL0=JG=^ayuT^C zJ^M$}Ja>S2JcL_$z07ZEJ@$G*ymn$KJv^dVJ&jt0Jd?j*JvHp@J@y9!Jp_;aJV`)+ zJrPEzJ9`*py>56AJedL`y@#Juwh)y)J@J!8STy*e<&y_Zp{z2g@=yiFYy zJfpzjy#_hLyneBzJJxGjynwCgyA1mTzD3y`y|&r0z4t|DJPnjZz5K<_x`&Uxy-5Tz zJ#R|axT_nTyb`W&y#tjOz57!7x?2f=JtBzhJPL3ZJ?nUHy^^jkJwj=uJ>&Wqyicz? zy)AISJjYtBJmqZ(JrB$wy!dWay|&pRJ%uN-z3Yd%Jr-X(y-s^*ys05vy=6)_y~OGy#Q1ly`LclJ<={+J$UuYJZ)@iJtDBUJ3I)Eyi`%EJvo-hJIMTu zJpu9}y;CZRJpWLTJo@`4Ju@Z0JzrpbJt2P(z35_{J?r!Gya@;kK343CJ&8WbJ>4bf zJyRAjy!;7HJ@y)tUNykl<}JiTa&J=CQGJ-UGEy!(5CJ(PRvyimJ*J;c7(JqgXfyJ_4S zJ*Achyu`t_JZcEdJW~1(JVHAdJv`x&J!sA@JbrzyJ9WpKy>u4By%!Y*J>p@dJBskz zywjM9Jy&~JJ+ePOyy3SvycDUcJU>@4JnY(@JYucZyjl9vJz$J!y|WiUJrHXpJ+|#B zJt<6dy+t|>yf})jyacBty>KQ8J)^@7z0EIfJ&V*7JoK*(J#2ZBJ;fSVJOR=QJj!y={JYJ&5a&JT3q2J>e9ayb;)u zyb4NEJu23*Jnbn|J?1SRJ@L3HJUm*RJw}oKyA>YYJ@)vuJ;02)yyR;Ayg{L7z5dCM zJkwO(ys_CtJaY@kI=FmbyA4{dJ<{hdJ#uU?JzPzZz0Vtfy-(smJzEk+z3^9My&MV2 zyt?T0yzU>VyxQ25J>F}`yaMMRy%QNMJHQJFJf@pQJsOz( zyA^UlJqIF_yxfkrJXq?^J-k+@J(gr$J;zO&JfiO5ye&dvz2{#=J>Iz)Jz03Nyn$_$ zye{kFyt;Zqy^ii$yo803Jy$P3Jt!GpyB3K`Js_piy4Mq}z3KLdy;)k!yv=4)JV_^) zJjIFdJa$_FJh#hTy=l1{x@SjNJ(ESBy_{L0J^Wcqy@ItUy*kciJAQ!TJfs5QyACdx zJ^gOwJi*SqJ>EhCJ>cjXK0Pp)JXY=dybw~EJWjofJ49!ty@v^iy~e!Fyby<1JwVy? zJddb3J=ZIyy)l?HJwFJFy#NnQ zyj44PJqIs^J@gHzyy(rZyNXGky*;!rJ#UlfJkK@)zBHNiJAP)Jyd&&)J^573J;jt- zyt;ETyZeXiJA^FkJP3yoJ!dLtyIk+$yA$&Dye?iry#1;pJ;nN7y?5C#JP{yc$GMJhVhFyjnTYycXa5JgiR}z3J5&y-cNiyn=S|Je@sNJ;Al0y?uqbyo+!Oyh>BJ zJhx89I}^^ZyAyzly(XUvy)`=Yyg26=y}v$-y+_q5J*HCty+B6gJWanfJPx@vJ(=8v zJaVH1Jb^$eJb#XBysv5+yWuF6y!TVHy&hS6y~)&Ly<-M6y#WbQJQ$P^ zJ?u~bJugH-JSO^yySR3gy>S0Hy+u?-Jo+)iJDVISJ$XN+yjwy@y=f)UJY7}EyhnkO zJQM+kz2^)OJ*`qky*835y=XcKy$Ad&y@mQYy?z==y%S*!yAB&J#__0J$HO}Js+}Uygiqly_^wbJ^Q!V zy!l7-Jg{#yy~ggOyTHf`JL!>tyk?|+ygt1-y|~RTJoLIay@!k}y|oA1yf;XRyk?KT zyAZbnJu@UWJ*sy7eXbETxO8|wGXby*zQj{o50ZsG)g_LL(i9*l^005d7$+|hyUAvuL^18RH z%{gLzjJk+yTQ#%2v(>i04mOJHIxI4Mi z-a17@G&}Ba0=nRE$GWYPC%eWk4ZOCL);p1=X1l07lDZpO**ZHSP`bcso4fXP*Ey8X zS-a4ku{-pNh&rx$1-lv@pu2IkFSlhcjJdc=uDg)JJ~@d*g}NaQS~;?llez?3OFJ!Q zUc0|L*E>Q=KDuezUOKX0RXgn8kU4FLh&v@YhPun-A-J>q9z5sn=s9LB|9B`XglA+$vC326T6S4G&(INMLTkUbUSg&Zo8KdoV(Wj z)46^320F@p1v?foaJ#^XSvW_}8agZ;vpUYJsk!1Dn7TJgjXO??mxw~C8%ehlo&pX8SA37A& zNIMv_wK`HP2fGiS&$^JMGr7A<9y=dnEjzAmIJ!2a20C-3uDN|R1w1I2e7fZTkGpBB z+&QT+F1psYWxM=Edpb)*j=BW5>$*~e9J@AdLc7y|pt*OE5WJXPg1L*>3p+eYojSZR z*f}eaBs+=J>bMP;RXYwq5Igfe+q*f6Z#uO&J2_WWk zyg5I}w7ZtW1-dWW;X6MAEIFCJ<~r35lRG^a$2(7V;yWW;t2mj#IXhH1<2rO1h&$+k zTe?c3(Yh=Ge>eNTRJu*#CA*t!DLe5VjX6$C2D=axG&zhE2fFeswYMF8Y&u0~9J`|c zM7zQ*%Q}hiX}YCmIJ>zahdQ_lBRVxmxVn^Ipu28oH#_X(j5>7ArMs`OJv*6LU_0IW zmO9xb`a0^vxH+~5fI6e6$vT<5wYr~nfw=m1n!0m=H#0lRKhSG&@Y$O*;HFUb~j@V7rL}e!IbJemj@Lx4Bjs^tn`!t~=mr%(^fM zr8>Lki#mqUeY+z}ExJ96A3LF~qPn4z$GVJfu{!GBi#kB60=kfeC%Qh}`M9UBD~Ct`?^tX(mDxj$-78V?YiU9qdR0#7`ydScRI3DNIPBdfjV!Jg1N|T z$GfvvPP-h`tU1!VhC7U!Njn~&A3Lk<#5wxO`@3HTt2kk)&O37*EIUpj>pF=9{5W~0 zL^?-FF}t3sGCMI3mb*!pqPooJhr7IyG&@UYZ99@XeK_HQkhk|DM7!m7@w)axO*_px5j#X6$~y&DDLQwfKfAV)fjJl5in%H4CptLBgSzXv z+8^X1f>~&^u$>k2%aP-MVW^ zsXMB@i8@xqbvu~Cdj=NNAJ-ZwJFFS14WV<}%T)RcMO*=I1bhpy{ zD!b5=4!gqb4?Bl^61yXE&$?>Pg}RO8lslz;pE&P{B)UPOQM=$ifH}hy2|EsRjJqBx z8#x&$-#S>=4ZB|V7ds{1_qk)ND7q%i7`y9>KD+xY$~n{L(Yt7}<~uiuNjvlB6g!AU z7Q8zil{+Sp(K>&;yg4Zfg*%4BNxP#j%sUUEQ#-0&Kf8;nT{`2Ye>;fKf4W*2W4m() zQZm21w1#9n!H+t< z%mIr%vT}Sp5Kni!qRbUN>rharEa#1y&3^k*klr8P{?>!0y_;x@`D70SE>=&H-z^C$^?N%tKy0lA0hr zPLdEknb7^b=R_Yo-<9FKXA4q0i-HM*0;!`ds`x`)1oagI?Rb(E1lWt$N-) zQ$Z;`-VIW{o(-Zs=4IHt2pqAu;tNN;cWWxW{DEP;OJxAP1u-BzYwgoKe3h5IN0+xe znl-pRbQ8cl-WX-P{PcW1lDBcZU$R2Hr@00@oz?L?0Wk+YU_pbu?cvfr#K$nb{~<;@ zHgz++wRapn;xu$UXpTa?%tMI0VLHJ)h@E}ClHfNz)ao(4L^tR?v!2Gh8n>^#L~*b@ z&1*}&q2(&QJ^9DIAhkd|9V^ehkS;F0`a`BY^izU7I{=HkwpzNpf#|e7PbiYQnJ0HV z3m@IR+Ww3^xylv1JJe7;&Tg!{d&y_LEaXT%q@Nr;4>JM22yK(QCMcLY(Dfiaru(ct zO8I*|-1b{MAGv6~m)~_gay`^K>e6_<%B)E}{#Hgk9c6;MW;f0~D7kby-FY%SFsQA) z8gV8*VAF;?jca>7RmRD^x=KYo!Bves$irGamYt?MNjC$%?7We@Ep`4q$;q(2=c|J~ z^&)yaNZ?<*VQc}so_-QKac-fz=c2E?03tcPVMdU@WE| z62L+{TEj9si|7eHa)_6`+`~0JQQ(KWTQhCFIk$qnGD-|QIr=ZXEy}IDwpHW20Dc!d zCTnXv6U-*PA9N_a__P!~R8dyFk{OOYytgMk?s7>z4oGV~m)<75ghm=XXFEJS93(Ei zCgUzVlj9k^MZ#n}QbEhT%Bvi`Ho+J@@_`$@ox1Qmh&VYtY>_>^WPzJJsQ^X2vfc8$ z45J6VSj&>V57;U_pV$n%4u|BukdKkQrGO4R+N=P*ssK~GJu<&MOOUoaQFFb#SDM1S zzm7~i`_L%uj7ckuG*SCo1v3BFI(_EXN>o~s2)^2`~Y4&d7UOZS%-E! zG@atTj&rU&z;=GUusFRvla8*ugR&RBIYnc;j-Wj%|%6ASFT^=!&JhDoA3Dgt{?FVzZ?wfcQnTPaXpZf?^&yD8TeT29 zvloiGyg^4j-^}m5S*LBiNxfgZR0^0q3@q9_ofSMiJd*^yaUx;lKO}}9E8KY>{kN5w?d*l*=ET+7b@nw zJ6OHEV$kfpLc6NHGY4!uVO~8w?iS&^l9_`$^$U)=gTuwVVV{RRdz&1(s!d@!JeL?f zzijEf(=_Wnglv+$)LPX%czdtB6i>&!4dxcRl8Su2&lh05!$LXKxj~e@YI$IV66mH&Q`^{k6A{&JS?3(vIuItzK#aG*6;zmR?HZ^KaaY*W>aWA_ZwY0nD&!Bx;~gZ zxS_YaGBcFC^n>U;I7nJOwDSZz;YfeGD(l-jm7kD3?w~om*i>>ouA)f24sAibpH<^M zl7kbz@HD7AvAwpvZlTsZ55*F_teP-Ap~mt(bVlD7IGfM)zo-m?2)s(xv+zjlzIbtq72JlL8jJB6UUQ?4*O z8#Kf`GqyRsQXUb#U04UaQy??Fx}_+*p3Y=Dn{k3YnwOcpgqyTI?G;fyK>*@B@Zlf6 ztxRmZ;Mz7lHbybM5m?qeQama>p@L>S-PW4Ag#fKRk2f+rLXH`|{|@UqnU)T`HaTXy z;1U=pIFMUC=$H$=K^eZh28M>bBg26_Mre$^;_Qt&ljtA3sXa-( z3N8P#%!;=IEWUyS@gTTojIkvsZ1I@EHZ07swcp`$uz{h zUkUg;M=7>ECM^!VorZ|K`iT&|7pJ4U)-{;D*6o8ktU9>8#npg43Rbqgen`$dm$9I{ z9#QVQq`9m+&RftuGb`h~2Q;X?30X8dglx7wRB;zQ)dvkd!UthHv3ilbL`>Ja-PAF? zAmwm8nZuMl61HSLZIG`$rn7Us?4AleGF3Las!o}`loT#K`HiH#d;!Hh#p?*ZGj`~_ zpe+YIR(VUil}6q?tep|OJ#hy;6c!jfE3q29J-d-SAbX;{n38!t=}g@@LKK$0{Y<_* zF3O=iAaBq;1LFX_#$Q9d9ptz?rM=iahW7eBK@%;#G`9S^I)qfaCa4d+m%Btfod!w0 z(LDk^dEwo>d=(fxv~hF1L6n6(|4F62$XS8CBj1R+8<90Uw8wtMY+KXVej&H==|_6e}NeoVQ&_yFlW;w&9KGs^Y6ZW>5D4SFrT zYK}EMr=<=(8SkvS122=hUUO%?&H-UPpMn>?b2i{Sy79WY<4-3%4d7xt-~1gu2u7H_ zMk0v4iNVM{?uKJJC)f!+Y(!o?si11T49gHb$>Z}qC_@H2zr~q6m&=N~4?a&j{@7N% zKv_6DDCIl7QpFIxlrC*OV(qp)18bDMCEPwem*3|*4-=HT?oV(%1|roxGZ-+vVyT}! z^oduwasVbh;{)!zKA8YLM%OjHl6AT~>&!hpa;>2}4!6a;pti`pqWeHRK8hSY-7hlvU+#6izz~i-Pm6`U6n2U{C^NCWcd{S7Av$cmb>1<(biU=h zgReL|5E(eU?{#mz58P@zH+D-sKRctkIYLFfVR;HY{4;O zM=H8Jv^lIhY7)h~Q1|G(7KU}b!s?_wq3Omvwy65Oo$=Fd>aS#5rZXwsp0=llZl~E_ac<&&eh|9+MzF@y@KhlAWi$XfZv# z;x6_*A#+c?B+N)X=l8I^=mFrQk@~Z8IgazvkrGXP1uUO^A#05N8^>dq_>zo?{4+H_qe4zu5p09i6xl5&cZu9 zLmUx27uT!2i9MM;7Pas^&Y_sS(R{=`Z;dQGKfGzZZucy_HeOb}o>6eUQI;D$cWggA zmFQ4CsBnzDd>;}$<}KMf$(yIW-O zCHG7{-#chL%AA3{qvyrFSh(lB)nQFLsct*FM73tU%n!J|=@SP#Jsf z5Km{klnlH)Um8HYWL;`K-6xDax+$={8*H$ zmFF2f@~Z4S;W4#6tlrVRN}8HIW{}9cW!y$R$TEgK0Sdc3Mc<{ngTaA47Bbhn_RA=} zq+BXJb8gK%&U->VqYjrnFb^xebbzJ2al5;`Z37HFpOvRQ9A{6xc7I;IqbFOvyjGLE zB5f2sx$Me3DLYp^CWE9r-ff~hQJ|zrskD^`;|Ewnkkz^@iNtXWsRl*eK{TJ4p+9svkFr6d%)cx>H0R%nB~LDgqHx@~^F zB{>H@PV=U{Xauc2{j6&}m5PYG;;~UZ6a?Em3>1UC4wFnhb6Sr)P26xi#!I+8K-Dn4 zwN&jqh!#6NTvyvY5}unq#QaD^4Ua5K$3kW!Jo^2Ojhwn5{(YYpK#`rm^*Fy@~;U84^? zwSgAAyFYb1K>a5@VV;6KN(U*uoXQHlUnvef{tiYx<0rK|ZOc_WSIxD#3XE1gKZ^3a zid>4l?16~95|tf2FX4#2`Gh$=_`KCUE*VU{1VxiPRQ=FB*^MYX>9MXnsdz6v;Y$WQ zB90n7`uCf>e-$P?{D`f+BSMin++K9N;u34UYOE!_6$tHntbN zst6#xBHtjrI}Fu5B^DRGEFs)I!yPp}9W)3$d>z@lZGne9X$c5C+Bp5T$O_9n9la_&Lj9OMr9mn^>}i8NflQ>m8W@8;Fb@trLp~h6*b2J6w5Zm)=OEZT z7Ohx4VqO|N)(D2Zi<%L=4-}QX>!D7)b@))d$-j)feVT!{9$W;T{&f8{US!4vIj%1V2c<33Fe(GF3CXfw^J5EN_@QZ~+s&Q409G z(%wHjOiwet{mKbEsq+!NDq(=Ukw^x;&aI(5Jw3cVR`IbsPC1^u*&{%`)&n!V(0SXu zEJ4US8^%PuwnHO53U9wVQ!6yQX_M-_m=QBQeeR$=J;Fgfx}<}>=Q8fMiSfO>)awAe z!3E?zS@{jVP$QhYoI6Q9S~hSzin$j(L`{gi>j)XW=fKZAp?|ME6Cn@0Lu@&{t97Hj z!=)a)b4Gl<3?Bl$b7n8SAE!h-dl28eB$1W8QSCOp)C#h@`Z6#*bsIiCj{0G}R+_TB z%|pq&hwHn%bDSr;1W5G}(Z?Y83Xn{USTPQtDy78EU@0)i#*Dni;J;w(ej(s6v=M zbJj+^$gG+@ugN04i(8OA>hb|SVLUgzi!nz%jCPMa6yVD}`hOCd*j_OREx8nC>(H~?fk-O@%pR^mZDOh$=4M=p>&75odlL(9WF zUvECR5ryp`W)rLu3IwNPg2id9K<#-e;k`B%chu z*{M`KRLkVM?ZpSZ2N%CRpNxsU3eAu_6BAoJ#9fiRZhkR61!CB}+x-!}V6_T98R!AM z+>zY8!ZO6XV%C>EGWvr(kt0>SFw;-HPJBZ>yucMbO2G5D7xz0o>-3I1&MW6U zcBrsDJ)@O8blIXj@?D6#M03bIo)6KyYJwU#Mgji1qPmqlsvV#`3z)7w{Q%EAT&;M# zZ_DF51Sd~CGhjPCdo$ zji^t&U4$vULwZZSCA^run$exSyScr*iLsx&OB(|{A#s7dot2cm&t*S7`tajD-7^Bd zAy?PEYJxaDTWC+cpTdy6e2;X!e6{wx25>FA^AsAq6%xX|g7K_83$oL_TVyx6Sy1r2 zbLrhYTfhLl)1t?{$f{92ltm3Z0VK~nX;mS-99NUPRbIV4PXCTQIQCY(*s3l)f05C> zQ?RT%dCtSVM!lN7D@tfQf7hNppfn-8t(pbCl&4%h9$~_~D0gGM$bUt>*ZLm4yLlo# z1YH%q;4+##27QY?TJ7DtO@fy^1LV2A2c1VdNrlk82`(MH-gd$~p6nRCE`lmO0|4#3 z8yh)2E)uyszL~Z?Ww+$Lgrdv59Sie3TN+xsPTh9B8cl}0xpj*@0&9&u+G2$~b5u1v z=o-7b(frlB5sl@%c9L1Wtn)-X=1bx|Zd+hI;a7pZaK~yr5j~JSXRgIO(!Y4UFP>bz zWxk5NmmEgD7)YQ!_LZN!`#L?l7u=`3L&)emz74-T=iQ<_;i&z+$L@1Gr<=gMXx-*L zFHZ)(k1fNz!o~zWr;d-kZrq!^Buh%YNAaz@&|OVEH!+;;-Lc@Z7GQtg91l5yxg5IUH=&Y}=Kv!6n}6s{*dMs|oi zvTU)u*a3FE+UmkR9gZP9vlEQH0)NrG0}&*>8veXI*GMzH$d)5LP{?6C8Kwul$RRI1 zh$10@%{`fZB6*fj{eLh}^8W>S_tx{8QAo%G(k*f9t_qIn9u z0TY!xS^}gy^DciqG13D)6*AjBxasP=(lg?{u|br*%{x^+euIoWa;ro=kt;(zzDX)Q zD;N_!zi*Abr+T)$zW|fHdFx3$bC;LAY&zvV=gQfs60x$ zG$|gv+>$3ef14D&CposgMcbRbpqP<7rMHGVNEm0lBod>&;X7_U`vpL~Qil`0-F&&d zY$mNazHXd7*{g`XT@bE4oB@EmO8YLo(A+Y;^*+))TK;9dhspuHNv3W+)0{lL+MbX+ zXztiOH{UQl->K=mYkQbI@M8@{eoo)n@zp*XiaR+I(3*$ z*GZSXXvXfl%wmQ;8opgUM=H@gJ(;FGdiixdBRyoje}sd(EcrA&&#leF;l4)c+acOfs^)kIZLo&U* z_#c?Pv5Fu)9nzh=pr@HU!Ro?1j>!|fM(!g!(ddi4dt6*R`Ms7r|4k{q*hW}Am<0;H z*!%9gRKtHgnipTZIKL{r#3z|N53(q|9FQbEEPR)}j!8;9qFIc+xL%GsZz)|F4BX&4J{eG)~f`))&KB2dFP5cZEt_Q4JH#j1U`Dbzv#O4PbMdzq=cv_aGIa)J4aXc42dij{WJ>Y~rS)zD62>>TO#Xp$5)qT7?jl1GJ-jjJfL%1eA zY1~A-^R%u#N14?;ocfl%lSr_=wX$-&`73igf+#{gxcIKU3}i1oUKfEqsPa9%Y7v^e zxAZYR%`sEG8)%k16(LZ(k9EyGvW00qOemT?$ZSr##KCes*E8O{rx<6wq<;-PNYI5n ziEI`=h1V>(D@5x&KDWg@MP_F_O1-YV*i|At&_Gx{0Mn+uYSyYfVem6N7M~8io>xG; zgst2>%pTyq+gd`syX}O%E5-;tDzE`PM`V;ezAC{y=n7{$6(N%kjTGAVm&6h93(&(^@9Iuosv-c@PS{T~2+yPZ5zlkXx?3s5>P+P-5@A zrGKKm(94p&DI=4}kyJ9hAU+j7jt>Yuhp=5cR!S>9(1)x& zcrXM#(PphZD>uYD_XPpHj=-C`K0nVqW0VOyGBT+>7evfFXr8UTDN@uu)4?>oB+%5l z30uNDPNJMVnx2n5)*ywwVos2~=PnPu{H{;E(^W+~;my-LVs$OMAIfUH?J=3Xv{K)_ zyx`+K#~oHY_~_LV7W5ZXxtQ0#v5D+Z9vJ7oKvv)VWb6STz=dOplj?KG0 zA;)k%+q6+VLHw9Jv^uA}sC)`N;-11hHB!#H+w46(fmM>dDWtQ#y@Cq88#pz*n}}{b z%JVur*o0I)OY6Tpz)hSyUs~TgU7RU8$3qUiutF<6*$aWZ@jMPask+!a18}1|#sG`G z{FmFj9*>B<{UcvHU;J#n?zM?MbHBViACEn~mGEx7h1hK*mNrbs>hmQ|FpJk#zmN8*rSu zb0>>Efn!%a{YCOSPK^jUiCG{$vjmpCO%g4;cRsv3X+2Lp$W?wlk>U!y%7zv@%J$2> zj2AOI2693?LoVvPag`xF&wOA#3NGwD$lr-Ql8+s|G5S@#-hs2dkw+^%9?=K9hc6O6 z)I?9cht@7UXt9Ppd?yH(SQ^fH+lL?+ZcT3W| zhO3vmfTwCYs_=z9*9Z%}Fe4+qnK%48*`zYP(GJzTkfvlktg13SqQ7K2GLQqkMXR?x zN(XbjI6y5u?s9;=y$)Kuw~&dwmL+VuDe`2ymbnf+d=N6dmyb(595n?yKH&vu!FBWGm0+s!|{gb`W2m-CrB>wMcik&LUmT~#%`TFrAkamj+ck(0E%mqCj>G-u(x zA2)YBun>klcX@NYON)lQWjaK?%aPeUw~vuLXKOXR_=4cQx4#j+e_#TA zk2-uj!j^=ZVuTJn7ZWo*yK`u~*FO)vR4P8ZKVKZZKc${KBbksr zen{86wc3+COaIus+~%Y_d*tLiBY5dNA360qf$j~u6AgqqJ3t$~S3`q3nn26EKi%;= zGIWK#bOnPvIM5Y6Pj8Go*99KD9}dvHPY-;$T6eQNWzsJ_Y4yCixtxT(r*L7taFokE z8-tHMWr7#I`8LtKYXA*B*y)ZvlKhfAW0-io{X~Miw1EUX+hP8@8|D|iCfq_i6!1qq z0Y+^*o$fZhDmcYFMS%gl&8NscRHp^KBLYe~%iF6ua6DqWfpUyJd{C%8|I-D$RN}lm z&|?cd<9#c=Fn|udo*ceCyCok!CgFEIiycrpm3LV^g8+U!W)pus44qEB2ul<^>!LS3 zva&I~N=}2lHk&Cu7%{uOS|*e|mi&OdNGRF7oe~4RIRciw6V!w}JTqau;z4!2YPin4 zn-ssh01q5J+UGO7fI0HJ5I%`LoD15#(I%5Ua3C|heZ-4BlUt`f9e^D?Y0EUd-ey+4 z(3Z43VF_bA2rHpD?|-^H&c!agcBH1fVHYX9Mt4O#VnJC@b(KoJ>N_GmHe!&yT+kZ5f9~cyUarQw?&nuL_*8B@ zy9i;u;BcwDUJlZ|^YjNizhlHZX@dzpj$Sgp3R;A{eU3xDBRj@ASXqU=!tb)Xr%K8@ z&Nqd<30iEsn6`nv$l**q-FDTyiX0EU4gbfygkY0B;_GL?`NxaB64QFUT=Ypjp5ijS*+G>(E~pN?-?qs+7grcO z2qPOkg9}8xL|@7~FL4?@bj=35ixj@RG!K3~5S^1f*!QKpn!x_Mz!N#V1=69smuFQw zlW(v+wb`dVLEdiXJnf`BLoPQx2IYr6#B#Phy0)FULYlC=zC$a$ zTP|8Xueg*vJBAs(P27Y%yu<@Nq=l3>Gom6r#9%+XPq{=r9dhP9_AbdiWPIYhF^*F` zDrmDj?wgc7!;aKE%`rB-<+pUU9hG-3d7VoGKph7V1%SS zQ2qeD1hdGzS;;>=x)EqR43BBNr&jO1?~ld3dPQozOcF)CyX>Dl;!saKV2$Ox5+HiL zX)ZK9VWN}028=~Lo$%hgm;gRK2jUIAWW5x;#x|0@H`9{6e`%OKWUzF*-*zIsC`_%q zHE|CcomMjK-1McVC4Qf;|OWI1bRQc zIwEF0xymlRs2P#G#1zOpr;ph?1>283(+gxhtAmt1gu;kCd@58uiKm1-KZ=jNU|TUg zdyBg~)ae^MsXZ0FmOs2aWJn4=mi&@Eh()oz1z-j}7S3b61%Io(1ahRk;Ei;>5rLFF z!j{v#cQ3j;Ip4oK;E=vN$EmzJud~&>oX&~88zGxKkt1xfcE6duqR2D6u7jt&->xw|O>h>xD&Rc5e!_b_JNzI% zaMBPwm57Ty4p~+_o2sTf0Z~yrp*!(A0X2s_CCs?I)-|a;u*Z)*kQDQT$+}g)G zI+Z=Wu;vxM=qY8qU|9e?U-Xu{N>G=*y*z`v#4ka-z$nnX8=J>G{O!X%I(Z{K$jBJI z>7G`+kG+$<0DZx{Ag7kSkEDq_nja56KV8neh+m{V1co|22Gg@W6L=>*ybhMV;Epyu zr&rp%dW$8!%{E;;#zIfM28oe8l!Vwk$Xu|yl=rE<8RZSU)Or%UmJT4iS7Wn0SI-)~ z;m)r-DJG-6A{UlBHsu4pod6y@rL>?sb$;EwE+){uzBJrA;mzkfiM&0%6P32TfJ{2Q zc+U<#W=1r<*E|Zn>9JD1vq9*+EzOZVNyVu>w4RYY(qMPJxgTG>pXo@uO(_Ds^X-Z~ zE)~o?TPh|!4LpXt0(cZYSh9Y-o>>PxjPn}4Df$Jy6G9O^2h58-7Yc|wq&1X1rH~Um zTh5$4l1Gp{QD;NESTBJ*!`O>GVY^(sKaL;0lU+`|XEZB3#H2sHqRWE42U(}RWnBur zp~XBsBV<24dmy&F$CfocCwRP5f{{R|2drJyF;S3+WMefBs z=~}Tp^eSAuy+wz;0{Abyr3#BZMsOoLWc-x9)Zy_wT1b(-nk1&YmmQ})!^Z)=g6=cD zww-4^l&1c>SW*x^D@g>tc+d_#!gMjcX$jap(44Y7LEweFfs7tKP&76?k)Rd5PjbyY zAot|F0ZAjh3H?yJ-%NNta}hW_Ogjg>lHriO=Cj7USqex!mtBLrU-Uh_?pQ57N!ofn zEnclX-2H<+kratNRcI@O9EKhnpExA&?c#KHB+-sG+ z45mT7=T1jGWjs>7_KEI1c35k@>G3c<_5{VfrV*Yznf8!9hMLVhdOOWMzrCnC-2w$Y ze?`GPuL*&=vOlLiEdi&!rQ^3fwFJApQ`m;QCHGgozTccY2wKj(4pYEAQc%A;iBw9x zCELlpCvLesv)NHSmphETYpN?fz|%&(jp!u2VQPatlIQ_G5(kaF&a|Ao%aWG#<5$yvlV1L4Hn+K z0~-gsccBiv+^J_h0&E(+QnqxxIE50ua&-i~+FI7UoKa)EHej|qdZr9LA#l7sT>}+8 zizdpt&aorBfvC+qL6yBdg_;<=LMENO0GOV=igOOV$8L%|G#fL$c5mpsG%uDsH`yD# zXoIah2jj^-XXH{lKz)F^r0SME^%s}Di%p}wQpPpCU5*aDY{T_CYQ)bxIdrByf%WM- zttFkib%boabu$J%gufKM-fv;O@C~RuV{@{-0N`c4Qvof#g9KDPS`9P28I)$d)-;m3 zP_iVw28HK5t7M41++_egYBv5nw>?a~n7V$w6B?I1L^(*ja?lmMC=af@ACk7cH^!|`UV}nV@xSMgSNB0QLM~8It7wF zl0+RnmP6{jNp3(rBLIiJU~X2uXQ$G=LHRH}WMM752Mcq()&~K-(ZroRZ`%$%V>hn6 zn%_CSlaf!p(b8c(7gcmUq;~|pnUIjZVZhwGb_;&H=S>AYY#PBlNqyJ7TNt^$h^>aZ zYq^WN?tr7c4ZU_f_`h#Gm}PG~xOoOWFFZ%Q@#qV^1NkOBz(mSDico|-d(~wckH|LYJ4lb6aPFe`4o7iX6}k4rbbU!+hvTC(27a%I6%tr)(oVT{o4z!(J%8|EC?iEpH>FZN!sMYnl{KEdiX}8X{&;yj89=(d zUSEtnOAZdamRsY!;(MRGyP+t($-l!oGJ7aJw?(2ors{{i)BUQwB7G#iSYehua`p?o zz6viq7Ut?aj0dH;O>GgqjLTL#w(`k5*3VBpJ_0_yH@b{GsWFW_gqe1|w2A<|5;TIl z=*fG%xYiQA0~OaiKUe5Io`!in^~|olBPLQj#C(rDgrti-gw`lJ|6vV0yzNf9OrV6k=l9Vz8q5#9x$L|>B9?=^dkm*MG6ya_-`Xg>8ODyi zqrZ+l#nt$_;#6e4G$!0UfD8sci!XXS59gUZ8*unMKVtN}Cq>mg-NJ)fB-!>_U9KokoYf zxJdv$J%fO~5&mDj%n7Ev5Uzo}7!Wu+ql~CLfAp9=G~&=aDj6|7JixF$K+^C%;N5n; zroojx`Q8aVbe@F0HT04_4Pr;T!391&rQ#z#pn8ox26=`&>R)EP35^TAE54Gw{*J@F zUPGC^ zK{M1mtYL~gC*PL5@9WS!W&n`A`zuAg;kk4@mgsjqZCvv`pwmpfv5O}?6?v<;l9wI5 zJ7y$2x2yC#VEj%!*W1**>MYYddC{1?y}+Tp4ak5z%g~cNr}VPCk(+-#gT~xFvkMiy zuZ1kVUe?w?mtL{P3gLYRy^;X<9fJI$@VlFP+AD_YpaPi+*vvfGll26N~^oKIEJ|q^^!VeTnxxPzzqYRbtt^jB9^AkkyMla72Q=+HG&W zmoFbY{ETBejxayHmgo_@ZUw15y9IT<)1M?go~3;}m{P30E#gJJ_k+N^fLxutNsZP# z&X%4%oQ#6KGU~iNGO$fO+JP=T%I}c79xofc)tmFYm#qLkxd0qIK9TG_Kz=p6@Vf!L zD(4eDmkqSMhCm*?q~1F{jq!|FG@n;~U8^!YEn*8qdN zT$1y>J>~#C_;UKaY@t`W+od){OHqXAi@S^2B%pv|f4c#ie<#P4{)_Q+f)-hgByfB zZ-J^jegjOr-0Xe4ten@p79SElek7Yc;qt6JL}GZXOg;J|J?*o4qLa3Rw@u35!Bm!(p@-K$VN zOJoweSV90jJ+^5*<^is~4awR)K{)0-XSOlD9!h^b)GCg>G1oXe?n#6^;Fi9Y*6DGYtv6T#1^z7nPa4gEbsIU;CcD zJN;=o`FVxC!nU+L_vZCHQ@}hu(NOoih}ES!k6#nLloc&J4dISEV?pS;U-NIh#-}np zk*ttCd2Vk#y*op_O9|S$@|v2xEX3VCz4d#&#e%s!mcQdYnOXt7*s=}0<8Q&dD^u9L zmAM7I`UNLE*yyD_q&uHFmC+u(x?R(}2TuCDe2}+2s@KT9X7`IcZm2yy-ZTxq;|n1@ zp7I(#sYpe==2h{#M$?77P)EPKR>~*6jyOKOWmB>}ST4Cc;c}?Ga%(6(y5B`Te5H>( zwuz;@Cwgx^Ce%{BeW#?n^tKBVO9U88^Y&;7+CO+xC>#FiRG8Y5ApU08Cf9smPbpozExj=+G z2(j8c886B`ecVhuH4oi9&&ts|*=Jw7&}2QllAxZv*GZc_uH@dl$4GEIeX~WpBOwsH z=wzL_nt2jE+H;XS{v=(!^h=t&AeCr64P$scjWPN<(b>^G2#Gm8KNYLI)~hSM+%$5$ z%?XJ-!lH4#u`Fx7$XnLE1dRbbgBP8>1^p$xqHLnQ(R(yK66~0~1_J)O;@LGlr4J=M zC!hH_QoPDM8ekZ`&YKy$N>QP_gWUtY_0jY^(M;OBr9eDA1CmEP+4#^rirW}HvVMrX zv>Ktk3`%^w2@It?$NaiHTvTkm>b5dH=4`AzB-0%{d>@{@bOLU@PWwQ;Pd-OI$VprfXkP?$@-$bw_}F9z&!>% zZ0#F8P_Og4N%JMWBJxYUQs`8@#PQR+bk9z`xuBT5RwkjnnW4)(g$c1d%LR};R<4%4 z14%W#9~XVR9@#%VM>LSUgR8*2{2?GcL;Uu;63{xmOHLU* zFI+gfk%-Q`C2Dy+b>6u=+In<6`22>w7f9kfd6yr(N^Fz7ML7yRP`Q#l&TDeLeBaHy z<-M=F8tf#!V#^IZcVI_7w6X&|27%GMDyh%C86kwdnGi8O<*^AqX@)bs*`iE4{nms% zw{g5Z!n$+4SkQ#L7HkPUO;ixP{k@JoC{5G75e;O#rb?TEIAG|!uM=%OAh1t7h}0{(JTV}>R!f3BBgCLQ3Zuil%?lT-cdWthW(O_vkClH%GkEg0UvrQ;H&VgJ#>SVDzv-Etu zBB*Y?iRKzT1t_DvvhSTeXs2>K_M>k+IcPyWX(XdPNzaTur$rw;Oedtd&#nNz;j8yM z7mhBxflfEQD`~Mj+^>c`K+0!4FZM${dn63K@0^c4jQck`+6`yDFOzFMi*yh@q(+&& zhh!POV5=HEbcgu@M}fA*l*~( zHf%*b&)p|GS89{H2Hp<6|0Z0!O)S~H@2{P>TNGVAyY4DHS$xSnxRjy11`V6M3(5>V z@xf`lWo6X7DMU{_2LyCI2j~yGsnwr6^(6W`oXMlT+Bc!Rj7)evUPcVQ-^%tp0ch&H z9qO^YJSh9Tzu}j=V!Y-&W`(7_Ir6MKT3DGqsa#&Xc)_5(oO=R2uq%eWahMQ1R*i)` zUCc7QY)Ym)!6(%`!7-FPfX0wK&ziYCdxWAqXzP2sgQFb1PMX2J(;$mHm;C^}WP5|X z_ttW}dhWuzUgto)PUir;rD0+{k8nf0edi3kI4LkaXl<`OF0Y6?*Gv<-bE^wI_i$~! zSE!D?2!T7j%56uz`d16S(DbM~pEHiVYHpo8)riTxq2IK-l()q^wb8CUbxWkZ#F=S4 zDHlRL#i$v*p+ghA6?7@R-uy^CFM}bx%3wjgS)ic2qGz8vft~rh1F#Lfr)5+eM4Gy|Hl@;B)bZ|Gl6$tyioVr*%3dH%mxbL&Ogii-Ngv|)O&)*w9 z)^M3UllB@t?u~lA-lC5^EID~SNJj9yq;Q436ajfXPnFp{u7cM*=f>8()vwGv>D*hr zEXndbwT|^Xkn*@aw2Qqw;u=RiSM9#L>4tW@mhtkt!hS_OGz6VIizY2S4>YPgJSuTL zZ(*pt-1@>jlnTMUoRCC2NXzIv-WQ`i3o$M|G>a%b8<4cTYKs#*aTuCCx>@qPU*!`$ zdrmn$%z8Gx@53d%HevBN;ISt?%fbh}!g}Gn|BFC9k~JQ^)2yPs!>Ihb4lfctAhd+N z^oK@0Kg{bq<9&ua$~~z&8F~G^rkh=i`XHyfBMB#LBuo62T-rdRLb{SKJi6S2*Ij z)5fJd_%dldEk(S%yAU$G*t8|RuZp6*tjdSH;n@y8?C>%@(nY(yE;(zwifn$pomtMj z0MFFCx(XXTMU#m=F3?@Q5KYCr1WQ!C{J6 zppq`VIem$|C8@7Hxw}-oUI4*7m_p0D4#ds8C!MN1Do>0(culsv(fX)8>jiQ>?AyOQ zU)X~^@V9lm1d=Sh@rNC~jrwmrj}!{M;3|$h@f)eVkVN!7eY2{)j$w(too919cJXw* z5W}Or+d=`pwu7p@FG(N0O!mG!HkKbf?9|A-KPNrBH?Lv6{kO!uQw_wt3?$w?>XuAB zoMiz$;i|>GO2w=@$$f{s+l_s_@jRZrlHEl;9~0@k+R;nBm|>5-fQ-028h1B6jx+;3 zYChyVNIkebq+#tm-D?y)II*-nHyWWm`%7oNM?;3a$7TDXlpTpDq`Z8gX}!-?EINO&r}+lwnZ(Sn#gokZum1zsRMlsjL& zyLyZ}Wl|Tt0ahnHXIBNgMe-XwKm@qGyBb0~Fi$DGNM`dq979Gut0FEvC@S2%?Tk-7 zbld^HKkNcL4kvy+Sy5#?6&MY?@!g3%>*?aP6<_Fw^D2M6Z`dll>V$c`K7=woObbrEU%O2` z4R8!SQfJva;WxFr06>zxXd5a#!6p*DyUJU-SQTqLKY|0jB6Sl!Cf#rkQgjI0#Zsnn>=g0bxpfFxK<@Qey05j=}0d< zhrXpfEOQS%bATMYN^hM#2(X|$Jh!JjiFhi#Y+D;Wd07iQcB2M z8Ni)90oX*nb9s_HNzyev?q8U?FtnCE(qHgAjWt}o+nSp^@r46DB;78&R=}-28~R$k z%<+!AyzXc{l;XZT7fUER_njKOMtDTNq{`JjICn@qd`;0k1KV;vS)YtMQnm^`-hbsi zs!T*XnYpPwaf8D=gYO_c)AZ*&fDWs?RY$731Ah8ETREvbn5=oZK|esf()%L4=GO&1 z*s7?#t7@aYm;{Eq9MLYl`YWqE;uTuG3}lSFgE^f&tiN}?lwGyF_qx?OCFVQ57j!c{ zTEz=Ju7iraN$C~6-}9e6Tw`}UN0)3p&uN*wy{OzhD;SqORqqhJbxp*)ZK{7gdy7Cl zX+SSL-5v(LN46Qf!8ejRPSO}X+YJi6XhdGTJ4fa`C3TiPKsmBJ)Nh47Lc9&VJ-sfy zTF!;NR8dPkfzPMC8cNkW$uBWGwmp$N@h{B1u|&o^wr;PzP^6VR#NK$lPG^lgcoqb{ z6xJ*~zK_wnepgew;qx=R#SB5Ja_~>((Bbd z$*BUoP3UU89P!#bM7vr&Knxo_309CjX(JuH(%m9GP#$DGS92o0Tr#=5wii;mT4C+H zk%Xf>$26Kf-sUR2kkgJmRBd)WclcesJ0-Qe*DtX>9^afj-hOgDsM%0EUI1l25VYpJ zm)tNt5G4Y<>)L=krKVcFxdDH@LPHL{K3Dv_zZRjrgE-1PM9#3i*10ad2S|=PIPyO| zb`4Ct<&iJGM@Fc;o^^}8w&-U)Y!Yr{QqSYO5U8I$3bdd+c^PB9fP9g?i>flb6fAzd2O<)@WoNFu@bs#^gt5uFY9dv@dxa`Zj z7;CRQTkXue92C?&Fyf27Qa&|3PYCZluiEN7AvdwS7swGk$zDP{DQosSGDmW}xxVN< z_Tq3m-<69z{k+b-3SaiS8c#AkC7NcvG7nfi+idqd2JslZQraiHOMgZ^1ITkdSQgT~ zHlsp4Cb@mRH}wU*Mx2Me!2~qDWUZsUytysC9~9`j0;KZ12B~qq6(s?^x@_b;K|&$C zym+&{3Z79sCnWnkBsmQ|j}iPmUMH13TO`}M>Ej|juR9PtRppaCiDRBU=G4wTLG5+C zoWF`aCM57Z^Q)dcMni@>T14SI!Z;H>xJ@3t^@(4+eQA?Dgk11Eo||yJt`adk8V%#U zEj=*3Iw8$H8VK7u--1cj@I$K zWi0^1IY{3*WK|!%y?w8|+ty;eF3^5Gjx$BQ@z_K?tlyYD zQlc5Xyag6Lz-JshlKBO_rk^IgaNVf9N+0JvQPms0#s=p+7lVvFil7C)2}mzJRgrrBr^&<0u{PEujc7I7*drzPeN3?f&&}9!$1K&ypeu7dhkg-PuObH{pq73ys%6MG7LViBHj3^O3rjIE-9kx9^LPDiI$AJ#LvE5m`25Akv>gol(@6uE}B_gW4 zro$aPUm(&wYM&gv`ICM-fh3!{Vt=VSjkTOTqytO6IW)>VHa87DH-(ZssRN|FxO_o9 zp}?!Wh3qChVVBQ5`v#@F{n+?C#j#DiK2)i^Sxp+eom{LvYQ2v=m3Wpt!q|m9axFu> zBYUwu!JU}BSb*TXh&_ygmCz^h%mY{pDI znL)fgH?T}SY~znTI}ek+>uC49&V{GFA|eU9)`gKgTg|&YKH&$w{~&<8G4HFrXY-W3 zbJTymA*aqg-a?_gFuD;v<4H0-rplANFWeSAc+StfHIxZF-Rep`%%y@oiv8d_(?PX8 z)%Y_#8cy{+eO9EsDR9L+MDTRIh@`VTLgC3fg%iKLrxJ`jj=@sBg(QT$&0!Qg63OR1 z2!nyWd-$Ba=p!l%*UK5b{MQG) zLTxp?O#}Ko8n_ORc}X{-vKh_Dxc|$U(ckG7K%f2HHQp$T3wt>&JY&u61-g zDf;=m57A4#x;PC!eP;1I2;ts6hl!v)?_r(1r?RL$!pdAdBtMruDWhM!Zdi#tAk$2} zuyppk)B0_^?#!k=!)v2G>G!lf)6iSJ3cwvYL9%Q-v!b;;O&U?X@-dOUoQrV1_NbOU z!bY+@O~XDt`8|fcs+d+ifZ5f&Jkg}Ry`fUOi?}X5?HP!^jjOzucM24fw*^6wzM$)=dS+)E2R+l~FZ?bTkr_|j{=Z|Su?OG?i?W_kF$p^DEu z2MbKSUz?~r%qM`n&LL+!!d+86m|zvXbB4UTR}$daQJ1tFQU0U966RfmHl$P(E?UHbT{?8PzEKuDC__{u>p3y z^w}xAGi47wwKB%M?(Zo*W0S-@H?A)|Th!F1Y+Ve~Qw*$_@a%s;VPBaRP|EYEtpMD+9wkGQS?Y z?u@`ZVwHhCA1CoU<^|}ynDE6tbqAT zKc|^I$*2*%tj#Mu67y?4Bt<^Gx{M7wQWp-rSgT~c`VqXnGS`;8N^u!I&8a}W2JfuB zp@_1&rrIby+on3bvke(NVHY$#DbN8uF0LXxS|VpX^C8f^mWZl67_GWJa1xTd{i;Mg zpaYe>ge>2^FzgV$yxa;tz8Qr*%P;o4A!IMUY3#c^TODG(Ja@FaSW!qlQfEuNN4GIO z^Qag+uqjnN>h0#eeewXj*C&lTgY4(MRu2=t@0V@7{Z%o%>kzfQ>c$y8>@+GoQ-x?f zSc~JluNr&3y*1~&LitF%IUo-^y3A0$2s#zLm%c4MM_PJ4J|0g!))a}oTkjA&cB`s9 z{>l2iN=t1#xO92D2kk~Z*|cxHLSh8Gh!H8gqrT6*jsufD{CYgSezx$vF+a0C&Qhqm zqIIvloGEd=ANyTAApXrg!Z82^fck&Cx;mALy}sgGIXaV%y+F1ly+4DJy(~$*J?DDm zJj1ZRyl)T2y&=bdy~iWcJu-ESy|_OqJ?I%!ytLZ8Jvl}gy~@Y{y!hMzJulKgJg~%^ zJ=`oTJ+(5oy=CguDJm41(Jt+K_ zydOENJ%H-(JR*33ydBCrya?Z?y6x))Jy`fZyHK;UJUX<`yb9X|zLrgXyg!f(JCC3L zyy580z0B*LJPE=^JWFP~ycfPy~N}_Jw)P!y|tn3 zJ=H#pJ(pLZynNjbJHe0>JqKwfIS5-OJ!ZPiy`x<^J>w~~JUr6JJr?YkJfTYIJA&W2 zJi@wyJz2JyJIGi!z1Jy^JP{ANJ^h5)ycT||JeF9HJ*(J}Jzff2y~iiYJWd3yy+Ooi zyqWq|JVNP|JL0rSy%#N7yg;cGJZG;my~7KTJ#M@~y`7)YyoM|oJuZ{NyPk)oy{0q2 zJP}7kJm+keu(J-5g}JsZ(fy=1YJJs+?>J&whaJx)$MyB*s%JzFceJ+~M- zJv`JAJ#qXCJ2wP{yIrywyPo2!JsghWyr@Bwy$85=JP>!!yc}Jbz1&EWJRX?Jyt{E$ zy`%ObJr-|Vyai@pJxiHUyDTEaydjUVJu|pOyqtj!Jy16ry}HotydYI4z3@QOyG%Ps zJ^HanJaalDzE{6SJri~VJPO{AJt^$TJjkkpz3C>6JojPHJ8i5WJqK!nJahu5Jx0B! zJ(;2-y&wn;J#LSNJv!bxy`YdryckDgJ?nylJRdz%Jr4;2JSJQ0J2z|sy%&@Vy{UqV zyDU*MJp{@&J?S7ayQk#rJ$r1zyj{pZJlK9EJuBU(y{j9vJTrqsyM>ikx#kqPJg-bt zJvO``J->Y#ygCYvJiYROJ@N-=y|lRCJTjEIJo)H#y%0XgJl@D{y)mPRJ9Hsty?#DO zy_t6Xy-d#PJkR?rJ4kY}J$-?(Jl<+yyqg7CJ?hv(J%5Y>9Fyz^0-JJgVmI@)(AJ=63EJ-vQIyVg>$Jm^YwJEJVB zyp7hhJ%GlCJDA9^z2*y$JVx)3y`#IFx&?0wJzbnKy`X(Dz0KM^y>79MJ>{^J zJS43oy`$eRJqOgfy(GBIy~F(_z5K}qJOIm8JxnI1yiCd`JI-FayDc2?yJ{BOJ=}t0 zy@kXkypZ|cJ)y3KJv^C9JC{Q8yuf>eyp*I9J*wEbJ;gSNyy$S8MJB1oqyK~-HJQc-wJ$6s|ywEd*y$L%lz2$4YJ=6Key+RUkJeq%j zJ zy@IrnyfPt9y%4A!JwhyVz3ZTmxo_rbJ<Lz3n-nJ;g}My=sH#JnFpq zya09Fy)b9GyeQa$yg7P#|dJ*iT?J!?)Sy?`n8JHiOJJ*2@L zz1ASkIg0hqJJrR6yo9TPJ(j4HJSE+%Je1jsJlpsrJ>4QJJ#R3sJY@Z&Jieo5J#vnM zyl9!hJrouYJWUc-ycPOcy{@8Xz5i^Vy|fP2yj>DuJ&=(Zz4m(kJe(^ zyhkuay&FXcJ&NfSJ-kRaJ&!OOynqt$J)3q6JgxXby(f>;yg%ozJvF~x=|{FyE9EpJ)Ps4JY}(Gy!En$ zJFw0#yijpCgLz2U|hy9YVGyIjX1 zy-G>NJi=^tJ*nucys!?_3J-B7nyp4t^y*fTwJ*uSzyqy~NyS3iMJP{RDykYxIJ;mey<{?6ypTntJh(k7y##HaypjSjI)*N5JS|sB zJo9*NJ>oizyo0$PJUg^@y=%*fy~Fi(J>(Hsy))AkJ~dj%yF12By{Xcvy|+D~Jp9l# zy)DHFJuBJ8y%lzuJGSy;Jqt24J)1)4yc>_2y`c)LJVvWNJ$i`8z50^4Jum*bz57+6 zyqU8!y~#@fy&i^~yOjvWJ)%UJz4f|WI)LB%x&^xsJ%?wJZ0aGy`oJSz3M9OyxuV*J;%E>yxj`yhAKwJiq;UJ4Cayyn2f|yt^NPJx;_!J^jB1JLMcTz4lx_JZu2x zJ6xm3y`+ZsygT^^J%+a`IxPnZy&@+lJpofZJ4nevJOhi|y?_|9JdSNPJ>3|zys+B0 zJOrmRJ=qdhJeGy9yk7jZyg{+%yeDvnyj>PQy|1zwx@+KYJ)OJnJYuAoy_53;y}MhG zywos=JZ>5ay-vCGy#6Vrz1$>*J$>EaJ(Hp=y?d~fy=0=PJnFxiya_jQyrK-Nyf@Na zJdO6nyh6)Py;n{1J9p;SJPBV-yl{b!y~GmLJ20G>J%?C;yvtllJ$i?eJ>Am}y-4Yd zy+CZjJ-ozcya}ZRzS$rPJ=VK@J?*cOJRDHvIVv^SJShO&A zyi+8oJAMV)yd10rKD<)8yXUUgJfe2#JdqHXy?XaLy$&BlJihmdJ#=SaJTz;2Jua1$ zJV2ax7-J#p`5ybu7zJ*Ky^J>}1|J%cN!y1Oiy zynUI!NJ#w~+ zJ^Q(7z1QG!J%AalJUUGuy@$xQJ?KGkylj@3yrhmf zJ*;^Gyy-XPJR7TJA$u&y{cJ1 zy_FIbJw6V%z0SwXJPlcjyrJc>y+OpoIef0GJ>Cq7yjftfJwq>CJsa~3Jp|6hyA+5D zy`Wb(J?yasKC9A!y(EU7y8$B&J#QX-y;u(EyxQCsy_(Uyyi7BkJ0W}SJYWKuyGKTc zJ-)a=ytl1dy(q7+Jr5QvJ%Ji%JvKvmJ53s=y~l+Ty_%%WyVL@WJ-g>IJn)czJH6OL zJ+vkkyz77_Jaiany!t~6JX4!HJAebGy<&!_Jw;f6y;^#Gy_SJQy-wD4ygv|4J@uIb zy|-|sJ*-(mJ$oF*yaON5J${T@Jjv9RyZ5F)yt+oHy)*VeyUB+SJsrBSJ%W?9J1DM? zy+1Q>Jt%`%J;M_zJ&fx)Ji&m>ykD`2J0fa{JQSe+yrQ26J`w<-J9mG@y#&U-J5{#7 zJr;=hJRITKybSa{J5x3Vz4^vHJ-rItyxq^rJOO)#J;Sh)JaN6ayx)h8yn!?6y&jBKy>SEFyig0w zJXzFCy~48Lz2V;&yqpm|y_F(_ywu!?JlvxPyw`}SJlx$gyDGD~y%hn6y`^Gsy)vII zJu3O9JRFn?JJ%5RI!YYLy;!BEytenVyazH5y*wZqJzB{#yjV#hy>d>)ytr?aJ;pJC zyJ{GSy~rD!z5Wa-y~r{iJ#I;|y<8j$zA(_8ymAaTJ@d_~yds4)yn|+tJe<@CK27FY zJmS0{JDGnmJh8k{yxtH}JgM!zJ-lz)y=p5tJ%9@_J!4|Jy&cDfJ)P2mJ6c;cyxLSg zJ?uy}y|{s~yhU+PJ&EZbJ!q(Gyr=u}z5j-mJrO9BJfz}VyXJywLawKIz6fJ=|KSJ#faaJRO_&JY;JgyR!g?JeYDVsS zy>zB!y}U1PJgJ1My;G_$J?2uWy%|+{yb@lDJfkG5JXKD_y34=rxu{9Ny^3mAI|-4R zI$ZXTJE&C7Jr%^LJ$OkhJ?hv=JvMlWIl1tWJyrFOoJ&6vE zy+NOsJq&c*Jn$_vy)wFwypBhHJ@!C^Jgp2dy)=9hy&X2UyJfEOj zy+L{?z1QK~ynSeBz0xy5y|Zq)ye>q%J^ib%IXAowzCaS*JRHXLJj~IoJ=~C(x~rhe zyo+6ey=$^tJ8H$yypEuSI~AZ-JU=!9z4mrgy}VaKJ#vqyJZSt9y($j?JpDw1J>3?F zJwoF0J+J06ymk1^Jg7GdI{*NMJ$aI6yoqsJS?7lJ?^4g88y(Xo~ zJU!~3yEryyF%Ez4@MIJZD{xJm!Y(yejfq zyq#CTJETscJr~#ny$>3vJtVHQyqnulJPcC=J)+JHJ@W>SJm=mVJ%f*aJ&j3#z0q!e zJ?3W(Jy+2lyz>*Ry;AK4zUE{nJt;gn*J;b!vye29?y|E1PJN@cJOC1~y&O2t zJak(TJ&`vBJvG$tyy@f(I`P`8Jk$sLyug1qJm)zhJwZW(y-!mBzRLAQJ*rEWJ?}^u zJ=MNIy+vmdy*47Fyx!#TyutzrzP-|NJ$x98JUQ(DymfWwJH?R-y>rG0J?|K_JqzG0Tyy9bZJr!=aJ8+p1Jx6juJ-7LRJ(O3uyqv@tJ;eT+JtT{hJYprNy|>J?ykJ>D zJ?-fDJkm&eJ%O5!JsqN#JuJ@KJ-VyJJo|}JyrK5oyiinTJwYL_J(No^J#3%CyhMwv zz4$vry|;ccyiUUSJS5kiJUuS;y;DMvJ-C0Zy|>E*J_aF|z0t!8J;~l_y`)$fJhtHB zy@>Xoz4bSIJbxYDx=2+kJ6n^syx=0KJY9cNy;;TSy}p*Myh3EiJ!QqTJyi>7w zy$_3Ey>9CSz2S!?ylbc-y~&2TywrCRJv`T?Jt9*Jy&^fYJD*myJ>k5eJ;RTjyxjz15vgyrwT=y{pX6ylWObz0YX+ zJ6NU;ykRa>Js7v6yys-tyn?qCy*_HwyRGOJy_3Z*yhKyxy=u0+J2VD`JaQqqy@nBu zyx4*lJ?wvJdvJ)yrV^cI}g~KJ*f=FJwj15y{6(My|F)}JjUCfJV}Al zz00LwJuU>aywG7dJx0^6Jr?1HybThCz1P>ZJc!L}J^h6TJ&8I=JxEFHJ=1v`y;PgR zy>d_{y_Q$oy|t&ry*hNdJ)gc!JrFV^y*zQ;y=_Y?J;y0lJ$blKJr5wMJuM&fJcw%Q zynY)GKE!fVy?EUpymmHEJGovdJpv7jJC7sAJ%sIGJ=lGTJQQb|Jk_t)y>~YDyxT0# zyxxl$Jx~oJy`O`DJfOzvyaZSPJURd?J;L}TJ(m*|y~|G>Jt%{!z4?h`y9+4YJS28A zJdKC>J*GeqKK5USy;hX~y`lF0JS0=LJt%V>J!~}>y|bRWJf=(cJiRY5Jwo1sJ$55k zJ>p3)J(c{@JSq+RJG6j{J;!#eJl)zWy(-E?ytF7HJ(>I*J^nljytL$^x}VP@J)Zci zy(z~*z4{mmJy<)|JP(HRyzSf8JeS43JkHBrJh>dmyitnTyj7mFy(Bniy_x)QJY4~p zyzmqdy{NB$yfva|Jf6y=ITHy@rR) zyf54XJ-HU`JXi_fJa509ym4KQyed@~y$VfNJ@J%`y%}EXJShj-y$sDmJd=D=J?q!x zy%wpSya84!y~XPBJRZ!jJLG=Ty#RgUz4Ek_ymmT(Jv>i(ykXZ+ytaCQz1QGdJ#hH9 zJ+F(Dy+N3jz056yy*i4Ex~E6HxUuFSJx4G;z2BA@I^W!fy_Q?@yKW>PJyRS~z1T2m zy@ciJJ;(bgJafBzJUFRsJ@Q4wyLZt@ym=}dJ+n6KJn}86yySAByw{67JtqiWJovtT zJXB$jy1y>s^5JT$8Jychu1yu;8uy+;dUy?5cQyl>ws zJ2%|_yssq`J)4<;y>}PmI>jwOy{nWYz1$o(yF2rGJiM>0y&&gYJy{XT5JlvDMJ3l+Gy}G&& zJO$pkJ*uXTJ#f>;yDkuwJzUN$JSmmVJ-h6LJo6w~J*W?4y*_lbJw0g$y;XR$J!#q; zy$~9my@YBgJzK!IIye}y@J??~)J3x`TJ$|z6x@bd?J)vuwz1-j+J1G!b zJ+!t9J0bjSJv-#Uy~j=Gyo%_lJbprly@DjNJ%I?wybETIz1g5TyyJ%UJqy%cK;y+o7Ly-Q}^JSyj=JsiLw zyw$VKy`-rDy^o=7y_!uaJ*<1{y)OGsJ)kaEy%1dsy^T+6y$j_MKB~ESK6%H7 zJT!bpy_S~BJMBIrJX7;&z1)JiybeEzJ8xfIJXKIAyQ`YKJ0xIHy#ETHy<$+6y@^2R zz0czry}@Zqy9$}qJ!yW+R1JRoY=ypCj2yeK8My(V3QIrC(kJskLxy!!37 zy`CZnJ!B42z2S1*JA%3ayu&ToJuIFSz2jpEy`n&2J$Fn;y~@74JF+dJyl_LXz2}FA zz2|lQJW^D#Jn=8RJ+25!Je}4KJvO}0J7O)yJ%*o{MJ@cm#Jy*i-Jqni$ zy`uC1JfgK2I~U_mJui~eJjDR{y?1*hyJ5gFyL#}8yLGBPycvigJrgF+Jj-S9JUpT# zJ!~p9J)U0}J-(kZJ(^}>JyFZ>x+H8syux?!JX}tFz1ZWdJ+ODTJ)NzeJ)e-|JgZuU zy~QrRynDx^J?PV6yiVdVy`c1bJxmi&J&Mi>y^lYdyx|mNJxwsYy-IcjJ+Q^|JgX^gz3;U!y{mW!z159#J^gpyya9YqJ>ugey-P%L zJNPJ))Y%y=wXzJgwa`yT zy}T6wJ-x>pyQ`@Zy(`;;Jp!Xwy$YhzJOhVnJPVg+x(gr^y2gLmyu8S(yVD_sJ$XId zJkdY(yB;s?Iy8B#x=F6cyuo7xyec$iJ#wWpJuD9pJ&^mTy=5GDJxqcWJ#;~uJy~B{ zy~kZ4z6X7hyfh(ay^O7{z2A~3JYIG?y(`Ahyy)0dy(Qley||iKJ(D1wJ+pT8yQHR! zJgJ{gJ%y*qJ2KpxJ?GYKJ*cLLyi3MxJgy?0Jq(l$JjfEWJ!hU`JyzDBy+cH}JUHi@ zy`cgTy+d}lJSyuFKElhBJtYX1y((aXJuBVYJ-OpTJ*RkwJaZ#jxJp$aM zJg1Vsya3wnJ>Q-SJiNJaJp`E8JVVYly_>_hy(p44yyhIDJM5~8yd+rzyjM^+yp(3d zyN#XeJqnM6Jzs2}Jh#UjJ!yzVy>8uGJwwMzykjYVJ@Q99z3GK;J)nd5JTf<&J)9{P zzLyBlJS*5oJ=surJRX&JJ>6oPy>TQRymn9+JtGc-y>wo2J$RH6y%JSaz2YkCxgP)} zz8BHayi1b4ywS~0JsF&zJled~yjKJRQqeJvIAqJXW%XyyJw;p?JY_)8 zyze-Oyme%wy`!E`z1B1gy?o`Wyy7^7J&EoKJ4+BWJ>|SdJ%2;4 zyn^R}J?#I9Jx{n%ya6cqJ&B3SJy=IxJ!5J*J&6Voy%aAgIe1=*yZ?YtJ5w|`y?}C> zy>&Qyy|LD!J55`ZI;9A8J<9c#Ji?B+ym|?(J?gdhJ=cLayOu-ayxMq8y+3R&Js60Q zJu2P@ygnD6ykJk0JxaCDJf-TGJ zy&T7%yRS@*y`?~gy&7$+JD$?Tz3AlBJYm}#Jq3^{z4OmrJ8iwYywTURJWx8?J61$l zyryOiyikBKJY$NYy*?R;JxG^>yx$vEy@u?^ya6o-y=+Ddy~iLry%abdy}5y)JazzIy*)dPJqgbY zy#sady?T4WJeF`0z5nouy>|nLyF2y;yK;HyJwIiaJcBo*ys_RFz1Z$yJtlf7y%|>l zJ$G=wJT{LsJ;g6hy&iG}Jw7RuJgBrey-BWWJignjJ%Dz@IteBKK7nZ}JhtAMJ)s7e zJbUF6J&hqMy&f?Oy(2#8Jr)p_yttWWy+!=iJc_DPywX<0JXAIrJfTO)J-*0RJ>!}` zy`cabJrGb8nsy%1rjz5N}QJz0-7y+0?! zJToc5Jm{>;JWU_%J(K4ZJ(%)&y*hn>y|$E4y}ua1J$Dndy&mieyTvx<1U1Jz@IzytqewJDaHF zyw9EPyt3$Uz2HM*yrU7~yno5Ay@cx#JO+qZz4JW^y>~o}z4~^hyxX`EyeP#ty@HJA zy$1@6J*j1uy-DtCIbtBtI)Uh{yaMJ&y;4V>y?+^&JW00TyGc5OyTSN@Jss-9yciUY zy|Prqy&4k5yX^g&JBkp;Jw^qby}YmIy&Tz8JfW$&yzEU0Jq9pnJz-zuyJ=evy!Bd$ zJ?jlDy1d4Jl_SAy~W)x zy|O=ZJ@r}vy?&GMJ5EUsJfYlUyj#YGJy{P)Jew5lJv%0qya}$iJbMFOy^MxFy&SA) zy*P=DyOU)&J>U1FI|tLZybBWrJbm$=y?(8{y(~=zy;Ol6y!AZ5yOp=wz3nJFyH^%a zJMY}8y>@`2yJjChJOU7sJ;>aPJz9(tK5Ud_JmaGyJs$@8yB~~+yc<_7J$cfCJ&dlb zz13&9JlpbIJOcSDy}+#ZJc$2Uz16Qby(Fi}JfHS6y>@MbJxVG|J&^U`I~D1xypK>P zJ=O+8J47;*Jvyr%J#GX4ys)^)J2eW#I{|OFJJ)GSczUlBMJ!6kIz4y8py=!qRJ&w}nyf0}xJz&1(J5UW> zy^=_8y$YgtJgFNiJ!;6Ry$qtwJS_QyJS^}_yroSLzH!R(Io+(Py}h=eys^KWys3fu zJIM+5ylqy1z4QoiyUvk_J*k2&y`(;lz3t#sJplI1y!r7XJvwF3JKzd4yqd}dy-ZdX zJhVEIJYNXNyZr)Kz5BU7Jd)u*J(jKly^QWuy{9lty|9{rJgvNsJK)ZzJc|GZy_UkF zyz#sxx_tFTy{aCoy<(6OJs|<5yuK2HJnVH!zUp1PJSLk4yAETTyb!RCyoy%gyd!nd zyiXFLJph~`Jtji7yv;d*Jqc?Ny`!xgJgj%7ybD>yJtwYmJey;VtvykPZnz2q05J%&=xz1s$8y?)fQyb_97y>72=y=VUbJw)+zy>xc2y^^HI zysc6%yKH0#y%nlmJ;G1;JSZEfJ=hXmyoR8IJ@CXlJ!HQtJ^sKjy^^5oJ+72JJy`I^ zJo|p_Jk!xby}P$lJue}_y!UGYy@Yu)Jenv}yy~G1z7QWmyvyLA6J*7#eJd0Ray$XRMJ=sb?JvJ@(JfiXCJ?MT*y{^%?y9Bui zJxH_&JqRY-J0F&Oyogy_yFPP$y?{Yby?|^eyim-;J!|_1J@6&7Jwon#yQ4FxJ#{cF zy=s* zJ5Ck7y^WE(J@hPQJi(|HJp^Q#ydwA#J%WbOyr430Jbv0nJ$XwTy;)KbJ?P68Jbw%u zJ&}&wJ>V9JJEdA7ypS+Ny_&L;J@J*;y)UvQy}x+#yn3CVJsXj7JuB@Sz3JRm zJxUjay(0ETJ#OS9y}V($J^tpgy;cFNy?onnJGjXay&x}T7J+nNyy&2R2zWg%nJtSY6 zJVVGuy*DV0z1GURysnI%y-*V{JtckPyPLrqy?B<$JpXJPJ-vVkz28YbJoW=iJOCT1 zJly;Q-% zJcz>=JjJXfJz*_XJ&$rKJpvW0JfpQQJSu)GJtm?zJ>O+aJ9IRyJpl6kJfx};yE_^T zy<+%Ey{2xqJrICJ=g~CI|zOFJAe~dJm)lVJ<=JC zz0%5wy;nS;JUfoSy}Hcyz4C6kJR#jeyc4cqI;!*VJPXh8JP&a! zyac3FyRmrgJtRo!JkcGCy&>VVy>|?wy`J(jJ)Gw1yj^~HJs2iKy>q>bJu$L_Jujkw zJv5(bJ+6;nJPt1}Ji`{nJMzI7z3s@MJO<#fz5N2Xy%*#=y`w`(Jvr!dy$u8&y{Q&I zyBk=DJdxR0y*t-HJVr=0J&ypXJr8a(JOel~z4&3`JsBBPyzGmrJ$_Qcyy*BoQyXrCwy_xRyysSjGy}ydiy~}E) zy|>kz3XHxy<;7gJiO)tJ}7t>JpaNby-GVAz4O7JZ&&2y-?aby_`YMJwR7JJNvGxJYt8hJc`0= zJIvM|JykT=y=JyN`MB zy(yEWy=dW~y{CA^I;uO~yx3rjJ(HBHJm7M`ytm!WJuz6my!!7VJn+~UJv^5py#uQL zJqQspy_JSPyXJ;t{0JW}>{z4#5mx@dbFy{c4_Jzv33ya1WHyO`&OyzW1@ysV!* zylODrJP_Dhy*)Y?y9*Y{Js5G*J*93)JX1=mJgl9;ykO|Yy@AdAJ*1r4yevr_yuA+1 zyN~aAyI(y5J&x%nKE|e7ymd#?ygLs7ypqF#J%xT&y_60zy?2pqy>rp8yl8=)JcHN3 zJqWDBIab?iytrZey156SJ%9GjyBv+Ay?+dZy;)o}y=UPxy#hY{ylkm!JrD0tJtgJY zyf+84JycNLJoA-Hy;1@+ys897y&+0Hy*pH&Jpfmez1`ieI(4`+J!I{@J)NHaJinS;y_yn-z5lcR zyT!VCJYN5AI}~{=y{t`4JlHo3J(dAbyxp<{y#!Y>J&G~OJD`-TyoAx%J9Frvy-KQh zJ#=?sy_uh}y~Em$y=%p{JKjg=J>4zKJ@>ueyzP3BIsZ@{y*pT*y`YPGJ(anCz0I?P zJ-goMJa4avy!ggSJgv7iK4!RQJ*ZxZJS3mby+Z)kyXRZ$JhO4NJRK_tJ;YyVJyB3p zz5l5sJsehhyT@wMJkP?Hyp)o*yUabUJd>TZy{5q?y{1O8yiBQQy_3&}yt>F@y&%!i zy)NDEJa?DJJlm1-yXR?aJYX`Gy$>+MJp&ZdJ)m19yka)7yir()y?^deJ$CapJzLuvyQu6zJu`*ty+!m-y~hj9JZ8EZJO#a7J&0D9JHjXd zI)qg5yY1r{z1Xzmz2lUqJu*6>y>Ce(Jvw{%JUkI%JyFR4J*^A%y8g6yyFLgnygUa= zy)sAxzIy%OJxbpiyO#K|JhLvMy|7HRJQ;zgJvi)sJ^IBqz1T=0JBWOdJVCgHJTvZD zJ-nk8y^ZyQyfg{hy**xYJ(%{ky*)h1y)m9eySH)CJgG@Hy|V@BJZt0Ty?cq}yohb& zJZQnpz3v&#z5gSDy~ZgIKFSL7I{tz$ybVafyHh#lJW$fKJk?QwJvP&oyyfS(yC;4m zJ!O+0ya6*OJ&-w&y$eZ6y}3tiJwu-Yy?ziYy-5pJ8x#Ky;q+Z zJqsJOJrxESyzohMy!O|Vz0$gZy=<8GJqD7LJOd8byn$nHy%&$RJ<~2NJb{cuyUUm; zy!!Uzyop4EJQtCJJ$jbbykxaGy_wa-JSw%6JpjhUJ;OYoJbJNGy}v{JJ(Jscy&O6Jpub$JvPg3J>$?{JTKX%J!D1)z3@mQyf1g3 zJ8-jyJrLi_JOgEKy>E8`JtvS2y%_1sz3Y7Cy)dkQ!JsWr^y~#x! zJ!h%}ys4$#yvSn-JXi4ZJG^VFy;WW>y)#meyj2lDy__~PykSDrJZ=;WzEz12J^Wp- zy~y;;Ip1y>zBGR0yjV^JJrEzOy=w=pyx!`IJg2#(ym8vDJYVO;yuYdSz1h9zyfM2@ zy-{%Yy!18{KIM7CyO}XIJ+iF=zMfO|JnL;Uy zy)q~}z0}SDJzeZ6y?g47JH@tpJ$ycCJn!l@Jh1Lsz18V9y%TF9J^FyryO#Z(Jzc&o zJYb&jJpJ__y<(pey*@8)y|ej+Jxsq0JxXH5ynqo`yHj&py?m=ny{@jSz5lvAyuqYc zJt0hLyxX*SJY76ny!q>Cy`n+YJU*FWy^FDKz47Q=JlJ*AJvi{kJh~WMJwPyZ zy$)isyxxo5JW*s6J&*6JJWMM9y*tXYJU|R>y|jmhyph|wy-u6Pyp{T6J3RylJ&Fg9 zI*fc7z0Vz)z05p9yk{UKy^9R?JpnB9JizTU zy&JmeJSO_9J#-?Ry?|W3y<}1}z0aC9y*D;zYcJoHeNyN_MCJOe|Xxr8%*yuXtny;%A}y^Y&WyuEx> zJaZm%yAWemy#dyPJfAweJj48vJTu9hJk(tay`hLbJR;-_yCCbeI}rD=y}vAWyg2Jf zyUtmyJbc<@y;wakx;!t>ymHRFy~PAzJSjf^y95h}y+toMy+(n;y@T>jyxXd*y)zk! zJ4bo(JxFt>J)>aAJ-NBYJ%k=QJrK^ay-kkOy>pKby*OuyLguXJrbgzz4mTV zy>2S8y^M{KJ)%eny|eJ?I}Gp)z0L7iyouM*I~q&>J%fSCyb?+(Jk6*oJh?T2y-$}@ zz17PWJh)-gz0_EwJj$fuJd{|Ly%7V-J91d5y-;WdJ+6~V zJ)ly;)RGy^YI`y+>i2 zyhg;Uy?ew1J?Qq4JYs;JJfKTBy@rd+JicRfJ6@}=Ju{Z)yuQ|Cy(F7AJxVQqJ#gHB zJ(~XQyb@X=J@r)mJc;5CytTg!J+do>yFV@1JP?Gfy-CLVJ+dreJNkyx(2XJaN^P zJAjQJy=#k;y-Hn9JW>@Ny)>UymhEJyx&8@y!+jJJP6yX4PEyt@9(JQ7(sJE%RJu1xwJ!6fby!dby zJt8jJy!VJJJX+MrJhivDz2WgvJu0}~Jw@pWyXn_TyE*4ay_3#|J)zD!yrYcJlIY~I`>1%y)%%aJ=`knJJl9tJQHM} zz3dQ|J?`t`y@>$oyK7N*I}ZrLy|UOkJQ!NeyvqmiyL%5uz31JqJ>aONy&tU@ zJ?8w2Jf~0Zy!4lUy%Hk#Jm_&Xy|o2{y#!E&Jduf>y+&)tJtz^`jyQ}z) zy%=o8y=mLYyFHpUy!L#7JAPAXJx3q}JvzL#JyrgRynv3dJrp-0y)eQAJz6q_J<*@N zyG^6HyzCHFJ&xhCJb!rYy%|wlJkChcJ6NohJeFj9y>15`Jvg5XJ(hlfJ&hzaJ=JgGy-CTIy;DnaJ-5@wy?nzx zyKY2PyFOYdyfJSGK7iL+Js4IFKA*^VJ?8fFy|_Jvy>Z@;z1B_Ayhpm(z1ZPUy6=(- zym>=dy?667y^W-RyUjIYy^NB6J?4$7yhZd{Jpu)zy%hWVye)Kmy`=LFJdtT#ybrHi zJ&!L=ye?y1J+X@?JOKWSym5U( zym>koy>1zHJQMiPJ;*H#J@S1#y_o?my<$+>yEU1xIrt$6zW;X&yqH^;z30ENJy{(2 zJ9(0&J%smoyi7|%y~I3cy@lLfJ=v|by^oCUI+X&ty<$a~Jrwciytiz`Jx8htJr2QF zJkrXVJdk$7J%Um@y_-;=JRtkEyg({8z4IKfJnWx!yD@=Vy+Ge6JV~M(yDxmhJ?YKU zyZ^_Jz4lffy>YAwy&TA>JiT?@yZo0fyzuP%JIYmByz*IyJUrdQJbZ@Ty%<)7y%c+$ zJ){z%Ih#cnJq9}uzDcLCJ%cc+JyZ4CJuV=vys{;`JZYgYyvIOSyyV8qy&5+Jy$$aU zKHTrPJ)lQbJvMEty;oj5Jy?7tJU}goJ)!8%y#5Q1JomIfy)i#EJ%}GFJrtLNItZ2` zJp+P(I1M#BJ$tl}J;wR0JBOCaJq6?Myas(VJu_QRz4;*|y~~_%J))!ny~k|5yjMdQ zJzsl_y^%aQz109@z28Rny440!yjGTuJrUM{yyOGiJ@Y{jy@U=WJp(~MJJ1+Vjz0CeOI{=M`J(W@fK7>x;mu@JoO{) zy{OAXJxqSnJZ4V$yv!|RJ@6XjJaP`-Jmc+?JziY{z4=#>yd=b~y=V`JJ)aa%J$*S& zy;whsJ)7@Gyie>=J?rWyxRN9ysrp>Jz^v!JaLQ*K16ADJWa8VJ?(OeJv;E)y&m4@yC+{=JxhTv zz0&O8y5A6^Js&1@y_U<@JoMb(yxGKO_y_bEpy`nqnyC*lTJ;&q1yo#MfJde#DJa0*=JS8}xyk}X|J04pLJb9z` zJl>2qJ%;Y=JX;48J(Z^oygxyaJ;K1GJeW!nJ;CH$JyqbYylyoHydn2Xp* zzIpMzz5eh)z4RM*Jy2%(ysa=Ly|ZqYJR(2eI^&Rbyt1aZJ;#@Dz2Pj0Jx5L;zQ0Kc zJuy|Xy7GJoyqbl`J1d%xz0Moxy!TQ|Jtg>QJ*BVQJt(jWyd+SZJ><4SJXrc{y%N+$ zy|QHZyT(u?y~ZmKy~z*NJmR`{Jn^pKyi>zyy>?S-yyUQvI{fJTyPPsjy|m_- zyijOoJ+H40J${TbJyi{#J->w+J?+gOy3b0RJqJJIJXH*BJp!u&y&T6BJ>yG~yvi#I zJq6i00RJa;}OJq;R*JwU=@yu-gTy*+pLyN7%hz8B5~z26<7J72Mly?#3F zIgo4bJDd2kyeiQrJ;jRGJf`huz3cmTyxq^6y+&rBytlrcJz+9iJ1XGNJp10~y|!_e zx)zjJJUhv(J^x`#y&7agy&KySJN60!zNgfMI*EfWy}zQWIqJg8KeJUw)7 zy>xePJb2hXJmCXAy-I0Vyaq*&yx82!yp@U&z3IIoI~HXhy?NdPJYdzYyRy)dynQ^O zy=K;ZJE8&8yw&!-y+PMqJb%2JgJ^jJT&a1J=A{dJr8G3yU=MSy zyPyU*J6E7IJv$VFy%ytGJ)rXtJx{ocJTJkPy%ArQJhJz8xgan*J-fblyu$3zz2AZs zJr54@yr^N^y;ke1yKT9#yjY4Yy(^rgyets!J&^JRJxcV9y?&0FJ#LT^Jt;@0yq)$1 zJ?IpbJ^B&VJaRy-60-yezC4z4&$ZJWVc2yrj|2JreF!Ay}HQDJp+8%J=5e9 zykI=5JwRBQy(to0yk4CHJrdCo zJnHuBya>>tJy_D`JXxX>z3vMTJ}AJ5z2Iozyk+GtJn7@{Jc~UBJjrt3yph6Jy%>x? zycumiI(d+mz0p3MJY6%Oycoh`y^@-WJdO3DJW`8;J>*T&JZ$I!ypJ3ZJ)0NGJtKG| zJkWH{ykUv;JIzEMJPiNuylvylq`QyoGNHJ#yvWJtdb3KJboLx&*>?y!CLNz46+^y`(vAy)Hi5J;$>HJ@shJkJ-6R5y{0|4z3=}rJ(#KkJ;dI{yQy2D zI%^rPJ#`rYyilf`ydz74ye#uJJ%)gyy@4UMJ=^^OxP>soJTav}JvX(ryorD!y?yOD zyWHOmy)nc!y^+i)J(@Hoy)A+TJ=8msJuwOwJ)boVJwea8z1vd2yf3z|JZ`EZy!v8s zya>y~x{DZBy=;Xu zy}7&5y+KKPJ*tZNyN2Y&yeNZ9J=Y@^EJp92-y^e+RJEPIayh)ytmT1y3T;yJp8Y~J-E9sJr6U&z4E7yy*^d%yd#*6Jm}MzJCeBQJmCLVyjH9A zyWKXMJx9O}y{b?by>MFZJk8#gJ!k%jyptb>J&(uIyw$VsJy(kkJvTBCy@?yz(Loz3)^kJwF)$y*T=yy?UFRypa49J>^%kJDJ%`JU)7- zy-ge(y>x7@Jszzdy&0gIx^10zJQWJfI2i9=yAwddysNazygR?bz2ROSJWY5)J$Gq} zy+Co4z4(FtJG^7^ydXL+yzO@ty<6|nySvH8J?NC9I^2B5JU)7fy`*1~Ju~>gy}eKl zJyc>@JY&|NJq!l5yc85;yZLUnJYfT6J^Bb#J+1MnJ=31tz2eX|zKQ>pJWD8(y#^-X zJ#P|Ny_nvdyo-ASyZ14}y!1~=y~GY?z06>eyjR%UyX95BJph-vJq+fUyJ$wfe zJ+Bb*Ji{&Lx?Yb`ylTkBJjq}lytoACyve_!J;+rxy}HCXJrTKwy*qi4Ju;%Yy>A&m zJ&^tPJ^AW$y@_Z%K1t~NJZ=ytytaT6J!eJby{CfeygFmKJwfB2JQzuCJp_pnJPTq- zJ?J9dJw{G%y`j@yz5S>-Jxnw2ys2g$y(GZ_zOV2WJ;4wwyNpTPyheN%Jypk)fyTEt@yg`uz zz58^ey+M_+J>sPZJgx8RJ^G#Py@Un^Jmb1~y)bRZyeRjLy$4{?JoHPrJR{cJJtqIv zyoa(5J$+{gy$=LxJBaQ6yJ|Yuy!>=Kz0*A!y%fu*yt$<~y_|lMJXkxSy!m91J%ojl zynzwDJa@5sJt>dfyzm1tz3>NWyt_$^z5j={ybM`Qy`DlQJ%+X`J?241y{)ITJ;F~L zy(SQ^ys{EqytB(AJwtn&yT<_bJ+w}xykJkAx&tX9yxgz}J@x)SJgi6py@^*kz0FK8 zJa;+XJrf0wJD`<|JF2C>&J&(=FyqmB_J%*5y zJzX!JfCjxJZiwhJje|TyR~c$JX(%-y?xst zJehs*JerS4Jxc-;z0{$Uy&rs7y}P)!yqW2ZJU>O@yttbxy_5`%JWo5UyUz&#JqS7| zy~Gmiy34yyy{sbvJ>IiGJr!!#yX%~-Jx536J%JA@yswp?y{u{=y;;npyV|ExJpjiC zy!vNdx(?6+h5JrCiY zyjfc+J^ug{Jwe(Gy+B)BOJm*sZzR=yvz4r`fy_y`kz2ox5JwWX%JxTToytJN7z3UT^J(kL1ygcB_JcdBo zJe~Hyy}WF~y)&z(z1-(6y_lquyp%_FJ*mKlyT{a^y>fQ@yClJ)yT_-JJ;!E}J=4e& zyb2H*y@afYytYcJJWR66yk3GeyeHvBJp_KaJh4%Yz1HJWy{)uYJ;jQly}Y)Bz5Q<^ zz4hEKJxl`tz1zfyJn`J2yXErrz2M0ZJuK|cywUqgy<5tjJOwU6J3LfzJyz|+yz!G` zy#j$Qy+RzSy@@9@JwOjyy@eG@ymdLlJXj`8y-?L7JV-nJ+HruJ?P7nz0k~tJAHQ@ymmgTJs;(|y!(%pyGHUEyt{*HI{}m3Jesb8JaNhH zyo(Vvy%dNEy?i4Fy-BAqJo=}HJqkKkylV>ry%>OLy{CwDyLb~yJ@$%iJsNFHJe)+m zz40emy|aLwx<1M+z4S6NydxISJqi5iz2jf7JObaRJe~Clz3YS(y{+-0JlArJJTnqk zJk0hzyp)9@J*}jmJ>O&sKBDykzCr}zJTHL6yh)ZOJ%tVXyx;=Gy=%JRJPi?4J?6t1 zJ>P1@Jh5~Ly-T#Ny#03Eyfg5cy&AFsJ<^IQJyH$rJv8+kynnn#xlsH_yv^&Eyn;EL zJ+7`aJzn$+zSHJ&Ja-v2JQu2tz3d*nJT8vuJXJVayvZcWyd#sOy&OLkykROSyjc}D zyIX8}JS)l{J(7ouytyd_JwmChJq}i4y{Y+yJrhH7yEr`2x?umMJeJ7Tyd0lyz1|Am zyid0Vyd>Z>z5mn2y~jdMyf%W2y|dsuyBmkvyg*}uJfJX$yQ(vgz4L;2yHn1nJ!F8? zz0pS{JVBeqylcg~y@lVpyb>ZgK50lEJeV3{J=XD>Jg!92JZ({AJ#aLkJ?@^ zJv{3dyao!-yyc6#J;^POyzsEwJU{~@y_1IXz5Umfy+f&6Jtd1YJ-WHgJeyS+yc=wq zy`#(tz1If{y~nJAy;Pd0Jsf|;JoE3JyeKC}Iy($pJo7SWx+kkNJsR{GJyF;*J%;&h zyb4hRy%o{|yu6@hJQxWLz5M)Ry#e$8yd{urJ)?oZyoxueJySl=JhXfDJ$-~Jy$Q&) zyzbBjJ!no4z0+ZhJ%NrVz0FENJesxEJx!n0y>E5sJtoB1yyOLey*)FBy$+inJ9?3L zy_KqiJ)+CVJmNA>J%D5EyDWv+yh^sqyL~~PJ?Ch`_Jp>B>J;75|J&BNAJtD6bJskLf zJqp<4JlO66y>k@YJoTgky&fj8z4ymUy*Wg&JisNUJbBwVJ=iMqxq(iRJY{3Ey{qI) zJv;A~JnaSky2I(xJahJ)#jwy)xgfy`ikp zyadI{Jl#77z3`6dJzk!xJi_y=v8y?;%kyioQdy%G@IJT2YhysUD8y$uK?y?M8xz4lZ+ zy&oZAJx5+(y{;cEyE)Avy^HxUyt?`KawJ4p~Jy+|f?J>Brey?DTMxy`h6y(a{OynFs;JhdM~y^zpRJr<{sy(MRf zJXZISJ?coay|jJ~JviKgJv_9{JvaEuJ%HN8y=i2VJf5ICyY+K|y#WIaydZbtJt2A> zJtZSdy_8mwJ&E!(J#TZ;J(tN+y*Kr6JgY>BJ*^*PyxZfez52iBy|+RMJy)ExJ@-kt zJroJzJ<=(ty@l2aJs#H_JjD*}J1Y62JuQ!%ySItMya)yFxr*Z_Jv_rFJ$%z|JQ@$y zy`#pNyLdN}y&U_QJq3H1ykBi;Ju*rVJyt4%yn!TRy`t%{J4Qk#zS;x`Jx!klJxU5d zy!*KtzEm#VJX*bCJ^s$iyaWxfy8`$iy?q5(y(KL2y#T1lJ7ObXJu`HDy&Sj+z50j; zJ`^U6yfq*6JdIYdyi9lmKF?>4JQJXp9lyoO`Sxn20r zybUM=zC54Ex={Z)J>JdwJ(Rr4y$pdKyf6C)J&=#?JvS(kJ6((*yyOi;yNP#AJq%F~ zJwf0Dy#lWeKK}o-JtM0ny$&-PzN?(4J-~GqJmYJGJnH;pyw`|pJRa8Ex0Hq*y=Upv zJZIYrJ!_59JMDHCzLyZgyw7feJO^4dJq>gWJ(o{Ey&PPAJkQAHJIn&9yfD=!Jr-QC zJU#B8y;&Pvy`2muy^VcFJS5;sJ^RQgy^;dvJZm+AJvQSSyuJ0iy*~Kqyk#_$y=xUu zyq+v?Js}7JJtbl3JXkJ2y~*RbJegL|J&y!>JY;ljyd`4;Jdz3F`Ey^BadJUUlgJYIUEJ+2G#ywS*Wy*;KDJ%$>hJ^Lq0J#M;_I}y_f zz5fF^J!khlJ_=qxJ^JRHy_p53JxE~{z3;upyIR%EyoE>}hy>DLMJr;Yuytp-mz12ZByR2wLJ*Ef8 zJ@^FyJ%j3!Jzs9oJX8A_y#rGAyC`uCy|yVxz4616yp2c?Jl{Lky`iNiJ*(`WJim

lEy;b2Vy$&~$ykL@mJs{ogyW|X&Jq(k~ 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

-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 uasZCwwUTX^f+HT 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

=e&4-)?=`*e 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�orn^~}BLFf+X^xY;}T{}w&U`~|&9v2r~y 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 z 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 z0CPV80DV6I07pLn00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000009HQ$0DV6I07pLn0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000009HQ$0DV6I07pLn000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000009HQ$0DV6I0BSz~03kmB03kmB03kmB03kmB z0N6bM002Ay0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000009HQ$0DV6I0DV6I0DV6I0DV6I z0DV6I0DV6I0DeCJ02n_20N6bM06;td00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000009HQ$0DV6I0DV6I z03kmB0PsEl0PsEl0PsEl0DeCJ0DV6I0DV6I0Ng$R0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000004zQL z0LDH500000000000000000000000000DwLK069MZ0DeCJ0DeCJ0O~#f0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000N6eN0Ej*S06ISa0DV6I0D38z0H{3x z00000000000L(rB0DV6I0ChhA0Ej*S00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000002G!0BSz~0CPV8 z0LVQ60000000000000000HQts0DV6I0DV6I069MZ0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000003<#D z0DV6I0B}D50000000000000000H8ep0PH>h0DV6I0DV6I098K#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000003<#D0DV6I0CGP703<#D03<#D0K`53082jr0DV6I0DV6I0ChhA0NOqP00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000003<#D0DV6I0DV6I0DV6I0DnIK0DV6I0DV6I0DV6I0CqnB0N6eN z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000031F50C+zD0DV6I0DV6I0DnIK0DV6I0C+zD07X9l z0GvJm000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000003kmB0DV6I0DV6I0DnIK07O3k z0GK`i000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000NOqP0DnIK01ZC? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000001!U_ z0DeCJ05LxR0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000009QW%0DeCJ0BJt}0H!_w0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000017_<0DV6I0DeCJ0DeCJ0DV6I08T#u0H8ep00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000MI=E0CGP70DeCJ0DM0H0A)V_0DM0H0DeCJ07*Xp05ClO00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000060GY0DeCJ0DeCJ00}<;000000K`530DeCJ0DeCJ z0Q^1x000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000008>8z0DeCJ02e<1002Ay00000002Ay z002J#0DeCJ0B%1300=$+000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000008Bps0B}D50O&mc00000 z000000000001!O@0CztC0DeCJ0AxM@00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000001Q3=0JuE> z000000000000000000000000000}<;0DeCJ0Qx=v0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000Fpic0DeCJ08c*v000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000AM`;0Bb)00C_(E00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000N6bM0CYY8000000000000000000000000000000000000I)p(0Bt`2 z0C_(E000000000000000000000000000000000000000000000000000000000000 z00000000000Lnf909`)-0C7J60D30BJt}031I6000000000000000000000000000000000000000000000 z000000Qfxs0Kz^105d-T0DeCJ09`)-03AO70GvJm0GK@h00000000000000000000 z000000000000000000000Kh!}0Kh!}00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000001!O@0JuH?0JuH?05LxR07gFm0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000001rO^0DeCJ0DeCJ0DeCJ06ISa z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000DwFI0N6eN09ii(0DeCJ0DeCJ z0DeCJ002G!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000005ClO024m|0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ002G!000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000003$yD0DeCJ z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ002G!00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000008l*u02e<1 z0DV6I0DeCJ0Bb)006jkd0O&pd0ChhA0DeCJ002G!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z03AO70DeCJ0DeCJ0D38z0DeCJ0DeCJ0FFKY0000000000000000O&pd0DeCJ0DeCJ z002G!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000008&2y0DeCJ0DeCJ082jr0H8bo0000000000000000O&pd z0DeCJ0DeCJ002G!00000000000000000000000000000000000000000000000000 z000000000000000000000N^|T0J1&+0CGP70DeCJ08Bps002G!000000000000000 z000000O&pd0DeCJ0DeCJ002G!0000000000000000000000000000000000000000 z00000000000000000000000000000007gFm0DeCJ0DeCJ0DeCJ0Kh!}0000000000 z000000000003ba804hHK0DeCJ0DeCJ002G!000000000000000000000000000000 z000000000000000000000000000000000000000007gFm0DeCJ0D300000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000003JU80DeCJ09!u*0P;Qn0P;Qn0P;Qn08Bmr0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000AxP^0DV6I0DV6I04_fO09-!+0DV6I04P5I0N6eN08l;v0Khx| z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000AxP^0DV6I0DV6I0E9jO0FXTZ0MI=E00ce&08u{x z0C7J604zTM03ba800000000000000000000000000000000000000000000000000 z00000000000000000000000000000001Q3=0Bk=10AxP^00}<;05ClO0000000000 z000000JuH?0DeCJ0DV6I04P5I09-x*00000000000000000000000000000000000 z00000000000000000000000000000000000000000N6eN0DV6I04+ZN0000000000 z0000000000000000000006RYb0D3w0B1h{08T#u07gFm0GvJm08&2y0DeCJ046^G00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000N6eN0DC_G07O3k09-x*0DeCJ002Dz0LDH5000000MI=E08c*v z0AoJ@0H{3x0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000075?i07*Xp0FXTZ03bd90DeCJ000000JuE>00000 z000000JuE>0DeCJ0OURZ000000000000000000000000000000000000000000000 z00000000000000000000000000000003Sa90CGP70Ej*S00000000000000000000 z0000000000000000000000ut*0Bb)000000000000000000000000000000000000 z000000000000000000000000000000000000DwFI07yRo0OCFX000000000000000 z0000000000000000000000000000000Bk-00CPV801!R^00000000000000000000 z0000000000000000000000000000000000000000000000N6eN0DeCJ0PsBk00000 z00000000000000000000000000000000000000000Bk-00B}D50Kh!}0000000000 z00000000000000000000000000000000000000000000000000000000AxP^0Ny?T z000000000000000000000000000000000000000000000000000Bk-00C7J60PsBk z0000000000000000000000000000000000000000000000000000000000000Qfxs z0CGP70BAk{000000000000000000000000000000000000000000000000000Bk-0 z0BSz~000000000000000000000000000000000000000000000000000000000000 z000000G>Vo0A@b`0JuE>000000000000000000000000000000000000000000000 z000000B}A40Bb)000000000000000000000000000000000000000000000000000 z0000000000000000Iog&09HQ$0000000000000000000000000000000000000000 z00000000000000002My~0BSz~0000000000000000000000000000000000000000 z000000000000000000000000005CrQ09HQ$000000000000000000000000000000 z000000000000000000000E#{U0DeCJ00%z+000000000000000000000000000000 z0000000000000000000000000000000000005CrQ09HQ$00000000000000000000 z0000000000000000000000000000000OURZ0AD`<0FXTZ00000000000000000000 z0000000000000000000000000000000000000000000000Lnf90A)V_0JuE>00000 z000000000000000000000000000000000000DwIJ09ro)07O3k000000000000000 z00000000000000000000000000000000000000000000000000000000CYY80D3w z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000006;we02x030DeCJ0D%90003G)000s{006)|0000000000005Rg z003q`002Zk002Nf00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000007QD003w|004eJ003-1003)0 z003-1004VG003e?004A8000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000007uM0090z z004GB004eJ004eJ002-w002Nf0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000007cH004bI004bI z001{X000y}000y}0081X006K(0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000002Ng z004YH004YH004YH004YH004bI004YH001FB000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000008hk002!t003t{003t{0028b003-1004YH00447001aH000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003Y;002`z004YH005{y00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002He004YH z005{y000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000z008zr000y}001sO001RF002@y z004bI003w|0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000137004YH004YH004YH z004YH004bI004YH004JC004YG0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003A%004bI004YH z004YH004YH004YH004bI004YH004YH001;U000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000007iJ z004bI004YH004YH004YH003e?0000#008hl003P-003t{007`U000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000059Z001RF004YH000|5005dk006)}0000000000005>w004YH001sO00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000m@002xs z004bI0059Z0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000006W;004YH0022Z000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000!003w|004SF003w{000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000003-0 z004kK004kK003A%000000000000000000a>004bI004YG00000000000000000000 z000000000000000000000000000000000000000000000000000000000000008(t z002`z004PE004YH004YH004JC002`z00168004MC001XH004bI004YG0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z004MC004eJ004bI004bI004bI004bI004hK004bI004bI004bI004bI004hK004YG z00000000000000000000000000000000000000000000000000000000000000000 z00000000000022Z004bI003Y=001aI001aI001aI004bI004YH004YH004YH004YH z004bI004YG0000000000000000000000000000000000000000000000000000000 z000000000000000003-0004PE004bI004GB003V<0090z0090z004bI004YH004YH z004YH004YH00416003w{000000000000000000000000000000000000000000000 z0000000000000000000000000005{x002fm004bI004YH004YH004YH004YH004bI z004YH004YH003-1000p`000a=0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000059Z007WF000v|002Kf003D( z004YH004bI004YH000|5004wO0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000O+001#R003e?004eJ004eJ004eJ z004hK004eJ008nn00725001aH004kI00000000000000000000000000000000000 z00000000000000000000000000000000000000000000z001^W004bI003@3001sO z006c=003A%004A8003h@004bI004bI004bI007250000000000000000000000000 z00000000000000000000000000000000000000000000000000003}4004bI004bI z005vq00000000000000000000000<10037%004bI004bI008Db000000000000000 z000000000000000000000000000000000000000000000000000000000000001OD z004bI004bI004$Q0000000000000000000000000008hk004PE004bI001UG00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004kI002)v004bI007WF00000000000000000000000000000#004bI004bI z001;U000000000000000000000000000000000000000000000000000000000000 z00000000000000000000002Ng004bI0028b00000000000000000000001;T001IC z004bI004bI008Db00000000000000000000000000000000000000000000000000 z000000000000000000000000000000001OE004bI004SF0059a0000000000001~X z002%u004PE004bI004bI008Db0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001yO002)v004bI004DA008tp z0009&004eJ004JC001&S004SF004bI008Db000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000008hk0031# z004bI004bI004bI003b>005dk003}3004JC004bI008Db00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000z006i>001~X001~X003Y;00000007`T004JC004bI008Db0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000004|W004eJ004eJ008Jd z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005{y004bI z004bI008Db0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000s{004bI004bI006u`000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000059a004bI004bI0081X00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000004|W004bI004bI008Db0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000004|W004bI004bI008Db000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000004+S004bI004bI001LD00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000004GB004bI z002in0000y0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002%u004bI004bI003}3000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000787004bI0000#0000y00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000O-004eJ003P-004A8003Y<006i> z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000m@002=x004bI004bI004bI z004bI003k^002=x002@y008bj0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000062!004bI004bI z004bI004bI004bI004bI004bI004bI0031#000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002-u001dJ z003G)005>w000a=006W;000I*001pN000F)000I*005Le00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001OE004bI000#~00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001OE004bI0006%00000001yO008(s008(s008(s0059Z0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000001OE004eJ003z}001~Y002-w004bI004bI004bI003b> z000d?000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000787004MD004bI004PE003n_0031#0031# z003=2004bI004SF003$~004YG0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002-v003}4002}z006)} z0000000000000a=007E9003G)004bI002@y001yO0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002ln004GB004bI000<2003}30000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000006o^004bI004bI005Xi z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000006)|000U< z004eJ003Y=002Ne00000000000000000000000000000000000000000000000000 z000000000000000004kI000y}000|50000y000000000000000000000000000000 z00000001yO003V<004bI007WF0000000000000000000000000000000000000000 z00000000000000000000000000009&004bI004bI008bj00000000000000000000 z00000000000000000000003-0004bI002Wj0059Z0000000000000000000000000 z00000000000000000000000000000000000001RF004eJ004eJ002fm001~Y007`T z000000000000000000000000000000002-u003D(004eJ004qM000000000000000 z000000000000000000000000000000000000000000000005Le00478004bI002Ti z003A%005vo00000000000000000000000000000000000007)R004bI004kK00000 z000000000000000000000000000000000000000000000000000000000000001UG z004eJ004VG003$~000a>006{3008Jc0000000000000000000000000005#s004eJ z00106000000000000000000000000000000000000000000000000000000000000 z00000008(s00199004bI004bI004bI004eJ00416002Ed001UG006c=006c=006c= z001>V004eJ001OE00000000000000000000000000000000000000000000000000 z00000000000000000000002Nd004A8001>V003A&004eJ004eJ004bI004eJ004bI z004bI004eJ004bI004JC006)~0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000m@006i?001pN004bI z004bI004bI004bI004bI001{X006u`00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000007WE002ln00105007iJ001~Y004PE003A&003A&004PE003q`003)0 z003}5006{30000000000000000000000000000000000000000000000000000000 z00000000000000000000005dk003b>004eJ004eJ004eJ004eJ004eJ004eJ004eJ z004eJ004eJ004JC0037%000d?0000y00000000000000000000000000000000000 z0000000000000000000000000005vo00447004eJ004eJ004VG002}!000a>000a> z000a>0062!0000!0000!002Ti004bI004eJ007`T0000000000000000000000000 z000000000000000000000000000000000000053Y004eJ004eJ001OE0010500000 z00000000000000000000000000000000000001sO004eJ001&S000000000000000 z000000000000000000000000000000000000000000000008Db004eJ004eJ007uM z000000000000000000000000000000000000000000000006o^004eJ004GB003k@ z00000000000000000000000000000000000000000000000000000C&003b>004eJ z001>V002Nd000000000000000000000000000000000000000000000001LD004eJ z003b>0000z00000000000000000000000000000000000000000000000000002Nf z00447004eJ007iJ000000000000000000000000000000000000000000000006)| z002Ed004eJ003S;00000000000000000000000000000000000000000000000000 z00000005dk004eJ004eJ004qM0000000000000000000000000000000000000000 z00000005Le004eJ004eJ000U<0000000000000000000000000000000000000000 z000000000000000005dk004eJ001aI006)|000000000000000000000000000000 z0000000000000000000#004eJ004eJ003Y;000000000000000000000000000000 z0000000000000000000000000005dk004eJ002`z0000000000000000000000000 z0000000000000000000000000002%u004eJ003w|004kI00000000000000000000 z00000000000000000000000000000000000005dk004eJ008_x000000000000000 z000000000000000000000000000000000m^004MD004eJ000+1000000000000000 z000000000000000000000000000000000000000000000004|W003k^007`T00000 z0000000000000000000000000000000000000000002lo004eJ004eJ000g@00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001C9003G)004eJ002`z z003}3000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001aI004eJ z004eJ000v|0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005Xh z00447004eJ003k^004kI000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000003}3003h@004eJ002in0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000004$Q004eJ004eJ005Rg000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003=2004eJ002lo005vo00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000003`4004eJ005#s000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000003`400137007`T00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001mM000#~0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000006Q+004YH000y}000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000008(t004JC002-v00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002rq002=x000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000105003z}000X=00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000009&004eJ0000#0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000009&004SF002Bb z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000009& z003G)000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000001RF0037%00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002Ed0009&0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003M+0009&0000000000000000000000000006K( z0006%0037%004eJ0000#000000000000000000000000000000000000000000000 z000000000000000000000000000000000C&00416000|500000000000000000000 z005Le0037%004eJ004eJ004eJ003G)00000000000000000000000000000000000 z0000000000000000000000000000000000000000001C9004DA003G)0000000000 z00000005Le004PE003=2001jL008zr004DA004VG002Zj00000000000000000000 z0000000000000000000000000000000000000000000000000000000001jL004SF z006)~00000003k@004GB004hK000v|0000000000000a>004eJ002-v0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0009&004eJ003@3000<2002-w004eJ001jL0000y0000000000000v|004MD001mL z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000<1003P-004eJ004eJ004eJ004eJ005#s000m^006>1000C(004MD z002%u000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000<1003P-004eJ004eJ004eJ004eJ004eJ004eJ z004eJ003b>001aH00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001~X004PE004eJ0041600447 z00478003-1001dJ008hk000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002He004JC z006K(006K(007uM00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z007iJ004DA0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000081X001mM0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000<2002}!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000<2000+100000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000000<2 z000+1000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000<2000+100000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003z}007=T0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000005*u003Y=005vp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002ur001IC0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000001yO0031#007KB000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002xr004YH005vp00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001pN0009& z0000000000001yO006i?005{x0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000001OD z004bI002ln0000000000002xr004YH007KB000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000007KB004eJ002ln0000000000006i?004bI004eJ001mM004MC0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000g@0031#001C8004MC001{X004bI004YH004bI004YH007KB z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002ur004eJ0009&004eJ004bI003$~004bI003Y= z005vp000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000002ur004bI004YH004bI0006%008hk z002}!002ur0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001{X004hK0031#005*u z00000002xr004bI003Y=005vp0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005vp002ln z001C80000000000001C8001mM002ur00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007QD004hK002ln00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000004A8001mM001C80000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0068$004hK003k@00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000068$004hK0087Z0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000068$004hK001gK000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000003k@004hK001gK00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000068$004hK001gK0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003k@004hK003e? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z004hK002fm0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001gK004hK000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000001gK004hK003k@000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000001gK004hK003k@00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000001gK004hK0068$0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001gK004hK00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000087Z z004hK008Jc0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000068$004hK0068$000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000068$004hK0068$00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003k@004hK002fm0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003e?004hK0068$0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001gK004hK000d? z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000068$ z004hK004hK0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002fm001gK000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000003G)004bI004bI004hK004bI004bI000j^00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000005{y003-1004VG004VG004bI004VG004VG002!t001OD00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000m_004VG004VG004VG004bI004VG004VG004VG z0053Y000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000005>w003-1004VG004VG004bI004VG z004VG002xs001OD00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000003D(001pN0053Y z004bI004VG004VG000g@000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002}z004hK004bI004bI000j^00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000004YG003P-004bI004VG004VG000g@0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003w{003t{004VG004bI003q`002Ed005vp000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003D(004VG004VG003P-004A8000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007cH00416004VG004VG001;U0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000005Fc004bI004bI004bI004bI001^W z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001yQ004VG004VG004VG z004VG001;U0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000006u`003D(004bI004VG z004VG004VG004VG00786000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000004kJ001gK004VG z004bI004VG004VG004VG004VG007)R002Bb000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000000y| z004VG004VG004bI004VG004VG004VG004VG004bI002@y001;U001;U002xr00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000y|004bI004bI004hK004bI004bI004bI004bI004hK004bI004bI004bI z004bI004hK007uN00000000000000000000000000000000000000000000000000 z000000000000000004kJ001dJ004VG004bI004VG004VG004VG004VG004bI004VG z004VG004VG004VG004bI007oL0000000000000000000000000000000000000000 z000000000000000000000000000000007!P004VG004bI004VG004VG004VG004VG z004bI004VG004VG004VG006)~006E&006i?000000000000000000000000000000 z0000000000000000000000000000000000000000004MC000g@001vP004VG003)0 z002Ed004VG004bI004VG004VG004VG0053Y000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005{x z0053Y004A8008(s0053Y008(t004VG004VG004VG0053Y00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002Nd008Db004hK004eJ z0022Z006i>0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001C8001RF004bI z004eJ004bI004bI002Zk000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000003Y;001~Y z004bI001yQ006i?0053Y003G)004A9000y|000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000004+R z001;U004A9008hl0000y0000000000001C9004GB003A%006)|000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000001gK004A9005jm0000000000000000000000000002Zk003S;006u`00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002xr004GB007`V000000000000000000000000000000002Zk004bI z001OD000000000000000000000000000000000000000000000000000000000000 z00000000000000000000008zr003e?003}300000000000000000000000000068$ z004GB000?3006)|00000000000000000000000000000000000000000000000000 z000000000000000000000000000000008zr002xs0000000000000000000000000 z003w{004JC002rq000m^000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008zr004SF007cH0000000000 z00000008Jc003b>004GB001OD0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000006>1004bI004VG z007QD00000007uM003S;004bI006>100000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0062!003}5004eJ001#R003b>004hK001*T000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001OD002xs004bI004bI004eJ005Fc00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000v|004bI004bI004eJ001gK007`T00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000z0034$004bI001aI002%u004bI z002ur007WE0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000008(t004bI000?30000y z005vp002xs004bI002!t006)}0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000002-w004bI z008Jc0000000000004kJ0087Z004bI004qM000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000002Ne z003k^001#R0000y000000000000000004kI002ur0006%00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002ln004bI007iJ000000000000000005vo007E9003n_007)R0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000a=004A9004A90028b000|500168003@3004bI00478000a= z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000002-v002`z004bI004bI004eJ003P-007=T z00786000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000003k@004bI007QD00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000003k@004YH004YH005Xi00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000m_004YH004YH0081X0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000001dJ004YH004YH0081X z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000004kI001*T004bI z004bI0087Z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z004YH004YH004YH0081X000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004wO004YH004YH004YH0078600000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000d?004YH004YH004YH000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000d?004bI004bI002He00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000d?004YH004YH000X=0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000d?004YH004YH000X= z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000d?004YH z004YH006W;0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002xs004bI004bI007`U000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000004bI004YH004YH007`U00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000004bI004YH003Y=005Xh0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000007E9004bI004YH001aI00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000087Z004hK004bI003Y<0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000081X004bI004YH003Y< z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005Xi004bI z003z}000y|0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000?3002Zk00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000005vo002in007WF0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000005>w004eJ007QD z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000y002=x z004eJ007QD0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002Nf004eJ004eJ007QD000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000028b004eJ006K)0000z00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000003-1004DA001aH000000000000000000000000000000 z000000000000000000000000000000000000000000000004mhe*gdg0000000000 z00000000000000000000000000000000013J^%oCKL7wrKL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000001(J^%oIKL7x#J^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002=J^%oIKL7wc zJ^%m!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000f zKL7xJKL7wcJ^%m!00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000WJpcfHKL7xJKL7wcJ^%m!0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000WJpcfHKL7xCKL7wAJ^%m!0000000000000000000)J^%nUKL7w? zKL7w?KL7wOKL7w6J^%m!000000000000000000000000000000000000000000000 z000000000000000000000000WJpcfHKL7wuKL7v#000000000000000JOBXZJ^%n} zKL7xJKL7xJKL7xJKL7xJKL7w;KL7yuJpcdz000000000000000000000000000000 z0000000000000000000000000000000001hJOBViKL7wuKL7v#00000000000002E zJ^%oIKL7xJKL7x7KL7wSKL7wSKL7xDKL7xJKL7yEJ^%m!00000000000000000000 z0000000000000000000000000000000000000000000000000fKL7xFKL7wQJ^%m! z000000002?J^%oIKL7x7KL7xZJ^%m!0000000002KL7xJKL7wJKL7v#0000000000 z000000000000000000000000000000000000000000000000000000000000KL7xJ zKL7wHKL7y0JOBUy0000;KL7xJKL7yWJ^%m!00000000000001ZJ^%oIKL7w|KL7yW zJOBUy000000000000000000000000000000000000000000000000000000000000 z0000?J^%oCKL7xJKL7v?KL7xjJpce@KL7xJKL7wXKL7xdJ^%m=J^%pZJ^%oCKL7xJ zKL7wJKL7v#0000000000000000000000000000000000000000000000000000000 z0000000000000000000tKL7x8KL7xGKL7xCKL7xJKL7xJKL7xJKL7xHKL7xEKL7xJ zKL7xJKL7xJKL7xnJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000000000000000002yJ^%o9KL7xJKL7xJKL7xJKL7xKKL7xJ zKL7xJKL7xJKL7x3KL7v}KL7w6J^%m!00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001-J^%nTKL7xJKL7xJ zKL7w`KL7w9KL7w6KL7xPJ^%pdJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001VJ^%nGKL7wHKL7wH zKL7wHKL7wZKL7wSKL7xzJ^%m!0000000000000000000000000000000000000000 z000000000000000000000000000000000000002sJpce6KL7wlKL7xBKL7xGKL7xJ zKL7xJKL7xJKL7xJKL7xJKL7xJKL7xIKL7v$KL7v#0000000000000000000000000 z0000000000000000000000000000000000000000000000000mJ^%oIKL7xJKL7wg zKL7yIJ^%ogJ^%oSJpcfRJpcfRJpcfRJpcdzJ^%n@KL7w@KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000001>JOBWS zJ^%prJ^%o)J^%m!00000000000000000000000000001*J^%oDKL7wxKL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002sJpcf0KL7xJKL7x} zJ^%m!000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001}JpceoKL7xJ zKL7wKKL7v_Jpcdz00000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002kJpcd)KL7w| zKL7xJKL7wcKL7v_Jpcdz000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000JOBWsJ^%nFKL7xJ zKL7xJKL7xJKL7xJKL7x8KL7wVKL7y2J^%oqJOBUy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000HKL7xJ zKL7xJKL7xHKL7xAKL7xAKL7w@KL7wMKL7xBKL7xJKL7w8KL7wgJOBUy0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000ZKL7xGKL7v+KL7w+J^%m!0000000000000000000mJpce&KL7xJKL7xXJ^%m! z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001FJ^%oJ zKL7w7KL7v#0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000cKL7xJKL7w7KL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000GJpce!KL7xJKL7xjJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002aJ^%oIKL7w+KL7yWJOBUy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000013J^%n|KL7xEKL7xHJ^%m!00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000001rJ^%oCKL7xEKL7yIJ^%m!000000000000000 z000000000000000000000000000000000000000000000JpcdzJOBUy0000000000 z000000000000000000000000000000Jpcg6J^%oCKL7x5KL7yIJ^%m!0000000000 z000000000000000000000000000000000000000000000000000002iJ^%nPKL7yK zJ^%plJpcfZJpcfZJpcfZJpcfxJpcgIJ^%nhKL7wyKL7xJKL7w|KL7wIJ^%m!00000 z0000000000000000000000000000000000000000000000000000000000000002` zJ^%oIKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xJKL7xAKL7xdJ^%m! z00000000000000000000000000000000000000000000000000000000000000000 z0000000026Jpcg6J^%nFKL7wGKL7wGKL7wGKL7w}KL7w+KL7wGKL7xpJ^%ooJ^%o~ zJOBUy000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002MJpce|KL7y4J^%m!000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000KJ^%oHKL7wCKL7v#00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000KJ^%oHKL7wPKL7v#0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001vJ^%nKL7xI zKL7xXJ^%m!0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000` zJ^%oHKL7x9KL7wAJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000?J^%oGKL7wrKL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000OKL7xIKL7v@KL7v#000000000000000000000000000000 z0001xJ^%n1KL7w2KL7w2KL7xDJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000OKL7xHKL7yCJ^%m!00000000000000000000 z0001ZJ^%nWKL7xIKL7xHKL7xIKL7xHKL7wrKL7xrJpcdz00000000000000000000 z000000000000000000000000000000000000000OKL7xIKL7yCJ^%m!0000000000 z000000001_J^%oIKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJKL7yWJ^%m!0000000000 z0000000000000000000000000000000000000000000000000OKL7xHKL7v@KL7v# z00000000000000aJ^%o7KL7xIKL7xHKL7w}KL7yUJ^%pVJ^%n{KL7xIKL7w1KL7v# z00000000000000000000000000000000000000000000000000000000002EJ^%oH zKL7w~KL7wsJ^%m!0000000011KL7xIKL7w=KL7xtJ^%m!000000000mJpcezKL7xJ zKL7w1KL7v#0000000000000000000000000000000000000000000000000000000 z0000WJpceyKL7xIKL7w|KL7wEJ^%ouJ^%oHKL7xHKL7yCJ^%m!0001ZJ^%m?KL7w# zKL7xHKL7xIKL7xXJ^%m!000000000000000000000000000000000000000000000 z0000000000000000001_J^%oJKL7xIKL7xJKL7xIKL7xJKL7xIKL7w~KL7w}KL7xJ zKL7xIKL7xJKL7xIKL7ysJ^%m!0000000000000000000000000000000000000000 z0000000000000000000000000000000000iKL7xHKL7xIKL7xHKL7xIKL7xHKL7xI zKL7xHKL7xIKL7xHKL7xIKL7xJpcgUJ^%nfKL7w}KL7w|KL7wgKL7w1KL7v&KL7ymJpcdz000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000OKL7w}KL7xJKL7xI zKL7w~KL7x@J^%m!00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001_J^%nqKL7wgKL7w1 zKL7x>J^%nnJ^%oYJ^%m%KL7v#0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001_J^%oIKL7w} zKL7wEJ^%m!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001_J^%o7 zKL7w#KL7ymJpcdz00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000OKL7xIKL7wDKL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000aJ^%n|KL7w!KL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000002?J^%o8KL7xtJ^%m!000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001}Jpce-KL7wrKL7v#0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000002uJ^%oHKL7v@KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000%KL7xHKL7yCJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001fKL7wgKL7v# z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000001e zKL7w|KL7v#00000000000001_J^%pBJ^%nWKL7wrKL7wrKL7v@KL7yCJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000OKL7xIKL7w2KL7w2KL7xJKL7xIKL7x9KL7wrKL7wXKL7v@KL7w$KL7xI zKL7whKL7xZJ^%nDJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000OKL7xHKL7xIKL7xHKL7w1KL7yUJ^%n9J^%m!0000000000 z0000WJpceKKL7xIKL7xHKL7wJpcfGKL7w1KL7v#0000000000 z000000000000000000000000000000000000000000000000000000EKL7xJKL7w# zKL7v#00000000000000000000000000000000000000000001}JpcfIKL7w#KL7v# z0000000000000000000000000000000000000000000000000000000000000001> zJpcezKL7xHKL7wrKL7yqJ^%m!0000aJ^%pBJ^%pBJ^%pBJ^%pBJ^%prJ^%n;KL7w} zKL7yUJ^%m!0000000000000000000000000000000000000000000000000000000 z00000000000001}Jpcd>KL7xJKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJKL7xIKL7xJ zKL7w}KL7wEJ^%m!00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001vJ^%n0KL7wMKL7w!KL7w1KL7w1KL7w1 zKL7w1KL7woJ^%plJpcdz000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zJ^%n`KL7xJKL7wbKL7v_KL7wgJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000001BJ^%oHKL7xIKL7xIKL7xIKL7xIKL7yeJ^%oyJpcdz000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000001BJ^%oHKL7xIKL7xIKL7xIKL7xIKL7xJKL7v{KL7x9J^%m! z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000026JpcetKL7xIKL7xDKL7yoJ^%n3KL7xGKL7xJKL7xI zKL7xEKL7yyJ^%m!00000000000000000000000000000000000000000000000000 z000000000000000000000000000026JpcetKL7xIKL7xIKL7x7KL7v#000000002` zJ^%oIKL7xIKL7xIKL7xBKL7x{J^%nfJpcdz000000000000000000000000000000 z000000000000000000000000000000000000000AKL7xIKL7xIKL7xIKL7ygJ^%m! z00000000000002&J^%n?KL7xIKL7xIKL7xIKL7x{J^%m!00000000000000000000 z0000000000000000000000000000000000000000000000000|KL7xIKL7w@KL7xz zJ^%nPJpcdz0000000000000000001RJpce8KL7xIKL7xIKL7xBKL7xnJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000|KL7xF zKL7wDKL7v#0000000000000000000000000000000000SJ^%nTKL7xIKL7xIKL7xE zKL7xrJ^%m!000000000000000000000000000000000000000000000000000001} zJpce-KL7w{KL7v#00000000000000000000000000000000000000000000?J^%oH zKL7xIKL7xIKL7wxKL7v#000000000000000000000000000000000000000000000 z000000001nJ^%oHKL7v*KL7v#0000000000000000000000000000000000000000 z0000`JpceFKL7xIKL7xIKL7xDKL7yKJ^%m!000000000000000000000000000000 z0000000000000000000oKL7xJKL7yqJ^%m!000000000000000000000000000000 z000000000000000000000000vKL7xJKL7xKKL7w-KL7xjJpcdz000000000000000 z000000000000000000000002MJpce^KL7xIKL7yoJ^%m!00000000000000000000 z0000000000000000000000000000000002kJpcf2KL7xIKL7xIKL7v(J^%m!00000 z00000000000000000000000000000000008J^%oHKL7xIKL7yoJ^%m!0000000000 z0000000000000000000000000000000000000000000000000CKL7xIKL7xIKL7v( zJ^%m!000000000000000000000000000000000000001hJpcezKL7xIKL7x3KL7wY zJ^%m!000000000000000000000000000000000000000000000000000002uJ^%oH zKL7xIKL7v(J^%m!00000000000000000000000000000000000000000000PKL7xI zKL7xIKL7wMKL7wgJpcdz000000000000000000000000000000000000000000000 z0000$JpcfGKL7xIKL7v(J^%m!0000000000000000000000000000000000000000 z0001nJ^%oHKL7xIKL7xIKL7wzKL7w=J^%m!000000000000000000000000000000 z000000000000008KL7xIKL7xIKL7v(J^%m!000000000000000000000000000000 z00000000000002MJOBVuKL7xIKL7xIKL7xIKL7x3KL7yEJ^%m!Jpcdz0000000000 z000000002MJOBVdJpcg4J^%o6KL7xIKL7w&KL7xTJpcdz00000000000000000000 z00000000000000000000000000000SJ^%n9KL7xIKL7xIKL7xIKL7xIKL7wJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000%KL7xHKL7w#KL7wAJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000001fKL7xIKL7wXKL7v#000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000002?J^%oHKL7xHKL7x9J^%m!00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000mJpcezKL7xJKL7wgKL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000002EJ^%oGKL7xIKL7w1KL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000jKL7xIKL7x9KL7wA zJ^%m!000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000001eKL7xH zKL7wrKL7v#0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0001gKL7xIKL7v@KL7v#000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001eKL7xHKL7yCJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001gKL7xIKL7yEJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001vJ^%n{KL7x9J^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0001*J^%oCKL7xDKL7wPKL7wiKL7xJKL7yuJpcdz0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000001(Jpce`KL7w_KL7v-KL7wMKL7x0KL7xIKL7wvKL7w6J^%m!0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000JKL7w-KL7xzJpcdz000000001vJ^%oHKL7xJKL7x0KL7xh zJ^%m!000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000`Jpce_KL7woJ^%m!00000000000001NJ^%oHKL7w1 zKL7wzKL7w>KL7wgJpcdz000000000000000000000000000000000000000000000 z0000000000000000000000000000000002eJ^%o3KL7y0Jpcdz000000000000017 zJ^%oGKL7wcKL7w=J^%n_KL7y4J^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000002!J^%n*KL7y0JOBUy00000 z00000000000000wKL7xJKL7xIKL7xIKL7y2J^%m!0000000000000000000000000 z000000000000000000000000000000000000000000000000000001>J^%oHKL7w^ zJ^%m!0000000000000000000GJ^%ngKL7xIKL7xIKL7xpJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zJOBVkKL7w>KL7w6KL7xdJ^%m!00000000000001>Jpce}KL7wnKL7v#JOBUy00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000002;J^%o3KL7xJKL7xKKL7xJKL7x1KL7w=KL7xKKL7xJKL7wjKL7v# z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000;J^%nRKL7w`KL7xIKL7xIKL7xIKL7xJKL7xI zKL7v*KL7v#0000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000001RJpce4J^%oGJ^%n5 zJ^%n5J^%nrKL7ygJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000`Jpce_KL7ygJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001>JpcfHKL7ygJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001>JpcfGKL7ygJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000001>JpcfGKL7ygJ^%m!00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000001>JpcfGKL7yg zJ^%m!000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000` zJpce_KL7wLKL7v#00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000(KL7x5KL7yOJpcdz00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000PKL7xIKL7y2J^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001_J^%o5KL7wkJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000000S zJ^%n?KL7xJKL7xJKL7x5KL7wfKL7wfKL7yqJ^%o~JOBUy00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000009KL7xIKL7xIKL7xIKL7xIKL7xIKL7xIKL7xJKL7x7KL7yoJ^%oSJpcdz z00000000000000000000000000000000000000000000000000000000000000000 z000000000000020J^%oDKL7xIKL7w}KL7xTJ^%pFJpcd%J^%n8KL7xJKL7xIKL7xI zKL7wdKL7xrJpcdz00000000000000000000000000000000000000000000000000 z000000000000000000000002IJ^%oHKL7xIKL7x(J^%m!0000000000000000002c zJ^%nuKL7xIKL7xIKL7w;KL7w=J^%m!00000000000000000000000000000000000 z0000000000000000000000000000000002IJ^%oHKL7x0KL7wkJ^%m!0000000000 z00000000000002EJpcejKL7xIKL7xIKL7waKL7xzJpcdz00000000000000000000 z00000000000000000000000000000000000000000002IJ^%oHKL7waKL7v#00000 z00000000000000000000000000002UJpceiKL7xIKL7xIKL7yOJ^%m!0000000000 z000000000000000000000000000000000000000000000000000002IJ^%oHKL7wa zKL7v#000000000000000000000000000000000000001@J^%oHKL7xIKL7w#KL7v# z0000000000000000000000000000000000000000000000000000000000000000p zKL7xIKL7waKL7v#000000000000000000000000000000000000002+Jpce)KL7xI zKL7w#KL7v#0000000000000000000000000000000000000000000000000000000 z000000001FKL7xIKL7waKL7v#0000000000000000000000000000000000000000 z0000 zJpce+KL7xIKL7yAJ^%m!000000000000000000000000000000000000000000000 z0000000000000000000000000000000001FJ^%o7KL7xIKL7xAKL7wHKL7xjJpcdz z0001xJpcecKL7xIKL7xIKL7xPJ^%m!00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002aJ^%oHKL7xIKL7xI zKL7wsKL7wBKL7woKL7xIKL7xIKL7wkKL7y8Jpcdz0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000002EJpcdz zKL7xDKL7xIKL7xIKL7xKKL7xIKL7xIKL7wuKL7x*Jpcdz00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000001(J^%pzJ^%oHKL7xKKL7xIKL7v(KL7xvJ^%m!000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0002uJ^%nWKL7v#00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000bKL7xBKL7v#0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000=KL7xJKL7w^KL7w^KL7w^KL7v*KL7v_Jpcdz00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000=KL7xJKL7xJKL7xJKL7xJKL7xJKL7v( zKL7v#000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000&KL7xJKL7xCKL7v_KL7v@ zKL7w}KL7w?KL7y0JOBUy000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000002+Jpcg4J^%nT zJ^%m!000000001rJ^%oIKL7x_J^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000qJ^%oIKL7wRKL7v#0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000001hI{*MWKL7x2KL7v#000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000002=J^%o1KL7v#00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000002=J^%o4 zKL7wwJpcdz0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0002=J^%oIKL7xZJ^%m!000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000002=J^%oIKL7xZJ^%m!00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000002=J^%oIKL7xXJ^%m!0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000CJ^%nJKL7wKKL7w0KL7xRJ^%m}KL7x2KL7v#00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000QKL7xJKL7xJKL7xJKL7xIKL7xIKL7xDKL7x_J^%nPJ^%nf zJOBUy000000000000000000000000000000000000000000000000000000000000 z000000000000000000000001>JOBVnKL7xJKL7w(KL7xJKL7xJKL7xJKL7xJKL7xJ zKL7xCKL7wSKL7v_KL7v#000000000000000000000000000000000000000000000 z0000000000000000000000000000000002EJpcfHKL7wiKL7yGJpceSJ^%n|KL7xL z|9=1gem?*Jem?*Jem?*Jem?*Jem?*JNk0Gp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000P(1(uU_Sr=em?*J zU_Sr=Sw8>(em?*Ja6bS5%02)9q&@%uCO-fGZ9f12JwE^d00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z=so}dem?*Jem?*Jem?*Jem?*J@IC+l000000000000000usr|(usr|(0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000Ks*2d)II9C000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000Y(4-00000000000wmtv=dp`gGdp`gGdp`gGeLnyIcs>9C00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006zc#eLnyIeLnyIe?I^K zT|WQ-000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000{yqQzdp`gG zdp`gGeLnyI%02)900000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z{yqQzdp`gGdp`gGeLnyIcs>9C0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000{yqQzdp`gGdp`gGeLnyIcs>9C000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000{yqQzdp`gGdp`gGeLnyIcs>9C00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006zc#eLnyIeLnyIe?I^Kd_DjG0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006qW!P(A0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006qW!{yqQzeLnyIdp`gGdp`gGdp`gGdp`gG zeLnyIdp`gGdp`gG4L<+?{yqQz0000000000000000000000000000000000000000 z0000000000000000000000000000000000006qW!Qa=Cydp`gGeLnyIdp`gGdp`gG zdp`gGdp`gGeLnyIdp`gGdp`gGdp`gGdp`gGBR>EDU_Jl<00000000000000000000 z0000000000000000000000000000000000000000pgjNpO+Nqtdp`gGdp`gGeLnyI zdp`gGdp`gGdp`gG7(W02zCHi|R6hU!dp`gGdp`gGdp`gGeLnyIa6bS59zOs8m^}ah z0000000000000000000000000000000000000000000005Iz6^RzCm$eLnyIeLnyI zeLnyIe?I^KeLnyIeLnyIWj_D_Y(4-00000000000pgsTqHa`FWeLnyIe?I^KeLnyI zeLnyIRX+d#z&-!~0000000000000000000000000000000000000000LO%cidp`gG zdp`gGdp`gGdp`gGeLnyIdp`gGdp`gGC_exI00000000000000000000fIR>Jcs>9C zT|WQ-bUy$9dp`gGdp`gGdp`gG0000000000000000000000000000000000000000 zz&-!~dp`gGdp`gGdp`gGdp`gGeLnyIdp`gGdp`gG_&ops00000000000000000000 z000000000000000zCHi|{5}8x{5}8x{5}8x000000000000000000000000000000 z0000000000Ks^8eXg&Y{dp`gGdp`gGdp`gGeLnyIOg{hs+CBgPfII*I0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Ks^8eygmQ`Xg>e|7(W02zCHi|xIF*>0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000(000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000fIR>JC_exISU&&&00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000l0EEDeLnyIcs>9C0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000Y(4-0e?I^KM?U}n00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Y(4-0em?*JMn3=m0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000wmtv=em?*J@;(3n000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000Y3l$em?*J6g~g|00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000H9r6VWIq4^ zKs^8e000000000000000000000000000000kUjtaY(4-000000000000000000000 z000000000000000000000000000000000000000000000000000000000000Ks^8e zWIq4^Ha`FW0000000000000000000000000fIR>JBR>EDem?*Jem?*J>^=Yh00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000Og;breLnyIH9r6V0000000000000000000000000KR*BfeLnyIeLnyIeLnyI zc|QOEiar1U0000000000000000000000000000000000000000000000000000000 z000000000000000!ae{1eLnyI2R{G+000000000000000000006g~g|bUy$9cRv6C z5kCL`Sw8>(em?*J*ggON000000000000000000000000000000000000000000000 z0000000000000000000000000+CBgPeLnyIB0m5C000000000000000000005I+C_ zeLnyI);<6L00000jy?bYem?*J*ggON00000000000000000000000000000000000 z00000000000000000000000000000000000+CBgPeLnyIH9r6V000000000000000 z00000WIq4^RzCm$Fg*YO00000#6AE3em?*J*ggON0000000000000000000000000 z000000000000000000000000000000000000000000000Og;brem?*JWIq4^7(M_1 z000000000000000e?I^KYCiw~tUdq$H$MOXem?*Je?I^K+CBgP000000000000000 z000000000000000000000000000000000000000000000000000000006YKyIzIpa zem?*JKR*Bfh&})Su08+&Ts{B*em?*JeLnyIeLnyIeLnyIeLnyIR6hU!U_Af;00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000&^`bFem?*JeLnyIeLnyIeLnyIeLnyIem?*JeLnyIeLnyIeLnyIeLnyISw8>( zu08+&000000000000000000000000000000000000000000000000000000000000 z000000000000000pgjNpP(J_weLnyIeLnyIeLnyIeLnyIem?*JeLnyIeLnyIeLnyI zeLnyIH$MOXxIF*>00000000000000000000000000000000000000000000000000 z000000000000000000000000000000s67AxxIO>?FFybPeLnyIeLnyIBR>ED-aY^T zkUjtakUjtakUjta00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000);<6Le?I^K9X|j759X|j7 zeLnyIeLnyII6nXY00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000C_exIeLnyIcs~FDf<6EM0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000C_exIeLnyIVm|-?00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000C_exIeLnyIVm|-?0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000C_exIeLnyIVm|-?000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000006hQzM?U}neLnyIVm|-?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000usr|(eLnyIeLnyI z`aS>v000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000usr|( zeLnyIeLnyIx;_8^00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000usr|(eLnyIeLnyI#6AE30000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000{yqQzeLnyIeLnyIU_Af;000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000Og{hseLnyIeLnyIAUyy800000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000006h8m}eLnyIeLnyI%02)90000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000zUu%eLnyIeLnyI(mntH z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000%02)9eLnyI zeLnyIAUyy80000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zP(1(uSw8>(eLnyIAUyy8000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zBR>EDNk0Gp0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000T0Z~)MLz%l000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000T0Z~)>OKGf00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000006YKyAUyy8000000000000000T0Z~)s6GGy0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000006g~g|N)&00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000mOcOgaX$b6T|WQ-000000000000000T0Z~) z1U>)&000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000&^-VEem?*J5I+C_0000000000 z00000T0Z~)#y$W500000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000&^-VEem?*JSUvy% z000000000000000T0Z~)>OKGf0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000hCToQ zem?*JSUvy%000000000000000T0Z~)>OKGf000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000096kU5em?*JQ$GLzd_DjGz&!u}SUvy%Y(D@1DL()JggyWOU_Jl<0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000s67Axb3Xt8em?*Jem?*JY(D@1c|QOEem?*Jem?*Jem?*JSUvy% z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006zc#b3Xt8em?*Jem?*Jem?*Jem?*Jem?*J zaz6k7@I3$k0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000cs>9C;ywTX;ywTX06zc# zc0T|BU_Sr=06qW!00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000T0Z~)NIw7o000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000T0Z~)dOrXF*gXIM000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000LO%cie?I^K=sf@c00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000q&@%uem?*J+CBgP0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000m^}ahYCiw~CO-fG z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zUOxZ;C_exI0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z5Iq0@#y$W51U~=(1U~=(1U~=(az6k7eLnyIe?I^KeLnyIeLnyIeLnyICqDoHBt8HD zKs*2d000000000000000000000000000000000000000000000000000000000000 z00000wmtv=Sw8>(d_MpHd_MpHd_MpHd_MpHWvfII*I000000000000000000000000000000000000000000000 z000000000000000q&@%ubw2EDd_MpHd_MpHKt2Ef00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000Dn9@KeLnyIS3dv%xIF*>0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000s67AxSw8>(c0T|B)II(06hQz000000000000000 z0000000000000000000000000000000000000000000000000000000C_exIem?*J zY(D@1kUanZ0000000000000000000000000000009zOs8em?*JJwE^d0000000000 z000000000000000000000000000000000000000000000000000000000000;5+~T zT|WQ-em?*JL_YukAU*&9z&ro|00000000000000000000L_Pojem?*Jem?*J>OKGf z00000000000000000000000000000000000000000000000000000000000000000 z00000z&ro|OFsYrem?*Jem?*Jem?*JT|WQ-S3dv%IzIpa2|oY;8$SR5Z$AJ4em?*J zbw2J00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000<~{%bSw8>(T0Z~)cs~FDem?*J#y$W50000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000096ta6e?I^KNv z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000003_kz>eLnyIC_VrHl0E(b3Xt8us#3)00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000H9r6VXg>e|00000ygmQ`06qW! z0000000000d_DjGem?*JG(P|U0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000fI9#HKtBKg7C!(000000 zC_VrH00000000000000000000@IC+l?mhqj000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000fI9#HeLnyI zus#3)0000000000000000000000000000003_kz>3qJq=00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 zl0Ev00000000000000000000000000000000000000000000000000 z000000000000000000000000000000fI9#HKR*Bfb3Xt8s67Ax000000000000000 z0000000000D?b1LeLnyI5kCL`0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000R6YOzc|QOEbUy$9#y$W5 z6g~g|6g~g|+&%yRKtBKgem?*Jem?*J5kCL`000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000ygmQ` zem?*JeLnyIem?*JeLnyIem?*JeLnyIX+Hn}eLnyICO-fG00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000Fg*YO<~{%bMLz%l8$SR55kCL`rak}wFg*YOWIq4^Uq1iED0000000000b3Xt8eLnyIeLnyIusr|(00000 z00000000000000000000000000000000000000000000000000000000000000000 zfII*IH9r6VeLnyIeLnyIeLnyIGd}EDem?*JeLnyIem?*JeLnyI zem?*JeLnyIem?*J7e4?1000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000NIn1nNIn1n zNIn1nNIn1n13v%&d_MpHeLnyI-aY^T00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000_&opsOg;brem?*JeLnyIU_Sr=pgjNp0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000BR>EDOFsYrX+Hn}d_MpHeLnyId_MpHqCNls00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000_C5drem?*JeLnyIem?*JeLnyIem?*JEI$AM000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000OFsYreLnyId_MpHeLnyId_MpHeLnyId_MpH_C5dr z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000s67AxUq1ie|eLnyIKtBKg0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000_C5drem?*JeLnyIq&@%u0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000RX+d#d_MpHOFsYr000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000s67Ax0000000000000000000000000000001U~=(eLnyIYCiw~Og;br z00000000000000000000000000000000000000000000000000000000000000000 z0000000000_C5drOFsYrUq1i<4nF_@%sv1Bq&@%u000000000000000AUyy8R6hU! zeLnyIXg>e|0000000000000000000000000000000000000000000000000000000 z000000000000000P(A8z0DeCJ02V(0000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000C+wC0CztC08u{x00000 z00000000000000005v}V0DV6I07gFm00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000ch(0DV6I z08u{x0000000000000000000001rO^0DV6I07gFm0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z07pLn0DV6I08u{x0000000000000000000008&2y0DV6I07gFm000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000RBDz0DV6I08u{x00000000000000005CoP0B%130DV6I07gFm00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000J1&+0DV6I08u{x00000000000JJ^;05m@U0DV6I0DV6I z03Sa9000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000006abb0CPV80D30Ny?T07^dq0Bb)00Bb)00D38z0DV6I0AfD?0Qfxs000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000Mb4H0DV6I0AfD?06;zf0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000060DX0CqnB0DV6I069MZ00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000003|;F0DV6I0DV6I0E|8W0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000004P2H0D309HQ$0AfD? z01Q3=000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000002J#0DnIK002J#0000000000 z000000DwLK0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002J#0DnIK0DnIK002J# z000000DwLK0DnIK0DnIK0DnIK0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000006#wf0DnIK z0DnIK002J#0DwLK0DnIK0DnIK0DnIK0DnIK0DnIK0DwLK00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0DnIK0DnIK0DnIK000000DwLK0DwLK000000DwLK06#wf0DnIK06#wf0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000DnIK0DnIK06#wf0000000000000000000000000000000DnIK0DnIK z06#wf000000000000000000000000000000000000000000000000000000000000 z0000000000000000DwLK0DnIK0DnIK0DwLK000000000000000000000000000000 z002J#0DnIK0DnIK00000000000000000000000000000000000000000000000000 z0000000000000000000000000002J#0DnIK06#wf0000000000000000000000000 z000000000000000002J#0DnIK0DwLK00000000000000000000000000000000000 z00000000000000000000000000000000000002J#0DnIK002J#000000000000000 z0000000000000000000000000002J#0DnIK0DnIK0000000000000000000000000 z0000000000000000000000000000000000000000002J#0DnIK0DnIK002J#00000 z00000000000000000000000000000000000000000DnIK0DnIK002J#0000000000 z00000000000000000000000000000000000000000000000000002J#0DnIK0DnIK z000000000000000000000000000000000000000000000000000DnIK0DnIK002J# z000000000000000000000000000000000000000000000000000000000000002J# z0DnIK0DnIK000000000000000000000000000000000000000000000000000DnIK z0DnIK002J#0000000000000000000000000000000000000000000000000000000 z00000002J#0DnIK0DnIK000000000000000000000000000000000000000000000 z000000DnIK0DnIK002J#000000000000000000000000000000000000000000000 z000000000000000002J#0DnIK0DnIK00000000000000000000000000000000000 z0000000000002J#0DnIK0DnIK002J#00000000000000000000000000000000000 z0000000000000000000000000002J#0DnIK002J#0000000000000000000000000 z000000000000000002J#0DnIK0DnIK0DnIK002J#0000000000000000000000000 z00000000000000000000000000000000000002J#0DnIK002J#000000000000000 z000000000000000000000DwLK0DnIK0DnIK0DnIK06#wf00000000000000000000 z000000000000000000000000000000000000000000000002J#0DnIK0DnIK0DwLK z00000000000000000000002J#06#wf0DnIK0DnIK0DnIK0DnIK000000000000000 z0000000000000000000000000000000000000000000000000000000002J#0DnIK z0DnIK0DnIK002J#002J#002J#06#wf0DnIK0DnIK0DnIK0DnIK06#wf0DwLK00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000006#wf0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK06#wf0DwLK z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000DwLK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK0DnIK06#wf z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000DwLK06#wf0DnIK0DnIK0DnIK0DnIK002J# z0DwLK000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000B}A40Kh%~09HQ$0DV6I0DV6I0DV6I0DnIK0DV6I0DV6I098K#01!R^00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000DwIJ0FXWa0AxP^0DV6I0DC_G0DC_G0DC_G0DC_G0DV6I0DC_G0DC_G0DC_G z08~E!0PsEl0000000000000000000000000000000000000000000000000000000 z0000000000000000RBDz0DC_G0DC_G0DV6I0DC_G0DC_G04zTM0DC_G0DV6I0DC_G z0DC_G0DC_G0DC_G03JU8000000000000000000000000000000000000000000000 z00000000000000000000000000RBDz0DC_G0DC_G0DV6I060GY0Qfxs06;we0Qfxs z0Qfxs0Qfxs0Qfxs04YBJ0J1&+04zQL0DwIJ000000000000000000000000000000 z000000000000000000000000000000000000RBDz0DC_G0DC_G0DV6I0C+wC00000 z00000000000000000000000000000000000075?i03kmB00000000000000000000 z0000000000000000000000000000000000000000000000000003$yD0DV6I0DnIK z00ln)06;zf00000000000000000000000000Kh!}075?i0DnIK09`)-0000000000 z0000000000000000000000000000000000000000000000000000000000000DwIJ z05v}V0DV6I0DC_G09-!+04zQL00000000000DwFI002G!06ISa0DC_G0DV6I07yRo z00000000000000000000000000000000000000000000000000000000000000000 z00000000000G>Vo0DV6I0DC_G0DC_G09-!+0RBDz002J#0DL|G0DC_G0DC_G0DC_G z0Q^1x0Qfxs0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000Qfxs03AO70DC_G0DC_G0DC_G0DV6I0BAn|0DC_G z0DC_G08>8z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000006;we0K7f`0BAn|0DC_G0DV6I z0DC_G0DC_G08>8z01Q3=000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000Qf!t z0DV6I0DnIK0DV6I0DV6I0DV6I02x0300000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0DwIJ0AW7>0DC_G0C7J60AN1=0DC_G0DC_G0DC_G0PsEl00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000DwIJ06jkd0DC_G0DC_G0G>Vo0DwIJ0Q^1x0Bk=10DC_G08T#u002G!00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000004qNL0DC_G0DC_G08>8z0000000000000000H!_w0DC_G0DV6I z0C+wC000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000006sqe0DC_G08>8z01Q3=00000000000000003tsC z0DC_G0DV6I0C+wC00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000006#wf0DV6I00BP$000000000006;we z04_fO0DV6I0DV6I0DnIK0DL|G0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006sqe0DC_G03AO7002G! z0JuH?07X9l0DC_G0DC_G0DC_G05v}V0DwIJ000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000006sqe0DC_G z0DC_G0DC_G0DV6I0DC_G0DC_G0DC_G0DC_G0G>Vo0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z02V(00DC_G0DC_G0DC_G0DV6I0DC_G0DC_G0Bb)00J1&+00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000006;we0K7f`0BAn|0DC_G0DV6I0DC_G04zTM0E|8W000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000G2)g02Ds}02Ds}0DeCJ09ro) z0PsBk000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000I)p(04+ZN01`g{06sqe09`)-0DM0H0DM0H z0DV6I0DM0H0Q^1x00000000000000000000000000000000000000000000000000 z00000000000000000000000000DwFI0Lnf90AN1=0Bt`20Bb)00BAn|0B1h{0DC_G z0DM0H0DM0H0DV6I0Bk=10O&pd0000000000000000000000000000000000000000 z0000000000000000000000000000000000005?AX0DM0H09`)-0Pa2j0AM`;00000 z000000Gd7k002J#0H{6y0H{6y0H{3x00000000000000000000000000000000000 z000000000000000000000000000000000000000005m=T0DV6I0DM0H0Hi(u00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000002n?10Bk=10DeCJ0Mh0C_(E0DV6I0DM0H0DM0H0DM0H z0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H0DV6I0DM0H0DM0H06jkd000000000000000 z000000000000000000000000000000000000000000000000000E|8W06sqe0Bt`2 z0DM0H0DM0H0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H0DV6I0DM0H0CztC01ZC?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002G!0KPr|04+ZN0DM0H0DV6I0DM0H0DM0H0DM0H0DM0H024m|024m|0Jc5= z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000JJ^;024m|0DnIK04hHK06;zf00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000K`53 z0IEI!000000N_0U09QW%0DV6I0DV6I0DV6I0Kz^10000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000001!U_ z0C7J60DC_G0D3h0DV6I0DV6I0DV6I05m@U002Dz z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000I)s)0D300000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000Mb4H0DeCJ02My~0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000Ej&R07*Xp0Bt`2000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000E|8W0DV6I0Iog&000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000MI=E0CYb908l>w00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000007X9l z0D3Vo0Kh!}00000000000000000000000000000000000 z0000000000000000000000000000000000001!O@05U%S0DeCJ0DeCJ0DeCJ0DeCJ z0DM0H05m@U00000000000000005CoP00000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000=$+05CrQ0DeCJ z0DeCJ0BSz~0Mb4H00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000}<;0OURZ000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000H{3x0IWU$0000000000 z000000000000000000000BAn|00ch(00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000GvJm0Bb)0 z05CoP0000000000000000000001Q3=0C7J60LDH50000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z060GY0DV6I0L(rB000000000000000000000LDH50DV6I0LDH5000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000PsBk0B1h{0DV6I0000000000000000000008l*u08>8z0DC_G0GvJm00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000H{6y0DV6I046^G000000000000000000000AM}<0DV6I0CGP7 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000H8ep0ChhA0D30DV6I0DV6I0DV6I0DV6I0DV6I09-x*00000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000LVQ605CoP0Iog&03tsC0DV6I0DV6I z0I)p(000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000000JuE> z0DV6I0DV6I0I)p(00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000JuE>0DV6I0DV6I0I)p(0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000JuE>0DV6I0DV6I0I)p(000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000Qf!t0DV6I0D306;td000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000N6eN0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ09ZZ%00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000C+wC0CGP70DnIK z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ0C_(E05(4W05ClO0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000Kh%~0Bt`2 z08~E!04qNL03<&E0J=T^0H{6y0Ng$R0ERvQ0AM}<0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0ChhA0DeCJ0FFKY00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000ChhA0DeCJ0H8ep0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000ChhA0DeCJ0AoJ@0AN1=09ro)01-a`0AN1=082jr0H8hq z0DwCH000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000ChhA0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ01ZC?00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000OCFX0DV6I0DM0H09!u*01-a` z01-a`01-a`08u{x0DC_G0C+zD00%z+01!O@000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000Fpic06;zf z00000000000000000000000000G>Vo0DeCJ0DeCJ01Q6>00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000Ej*S0A@b`0C+zD0LDH500000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000003bd90CqnB z0DV6I0IEI!0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000Qx=v0DeCJ03|;F000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000B}7309Zc&0ChhA05CoP000000000000000000000000000000 z00000000000000000000000000000000000000000000001!O@0Q5cp0F*ue00000 z0000000000000000000000000000000H{6y0CztC03AO700000000000000000000 z00000000000000000000000000000000000000000000000000000000E#{U0DeCJ z0DV6I05U%S0DwFI00000000000000000000000000000006RYb09-!+0FXTZ00000 z00000000000000000000000000000000000000000000000000000000000000000 z0H8ep0BSz~0DeCJ0DeCJ069MZ0NOqP0Ej*S0O&mc000000D?XM0Fpic0CqnB0DeCJ z0M00000000000000000000000000000000000000000000000000 z00000000000000000000000000000008Bmr08>8z0DeCJ0DeCJ0DeCJ0DeCJ0DeCJ z0DeCJ0DeCJ0DeCJ0B=740E9jO0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000006;we00ln)09HQ$0DeCJ z0DeCJ0DeCJ0DeCJ05m@U01ZC?00=$+00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002Ay01!O@0DwFI00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000LVQ603bgA0DeCJ031I60000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000FXTZ08u{x0C+zD0N6eN0H8hq0LVQ609-x*07O0j z0LVQ60Khx|0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000O&pd0CztC02)6400=(-098K#0DeCJ z0DeCJ0DeCJ0DeCJ08&2y0PH>h0Khx|00000000000000000000000000000000000 z000000000000000000000000000000000000000003bd90CYb9053lP09`)-0DeCJ z04F~H07O0j07O0j07O0j07O0j02My~0BJt}098K#03bgA031F5000000000000000 z00000000000000000000000000000000000000000000008l*u098K#0BAn|0E#{U z0DeCJ05(4W06;td00000000000000000000000000H8ep0H!_w09`)-0CPV80FXWa z000000000000000000000000000000000000000000000000000000005CoP0DeCJ z02My~0N^|T05m@U02e<1000000000000000000000000000000000000000002Dp| z0A4=;0CYb908l;v00000000000000000000000000000000000000000000003ba8 z09!u*0AN1=0H8bo0000008Bmr09-!+0B}73000000000000000000000000000000 z000000000001!R^0ChhA0Ny?T0000000000000000000000000000000000000000 z000000Ej*S0DeCJ0P;Qn00000000000000003ba80DwCH00000000000000000000 z000000000000000000000000003kmB0C_(E000000000000000000000000000000 z00000000000Khx|0AW7>0A@b`002Ay00000000000000000000000000000000000 z0000000000000000000000000000000000005(4W07yRo00000000000000000000 z0000000000000000000002n?10DeCJ01-a`000000000000000000000000000000 z00000000000000000000000000000000000000000Qx=v0DnIK0OURZ0000000000 z0000000000000000000000000000000QNor0CGP70GK@h00000000000000000000 z0000000000000000000000000000000D%900000000000004kI000F)004JC001dJ z002Nd0000000000000000000000000000000000000000002)v003=20000000000 z00000000000000000000000000000000000000000000000000007WE001IC004eJ z001{X008(s000000000000000000000000000000000000000000000004eJ002lo z0000000000000000000000000000000000000000000000000000000007WE002=x z004JC007cH006)|00000000000000000000000000000000000000000000000000 z004eJ002Wj000000000000000000000000000000000000000000000002Nd005{y z003h@003M+005po00000000000000000000000000000000000000000000000000 z0000000000002}!003}5002-u000000000000000000000000000000004kJ007!P z003A&003z}00106005{x000000000000000000000000000000000000000000000 z00000000000000000000007!P004eJ002Wj004?U00000000000000000000005jm z003q`003$~00199005Xh000000000000000000000000000000000000000000000 z000000000000000000000000000000004kH000p`004eJ004VG003q`0034$003J* z003q`003z}000L+004kJ000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000007`T006{3001FB002xs z001;U002xs00168004|W000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002Nd00000002Nd000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000d?002fm003e?002fm008Jc000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000068$003e?004hK004hK004hK004hK000d?00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000003e?004hK001gK003k@008Jc0068$ z002fm000d?003k@00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008Jc004hK001gK0000000000 z0000000000001gK004hK002fm0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000087Z004hK0068$ z00000000000000000000001gK004hK004hK008Jc0000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000003k@ z004hK003e?008Jc000000000000000002fm004hK000d?00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000002fm004hK000d?008Jc000000068$004hK003e?008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000003k@003e?004hK003e?0068$002fm004hK0087Z00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000002fm004hK004hK004hK002fm z008Jc000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000008Jc002fm004hK z004hK0087Z0000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z003e?004hK004hK004hK003k@0000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000087Z004hK004hK0087Z003e?004hK003k@0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001gK004hK000d?000000068$004hK002fm008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000002fm004hK003k@00000000000087Z004hK000d? z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000004hK003e?00000000000000000000 z001gK004hK003k@00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000008Jc004hK001gK0000000000 z00000000000087Z004hK000d?0000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000068$004hK0087Z z00000000000000000000008Jc004hK001gK000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000008Jc z004hK003e?008Jc00000000000087Z003e?004hK0087Z00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001gK004hK004hK003e?004hK004hK004hK0087Z008Jc0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000008Jc001gK004hK004hK003e?000d?003k@0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000005{x z000000000000000000C(004bI008zr00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z001OD003V<008tp0000000000004bI004YH002ur0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000001LD004eJ000+10000000000004eJ004bI000g@000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000002ur004bI000+10000000000004bI004YH007KB00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000001yO0031#004eJ006c=0000000000004eJ004bI z007KB000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000008(s003w|004bI002ln0000000000 z001mM004YH001{X00000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000059a004bI003Y=005vp z0000000000001pN004bI002ur0000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000<2004YH z002ur000000000000000004bI004YH008tp000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000<2004bI002ur0000000000004MC004eJ004bI001OD00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000<2004YH001IC0000000000001{X004bI004YH000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000034$004bI005*u000000081X004bI004eJ004bI00000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000008zr004bI004YH00000001OD003z}004YH004bI z001jL000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000002ur004eJ004bI0034$004bI003Y= z003V<004eJ000+100000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000002ur004bI004YH004bI z004YH004A8007KB004bI000+10000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000001LD004eJ z004bI001{X004A800000007KB004eJ000+1000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000002ln002ln000000000000000007KB004bI000+100000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000007QD004hK000+10000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000001{X004bI000+1 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000007QD z004hK004bI004MC00000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000004A8004bI004YH004A80000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000007QD002rq004eJ003V<007`U0000000000006o^002ln0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000y|0037%004VG004bI004bI004bI001mM0000000105003}5008tp z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000002-u002Kf004bI003b>008hl003Y<004bI001vP00000004MC z004bI006i?0000000000000000000000000000000000000000000000000000000 z00000000000000000000000000009&004bI001pN003Y;00000000m@004bI001vP z00000006i?004bI001mL000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000a>004bI003M*0000000000006)} z004bI001vP002-u0022Z004A9008Jc00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000a>004bI0068$00000 z00000006>100416004A8005>w004bI002lo000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000009&004bI z003k^001IC001~X006>100106000m^003t{004bI008tp00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z002-u001>V004SF004bI004PE002=x000y|008tp004bI001gK007`T0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000787002cl004bI004bI004bI004eJ003e?000a=00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000m@000m_003n_004bI004eJ001{X z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000000_4004eJ z004hK004eJ001IC00000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000004wO z003h@004bI001;U002in004VG000F)00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000007iJ004bI001jL006)|005vo006W;003S;001RF00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000001{X004VG0053Y000000000000000008zr004MD003k@00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000006i>004DA001aI00000000000000000000007WE003M+ z002%u000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000007uM004bI002in00000000000000000000 z00000008hl004JC005Le000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000003}3003e?004MD003A%00000 z000000000000000006o^004bI002-v00000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000106004bI z004bI000L+005Rg007iJ008(t004DA003e?002-u0000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0059a004JC004bI004eJ004bI004bI004bI004bI001>V00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000004kK002Wj004eJ004bI004bI003)0008nn003Y;0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000lysD0l@oUg z000000E`7}VPa)$lxPWP3`+oolxPlzlv0!^O94wVg_LL$i~?yiluH0h0f&@QlqgFB zXctaSPD=m(|Nlz=|Ns9>0CbdMi9^T*00002000000000000000000030000900005 z00007000060000600001000020000800001000060000300004000030000600006 z00000000010000900000000020000200006000070000400007000030000400009 z00009000030000700000000090000000008000050000500002000040000500000 z0000800004000080001#bd+L@26Ja*Uu<%eM?dfY000000E`Q6WprP4aAaY0Wn`3S z1SwLKD2xbVZZIxlX<>7eXbETxO8|wGXby*zQj{o50ZSBxlxP!-0%kOnO8`p&hm=y3 zC`$uq7fw!2O8@`=|4RS=|Nlz>bd+L=Lr_Ag2EGe)xx57OlD#d#fV>!Sz`8|JHofq_ zAG$r>tGpTpyuC;>0KPI!550!`zr7-7alLg2QN6lWj=X#nWW5#fq`jNmIK2)FD!nNQX>MmNQX>Mm< zc42aqXbETxO8|wGXby*zQj{o50VqoWOB721O96D0XrPHhP%F%bK9IZPJ;a+OKK$7L zK98qvJ@mJDJs#ptJ&VKYJyJ&XJx2w3J^q8PJ;qlFK8+EKKBRY?J^@z|J~(J8K9l3m zJ-yMgJ&_=mJ$@u$J(P5mVvGu6ZZIx)Woc(y;?kEy=BQfy%4Yqy$qA1 zJkBzYyq7&dyKZGK>zrk*JKKCfHKP0Vd!T zgFCoCwF@LbxzZm%X7}Ykb}%ktX<>7eXbETxO8|wG zXby*zQj{o50VqoWOB721O96D0XrPHhP?i2Fv}w7Dvr&wRH1KYoGX@z%Gx-qkGFY+F zG|34rG!FSNvtc0TGr~CqG*pd8GkBi%va(S~vR+R!v2^C3v}FV(w7$0}w9>@Zv_IRg zGn90cVvG!9Z*F!lE_Y>VXJ~YkXbETxO8|wGXby*zQj{o50VqopO94v-O9gb4XrPHg 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≤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 z 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

!cOTUC_3xxUlA)igc5 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ⅈJiUURJTBv-y}#@B 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

7X629L12fqHv(Y(Cy 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 float: - """ Calculate precision for given data and prediction. - - :type data: [[x, y], ...] - :param data: Input data - :type pred: [[x_pred, y_pred], ...] - :param pred: Network output data - """ - correct = 0 - assert len(data) == len(pred) - for inp_data, pred_output in zip(data, pred): - label = 0 if np.prod(inp_data) < 0 else 1 - pred_label = np.argmax(pred_output) - if pred_label == label: - correct += 1 - return float(correct) / len(data) - - -class XORNet(Module): - def __init__(self): - self.mid_layers = 14 - self.num_class = 2 - super().__init__() - - self.fc0 = Linear(self.num_class, self.mid_layers, bias=True) - self.fc1 = Linear(self.mid_layers, self.mid_layers, bias=True) - - self.fc2 = Linear(self.mid_layers, self.num_class, bias=True) - - def forward(self, x): - x = self.fc0(x) - x = tanh(x) - x = self.fc1(x) - x = tanh(x) - x = self.fc2(x) - return x - - -@pytest.mark.slow -def test_training_converge(): - net = XORNet() - opt = SGD( - net.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - @trace - def train(data, label): - pred = net(data) - opt.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - @trace - def infer(data): - return net(data) - - train_dataset = minibatch_generator() - losses = [] - - for data, label in itertools.islice(train_dataset, 2000): - # opt.zero_grad() - loss = train(data, label) - loss = loss[0][0] - opt.step() - losses.append(loss.numpy()) - - assert np.mean(losses[-100:]) < 0.1, "Final training Loss must be low enough" - - ngrid = 10 - x = np.linspace(-1.0, 1.0, ngrid) - xx, yy = np.meshgrid(x, x) - xx = xx.reshape((ngrid * ngrid, 1)) - yy = yy.reshape((ngrid * ngrid, 1)) - data = np.concatenate((xx, yy), axis=1).astype(np.float32) - - pred = infer(data).numpy() - assert calculate_precision(data, pred) == 1.0, "Test precision must be high enough" diff --git a/python_module/test/integration/test_correctness.py b/python_module/test/integration/test_correctness.py deleted file mode 100644 index 70a9861f..00000000 --- a/python_module/test/integration/test_correctness.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import re -import subprocess -import sys - -import numpy as np - -import megengine as mge -import megengine.functional as F -from megengine import jit, tensor -from megengine.functional.debug_param import set_conv_execution_strategy -from megengine.jit import SublinearMemoryConfig -from megengine.module import AvgPool2d, BatchNorm2d, Conv2d, Linear, Module -from megengine.optimizer import SGD -from megengine.test import assertTensorClose - - -def get_gpu_name(): - try: - gpu_info = subprocess.check_output( - ["nvidia-smi", "--query-gpu=gpu_name", "--format=csv,noheader"] - ) - gpu_info = gpu_info.decode("ascii").split("\n")[0] - except: - gpu_info = "None" - return gpu_info - - -def get_cpu_name(): - cpu_info = "None" - try: - cpu_info = subprocess.check_output(["cat", "/proc/cpuinfo"]).decode("ascii") - for line in cpu_info.split("\n"): - if "model name" in line: - return re.sub(".*model name.*:", "", line, 1).strip() - except: - pass - return cpu_info - - -def get_xpu_name(): - if mge.is_cuda_available(): - return get_gpu_name() - else: - return get_cpu_name() - - -class MnistNet(Module): - def __init__(self, has_bn=False): - super().__init__() - self.conv0 = Conv2d(1, 20, kernel_size=5, bias=True) - self.pool0 = AvgPool2d(2) - self.conv1 = Conv2d(20, 20, kernel_size=5, bias=True) - self.pool1 = AvgPool2d(2) - self.fc0 = Linear(20 * 4 * 4, 500, bias=True) - self.fc1 = Linear(500, 10, bias=True) - self.bn0 = None - self.bn1 = None - if has_bn: - self.bn0 = BatchNorm2d(20) - self.bn1 = BatchNorm2d(20) - - def forward(self, x): - x = self.conv0(x) - if self.bn0: - x = self.bn0(x) - x = F.relu(x) - x = self.pool0(x) - x = self.conv1(x) - if self.bn1: - x = self.bn1(x) - x = F.relu(x) - x = self.pool1(x) - x = F.flatten(x, 1) - x = self.fc0(x) - x = F.relu(x) - x = self.fc1(x) - return x - - -def train(data, label, net, opt): - - pred = net(data) - loss = F.cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - -def update_model(model_path): - """ - Update the dumped model with test cases for new reference values. - - The model with pre-trained weights is trained for one iter with the test data attached. - The loss and updated net state dict is dumped. - - .. code-block:: python - - from test_correctness import update_model - update_model('mnist_model_with_test.mge') # for gpu - update_model('mnist_model_with_test_cpu.mge') # for cpu - - """ - net = MnistNet(has_bn=True) - checkpoint = mge.load(model_path) - net.load_state_dict(checkpoint["net_init"]) - lr = checkpoint["sgd_lr"] - opt = SGD(net.parameters(), lr=lr) - - data = tensor(dtype=np.float32) - label = tensor(dtype=np.int32) - data.set_value(checkpoint["data"]) - label.set_value(checkpoint["label"]) - - opt.zero_grad() - loss = train(data, label, net=net, opt=opt) - opt.step() - - xpu_name = get_xpu_name() - - checkpoint.update( - {"net_updated": net.state_dict(), "loss": loss.numpy(), "xpu": xpu_name} - ) - mge.save(checkpoint, model_path) - - -def run_test( - model_path, use_jit, use_symbolic, sublinear_memory_config=None, max_err=None, -): - - """ - Load the model with test cases and run the training for one iter. - The loss and updated weights are compared with reference value to verify the correctness. - - Dump a new file with updated result by calling update_model - if you think the test fails due to numerical rounding errors instead of bugs. - Please think twice before you do so. - - """ - net = MnistNet(has_bn=True) - checkpoint = mge.load(model_path) - net.load_state_dict(checkpoint["net_init"]) - lr = checkpoint["sgd_lr"] - opt = SGD(net.parameters(), lr=lr) - - data = tensor(dtype=np.float32) - label = tensor(dtype=np.int32) - data.set_value(checkpoint["data"]) - label.set_value(checkpoint["label"]) - - if max_err is None: - max_err = 1e-5 - - train_func = train - if use_jit: - train_func = jit.trace( - train_func, - symbolic=use_symbolic, - sublinear_memory_config=sublinear_memory_config, - ) - - opt.zero_grad() - loss = train_func(data, label, net=net, opt=opt) - opt.step() - - assertTensorClose(loss.numpy(), checkpoint["loss"], max_err=max_err) - - for param, param_ref in zip( - net.state_dict().items(), checkpoint["net_updated"].items() - ): - assert param[0] == param_ref[0] - assertTensorClose(param[1], param_ref[1], max_err=max_err) - - -def test_correctness(): - - if mge.is_cuda_available(): - model_name = "mnist_model_with_test.mge" - else: - model_name = "mnist_model_with_test_cpu.mge" - model_path = os.path.join(os.path.dirname(__file__), model_name) - set_conv_execution_strategy("HEURISTIC_REPRODUCIBLE") - - run_test(model_path, False, False) - run_test(model_path, True, False) - run_test(model_path, True, True) - - # sublinear - config = SublinearMemoryConfig(genetic_nr_iter=10) - run_test( - model_path, True, True, sublinear_memory_config=config, max_err=1e-5, - ) diff --git a/python_module/test/integration/test_distributed.py b/python_module/test/integration/test_distributed.py deleted file mode 100644 index ba2e3080..00000000 --- a/python_module/test/integration/test_distributed.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import multiprocessing as mp -import platform -import subprocess -import sys - -import numpy as np -import pytest - - -def worker(master_ip, master_port, world_size, rank, dev, trace): - import megengine.distributed as dist - import megengine.functional as F - from megengine import is_cuda_available - from megengine import jit - from megengine.module import Linear, Module - from megengine.optimizer import SGD - - if not is_cuda_available(): - return - - class MLP(Module): - def __init__(self): - super().__init__() - self.fc0 = Linear(3 * 224 * 224, 500) - self.fc1 = Linear(500, 10) - - def forward(self, x): - x = self.fc0(x) - x = F.relu(x) - x = self.fc1(x) - return x - - dist.init_process_group( - master_ip=master_ip, master_port=3456, world_size=world_size, rank=rank, dev=dev - ) - net = MLP() - - opt = SGD(net.parameters(requires_grad=True), lr=0.02) - - data = np.random.random((64, 3 * 224 * 224)).astype(np.float32) - label = np.random.randint(0, 10, size=(64,)).astype(np.int32) - - jit.trace.enabled = trace - - @jit.trace() - def train_func(data, label): - pred = net(data) - loss = F.cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - for i in range(5): - opt.zero_grad() - loss = train_func(data, label) - opt.step() - - -def start_workers(worker, world_size, trace=False): - def run_subproc(rank): - cmd = "from test.integration.test_distributed import worker\n" - cmd += "worker('localhost', 3456, {}, {}, {}, {})".format( - world_size, rank, rank, "True" if trace else "False" - ) - cmd = [sys.executable, "-c", cmd] - ret = subprocess.run( - cmd, stdout=sys.stdout, stderr=sys.stderr, universal_newlines=True - ) - assert ret.returncode == 0, "subprocess failed" - - procs = [] - for rank in range(world_size): - p = mp.Process(target=run_subproc, args=(rank,)) - p.start() - procs.append(p) - - for p in procs: - p.join() - assert p.exitcode == 0 - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -def test_distributed(): - start_workers(worker, 2, trace=True) - start_workers(worker, 2, trace=False) diff --git a/python_module/test/integration/test_equivalence.py b/python_module/test/integration/test_equivalence.py deleted file mode 100644 index e215450f..00000000 --- a/python_module/test/integration/test_equivalence.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy -import itertools -import os -from typing import Callable - -import numpy as np -import pytest - -import megengine as mge -import megengine.module.init as init -from megengine.core import tensor -from megengine.functional import cross_entropy_with_softmax, relu -from megengine.jit import trace -from megengine.module import Linear, Module -from megengine.optimizer import SGD, Optimizer -from megengine.test import assertTensorClose - -batch_size = 64 -data_shape = (batch_size, 2) -label_shape = (batch_size,) - - -def minibatch_generator(): - while True: - inp_data = np.zeros((batch_size, 2)) - label = np.zeros(batch_size, dtype=np.int32) - - for i in range(batch_size): - # [x0, x1], sampled from U[-1, 1] - inp_data[i, :] = np.random.rand(2) * 2 - 1 - label[i] = 0 if np.prod(inp_data[i]) < 0 else 1 - - yield inp_data.astype(np.float32), label.astype(np.int32) - - -class SimpleNet(Module): - def __init__(self): - self.mid_layers = 14 - self.num_class = 2 - super().__init__() - - self.fc0 = Linear(self.num_class, self.mid_layers, bias=True) - fan_in, _ = init.calculate_fan_in_and_fan_out(self.fc0.weight) - init.normal_(self.fc0.weight, std=np.sqrt(float(1.0) / fan_in)) - init.zeros_(self.fc0.bias) - - self.fc1 = Linear(self.mid_layers, self.mid_layers, bias=True) - fan_in, _ = init.calculate_fan_in_and_fan_out(self.fc1.weight) - init.normal_(self.fc1.weight, std=np.sqrt(float(1.0) / fan_in)) - init.zeros_(self.fc1.bias) - - self.fc2 = Linear(self.mid_layers, self.num_class, bias=True) - fan_in, _ = init.calculate_fan_in_and_fan_out(self.fc2.weight) - init.normal_(self.fc2.weight, std=np.sqrt(float(1.0) / fan_in)) - init.zeros_(self.fc2.bias) - - def forward(self, x): - x = self.fc0(x) - x = relu(x) # Should use tanh but it's not stable now. - x = self.fc1(x) - x = relu(x) # Should use tanh but it's not stable now. - x = self.fc2(x) - return x - - -def generate_eager_step(net: Module, opt_factory: Callable[[Module], Optimizer]): - data_inp = tensor(np.zeros(data_shape), dtype=np.float32) - label_inp = tensor(np.zeros(label_shape), dtype=np.int32) - opt = opt_factory(net) - - def step(data, label): - opt.zero_grad() - data_inp.set_value(data) - label_inp.set_value(label) - - pred = net(data_inp) - loss = cross_entropy_with_softmax(pred, label_inp) - opt.backward(loss) - opt.step() - - return loss.numpy()[0] - - return step - - -def generate_static_step(net: Module, opt_factory: Callable[[Module], Optimizer]): - data = tensor(np.zeros(data_shape), dtype=np.float32) - label = tensor(np.zeros(label_shape), dtype=np.int32) - opt = opt_factory(net) - - # Save state to reset parameters later. - state = copy.deepcopy(net.state_dict()) - - # Evaluate network in eager mode once. - pred = net(data) - loss = cross_entropy_with_softmax(pred, label) - opt.zero_grad() - grads = opt.backward(loss) - - f = mge.graph.compile(loss, grads) - - def step(data, label): - opt.zero_grad() - out = f(data=data, label=label) - opt.step() - loss = out[0][0] - return loss - - # Reset parameters. - net.load_state_dict(state) - return step - - -def generate_trace_step( - net: Module, opt_factory: Callable[[Module], Optimizer], enable: bool -): - opt = opt_factory(net) - - @trace - def train(data, label): - pred = net(data) - loss = cross_entropy_with_softmax(pred, label) - opt.zero_grad() - opt.backward(loss) - return loss - - train.enabled = enable - - def step(data, label): - out = train(data, label) - opt.step() - loss = out[0][0] - return loss - - return step - - -def assert_network_equvilence(nets): - net_state = [net.state_dict() for net in nets] - - for state in net_state[1:]: - assert len(net_state[0]) == len(state) - - for k, v in net_state[0].items(): - for state in net_state[1:]: - assert k in state - assertTensorClose(v, state[k]) - - -@pytest.mark.slow -def test_eager_equvilence(): - eager_net = SimpleNet() - trace_enable_net = copy.deepcopy(eager_net) - trace_disable_net = copy.deepcopy(eager_net) - - opt_factory = lambda net: SGD( - net.parameters(requires_grad=True), lr=0.01, momentum=0.01 - ) - - estep = generate_eager_step(eager_net, opt_factory) - te_step = generate_trace_step(trace_enable_net, opt_factory, True) - td_step = generate_trace_step(trace_disable_net, opt_factory, False) - - assert_network_equvilence([eager_net, trace_enable_net, trace_disable_net]) - - # Use hard code number as limit, may increase if needed. - for data, label in itertools.islice(minibatch_generator(), 200): - eloss = estep(data, label) - te_loss = te_step(data, label) - td_loss = td_step(data, label) - - assertTensorClose(eloss, te_loss) - assertTensorClose(eloss, td_loss) - assert_network_equvilence( - [eager_net, trace_enable_net, trace_disable_net,] - ) diff --git a/python_module/test/integration/test_fastrun.py b/python_module/test/integration/test_fastrun.py deleted file mode 100644 index 8cce8c59..00000000 --- a/python_module/test/integration/test_fastrun.py +++ /dev/null @@ -1,12 +0,0 @@ -import numpy as np - -import megengine as mge -from megengine.functional.debug_param import set_conv_execution_strategy -from megengine.module.conv import Conv2d - - -def test_fastrun(): - set_conv_execution_strategy("PROFILE") - x = Conv2d(1, 1, kernel_size=1, bias=True) - a = mge.tensor(np.random.randn(1, 1, 1, 1).astype(np.float32)) - a = x(a) diff --git a/python_module/test/integration/test_parampack.py b/python_module/test/integration/test_parampack.py deleted file mode 100644 index c9acc47c..00000000 --- a/python_module/test/integration/test_parampack.py +++ /dev/null @@ -1,274 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import itertools - -import numpy as np -import pytest - -import megengine as mge -from megengine.core import tensor -from megengine.functional import cross_entropy_with_softmax, tanh -from megengine.jit import trace -from megengine.module import Linear, Module, ParamPack -from megengine.optimizer import SGD - -batch_size = 64 -data_shape = (batch_size, 2) -label_shape = (batch_size,) - - -def minibatch_generator(): - while True: - inp_data = np.zeros((batch_size, 2)) - label = np.zeros(batch_size, dtype=np.int32) - for i in range(batch_size): - # [x0, x1], sampled from U[-1, 1] - inp_data[i, :] = np.random.rand(2) * 2 - 1 - label[i] = 0 if np.prod(inp_data[i]) < 0 else 1 - yield inp_data.astype(np.float32), label.astype(np.int32) - - -def calculate_precision(data: np.ndarray, pred: np.ndarray) -> float: - """ Calculate precision for given data and prediction. - - :type data: [[x, y], ...] - :param data: Input data - :type pred: [[x_pred, y_pred], ...] - :param pred: Network output data - """ - correct = 0 - assert len(data) == len(pred) - for inp_data, pred_output in zip(data, pred): - label = 0 if np.prod(inp_data) < 0 else 1 - pred_label = np.argmax(pred_output) - if pred_label == label: - correct += 1 - return float(correct) / len(data) - - -class XORNet(Module): - def __init__(self): - self.mid_layers = 14 - self.num_class = 2 - super().__init__() - - self.fc0 = Linear(self.num_class, self.mid_layers, bias=True) - self.fc1 = Linear(self.mid_layers, self.mid_layers, bias=True) - - self.fc2 = Linear(self.mid_layers, self.num_class, bias=True) - - def forward(self, x): - x = self.fc0(x) - x = tanh(x) - x = self.fc1(x) - x = tanh(x) - x = self.fc2(x) - return x - - -@pytest.mark.slow -def test_static_graph_parampack(): - net = XORNet() - net = ParamPack( - net, nr_ignore_first=0, max_size_per_group=10, max_nr_params_per_group=100 - ) - opt = SGD( - net.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - @trace(symbolic=True) - def train(data, label): - pred = net(data) - opt.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - @trace(symbolic=True) - def infer(data): - return net(data) - - train_dataset = minibatch_generator() - losses = [] - - for data, label in itertools.islice(train_dataset, 2000): - loss = train(data, label) - loss = loss[0][0] - opt.step() - losses.append(loss.numpy()) - - assert np.mean(losses[-100:]) < 0.1, "Final training Loss must be low enough" - - ngrid = 10 - x = np.linspace(-1.0, 1.0, ngrid) - xx, yy = np.meshgrid(x, x) - xx = xx.reshape((ngrid * ngrid, 1)) - yy = yy.reshape((ngrid * ngrid, 1)) - data = np.concatenate((xx, yy), axis=1).astype(np.float32) - - pred = infer(data).numpy() - assert calculate_precision(data, pred) == 1.0, "Test precision must be high enough" - - -@pytest.mark.slow -def test_nopack_parampack(): - net = XORNet() - net = ParamPack(net, max_size_per_group=0, max_nr_params_per_group=0) - opt = SGD( - net.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - @trace(symbolic=True) - def train(data, label): - pred = net(data) - opt.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - @trace(symbolic=True) - def infer(data): - return net(data) - - train_dataset = minibatch_generator() - losses = [] - - for data, label in itertools.islice(train_dataset, 2000): - loss = train(data, label) - loss = loss[0][0] - opt.step() - losses.append(loss.numpy()) - assert np.mean(losses[-100:]) < 0.1, "Final training Loss must be low enough" - - ngrid = 10 - x = np.linspace(-1.0, 1.0, ngrid) - xx, yy = np.meshgrid(x, x) - xx = xx.reshape((ngrid * ngrid, 1)) - yy = yy.reshape((ngrid * ngrid, 1)) - data = np.concatenate((xx, yy), axis=1).astype(np.float32) - - pred = infer(data).numpy() - assert calculate_precision(data, pred) == 1.0, "Test precision must be high enough" - - -@pytest.mark.slow -def test_dynamic_graph_parampack(): - net = XORNet() - net = ParamPack( - net, nr_ignore_first=0, max_size_per_group=10, max_nr_params_per_group=100 - ) - opt = SGD( - net.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - @trace(symbolic=False) - def train(data, label): - pred = net(data) - opt.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt.backward(loss) - return loss - - @trace(symbolic=False) - def infer(data): - return net(data) - - train_dataset = minibatch_generator() - losses = [] - - for data, label in itertools.islice(train_dataset, 2000): - loss = train(data, label) - loss = loss[0][0] - opt.step() - losses.append(loss.numpy()) - - assert np.mean(losses[-100:]) < 0.1, "Final training Loss must be low enough" - - ngrid = 10 - x = np.linspace(-1.0, 1.0, ngrid) - xx, yy = np.meshgrid(x, x) - xx = xx.reshape((ngrid * ngrid, 1)) - yy = yy.reshape((ngrid * ngrid, 1)) - data = np.concatenate((xx, yy), axis=1).astype(np.float32) - - pred = infer(data).numpy() - assert calculate_precision(data, pred) == 1.0, "Test precision must be high enough" - - -@pytest.mark.slow -def test_correctness_parampack(): - net1 = XORNet() - net2 = XORNet() - params1 = net1.parameters() - params2 = net2.parameters() - for param1, param2 in zip(params1, params2): - param1.set_value(param2.numpy()) - net1 = ParamPack( - net1, nr_ignore_first=0, max_size_per_group=10, max_nr_params_per_group=100 - ) - opt1 = SGD( - net1.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - opt2 = SGD( - net2.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 - ) - - @trace(symbolic=False) - def train1(data, label): - pred = net1(data) - opt1.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt1.backward(loss) - return loss - - @trace(symbolic=False) - def train2(data, label): - pred = net2(data) - opt2.zero_grad() - loss = cross_entropy_with_softmax(pred, label) - opt2.backward(loss) - return loss - - @trace(symbolic=False) - def infer1(data): - return net1(data) - - @trace(symbolic=False) - def infer2(data): - return net2(data) - - train_dataset = minibatch_generator() - - for data, label in itertools.islice(train_dataset, 2000): - train1(data, label) - opt1.step() - - train2(data, label) - opt2.step() - - data, _ = next(train_dataset) - pred1 = infer1(data).numpy() - pred2 = infer2(data).numpy() - assert np.allclose(pred1, pred2) - - -def test_parampack_group_func(): - net = XORNet() - net = ParamPack( - net, - nr_ignore_first=1, - max_size_per_group=10, - max_nr_params_per_group=100, - group_func=lambda n, p: "weight" in n, - ) - for p in net.parameters(requires_grad=True): - assert p.pack_group_key is not None - for n, p in net.named_parameters(requires_grad=True): - assert p.pack_group_key is not None diff --git a/python_module/test/regression/.gitignore b/python_module/test/regression/.gitignore deleted file mode 100644 index 328c8678..00000000 --- a/python_module/test/regression/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -data -log diff --git a/python_module/test/regression/__init__.py b/python_module/test/regression/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/regression/test_MGE-103.py b/python_module/test/regression/test_MGE-103.py deleted file mode 100644 index e0d387c1..00000000 --- a/python_module/test/regression/test_MGE-103.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine as mge -from megengine.core import tensor -from megengine.jit import trace -from megengine.module import BatchNorm2d -from megengine.test import assertTensorClose - - -@pytest.mark.regression -def test_batchnorm_change_batchsize(): - data_shape = (2, 3, 8, 8) - real_shape = (4, 3, 8, 8) - data = np.random.random(data_shape).astype(np.float32) - d = np.random.random(real_shape).astype(np.float32) - - bn = BatchNorm2d(3) - f = trace(bn) - f(data) - - y1 = f(d) - - y0 = bn(tensor(d)) - - assertTensorClose(y0.numpy(), y1.numpy()) diff --git a/python_module/test/regression/test_MGE-22.py b/python_module/test/regression/test_MGE-22.py deleted file mode 100644 index b719b9be..00000000 --- a/python_module/test/regression/test_MGE-22.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -from megengine.core import tensor -from megengine.module import Linear, Module -from megengine.optimizer import SGD - - -class Blur(Module): - def __init__(self, dim1=16, dim2=128, dim3=1): - super().__init__() - - self.fc1 = Linear(dim1, dim2) - self.fc2 = Linear(dim2, dim3) - - def forward(self, x): - x = self.fc1(x) - x = self.fc2(x) - return x.mean(axis=1, keepdims=True) - - -@pytest.mark.regression -def test_blur(): - net = Blur() - data = tensor(np.random.random((32, 16)).astype("float32")) - - opt = SGD(net.parameters(requires_grad=True), lr=0.1) - opt.zero_grad() - - loss = net(data) - opt.backward(loss.sum()) diff --git a/python_module/test/regression/test_MGE-323.py b/python_module/test/regression/test_MGE-323.py deleted file mode 100644 index 47e73f2a..00000000 --- a/python_module/test/regression/test_MGE-323.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine as mge - - -def test_mge_323(): - # Regression: set_value does not update eager_val - x = mge.tensor([0]) - _ = x * 2 - x.set_value([1, 1]) - np.testing.assert_array_equal(x.numpy(), [1, 1]) - assert x.shape == (2,) - np.testing.assert_array_equal(x * 2, [2, 2]) diff --git a/python_module/test/regression/test_MGE-81.py b/python_module/test/regression/test_MGE-81.py deleted file mode 100644 index f32b3232..00000000 --- a/python_module/test/regression/test_MGE-81.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine as mge -import megengine.functional as F -import megengine.module as M -from megengine.core import tensor - - -def test_mge_81(): - np.random.seed(0) - N, D = 3, 4 - x = mge.Parameter(value=np.random.normal(size=(N, D)).astype(np.float32)) - y = mge.Parameter(value=np.random.normal(size=(N, D)).astype(np.float32)) - z = mge.Parameter(value=np.random.normal(size=(N, D)).astype(np.float32)) - a = x * y - b = a + z - c = F.sum(b) - grad_x = F.grad(c, x, use_virtual_grad=False) - grad_y = F.grad(c, y, use_virtual_grad=False) - grad_z = F.grad(c, z, use_virtual_grad=False) - print(grad_x.numpy()) - print(grad_y.numpy()) - print(grad_z.numpy()) - m = M.BatchNorm2d(4) - input = tensor(np.zeros((64, 4, 32, 32), dtype=np.float32)) - _ = m(input) - m = M.BatchNorm2d(4, affine=False) - _ = m(input) diff --git a/python_module/test/run.sh b/python_module/test/run.sh deleted file mode 100755 index 7f2d9038..00000000 --- a/python_module/test/run.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -e - -ignore_list="--ignore test/unit/module/test_pytorch.py \ - --ignore test/pytorch_comparison \ - --ignore test/unit/hub/test_hub.py \ - --ignore test/unit/data \ - --ignore test/integration/manual \ - --ignore megengine/module/pytorch \ - --ignore test/unit/module/test_external.py" -test_dirs="megengine test" - -pushd $(dirname "${BASH_SOURCE[0]}")/.. >/dev/null - python3 -m pytest -xv -m 'isolated_distributed' \ - --json-report --json-report-file=time_python_test.json \ - $ignore_list $test_dirs - python3 -m pytest -xv -m 'not internet and not isolated_distributed' \ - --json-report --json-report-file=time_python_test.json \ - $ignore_list $test_dirs -popd >/dev/null diff --git a/python_module/test/unit/__init__.py b/python_module/test/unit/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/core/__init__.py b/python_module/test/unit/core/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/core/test_dynamic_profiling.py b/python_module/test/unit/core/test_dynamic_profiling.py deleted file mode 100644 index 53e603b8..00000000 --- a/python_module/test/unit/core/test_dynamic_profiling.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import json - -import numpy as np - -import megengine.functional as F -from megengine import graph, tensor - - -def test_dynamic_profiling(): - with graph.Graph(): - sz = 16 - - cg = graph.get_default_graph() - - x = tensor(np.arange(0, sz, dtype=np.float32)) - y = F.relu(x) - - str1 = cg.get_mem_allocation_info() - if str1 == "": - return - json_str1 = json.loads(str1) - - z = F.add_update(x, y) - - json_str2 = json.loads(cg.get_mem_allocation_info()) - - diff = lambda l1, l2: [x for x in l1 if x not in l2] - - jdiff = diff(json_str2, json_str1) - assert ( - len(jdiff) == 1 - ), "add_update operator should produce only one opr internally" - - dest_key = list(jdiff[0].keys())[0] - assert ( - jdiff[0][dest_key]["output"][0]["memory"] == sz * 4 - ), "output of add_update operator has wrong allocated size" - - # check add_update is inplace or not - dest_ptr = jdiff[0][dest_key]["output"][0]["dev_ptr"] - - found = False - for li in json_str1: - if "0" in li.keys(): - src_ptr = li["0"]["output"][0]["dev_ptr"] - found = dest_ptr == src_ptr - - assert found == True, "add_update is not inplace" diff --git a/python_module/test/unit/core/test_function.py b/python_module/test/unit/core/test_function.py deleted file mode 100644 index c58978bb..00000000 --- a/python_module/test/unit/core/test_function.py +++ /dev/null @@ -1,169 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy - -import numpy as np - -import megengine.functional as F -from megengine.core import Function, tensor -from megengine.jit import trace -from megengine.test import assertTensorClose - - -def test_a_plus_b(): - data_shape = (1, 9, 2, 6) - av = np.random.random(data_shape).astype(np.float32) - bv = np.random.random(data_shape).astype(np.float32) - a = tensor(av) - b = tensor(bv) - - class MulFunc(Function): - def forward(self, a, b): - return a * b - - def backward(self, grad_o): - return (grad_o * b * 2, grad_o * a * 3) - - c = MulFunc()(a, b).sum() - assertTensorClose(c.numpy(), (av * bv).sum()) - assertTensorClose(F.grad(c, a, use_virtual_grad=False).numpy(), bv * 2) - assertTensorClose(F.grad(c, b, use_virtual_grad=False).numpy(), av * 3) - - -def test_skip_invalid_grad(): - data_shape = (1, 9, 2, 6) - av = np.random.random(data_shape).astype(np.float32) - bv = np.random.random(data_shape).astype(np.float32) - a = tensor(av) - b = tensor(bv) - cookie = tensor(np.random.random(data_shape).astype(np.float32)) - - class EqWithFakeGrad(Function): - def forward(self, a, b): - return a == b - - def backward(self, grad_o): - _ = grad_o - return cookie, cookie - - c = EqWithFakeGrad()(a, b).sum() - assertTensorClose(c.numpy(), (av == bv).sum().astype(np.float32)) - assertTensorClose(F.grad(c, a, use_virtual_grad=False).numpy(), cookie) - assertTensorClose(F.grad(c, b, use_virtual_grad=False).numpy(), cookie) - - -def test_ste(): - class STE(Function): - def forward(self, x): - maxv, minv = x.max(), x.min() - scale = F.maximum(maxv, -minv) / 127 - return F.round(x / scale) * scale - - def backward(self, grad_y): - return grad_y - - data_shape = (1, 9, 2, 6) - av = np.random.random(data_shape).astype(np.float32) - a = tensor(av) - q = STE()(a) - q_2 = (q * 2.0).sum() - assertTensorClose( - F.grad(q_2, a, use_virtual_grad=False).numpy(), - np.broadcast_to(np.array([2.0], dtype=np.float32), data_shape), - ) - - -def test_deepcopy(): - class Sigmoid(Function): - def __init__(self, param): - super().__init__() - self.param = param - - def forward(self, x): - y = 1 / (1 + F.exp(-x)) - self.save_for_backward(y) - return y - - def backward(self, grad_y): - (y,) = self.saved_tensors - return grad_y * y * (1 - y) - - origin = Sigmoid(0) - new = copy.deepcopy(Sigmoid(0)) - assert new.param == origin.param - - -def test_save_context(): - class Sigmoid(Function): - def forward(self, x): - y = 1 / (1 + F.exp(-x)) - self.save_for_backward(y) - return y - - def backward(self, grad_y): - (y,) = self.saved_tensors - return grad_y * y * (1 - y) - - def run_saved_context(a, net=None): - return net(a) - - def run(use_trace, symbolic): - a = tensor(np.array([1926.0817], dtype=np.float32)) - net = Sigmoid() - func_run = run_saved_context - if use_trace: - func_run = trace(run_saved_context, symbolic=symbolic) - s = func_run(a, net=net) - s2 = F.sigmoid(a) - assertTensorClose(s.numpy(), s2.numpy()) - assertTensorClose( - F.grad(s, a, use_virtual_grad=False).numpy(), - F.grad(s2, a, use_virtual_grad=False).numpy(), - ) - - run(False, False) - run(True, False) - run(True, True) - - -def test_none_in_out_grad(): - class Test(Function): - def forward(self, a, b): - return a, b - - def backward(self, grad_a, grad_b): - assert grad_b is None - return (grad_a, 0) - - a = tensor(np.array([1.0], dtype=np.float32)) - b = tensor(np.array([2.0], dtype=np.float32)) - aa, bb = Test()(a, b) - assertTensorClose( - F.grad(aa, a, use_virtual_grad=False).numpy(), np.array([1.0], dtype=np.float32) - ) - assertTensorClose( - F.grad(aa, b, use_virtual_grad=False).numpy(), np.array([0.0], dtype=np.float32) - ) - - -def test_zero_grad(): - class StopGradient(Function): - def forward(self, a): - return a - - def backward(self, *_): - return None - - a = tensor(np.array([1.0], dtype=np.float32)) - b = a * 3.0 - c = a * 4.0 - loss = StopGradient()(b) + c - assertTensorClose( - F.grad(loss, a, use_virtual_grad=False).numpy(), - np.array([4.0], dtype=np.float32), - ) diff --git a/python_module/test/unit/core/test_graph.py b/python_module/test/unit/core/test_graph.py deleted file mode 100644 index 5f5fbe95..00000000 --- a/python_module/test/unit/core/test_graph.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest -from helpers import MLP - -import megengine._internal as mgb -import megengine.functional as F -from megengine.core import Graph -from megengine.module import Linear, Module -from megengine.optimizer import SGD -from megengine.test import assertTensorClose - - -def test_compile_multi_times_eager(): - return # XXX: rewrite or remove this test - data = Input("data", shape=(2, 28)) - label = Input("label", shape=(2,), dtype=np.int32) - - mlp = MLP() - opt = SGD(mlp.parameters(requires_grad=True), lr=0.01) - - pred0 = mlp(data) - pred = F.softmax(pred0) - loss = F.square_loss(pred, label.reshape(2, 1)) - opt.zero_grad() - grads = opt.backward(loss) - opt.step() - - f0 = compile(pred, None) - f1 = compile([pred, loss], grads, copy=False) - for _ in range(3): - data = np.random.random((2, 28)).astype(np.float32) - label = np.random.randint(0, 10, (2,)).astype(np.float32) - out0 = f0(data=data) - out1 = f1(data=data, label=label) - assertTensorClose(out0[0], out1[0]) - - -def test_compile_multi_times_static(): - return # XXX: rewrite or remove this test - with Graph() as cg: - cg.set_option("eager_evaluation", False) - data = Input("data", shape=(2, 28)) - label = Input("label", shape=(2,), dtype=np.int32) - - mlp = MLP() - opt = SGD(mlp.parameters(requires_grad=True), lr=0.01) - - pred0 = mlp(data) - pred = F.softmax(pred0) - loss = F.square_loss(pred, label.reshape(2, 1)) - opt.zero_grad() - grads = opt.backward(loss) - opt.step() - - f0 = compile(pred, None) - f1 = compile([pred, loss], grads, copy=True) - - data = np.random.random((2, 28)).astype(np.float32) - label = np.random.randint(0, 10, (2,)).astype(np.float32) - out0 = f0(data=data) - out1 = f1(data=data, label=label) - assertTensorClose(out0[0], out1[0]) - - _ = compile([pred, loss], grads, copy=False) - with pytest.raises(mgb.MegBrainError): - f0(data=data) diff --git a/python_module/test/unit/core/test_index.py b/python_module/test/unit/core/test_index.py deleted file mode 100644 index 4121c08f..00000000 --- a/python_module/test/unit/core/test_index.py +++ /dev/null @@ -1,311 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from megengine import Tensor, tensor -from megengine.jit import trace -from megengine.test import assertTensorClose - - -def check_equal(np_tensor, mge_tensor): - assertTensorClose(np_tensor, mge_tensor.numpy()) - - -def test_index(): - a_shape = (10, 10, 10, 10, 10) - a = np.random.random(a_shape).astype(dtype=np.float32) - b = tensor(a) - test_set = {} - test_set["a"] = np.random.random(a_shape).astype(dtype=np.float32) - test_set["b"] = tensor(test_set["a"]) - test_set["c"] = tensor(test_set["a"]) - - def check_id_2(np_idx, mge_idx): - # print('start :', mge_idx) - def get_b(symbolic, *args): - # print('get_b:', args) - def get_func(inp): - for i in mge_idx: - if isinstance(i, (list, Tensor)): - return inp.ai[mge_idx] - return inp[mge_idx] - - func = trace(get_func, symbolic=symbolic) - return func(*args) - - def set_b(symbolic, *args): - # print('set_b:', args) - def set_func(inp, val): - for i in mge_idx: - if isinstance(i, (list, Tensor)): - return inp.set_ai(val)[mge_idx] - return inp.set_subtensor(val)[mge_idx] - - func = trace(set_func, symbolic=symbolic) - return func(*args) - - sub_a = a[np_idx] - for symbolic in [True, False]: - sub_b = get_b(symbolic, b) - check_equal(sub_a, sub_b) - # do not support set - # print(mge_idx) - if not mge_idx: - continue - go_flag = False - for i in mge_idx: - if i is np.newaxis: - go_flag = True - break - if go_flag: - continue - if not symbolic: - test_set["b"] = set_b(symbolic, test_set["b"], sub_b) - check_equal(test_set["a"], test_set["b"]) - else: - test_set["a"][np_idx] = sub_a - test_set["c"] = set_b(symbolic, test_set["c"], sub_b) - check_equal(test_set["a"], test_set["c"]) - - def check_idx(*idx): - check_id_2(idx, idx) - - def tensor_wrap(*idx): - check_idx(*idx) - tensor_idx = [] - numpy_idx = [] - for i in idx: - numpy_idx.append(np.asarray(i).astype(np.int32)) - tensor_idx.append(tensor(numpy_idx[-1])) - a_idx = tuple(numpy_idx) - b_idx = tuple(tensor_idx) - check_id_2(a_idx, b_idx) - - def test_one_dim(): - check_idx(-7) - check_idx(-7, -7) - check_idx(-7, -7, -7) - check_idx(-7, -7, -7, -7) - check_idx(-7, -7, -7, -7, -7) - check_idx(7, 7, 7, 7, 7) - check_idx(7, 7, 7, 7) - check_idx(7, 7, 7) - check_idx(7, 7) - check_idx(7) - check_idx() - - def test_slice(): - - check_idx(slice(1, 7)) - check_idx(slice(1, 7)) - check_idx(slice(7, None)) - check_idx(slice(1, 7, 2)) - check_idx(slice(-7, 5)) - check_idx(slice(7, None, 7)) - check_idx(slice(None, 7, 7)) - - def test_new_axis(): - check_idx(7, np.newaxis, 7) - check_idx(7, np.newaxis, slice(3, 7)) - - def test_ellipsis(): - check_idx(..., 7) - - check_idx(7, ...) - - check_idx(7, ..., 7, 7) - - check_idx(7, ..., 7, -7) - - check_idx(7, ..., slice(1, 7), -7) - - def test_integer_array(): - - index = [[6, 7, 8], [9, 7, 4], [1, 1, 1], [3, 5, 6], [7, 8, 1]] - - tensor_wrap(index[0]) - tensor_wrap(index[0], index[1]) - tensor_wrap(index[0], index[1], index[2]) - tensor_wrap(index[0], index[1], index[2], index[3]) - tensor_wrap(index[0], index[1], index[2], index[3], index[4]) - - # multi dimension - index = [ - [6, 7, 8, 8, 9, 7], - [9, 7, 4, 1, 8, 2], - [1, 1, 1, 0, 3, 3], - [3, 5, 6, 1, 6, 3], - [7, 8, 1, 1, 8, 2], - ] - - tensor_wrap(index[0]) - tensor_wrap(index[0], index[1]) - tensor_wrap(index[0], index[1], index[2]) - tensor_wrap(index[0], index[1], index[2], index[3]) - tensor_wrap(index[0], index[1], index[2], index[3], index[4]) - - # braodcast - # index = [ - # [6, 7, 8, 8, 9, 7], # 2 * 3 - # [2], # 1 - # [1, 1, 1], # 1 * 3 - # [6, 2], # 2 * 1 - # [7, 8, 1, 1, 8, 2], # 2 * 3 - # ] - - # tensor_wrap(index[0]) - # tensor_wrap(index[0], index[1]) - # tensor_wrap(index[0], index[1], index[2]) - # tensor_wrap(index[0], index[1], index[2], index[3]) - # tensor_wrap(index[0], index[1], index[2], index[3], index[4]) - - def test_multi_dim(): - check_equal(a[7][7, 7, 7], b[7][7, 7, 7]) - check_equal(a[7, 7, 7][7], b[7, 7, 7][7]) - - check_equal(a[7][7][7, 7], b[7][7][7, 7]) - check_equal(a[7][7, 7][7], b[7][7, 7][7]) - check_equal(a[7, 7][7][7], b[7, 7][7][7]) - - check_equal(a[7, 7, 7][7, 7], b[7, 7, 7][7, 7]) - check_equal(a[7, 7][7, 7, 7], b[7, 7][7, 7, 7]) - - check_equal(a[7][1:7:2], b[7][1:7:2]) - - check_equal(a[7][7:], b[7][7:]) - - check_equal(a[7][-7:-1], b[7][-7:-1]) - - check_equal(a[7][-1:-7:-1], b[7][-1:-7:-1]) - - check_equal(a[7:8][:], b[7:8][:]) - check_equal(a[7][:], b[7][:]) - - check_equal(a[7][:][7], b[7][:][7]) - check_equal(a[:][7][7], b[:][7][7]) - - check_equal(a[7][7], b[7][7]) - check_equal(a[7][7][7], b[7][7][7]) - check_equal(a[7][7][7][7], b[7][7][7][7]) - check_equal(a[7][7][7][7][7], b[7][7][7][7][7]) - - def test_hard(): - check_idx(slice(None, None), [6, 7, 8], slice(0, 7), [6, 7, 8]) - check_idx(slice(None, None), slice(0, 7), [6, 7, 8], [6, 7, 8]) - # check_idx(slice(None, None), slice(0, 7), [[6], [7], [8]], [[6, 7, 8]]) - # check_idx(slice(None, None), [[6, 7, 8]], slice(1, 3), [[6], [7], [8]]) - # check_idx(slice(None, None), [[6, 7, 8]], [[6], [7], [8]], slice(1, 3)) - check_idx([6, 7, 8], [6, 7, 8], 7, slice(2, 7)) - # check_idx(Ellipsis, 1, [[[6]]], [[[0]]], slice(1, 4, 2)) - # check_idx(slice(2, 4, 2), 1, Ellipsis, 0, [[[7]], [[3]]]) - # check_idx(slice(7, 10, 2), 3, Ellipsis, [[[5, 0]]], [[[3, 1]]]) - # check_idx(slice(7, 9, 1), [[[4]]], 8, Ellipsis, [[[6]], [[9]]]) - - def test_super_random(): - from random import randint - from random import random as rand - - def true_or_false(ture_prob): - return rand() < ture_prob - - def random_list(limit, size, one_base=False): - if one_base: - return [randint(1, limit) for _ in range(0, size)] - else: - # 0 <= x < limit - return [randint(0, limit - 1) for _ in range(0, size)] - - def generate_random_int_matrix(limit, shape): - if len(shape) == 0: - return [] - if len(shape) == 1: - return random_list(limit, shape[0]) - return [ - generate_random_int_matrix(limit, shape[1:]) for _ in range(0, shape[0]) - ] - - def generate_boardcast_shape(limit_shape): - # new_len = randint(1, len(limit_shape)) - new_len = len(limit_shape) - return [(1 if true_or_false(0.3) else i) for i in limit_shape[:new_len]] - - def g_slice(size): - start = randint(0, size) - if start == size: - start = None - end = randint(1 if start is None else start + 1, size + 1) - if end == size + 1: - end = None - return slice(start, end, 1 if true_or_false(0.3) else 2) - - def g_int(size): - return randint(0, size - 1) - - def g_inedx(limit_shape): - new_len = randint(len(limit_shape) // 2, len(limit_shape)) - output = [] - # [5] -> (0 ~ 4) - - cur_dim, cur_new = len(limit_shape), 0 - use_int_array = False - i = 0 - while len(output) < new_len: - flag = rand() - single_idx = None - old_dim, old_new, old_use_int_array = cur_dim, cur_new, use_int_array - if flag < 0.3: - single_idx = g_int(limit_shape[i]) - cur_dim -= 1 - elif flag < 0.5: - single_idx = g_slice(limit_shape[i]) - elif flag < 0.9: - if not use_int_array: - board_cast_dim = random_list(10, 1, one_base=True) - cur_dim += len(board_cast_dim) - use_int_array = True - cur_dim -= 1 - integer_array_shape = generate_boardcast_shape(board_cast_dim) - single_idx = generate_random_int_matrix( - limit_shape[i], integer_array_shape - ) - else: - cur_dim += 1 - cur_new += 1 - single_idx = np.newaxis - # MAX_DIM < 7 - if cur_dim > 7 or cur_new + len(limit_shape) > 7: - cur_dim, cur_new, use_int_array = ( - old_dim, - old_new, - old_use_int_array, - ) - continue - if not single_idx is np.newaxis: - i += 1 - output.append(single_idx) - # print('[cur_dim]: ', cur_dim, output) - - if cur_dim < 7 and rand() < 0.3 and new_len < len(limit_shape): - output.insert(randint(0, len(output)), Ellipsis) - - return tuple(output) - - for i in range(0, 17): - idx = g_inedx(a_shape) - # print('[task {}] {}'.format(i, idx)) - check_idx(*idx) - - test_one_dim() - test_multi_dim() - test_slice() - test_new_axis() - test_ellipsis() - test_integer_array() - test_hard() - test_super_random() diff --git a/python_module/test/unit/core/test_recoverable.py b/python_module/test/unit/core/test_recoverable.py deleted file mode 100644 index 86735d1e..00000000 --- a/python_module/test/unit/core/test_recoverable.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine as mge -import megengine._internal as mgb -from megengine.core import tensor -from megengine.test import assertTensorClose - - -def test_recoverable(): - a = tensor() - b = tensor() - a_np = np.random.random((4, 3)).astype("float32") - b_np = np.random.random((3, 7)).astype("float32") - a.set_value(a_np) - b.set_value(b_np) - - # Do some normal computation. - a2 = a * 2 - ab = a @ b - - # Raise a computation error. - with pytest.raises(mgb.MegBrainError): - _ = a * b - - # Variable a2 and ab should be still usable after error happened. - assertTensorClose(a2.numpy(), a_np * 2) - assertTensorClose(ab.numpy(), a_np @ b_np) - - # Should allow computation as well. - ab2 = ab ** 2 - assertTensorClose(ab2.numpy(), (a_np @ b_np) ** 2) diff --git a/python_module/test/unit/core/test_release_memory.py b/python_module/test/unit/core/test_release_memory.py deleted file mode 100644 index cf2ef0ac..00000000 --- a/python_module/test/unit/core/test_release_memory.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import time - -import numpy as np -import pytest -from helpers import has_gpu - -import megengine as mge -import megengine.functional as F -from megengine.optimizer import SGD - - -@pytest.mark.skip -@pytest.mark.slow -def test_release_memory(): - mnist_datasets = load_mnist_datasets() - data_train, label_train = mnist_datasets["train"] - - batch_size = 15000 - data_shape = (batch_size, 1, 28, 28) - label_shape = (batch_size,) - - data = nn.Input("data", shape=data_shape, dtype=np.float32) - label = nn.Input( - "label", shape=label_shape, dtype=np.int32, value=np.zeros(label_shape) - ) - - net = MnistNet() - opt = SGD(net.parameters(), lr=0.01) - - pred = F.softmax(net(data)) - loss = F.cross_entropy(pred, label) - - opt.zero_grad() - opt.backward(loss) - add_updates = opt.step() - - mge.graph._default_graph.get_default().clear_device_memory() - - f = mge.graph.compile(loss, add_updates) - - for _ in range(3): - train_loss = 0.0 - for i in range(0, data_train.shape[0], batch_size): - opt.zero_grad() - data = data_train[i : i + batch_size, :, :, :] - label = label_train[i : i + batch_size] - loss = f(data=data, label=label)[0] - train_loss += loss[0] diff --git a/python_module/test/unit/core/test_reshape_broadcast.py b/python_module/test/unit/core/test_reshape_broadcast.py deleted file mode 100644 index 87469906..00000000 --- a/python_module/test/unit/core/test_reshape_broadcast.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -from megengine import tensor -from megengine.test import assertTensorClose - - -def test_reshape_tuple(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(inp.shape) - - assertTensorClose(out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(4, 4)) - - -def test_reshape_asterisk(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(*inp.shape) - - assertTensorClose(out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(4, 4)) - - -def test_reshape_shapeof(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(inp.shapeof()) - - assertTensorClose(out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(4, 4)) - - -def test_reshape_tensor(): - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(tensor([4, 4])) - - assertTensorClose(out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(4, 4)) - - -def test_reshape_tensor_fused(): - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(tensor([4, 4]), 1) - - assertTensorClose(out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(4, 4, 1)) - - -def test_reshape_fused(): - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - out = out.reshape(tensor(2), 2, tensor(4), 1) - - assertTensorClose( - out.numpy(), np.arange(100, 116, dtype=np.int32).reshape(2, 2, 4, 1) - ) - - -def test_reshape_wrong_tuple(): - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - with pytest.raises(ValueError): - out = out.reshape((2, 2), 4) - - -def test_reshape_wrong_tuple2(): - out = tensor(np.arange(100, 116, dtype=np.int32).reshape(1, 16)) - with pytest.raises(AssertionError): - out = out.reshape(4, (2, 2)) - - -def test_broadcast_tuple(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 104, dtype=np.int32).reshape(1, 4)) - - out = out.broadcast(inp.shape) - - tmp = np.array([[100, 101, 102, 103]], dtype=np.int32) - out2 = np.repeat(tmp, 4, axis=0) - - assertTensorClose(out.numpy(), out2) - - -def test_broadcast_asterisk(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 104, dtype=np.int32).reshape(1, 4)) - - out = out.broadcast(*inp.shape) - - tmp = np.array([[100, 101, 102, 103]], dtype=np.int32) - out2 = np.repeat(tmp, 4, axis=0) - - assertTensorClose(out.numpy(), out2) - - -def test_broadcast_shapeof(): - inp = tensor(np.arange(1, 17, dtype=np.int32).reshape(4, 4)) - out = tensor(np.arange(100, 104, dtype=np.int32).reshape(1, 4)) - - out = out.broadcast(inp.shapeof()) - - tmp = np.array([[100, 101, 102, 103]], dtype=np.int32) - out2 = np.repeat(tmp, 4, axis=0) - - assertTensorClose(out.numpy(), out2) diff --git a/python_module/test/unit/core/test_serialization.py b/python_module/test/unit/core/test_serialization.py deleted file mode 100644 index 85c30eb0..00000000 --- a/python_module/test/unit/core/test_serialization.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import pickle -from tempfile import TemporaryFile - -import numpy as np - -from megengine.core import Buffer, Parameter, tensor -from megengine.test import assertTensorClose - - -def test_tensor_serialization(): - def tensor_eq(a, b): - assert a.dtype == b.dtype - assert a.device == b.device - assert a.requires_grad == b.requires_grad - assertTensorClose(a, b) - - with TemporaryFile() as f: - data = np.random.randint(low=0, high=7, size=[233]) - a = tensor(data, device="xpux", dtype=np.int32) - pickle.dump(a, f) - f.seek(0) - b = pickle.load(f) - tensor_eq(a, b) - - with TemporaryFile() as f: - a = Parameter(np.random.random(size=(233, 2)).astype(np.float32)) - pickle.dump(a, f) - f.seek(0) - b = pickle.load(f) - assert isinstance(b, Parameter) - tensor_eq(a, b) - - with TemporaryFile() as f: - a = Buffer(np.random.random(size=(2, 233)).astype(np.float32)) - pickle.dump(a, f) - f.seek(0) - b = pickle.load(f) - assert isinstance(b, Buffer) - tensor_eq(a, b) diff --git a/python_module/test/unit/core/test_tensor.py b/python_module/test/unit/core/test_tensor.py deleted file mode 100644 index 3ac0a4c8..00000000 --- a/python_module/test/unit/core/test_tensor.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine as mge -import megengine._internal as mgb - - -def test_wrong_dtype(): - with pytest.raises(TypeError): - mge.tensor(np.zeros((5, 5), dtype=np.float64)) - - with pytest.raises(TypeError): - mge.Parameter(np.zeros((5, 5), dtype=np.int64)) - - -def test_tensor_routine(): - mge.tensor(np.zeros((1, 2), dtype=np.int32)) - - mge.tensor([1]) - - mge.tensor(1.5) - - -def test_tensor_set_dtype(): - def check_dtype_value(tensor, dtype_scale, value): - if mgb.dtype.is_quantize(tensor.dtype): - if np.abs(mgb.dtype.get_scale(tensor.dtype) - dtype_scale) > 1e-5: - raise AssertionError( - "compare scale failed expect {} got {}".format( - dtype_scale, mgb.dtype.get_scale(tensor.dtype) - ) - ) - if np.abs(tensor.numpy()[0][0] - value) > 1e-5: - raise AssertionError( - "compare value failed expect {} got {}".format( - tensor.numpy()[0][0], value - ) - ) - - t = mge.Parameter(np.ones((3, 4), dtype="float32")) - t.dtype = mgb.dtype.qint8(0.1) - check_dtype_value(t, 0.1, 10) - - t = mge.Parameter(np.ones((3, 4), dtype=mgb.dtype.qint8(1))) - t.dtype = mgb.dtype.qint8(0.3) - check_dtype_value(t, 0.3, 3) - - t = mge.Buffer(np.ones((3, 4), dtype="float32")) - t.dtype = mgb.dtype.qint8(0.1) - check_dtype_value(t, 0.1, 10) - - t = mge.Buffer(np.ones((3, 4), dtype=mgb.dtype.qint8(1))) - t.dtype = mgb.dtype.qint8(0.3) - check_dtype_value(t, 0.3, 3) - - t = mge.Buffer(np.ones((3, 4), dtype="float32")) - s = t + 1 - s.dtype = mgb.dtype.qint8(0.2) - check_dtype_value(s, 0.2, 10) - - t.dtype = mgb.dtype.qint8(0.3) - s = t + 1 - s.dtype = mgb.dtype.qint8(0.1) - check_dtype_value(s, 0.1, 18) - s.dtype = "float32" - check_dtype_value(s, 0, 1.8) - - -def test_tensor_name(): - p = mge.Parameter(np.ones((3, 4), dtype="float32")) - assert "shared" in p.name - with pytest.raises(ValueError): - p.name = "Parameter0" - - b = mge.Buffer(np.ones((3, 4), dtype="float32")) - assert "shared" in b.name - with pytest.raises(ValueError): - b.name = "Buffer0" - - s = b + 1 - assert "ADD" in s.name - s.name = "WeightAdd1" - assert s.name == "WeightAdd1" diff --git a/python_module/test/unit/core/test_zeros_ones.py b/python_module/test/unit/core/test_zeros_ones.py deleted file mode 100644 index 4d14653b..00000000 --- a/python_module/test/unit/core/test_zeros_ones.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine as mge -from megengine.test import assertTensorClose - - -def test_zeros(): - assertTensorClose( - mge.zeros((2, 2), dtype=np.int32).numpy(), np.zeros((2, 2), dtype=np.int32) - ) - - assertTensorClose( - mge.zeros(mge.tensor([2, 2], dtype=np.int32), dtype=np.int32).numpy(), - np.zeros((2, 2), dtype=np.int32), - ) - - -def test_ones(): - assertTensorClose( - mge.ones((2, 2), dtype=np.int32).numpy(), np.ones((2, 2), dtype=np.int32) - ) - - assertTensorClose( - mge.ones(mge.tensor([2, 2], dtype=np.int32), dtype=np.int32).numpy(), - np.ones((2, 2), dtype=np.int32), - ) diff --git a/python_module/test/unit/data/__init__.py b/python_module/test/unit/data/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/data/test_dataloader.py b/python_module/test/unit/data/test_dataloader.py deleted file mode 100644 index 6bb0f3e3..00000000 --- a/python_module/test/unit/data/test_dataloader.py +++ /dev/null @@ -1,183 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import time - -import numpy as np -import pytest - -from megengine.data.collator import Collator -from megengine.data.dataloader import DataLoader -from megengine.data.dataset import ArrayDataset -from megengine.data.sampler import RandomSampler, SequentialSampler -from megengine.data.transform import PseudoTransform, Transform - - -def init_dataset(): - sample_num = 100 - rand_data = np.random.randint(0, 255, size=(sample_num, 1, 32, 32), dtype=np.uint8) - label = np.random.randint(0, 10, size=(sample_num,), dtype=int) - dataset = ArrayDataset(rand_data, label) - return dataset - - -def test_dataloader_init(): - dataset = init_dataset() - with pytest.raises(ValueError): - dataloader = DataLoader(dataset, num_workers=2, divide=True) - with pytest.raises(ValueError): - dataloader = DataLoader(dataset, num_workers=-1) - with pytest.raises(ValueError): - dataloader = DataLoader(dataset, timeout=-1) - with pytest.raises(ValueError): - dataloader = DataLoader(dataset, num_workers=0, divide=True) - - dataloader = DataLoader(dataset) - assert isinstance(dataloader.sampler, SequentialSampler) - assert isinstance(dataloader.transform, PseudoTransform) - assert isinstance(dataloader.collator, Collator) - - dataloader = DataLoader( - dataset, sampler=RandomSampler(dataset, batch_size=6, drop_last=False) - ) - assert len(dataloader) == 17 - dataloader = DataLoader( - dataset, sampler=RandomSampler(dataset, batch_size=6, drop_last=True) - ) - assert len(dataloader) == 16 - - -def test_dataloader_serial(): - dataset = init_dataset() - dataloader = DataLoader( - dataset, sampler=RandomSampler(dataset, batch_size=4, drop_last=False) - ) - for (data, label) in dataloader: - assert data.shape == (4, 1, 32, 32) - assert label.shape == (4,) - - -def test_dataloader_parallel(): - # set max shared memory to 100M - os.environ["MGE_PLASMA_MEMORY"] = "100000000" - - dataset = init_dataset() - dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=4, drop_last=False), - num_workers=2, - divide=False, - ) - for (data, label) in dataloader: - assert data.shape == (4, 1, 32, 32) - assert label.shape == (4,) - - dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=4, drop_last=False), - num_workers=2, - divide=True, - ) - for (data, label) in dataloader: - assert data.shape == (4, 1, 32, 32) - assert label.shape == (4,) - - -def test_dataloader_parallel_timeout(): - dataset = init_dataset() - - class TimeoutTransform(Transform): - def __init__(self): - pass - - def apply(self, input): - time.sleep(10) - return input - - dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=4, drop_last=False), - transform=TimeoutTransform(), - num_workers=2, - timeout=2, - ) - with pytest.raises(RuntimeError, match=r".*timeout.*"): - data_iter = iter(dataloader) - batch_data = next(data_iter) - - -def test_dataloader_parallel_worker_exception(): - dataset = init_dataset() - - class FakeErrorTransform(Transform): - def __init__(self): - pass - - def apply(self, input): - y = x + 1 - return input - - dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=4, drop_last=False), - transform=FakeErrorTransform(), - num_workers=2, - ) - with pytest.raises(RuntimeError, match=r"worker.*died"): - data_iter = iter(dataloader) - batch_data = next(data_iter) - - -def _multi_instances_parallel_dataloader_worker(): - dataset = init_dataset() - - for divide_flag in [True, False]: - train_dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=4, drop_last=False), - num_workers=2, - divide=divide_flag, - ) - val_dataloader = DataLoader( - dataset, - sampler=RandomSampler(dataset, batch_size=10, drop_last=False), - num_workers=2, - divide=divide_flag, - ) - for idx, (data, label) in enumerate(train_dataloader): - assert data.shape == (4, 1, 32, 32) - assert label.shape == (4,) - if idx % 5 == 0: - for val_data, val_label in val_dataloader: - assert val_data.shape == (10, 1, 32, 32) - assert val_label.shape == (10,) - - -def test_dataloader_parallel_multi_instances(): - # set max shared memory to 100M - os.environ["MGE_PLASMA_MEMORY"] = "100000000" - - _multi_instances_parallel_dataloader_worker() - - -def test_dataloader_parallel_multi_instances_multiprocessing(): - # set max shared memory to 100M - os.environ["MGE_PLASMA_MEMORY"] = "100000000" - - import multiprocessing as mp - - # mp.set_start_method("spawn") - processes = [] - for i in range(4): - p = mp.Process(target=_multi_instances_parallel_dataloader_worker) - p.start() - processes.append(p) - - for p in processes: - p.join() diff --git a/python_module/test/unit/data/test_dataset.py b/python_module/test/unit/data/test_dataset.py deleted file mode 100644 index d68d3784..00000000 --- a/python_module/test/unit/data/test_dataset.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import sys - -import numpy as np -import pytest - -from megengine.data.dataset import ArrayDataset, Dataset, MapDataset, StreamDataset - - -def test_abstract_cls(): - with pytest.raises(TypeError): - Dataset() - with pytest.raises(TypeError): - MapDataset() - with pytest.raises(TypeError): - StreamDataset() - - -def test_array_dataset(): - size = (10,) - data_shape = (3, 256, 256) - label_shape = (1,) - data = np.random.randint(0, 255, size + data_shape) - label = np.random.randint(0, 9, size + label_shape) - dataset = ArrayDataset(data, label) - assert dataset[0][0].shape == data_shape - assert dataset[0][1].shape == label_shape - assert len(dataset) == size[0] - - -def test_array_dataset_dim_error(): - data = np.random.randint(0, 255, (10, 3, 256, 256)) - label = np.random.randint(0, 9, (1,)) - with pytest.raises(ValueError): - ArrayDataset(data, label) diff --git a/python_module/test/unit/data/test_sampler.py b/python_module/test/unit/data/test_sampler.py deleted file mode 100644 index bc399e86..00000000 --- a/python_module/test/unit/data/test_sampler.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy -import os -import sys - -import numpy as np -import pytest - -from megengine.data.dataset import ArrayDataset -from megengine.data.sampler import RandomSampler, ReplacementSampler, SequentialSampler - - -def test_sequential_sampler(): - indices = list(range(100)) - sampler = SequentialSampler(ArrayDataset(indices)) - assert indices == list(each[0] for each in sampler) - - -def test_RandomSampler(): - indices = list(range(20)) - indices_copy = copy.deepcopy(indices) - sampler = RandomSampler(ArrayDataset(indices_copy)) - sample_indices = sampler - assert indices != list(each[0] for each in sample_indices) - assert indices == sorted(list(each[0] for each in sample_indices)) - - -def test_random_sampler_seed(): - seed = [0, 1] - indices = list(range(20)) - indices_copy1 = copy.deepcopy(indices) - indices_copy2 = copy.deepcopy(indices) - indices_copy3 = copy.deepcopy(indices) - sampler1 = RandomSampler(ArrayDataset(indices_copy1), seed=seed[0]) - sampler2 = RandomSampler(ArrayDataset(indices_copy2), seed=seed[0]) - sampler3 = RandomSampler(ArrayDataset(indices_copy3), seed=seed[1]) - assert indices != list(each[0] for each in sampler1) - assert indices != list(each[0] for each in sampler2) - assert indices != list(each[0] for each in sampler3) - assert indices == sorted(list(each[0] for each in sampler1)) - assert indices == sorted(list(each[0] for each in sampler2)) - assert indices == sorted(list(each[0] for each in sampler3)) - assert list(each[0] for each in sampler1) == list(each[0] for each in sampler2) - assert list(each[0] for each in sampler1) != list(each[0] for each in sampler3) - - -def test_ReplacementSampler(): - num_samples = 30 - indices = list(range(20)) - weights = list(range(20)) - sampler = ReplacementSampler( - ArrayDataset(indices), num_samples=num_samples, weights=weights - ) - assert len(list(each[0] for each in sampler)) == num_samples - - -def test_sampler_drop_last_false(): - batch_size = 5 - drop_last = False - indices = list(range(24)) - sampler = SequentialSampler( - ArrayDataset(indices), batch_size=batch_size, drop_last=drop_last - ) - assert len([each for each in sampler]) == len(sampler) - - -def test_sampler_drop_last_true(): - batch_size = 5 - drop_last = True - indices = list(range(24)) - sampler = SequentialSampler( - ArrayDataset(indices), batch_size=batch_size, drop_last=drop_last - ) - assert len([each for each in sampler]) == len(sampler) diff --git a/python_module/test/unit/data/test_transform.py b/python_module/test/unit/data/test_transform.py deleted file mode 100644 index d438d8b5..00000000 --- a/python_module/test/unit/data/test_transform.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -from megengine.data.transform import * - -data_shape = (100, 100, 3) -label_shape = (4,) -ToMode_target_shape = (3, 100, 100) -CenterCrop_size = (90, 70) -CenterCrop_target_shape = CenterCrop_size + (3,) -RandomResizedCrop_size = (50, 50) -RandomResizedCrop_target_shape = RandomResizedCrop_size + (3,) - - -def generate_data(): - return [ - ( - (np.random.rand(*data_shape) * 255).astype(np.uint8), - np.random.randint(10, size=label_shape), - ) - for _ in range(*label_shape) - ] - - -def test_ToMode(): - t = ToMode(mode="CHW") - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(ToMode_target_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_CenterCrop(): - t = CenterCrop(output_size=CenterCrop_size) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(CenterCrop_target_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_ColorJitter(): - t = ColorJitter() - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(data_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_RandomHorizontalFlip(): - t = RandomHorizontalFlip(prob=1) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(data_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_RandomVerticalFlip(): - t = RandomVerticalFlip(prob=1) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(data_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_RandomResizedCrop(): - t = RandomResizedCrop(output_size=RandomResizedCrop_size) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(RandomResizedCrop_target_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_Normalize(): - t = Normalize() - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [(data_shape, label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_RandomCrop(): - t = RandomCrop((150, 120), padding_size=10, padding_value=[1, 2, 3]) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - target_shape = [((150, 120, 3), label_shape)] * 4 - assert aug_data_shape == target_shape - - -def test_Compose(): - t = Compose( - [ - CenterCrop(output_size=CenterCrop_size), - RandomHorizontalFlip(prob=1), - ToMode(mode="CHW"), - ] - ) - aug_data = t.apply_batch(generate_data()) - aug_data_shape = [(a.shape, b.shape) for a, b in aug_data] - print(aug_data_shape) - target_shape = [((3, 90, 70), label_shape)] * 4 - assert aug_data_shape == target_shape diff --git a/python_module/test/unit/distributed/test_functional.py b/python_module/test/unit/distributed/test_functional.py deleted file mode 100644 index 8bbaf7e0..00000000 --- a/python_module/test/unit/distributed/test_functional.py +++ /dev/null @@ -1,467 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -import multiprocessing as mp -import platform - -import numpy as np -import pytest - -import megengine as mge -import megengine.distributed as dist -from megengine.core import Parameter, tensor - - -def _init_process_group_wrapper(world_size, rank, dev, backend, q): - if rank == 0: - dist.init_process_group("localhost", 0, world_size, rank, dev, backend) - q.put(dist.get_master_port()) - else: - port = q.get() - dist.init_process_group("localhost", port, world_size, rank, dev, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_reduce_sum(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.reduce_sum(inp) - if rank == 0: - assert np.allclose(output.numpy(), expect) - else: - assert np.allclose(output.numpy(), 0) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = x + y - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, None, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_gather(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.gather(inp) - if rank == 0: - assert np.allclose(output.numpy(), expect) - else: - assert np.allclose(output.numpy(), 0) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = np.concatenate((x, y)) - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, None, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_broadcast(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.broadcast(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = x + 1 - p0 = mp.Process(target=worker, args=(0, x, backend, x, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, x, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_scatter(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.scatter(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = x + 1 - p0 = mp.Process( - target=worker, args=(0, x, backend, x[: shape[0] // 2], port_queue) - ) - p1 = mp.Process( - target=worker, args=(1, y, backend, x[shape[0] // 2 :], port_queue) - ) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (100, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_all_to_all(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.all_to_all(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - a = np.concatenate((x[: shape[0] // 2], y[: shape[0] // 2])) - b = np.concatenate((x[shape[0] // 2 :], y[shape[0] // 2 :])) - p0 = mp.Process(target=worker, args=(0, x, backend, a, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, b, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (100, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_all_gather(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.all_gather(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = np.concatenate((x, y)) - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, z, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_reduce_scatter_sum(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.reduce_scatter_sum(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = x + y - p0 = mp.Process( - target=worker, args=(0, x, backend, z[: shape[0] // 2], port_queue) - ) - p1 = mp.Process( - target=worker, args=(1, y, backend, z[shape[0] // 2 :], port_queue) - ) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 4), (8, 10), (88, 44)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_all_reduce_sum(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.all_reduce_sum(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = x + y - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, z, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_all_reduce_max(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.all_reduce_max(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = np.maximum(x, y) - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, z, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_all_reduce_min(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = tensor(data) - output = dist.functional.all_reduce_min(inp) - assert np.allclose(output.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = np.random.rand(*shape).astype("float32") - z = np.minimum(x, y) - p0 = mp.Process(target=worker, args=(0, x, backend, z, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, z, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_bcast_param(): - world_size = 2 - - def worker(rank, data, backend, expect, port_queue): - if mge.get_device_count("gpu") < world_size: - return - _init_process_group_wrapper(world_size, rank, rank, backend, port_queue) - inp = Parameter(data) - dist.functional.bcast_param(inp) - assert np.allclose(inp.numpy(), expect) - - def check(shape, backend): - port_queue = mp.Queue() - x = np.random.rand(*shape).astype("float32") - y = x + 1 - p0 = mp.Process(target=worker, args=(0, x, backend, x, port_queue)) - p1 = mp.Process(target=worker, args=(1, y, backend, x, port_queue)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - for shape in [(2, 3), (8, 10), (99, 77)]: - for backend in ["nccl"]: - check(shape, backend) diff --git a/python_module/test/unit/distributed/test_util.py b/python_module/test/unit/distributed/test_util.py deleted file mode 100644 index 04b34244..00000000 --- a/python_module/test/unit/distributed/test_util.py +++ /dev/null @@ -1,187 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import multiprocessing as mp -import platform -import queue -from time import sleep - -import pytest - -import megengine as mge -import megengine._internal as mgb -import megengine.distributed as dist - -_LOCALHOST = "127.0.0.1" - - -def _assert_q_empty(q): - try: - res = q.get(timeout=1) - except Exception as e: - assert isinstance(e, queue.Empty) - else: - assert False, "queue is not empty" - - -def _assert_q_val(q, val): - ret = q.get() - assert ret == val - - -def _init_process_group_wrapper(world_size, rank, dev, backend, q): - if rank == 0: - dist.init_process_group(_LOCALHOST, 0, world_size, rank, dev, backend) - q.put(dist.get_master_port()) - else: - port = q.get() - dist.init_process_group(_LOCALHOST, port, world_size, rank, dev, backend) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_create_mm_server(): - def worker(): - if not mge.is_cuda_available(): - return - port = mgb.config.create_mm_server("0.0.0.0", 0) - assert port > 0 - res = mgb.config.create_mm_server("0.0.0.0", port) - assert res == -1 - - p = mp.Process(target=worker) - - p.start() - - p.join(10) - - assert p.exitcode == 0 - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_init_process_group(): - world_size = 2 - - def worker(rank, backend, q): - if not mge.is_cuda_available(): - return - _init_process_group_wrapper(world_size, rank, rank, backend, q) - assert dist.is_distributed() == True - assert dist.get_master_ip() == _LOCALHOST - assert dist.get_master_port() > 0 - assert dist.get_world_size() == world_size - assert dist.get_rank() == rank - assert dist.get_backend() == backend - - def check(backend): - Q = mp.Queue() - p0 = mp.Process(target=worker, args=(0, backend, Q)) - p1 = mp.Process(target=worker, args=(1, backend, Q)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - check("nccl") - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_group_barrier(): - world_size = 2 - ip = "127.0.0.1" - backend = "nccl" - - def worker(rank, q): - if not mge.is_cuda_available(): - return - _init_process_group_wrapper(world_size, rank, rank, backend, q) - dist.group_barrier() - if rank == 0: - dist.group_barrier() - q.put(0) # to be observed in rank 1 - else: - _assert_q_empty(q) # q.put(0) is not executed in rank 0 - dist.group_barrier() - _assert_q_val(q, 0) # q.put(0) executed in rank 0 - - Q = mp.Queue() - p0 = mp.Process(target=worker, args=(0, Q)) - p1 = mp.Process(target=worker, args=(1, Q)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_synchronized(): - world_size = 2 - backend = "nccl" - - @dist.synchronized - def func(rank, q): - q.put(rank) - - def worker(rank, q): - if not mge.is_cuda_available(): - return - _init_process_group_wrapper(world_size, rank, rank, backend, q) - dist.group_barrier() - if rank == 0: - func(0, q) # q.put(0) - q.put(2) - else: - _assert_q_val(q, 0) # func executed in rank 0 - _assert_q_empty(q) # q.put(2) is not executed - func(1, q) - _assert_q_val( - q, 1 - ) # func in rank 1 executed earlier than q.put(2) in rank 0 - _assert_q_val(q, 2) # q.put(2) executed in rank 0 - - Q = mp.Queue() - p0 = mp.Process(target=worker, args=(0, Q)) - p1 = mp.Process(target=worker, args=(1, Q)) - - p0.start() - p1.start() - - p0.join(10) - p1.join(10) - - assert p0.exitcode == 0 and p1.exitcode == 0 diff --git a/python_module/test/unit/functional/__init__.py b/python_module/test/unit/functional/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/functional/test_elemwise.py b/python_module/test/unit/functional/test_elemwise.py deleted file mode 100644 index c02bd58b..00000000 --- a/python_module/test/unit/functional/test_elemwise.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine.functional as F -from megengine import tensor -from megengine.test import assertTensorClose - - -def test_abs(): - assertTensorClose( - F.abs(tensor([-3.0, -4.0, -5.0])).numpy(), - np.abs(np.array([-3.0, -4.0, -5.0], dtype=np.float32)), - ) - - assertTensorClose(F.abs(-3.0), np.abs(np.float32(-3.0))) - - -def test_multiply(): - assertTensorClose( - F.multiply(-3.0, -4.0), np.multiply(np.float32(-3.0), np.float32(-4.0)) - ) - - assertTensorClose( - F.multiply(tensor([3.0, 4.0]), 4.0).numpy(), - np.multiply(np.array([3.0, 4.0], dtype=np.float32), 4.0), - ) - - assertTensorClose( - F.multiply(4.0, tensor([3.0, 4.0])).numpy(), - np.multiply(4.0, np.array([3.0, 4.0], dtype=np.float32)), - ) - - assertTensorClose( - F.multiply(tensor([3.0, 4.0]), tensor([3.0, 4.0])).numpy(), - np.multiply( - np.array([3.0, 4.0], dtype=np.float32), - np.array([3.0, 4.0], dtype=np.float32), - ), - ) - - -def test_clamp(): - """Fix an issue when `lower` or `upper` is 0, it will be recognized as `False` and - `F.clamp` will fall into wrong conditions unexpectedly. - """ - x = np.linspace(-6, 6, dtype="float32") - assertTensorClose(F.clamp(tensor(x) + 3, 0, 6).numpy(), np.clip(x + 3, 0, 6)) - assertTensorClose(F.clamp(tensor(x) - 3, -6, 0).numpy(), np.clip(x - 3, -6, 0)) - - -def test_isnan(): - for case in [[1, float("nan"), 0]]: - assertTensorClose(F.isnan(tensor(case)), np.isnan(case).astype("uint8")) - - -def test_isinf(): - for case in [[1, float("inf"), 0]]: - assertTensorClose(F.isinf(tensor(case)), np.isinf(case).astype("uint8")) diff --git a/python_module/test/unit/functional/test_functional.py b/python_module/test/unit/functional/test_functional.py deleted file mode 100644 index a3739b3d..00000000 --- a/python_module/test/unit/functional/test_functional.py +++ /dev/null @@ -1,496 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest -from helpers import opr_test - -import megengine._internal as mgb -import megengine.functional as F -from megengine import Buffer, Parameter, is_cuda_available, jit, tensor -from megengine.test import assertTensorClose - - -def test_flatten(): - data0_shape = (2, 3, 4, 5) - data1_shape = (4, 5, 6, 7) - data0 = np.random.random(data0_shape).astype(np.float32) - data1 = np.random.random(data1_shape).astype(np.float32) - - def compare_fn(x, y): - assert x.numpy().shape == y - - output0 = (2 * 3 * 4 * 5,) - output1 = (4 * 5 * 6 * 7,) - cases = [{"input": data0, "output": output0}, {"input": data1, "output": output1}] - opr_test(cases, F.flatten, compare_fn=compare_fn) - - output0 = (2, 3 * 4 * 5) - output1 = (4, 5 * 6 * 7) - cases = [{"input": data0, "output": output0}, {"input": data1, "output": output1}] - opr_test(cases, F.flatten, compare_fn=compare_fn, start_axis=1) - - output0 = (2, 3, 4 * 5) - output1 = (4, 5, 6 * 7) - cases = [{"input": data0, "output": output0}, {"input": data1, "output": output1}] - opr_test(cases, F.flatten, compare_fn=compare_fn, start_axis=2) - - output0 = (2, 3 * 4, 5) - output1 = (4, 5 * 6, 7) - cases = [{"input": data0, "output": output0}, {"input": data1, "output": output1}] - opr_test(cases, F.flatten, compare_fn=compare_fn, start_axis=1, end_axis=2) - - -def test_where(): - maskv0 = np.array([[1, 0], [0, 1]], dtype=np.int32) - xv0 = np.array([[1, np.inf], [np.nan, 4]], dtype=np.float32) - yv0 = np.array([[5, 6], [7, 8]], dtype=np.float32) - - maskv1 = np.array([[1, 0, 1], [1, 0, 0], [1, 1, 0]], dtype=np.int32) - xv1 = np.array([[1, np.inf, 2], [0, np.nan, 4], [1, 5, 7]], dtype=np.float32) - yv1 = np.array([[5, 6, 9], [2, 7, 8], [2, 1, 9]], dtype=np.float32) - - cases = [ - {"input": [maskv0, xv0, yv0]}, - {"input": [maskv1, xv1, yv1]}, - ] - opr_test(cases, F.where, ref_fn=np.where) - - maskv2 = np.array([1, 1, 1], dtype=np.int32) - xv2 = np.array([1, 3, 2], dtype=np.float32) - yv2 = np.array([5, 6, 9], dtype=np.float32) - - maskv3 = np.array([0, 0, 0], dtype=np.int32) - xv3 = np.array([1, 3, 2], dtype=np.float32) - yv3 = np.array([5, 6, 9], dtype=np.float32) - - cases = [ - {"input": [maskv2, xv2, yv2]}, - {"input": [maskv3, xv3, yv3]}, - ] - opr_test(cases, F.where, ref_fn=np.where) - - -def test_eye(): - dtype = np.float32 - cases = [{"input": [10, 20]}, {"input": [20, 30]}] - opr_test(cases, F.eye, ref_fn=lambda n, m: np.eye(n, m).astype(dtype), dtype=dtype) - - -def test_concat(): - def get_data_shape(length: int): - return (length, 2, 3) - - data1 = np.random.random(get_data_shape(5)).astype("float32") - data2 = np.random.random(get_data_shape(6)).astype("float32") - data3 = np.random.random(get_data_shape(7)).astype("float32") - - def run(data1, data2): - return F.concat([data1, data2]) - - cases = [{"input": [data1, data2]}, {"input": [data1, data3]}] - opr_test(cases, run, ref_fn=lambda x, y: np.concatenate([x, y])) - - -def test_matrix_mul(): - shape1 = (2, 3) - shape2 = (3, 4) - shape3 = (4, 5) - data1 = np.random.random(shape1).astype("float32") - data2 = np.random.random(shape2).astype("float32") - data3 = np.random.random(shape3).astype("float32") - - cases = [{"input": [data1, data2]}, {"input": [data2, data3]}] - opr_test(cases, F.matrix_mul, ref_fn=np.matmul) - - -def test_batched_matrix_mul(): - batch_size = 10 - shape1 = (batch_size, 2, 3) - shape2 = (batch_size, 3, 4) - shape3 = (batch_size, 4, 5) - data1 = np.random.random(shape1).astype("float32") - data2 = np.random.random(shape2).astype("float32") - data3 = np.random.random(shape3).astype("float32") - - cases = [{"input": [data1, data2]}, {"input": [data2, data3]}] - for i in range(0, batch_size): - - def compare_fn(x, y): - x.numpy()[i, ...] == y - - opr_test( - cases, - F.batched_matrix_mul, - compare_fn=compare_fn, - ref_fn=lambda x, y: np.matmul(x[i, ...], y[i, ...]), - ) - - -def test_sort(): - data1_shape = (10, 3) - data2_shape = (12, 2) - data1 = np.random.random(data1_shape).astype(np.float32) - data2 = np.random.random(data2_shape).astype(np.float32) - output0 = [np.sort(data1), np.argsort(data1).astype(np.int32)] - output1 = [np.sort(data2), np.argsort(data2).astype(np.int32)] - - cases = [ - {"input": data1, "output": output0}, - {"input": data2, "output": output1}, - ] - opr_test(cases, F.sort) - - -def test_round(): - data1_shape = (15,) - data2_shape = (25,) - data1 = np.random.random(data1_shape).astype(np.float32) - data2 = np.random.random(data2_shape).astype(np.float32) - - cases = [{"input": data1}, {"input": data2}] - opr_test(cases, F.round, ref_fn=np.round) - - -def test_broadcast_to(): - input1_shape = (20, 30) - output1_shape = (30, 20, 30) - data1 = np.random.random(input1_shape).astype(np.float32) - - input2_shape = (10, 20) - output2_shape = (20, 10, 20) - data2 = np.random.random(input2_shape).astype(np.float32) - - def compare_fn(x, y): - assert x.numpy().shape == y - - cases = [ - {"input": [data1, output1_shape], "output": output1_shape}, - {"input": [data2, output2_shape], "output": output2_shape}, - ] - opr_test(cases, F.broadcast_to, compare_fn=compare_fn) - - -def test_linspace(): - cases = [ - {"input": [1, 9, 9]}, - {"input": [3, 10, 8]}, - ] - opr_test( - cases, - F.linspace, - ref_fn=lambda start, end, step: np.linspace(start, end, step, dtype=np.float32), - ) - - cases = [ - {"input": [9, 1, 9]}, - {"input": [10, 3, 8]}, - ] - opr_test( - cases, - F.linspace, - ref_fn=lambda start, end, step: np.linspace(start, end, step, dtype=np.float32), - ) - - -def test_arange(): - cases = [ - {"input": [1, 9, 1]}, - {"input": [2, 10, 2]}, - ] - opr_test( - cases, - F.arange, - ref_fn=lambda start, end, step: np.arange(start, end, step, dtype=np.float32), - ) - - cases = [ - {"input": [9, 1, -1]}, - {"input": [10, 2, -2]}, - ] - opr_test( - cases, - F.arange, - ref_fn=lambda start, end, step: np.arange(start, end, step, dtype=np.float32), - ) - - cases = [ - {"input": [9.3, 1.2, -0.5]}, - {"input": [10.3, 2.1, -1.7]}, - ] - opr_test( - cases, - F.arange, - ref_fn=lambda start, end, step: np.arange(start, end, step, dtype=np.float32), - ) - - -def test_add_update(): - shape = (2, 3) - v = np.random.random(shape).astype(np.float32) - b = Buffer(v) - - u = F.add_update(b, 1) - assertTensorClose(u.numpy(), v + 1) - u = F.add_update(b, 1) - assertTensorClose(u.numpy(), v + 2) - - x = np.ones((2, 2), dtype=np.float32) - y = x * 0.5 - dest = tensor(x) - delta = tensor(y) - r = F.add_update(dest, delta, alpha=tensor(0.9), beta=0.1, bias=0.1) - assertTensorClose(r.numpy(), x * 0.9 + y * 0.1 + 0.1) - - -def test_add_update_params(): - b = np.random.random((2, 3)).astype(np.float32) - y = Buffer(b) - - @jit.trace - def f(x): - return F.add_update(y, x) - - f(np.zeros((2, 3)).astype(np.float32)) - - z = Buffer(np.zeros((2, 3)).astype(np.float32)) - F.add_update(y, z, beta=0.1) - - res = f(np.ones((2, 3)).astype(np.float32)) - assertTensorClose(res, b + 1) - - -def test_cross_entropy_with_softmax(): - data1_shape = (1, 2) - label1_shape = (1,) - data2_shape = (1, 3) - label2_shape = (1,) - - data1 = np.array([1, 0.5], dtype=np.float32).reshape(data1_shape) - label1 = np.array([1], dtype=np.int32).reshape(label1_shape) - expect1 = F.cross_entropy(F.softmax(tensor(data1)), tensor(label1)).numpy() - - data2 = np.array([0.3, 0.4, 0.3], dtype=np.float32).reshape(data2_shape) - label2 = np.array([1], dtype=np.int32).reshape(label2_shape) - expect2 = F.cross_entropy(F.softmax(tensor(data2)), tensor(label2)).numpy() - - cases = [ - {"input": [data1, label1], "output": expect1,}, - {"input": [data2, label2], "output": expect2,}, - ] - opr_test(cases, F.cross_entropy_with_softmax) - - -def test_cross_entropy(): - data1_shape = (1, 2) - label1_shape = (1,) - data2_shape = (1, 3) - label2_shape = (1,) - - data1 = np.array([0.5, 0.5], dtype=np.float32).reshape(data1_shape) - label1 = np.array([1], dtype=np.int32).reshape(label1_shape) - expect1 = np.array([-np.log(0.5)], dtype=np.float32) - - data2 = np.array([0.3, 0.4, 0.3], dtype=np.float32).reshape(data2_shape) - label2 = np.array([1], dtype=np.int32).reshape(label2_shape) - expect2 = np.array([-np.log(0.4)], dtype=np.float32) - - cases = [ - {"input": [data1, label1], "output": expect1,}, - {"input": [data2, label2], "output": expect2,}, - ] - opr_test(cases, F.cross_entropy) - - -def test_binary_cross_entropy(): - data1_shape = (2, 2) - label1_shape = (2, 2) - data2_shape = (2, 3) - label2_shape = (2, 3) - - def sigmoid(x): - return 1 / (1 + np.exp(-x)) - - def compare_fn(x, y): - assertTensorClose(x.numpy(), y, max_err=5e-4) - - np.random.seed(123) - data1 = sigmoid(np.random.uniform(size=data1_shape).astype(np.float32)) - label1 = np.random.uniform(size=label1_shape).astype(np.float32) - expect1 = np.array([0.6361], dtype=np.float32) - - np.random.seed(123) - data2 = sigmoid(np.random.uniform(size=data2_shape).astype(np.float32)) - label2 = np.random.uniform(size=label2_shape).astype(np.float32) - expect2 = np.array([0.6750], dtype=np.float32) - - cases = [ - {"input": [data1, label1], "output": expect1,}, - {"input": [data2, label2], "output": expect2,}, - ] - opr_test(cases, F.binary_cross_entropy, compare_fn=compare_fn) - - -def test_hinge_loss(): - np.random.seed(123) - # case with L1 norm - cases = [] - for shape in [(2, 2), (2, 3)]: - data = np.random.uniform(size=shape).astype(np.float32) - label = 2 * np.random.randint(0, 1, size=shape).astype(np.int32) - 1 - expect = np.clip(0, np.inf, 1 - data * label).sum(axis=1).mean() - cases.append({"input": [data, label], "output": tensor(expect)}) - - opr_test(cases, F.hinge_loss) - - # cases with L2 norm - cases = [] - for shape in [(2, 2), (2, 3)]: - data = np.random.uniform(size=shape).astype(np.float32) - label = 2 * np.random.randint(0, 1, size=shape).astype(np.int32) - 1 - expect = ((np.clip(0, np.inf, 1 - data * label) ** 2).sum(axis=1)).mean() - cases.append({"input": [data, label], "output": tensor(expect)}) - - def hinge_loss_with_l2_norm(pred, label): - return F.hinge_loss(pred, label, "L2") - - opr_test(cases, hinge_loss_with_l2_norm) - - -def test_smooth_l1_loss(): - np.random.seed(123) - cases = [] - for shape in [(2, 2), (2, 3)]: - data = np.random.uniform(size=shape).astype(np.float32) - label = np.random.uniform(size=shape).astype(np.float32) - diff = np.abs(data - label) - expect = np.where(diff < 1, 0.5 * diff ** 2, diff - 0.5).mean() - cases.append({"input": [data, label], "output": tensor(expect)}) - - opr_test(cases, F.smooth_l1_loss) - - -@pytest.mark.skip -def test_conv_bias(): - inp_scale = 0.01 - w_scale = 0.02 - outp_scale = 0.1 - inp_dtype = mgb.dtype.qint8(inp_scale) - w_dtype = mgb.dtype.qint8(w_scale) - b_dtype = mgb.dtype.qint32(inp_scale * w_scale) - out_dtype = mgb.dtype.qint8(outp_scale) - - def run( - N, - IC, - OC, - IH, - IW, - KH, - KW, - PH, - PW, - SH, - SW, - has_bias=True, - nonlinear_mode="IDENTITY", - ): - inp_v = np.random.normal(size=(N, IC, IH, IW)) - w_v = np.random.normal(size=(OC, IC, KW, KW)) - b_v = np.random.normal(size=(1, OC, 1, 1)) - inp_scale = mgb.dtype.get_scale(inp_dtype) - w_scale = mgb.dtype.get_scale(w_dtype) - b_scale = mgb.dtype.get_scale(b_dtype) - - inpv = mgb.dtype.convert_to_qint8(inp_v * inp_scale, inp_dtype) - wv = mgb.dtype.convert_to_qint8(w_v * w_scale, w_dtype) - bv = mgb.dtype.convert_to_qint32(b_v * b_scale, b_dtype) - - inp_int8 = tensor(inpv, dtype=inp_dtype) - w_int8 = Parameter(wv, dtype=w_dtype) - b_int32 = Parameter(bv, dtype=b_dtype) - - inp_fp32 = inp_int8.astype("float32") - w_fp32 = w_int8.astype("float32") - b_fp32 = b_int32.astype("float32") - - jit.trace.enabled = True - b_symbolic = True - - def convert_to_nchw4(var): - return var.reshape( - var.shapeof(0), var.shapeof(1) // 4, 4, var.shapeof(2), var.shapeof(3) - ).dimshuffle(0, 1, 3, 4, 2) - - @jit.trace(symbolic=b_symbolic) - def run_conv2d(inp, w, b): - O = F.conv2d( - inp, w, b if has_bias else None, stride=(SH, SW), padding=(PH, PW), - ) - if nonlinear_mode == "RELU": - return F.relu(O) - else: - return O - - @jit.trace(symbolic=b_symbolic) - def run_conv_bias(inp, w, b, format="NCHW"): - b = b if has_bias else np.zeros_like(b) - if format == "NCHW4": - inp = convert_to_nchw4(inp) - w = convert_to_nchw4(w) - b = F.flatten(b) - return F.conv_bias_activation( - inp, - w, - b, - stride=(SH, SW), - padding=(PH, PW), - dtype=out_dtype, - nonlinear_mode=nonlinear_mode, - ) - - format = "NCHW4" if is_cuda_available() else "NCHW" - - expected = run_conv2d(inp_fp32, w_fp32, b_fp32) - expected = expected.astype(out_dtype).astype("float32") - result = run_conv_bias(inp_int8, w_int8, b_int32, format=format).astype( - "float32" - ) - if format == "NCHW4": - result = result.dimshuffle(0, 1, 4, 2, 3) - expected = F.flatten(expected) - result = F.flatten(result) - assertTensorClose(result.numpy(), expected.numpy()) - - if not is_cuda_available(): - run(1, 4, 4, 24, 33, 1, 1, 2, 3, 1, 1, False) - run(10, 12, 24, 46, 46, 1, 1, 2, 1, 3, 1, False) - run(10, 36, 8, 46, 26, 2, 2, 2, 1, 1, 2, False) - - run(1, 4, 4, 24, 33, 1, 1, 2, 3, 1, 1) - run(10, 12, 24, 46, 46, 1, 1, 2, 1, 3, 1) - run(10, 36, 8, 46, 26, 2, 2, 2, 1, 1, 2) - - run(10, 36, 8, 46, 26, 2, 2, 2, 1, 1, 2, False, "RELU") - run(10, 36, 8, 46, 26, 2, 2, 2, 1, 1, 2, True, "RELU") - - -def test_softplus(): - x = np.arange(1000).astype(np.float32) - out = F.softplus(tensor(x)) - mask = x <= 20 - with np.errstate(over="ignore"): - expected = np.where(mask, np.log(1 + np.exp(x)), x) - assertTensorClose(out, expected) - beta = 2 - out = F.softplus(tensor(x), beta=beta, threshold=30) - mask = beta * x <= 30 - # ignore overflow - with np.errstate(over="ignore"): - expected = np.where(mask, np.log(1 + np.exp(x * beta)) / beta, x) - assertTensorClose(out, expected) diff --git a/python_module/test/unit/functional/test_interpolate.py b/python_module/test/unit/functional/test_interpolate.py deleted file mode 100644 index 2da981ff..00000000 --- a/python_module/test/unit/functional/test_interpolate.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine.functional as F -from megengine import tensor -from megengine.test import assertTensorClose - - -def test_linear_interpolate(): - inp = tensor(np.arange(1, 3, dtype=np.float32).reshape(1, 1, 2)) - - out = F.interpolate(inp, scale_factor=2.0, mode="LINEAR") - out2 = F.interpolate(inp, 4, mode="LINEAR") - - assertTensorClose( - out.numpy(), np.array([[[1.0, 1.25, 1.75, 2.0]]], dtype=np.float32) - ) - assertTensorClose( - out2.numpy(), np.array([[[1.0, 1.25, 1.75, 2.0]]], dtype=np.float32) - ) - - -def test_many_batch_interpolate(): - inp = tensor(np.arange(1, 9, dtype=np.float32).reshape(2, 1, 2, 2)) - - out = F.interpolate(inp, [4, 4]) - out2 = F.interpolate(inp, scale_factor=2.0) - - assertTensorClose(out.numpy(), out2.numpy()) - - -def test_assign_corner_interpolate(): - inp = tensor(np.arange(1, 5, dtype=np.float32).reshape(1, 1, 2, 2)) - - out = F.interpolate(inp, [4, 4], align_corners=True) - out2 = F.interpolate(inp, scale_factor=2.0, align_corners=True) - - assertTensorClose(out.numpy(), out2.numpy()) - - -def test_error_shape_linear_interpolate(): - inp = tensor(np.arange(1, 5, dtype=np.float32).reshape(1, 1, 2, 2)) - - with pytest.raises(ValueError): - F.interpolate(inp, scale_factor=2.0, mode="LINEAR") - - -def test_inappropriate_scale_linear_interpolate(): - inp = tensor(np.arange(1, 3, dtype=np.float32).reshape(1, 1, 2)) - - with pytest.raises(ValueError): - F.interpolate(inp, scale_factor=[2.0, 3.0], mode="LINEAR") diff --git a/python_module/test/unit/functional/test_math.py b/python_module/test/unit/functional/test_math.py deleted file mode 100644 index 6dc5c82c..00000000 --- a/python_module/test/unit/functional/test_math.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - -from functools import partial - -import numpy as np -from helpers import opr_test - -import megengine.functional as F -from megengine.test import assertTensorClose - - -def common_test_reduce(opr, ref_opr): - data1_shape = (5, 6, 7) - data2_shape = (2, 9, 12) - data1 = np.random.random(data1_shape).astype(np.float32) - data2 = np.random.random(data2_shape).astype(np.float32) - cases = [{"input": data1}, {"input": data2}] - - if opr not in (F.argmin, F.argmax): - # test default axis - opr_test(cases, opr, ref_fn=ref_opr) - # test all axises in range of input shape - for axis in range(-3, 3): - # test keepdims False - opr_test(cases, opr, ref_fn=lambda x: ref_opr(x, axis=axis), axis=axis) - # test keepdims True - opr_test( - cases, - opr, - ref_fn=lambda x: ref_opr(x, axis=axis, keepdims=True), - axis=axis, - keepdims=True, - ) - else: - # test defaut axis - opr_test(cases, opr, ref_fn=lambda x: ref_opr(x).astype(np.int32)) - # test all axises in range of input shape - for axis in range(0, 3): - opr_test( - cases, - opr, - ref_fn=lambda x: ref_opr(x, axis=axis).astype(np.int32), - axis=axis, - ) - - -def test_sum(): - common_test_reduce(opr=F.sum, ref_opr=np.sum) - - -def test_prod(): - common_test_reduce(opr=F.prod, ref_opr=np.prod) - - -def test_mean(): - common_test_reduce(opr=F.mean, ref_opr=np.mean) - - -def test_min(): - common_test_reduce(opr=F.min, ref_opr=np.min) - - -def test_max(): - common_test_reduce(opr=F.max, ref_opr=np.max) - - -def test_argmin(): - common_test_reduce(opr=F.argmin, ref_opr=np.argmin) - - -def test_argmax(): - common_test_reduce(opr=F.argmax, ref_opr=np.argmax) - - -def test_sqrt(): - d1_shape = (15,) - d2_shape = (25,) - d1 = np.random.random(d1_shape).astype(np.float32) - d2 = np.random.random(d2_shape).astype(np.float32) - - cases = [{"input": d1}, {"input": d2}] - opr_test(cases, F.sqrt, ref_fn=np.sqrt) - - -def test_normalize(): - - cases = [ - {"input": np.random.random((2, 3, 12, 12)).astype(np.float32)} for i in range(2) - ] - - def np_normalize(x, p=2, axis=None, eps=1e-12): - if axis is None: - norm = np.sum(x ** p) ** (1.0 / p) - else: - norm = np.sum(x ** p, axis=axis, keepdims=True) ** (1.0 / p) - return x / np.clip(norm, a_min=eps, a_max=np.inf) - - # Test L-2 norm along all dimensions - opr_test(cases, F.normalize, ref_fn=np_normalize) - - # Test L-1 norm along all dimensions - opr_test(cases, partial(F.normalize, p=1), ref_fn=partial(np_normalize, p=1)) - - # Test L-2 norm along the second dimension - opr_test(cases, partial(F.normalize, axis=1), ref_fn=partial(np_normalize, axis=1)) - - # Test some norm == 0 - cases[0]["input"][0, 0, 0, :] = 0 - cases[1]["input"][0, 0, 0, :] = 0 - opr_test(cases, partial(F.normalize, axis=3), ref_fn=partial(np_normalize, axis=3)) - - -def test_logsumexp(): - x = np.arange(10).astype(np.float32) - expected = np.log(np.sum(np.exp(x))) - cases = [{"input": x, "output": expected}] - compare_fn = partial(assertTensorClose, allow_special_values=True) - # large value check - n = 100 - x = np.full(n, 10000, dtype=np.float32) - expected = 10000 + np.log(n) - cases.append({"input": x, "output": expected.astype(np.float32)}) - opr_test(cases, F.logsumexp, axis=0, compare_fn=compare_fn) - - # special value check - x = np.array([np.inf], dtype=np.float32) - expected = x - cases = [{"input": x, "output": expected}] - - x = np.array([-np.inf, 0.0], dtype=np.float32) - expected = np.zeros(1).astype(np.float32) - cases.append({"input": x, "output": expected}) - opr_test(cases, F.logsumexp, axis=0, compare_fn=compare_fn) - - x = np.array([np.nan], dtype=np.float32) - expected = x - cases = [{"input": x, "output": expected}] - - x = np.array([-np.inf, 1], dtype=np.float32) - expected = np.array([1.0], dtype=np.float32) - cases.append({"input": x, "output": expected}) - - opr_test(cases, F.logsumexp, axis=0, compare_fn=compare_fn) - - # keepdims check - x = np.array([[1e10, 1e-10], [-1e10, -np.inf]], dtype=np.float32) - expected = np.array([[1e10], [-1e10]], dtype=np.float32) - cases = [{"input": x, "output": expected}] - x = np.array([[1e10, -1e-10, 1e-10], [1e10, 1e-10, np.inf]], dtype=np.float32) - expected = np.array([[1e10], [np.inf]], dtype=np.float32) - cases.append({"input": x, "output": expected}) - opr_test(cases, F.logsumexp, axis=1, keepdims=True, compare_fn=compare_fn) - - # multiple axes check - x = np.array([[1e10, 1e-10], [-1e10, -np.inf]], dtype=np.float32) - expected = np.array([1e10], dtype=np.float32) - cases = [{"input": x, "output": expected}] - x = np.array([[1e10, -1e-10, 1e-10], [1e10, 1e-10, np.inf]], dtype=np.float32) - expected = np.array([np.inf], dtype=np.float32) - cases.append({"input": x, "output": expected}) - opr_test(cases, F.logsumexp, axis=(0, 1), keepdims=False, compare_fn=compare_fn) diff --git a/python_module/test/unit/functional/test_onehot.py b/python_module/test/unit/functional/test_onehot.py deleted file mode 100644 index 3edbe5de..00000000 --- a/python_module/test/unit/functional/test_onehot.py +++ /dev/null @@ -1,26 +0,0 @@ -import numpy as np -import pytest - -import megengine.functional as F -from megengine import tensor -from megengine.test import assertTensorClose - - -def test_onehot_low_dimension(): - inp = tensor(np.arange(1, 4, dtype=np.int32)) - out = F.one_hot(inp, num_classes=4) - - assertTensorClose( - out.numpy(), np.eye(4, dtype=np.int32)[np.arange(1, 4, dtype=np.int32)] - ) - - -def test_onehot_high_dimension(): - arr = np.array( - [[3, 2, 4, 4, 2, 4, 0, 4, 4, 1], [4, 1, 1, 3, 2, 2, 4, 2, 4, 3]], dtype=np.int32 - ) - - inp = tensor(arr) - out = F.one_hot(inp, 10) - - assertTensorClose(out.numpy(), np.eye(10, dtype=np.int32)[arr]) diff --git a/python_module/test/unit/hub/__init__.py b/python_module/test/unit/hub/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/hub/test_hub.py b/python_module/test/unit/hub/test_hub.py deleted file mode 100644 index 5fdb32ec..00000000 --- a/python_module/test/unit/hub/test_hub.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import pytest -from helpers import modified_environ - -from megengine.hub import hub - - -@pytest.mark.internet -def test_hub_http_basic(tmp_path): - # Override XDG_CACHE_HOME to make sure test won't have side effect for system. - with modified_environ(XDG_CACHE_HOME=str(tmp_path)): - # Use pytorch's URL due to we don't have public address now. - repo_info, entry = "pytorch/vision:v0.4.2", "alexnet" - - assert len(hub.list(repo_info)) > 0 - - assert entry in hub.list(repo_info) - - assert hub.help(repo_info, entry) - - assert isinstance(hub.load(repo_info, entry), object) - - -@pytest.mark.internet -def test_github_load_with_commit_id(tmp_path): - # Override XDG_CACHE_HOME to make sure test won't have side effect for system. - with modified_environ(XDG_CACHE_HOME=str(tmp_path)): - # Use pytorch's URL due to we don't have public address now. - repo_info, commit, entry = "pytorch/vision", "d2c763e1", "alexnet" - - assert isinstance(hub.load(repo_info, entry, commit=commit), object) diff --git a/python_module/test/unit/jit/__init__.py b/python_module/test/unit/jit/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/jit/test_jit.py b/python_module/test/unit/jit/test_jit.py deleted file mode 100644 index b14b1dfc..00000000 --- a/python_module/test/unit/jit/test_jit.py +++ /dev/null @@ -1,257 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import contextlib -import os -import tempfile - -import numpy as np -import pytest - -import megengine as mge -import megengine._internal as mgb -import megengine.functional as F -import megengine.module as M -from megengine import functional as F -from megengine import jit, tensor -from megengine.core.tensor import Tensor -from megengine.jit import SublinearMemoryConfig -from megengine.test import assertTensorClose - - -@contextlib.contextmanager -def mkstemp(): - fd, path = tempfile.mkstemp() - try: - os.close(fd) - yield path - finally: - os.remove(path) - - -def load_and_compile(fpath): - cg, _, outputs = mgb.load_comp_graph_from_file(fpath) - inputs = mgb.cgtools.get_dep_vars(outputs, "Host2DeviceCopy") - inputs = sorted(inputs, key=lambda i: i.name) - outputs = list(map(mgb.copy_output, outputs)) - if len(outputs) == 1: - (outputs,) = outputs - return cg.compile(inputs, outputs) - - -def test_symbolic(): - @jit.trace(symbolic=False) - def f(x): - return Tensor(mgb.opr.assert_equal(x._symvar, x._symvar + 1)) - - with pytest.raises(mgb.exc.MegBrainError): - f.trace(0) - - @jit.trace(symbolic=True) - def f(x): - return Tensor(mgb.opr.assert_equal(x._symvar, x._symvar + 1)) - - f.trace(0) - - -def test_add_update_semantic(): - for symbolic in [False, True]: - x = tensor(0) - - @jit.trace(symbolic=symbolic) - def f(): - F.add_update(x, 1) - return x + 1 - - np.testing.assert_equal(f().numpy(), [2]) - np.testing.assert_equal(f().numpy(), [3]) - - -def test_dump(): - @jit.trace(symbolic=True) - def f(x, y): - return x * y - - f.trace(0, 0) - - with mkstemp() as out: - f.dump(out) - g = load_and_compile(out) - - np.testing.assert_allclose(g([1, 2, 3], [1, 2, 3]), [1, 4, 9]) - - -def test_goptions(): - @jit.trace(symbolic=True, opt_level=0) - def f(x): - return x / x - - @jit.trace(symbolic=True, opt_level=1) - def g(x): - return x / x - - out = f([0.0]).numpy() - # out is nan - if out == out: - raise - - # with gopt, x / x returns 1 - out = g([0.0]).numpy() - assert out == 1 - - -def test_json_prof(): - @jit.trace(symbolic=True, profiling=True) - def f(x): - return x * x - - f([0.0]) - - out = f.get_profile() - assert out.get("profiler") - - -def test_capture_dump(): - p = tensor(7) - - @jit.trace(symbolic=True) - def f(x): - return x * p - - f.trace(0) - - with mkstemp() as out: - f.dump(out) - g = load_and_compile(out) - - np.testing.assert_allclose(g([1, 2, 3]), [7, 14, 21]) - - -def test_dump_volatile(): - p = tensor(7) - - @jit.trace(symbolic=True) - def f(x): - return x * p - - f.trace(0) - - with mkstemp() as out: - f.dump(out) - cg, _, outputs = mgb.load_comp_graph_from_file(out) - - (out,) = outputs - assert mgb.cgtools.get_type(mgb.cgtools.get_inputs(out)[1]) == "SharedDeviceTensor" - - -def test_graph_traversal(): - net = M.Conv2d(3, 4, 3, 1, 1, groups=1, bias=False) - net.eval() - - @jit.trace(symbolic=True) - def fun(data): - return net(data) - - data = np.random.random([1, 3, 224, 224]).astype(np.float32) - fun.trace(data) - - with mkstemp() as out: - fun.dump(out) - *_, outputs = mgb.load_comp_graph_from_file(out) - - _, map_vars, var2oprs, *_ = mgb.cgtools.graph_traversal(outputs) - input_var = map_vars[1] - _, var_idx = var2oprs[input_var.id][0] - - assert var_idx == 0 - - -def test_network_visitor(): - @jit.trace(symbolic=True) - def f(x): - # this line will produce shape_of, subtensor and concat op - # after pruning, they will be deleted - target_shape = (x.shape[0], -1) - - return x.reshape(*target_shape) - - f.trace(tensor(np.random.random([2, 3, 4, 5]).astype(np.float32))) - - with mkstemp() as out: - f.dump(out) - *_, outputs = mgb.load_comp_graph_from_file(out) - - all_oprs = mgb.cgtools.get_oprs_seq(outputs) - pruned_oprs = mgb.cgtools.get_oprs_seq(outputs, prune_reshape=True) - - assert len(all_oprs) == len(pruned_oprs) + 3 - - -def test_shape_tracing(): - for symbolic in [False, True]: - - @jit.trace(symbolic=symbolic) - def f(x): - a, b = x.shape - return a * b - - assert f(np.zeros([4, 3], dtype="float32")).item() == 12 - assert f(np.zeros([6, 4], dtype="float32")).item() == 24 - - -def test_shape_infer(): - @jit.trace(symbolic=True) - def f(x): - a, b = x.shape - return sum(x[i] for i in range(a)) - - x = np.random.randn(3, 10).astype("float32") - assertTensorClose(f(x), x.sum(0)) - x = np.random.randn(4, 10).astype("float32") - assertTensorClose(f(x), x[:3].sum(0)) - - -def test_dump_bn_fused(): - class ConvBNReLU(M.Sequential): - def __init__(self): - super(ConvBNReLU, self).__init__( - M.Conv2d(3, 4, 3, 1, 1, groups=1, bias=False), - M.BatchNorm2d(4), - M.ReLU(), - ) - - net = ConvBNReLU() - net.eval() - - @jit.trace(symbolic=True) - def fun(data): - return net(data) - - data = np.random.random([1, 3, 224, 224]).astype(np.float32) - fun.trace(data) - with mkstemp() as out: - fun.dump(out, optimize_for_inference=True) - cg, _, outputs = mgb.load_comp_graph_from_file(out) - - (out,) = outputs - inputs = mgb.cgtools.get_inputs(out) - assert len(inputs) == 2 and ( - mgb.cgtools.get_type(inputs[0]) == "MultipleDeviceTensorHolder" - and mgb.cgtools.get_type(inputs[1]) == "ConvolutionForward" - ) - - -# Simply verify the options passed down -def test_sublinear(): - config = SublinearMemoryConfig(genetic_nr_iter=10) - - @jit.trace(symbolic=True, sublinear_memory_config=config) - def f(x): - return x + x - - f([0.0]) diff --git a/python_module/test/unit/module/.gitattributes b/python_module/test/unit/module/.gitattributes deleted file mode 100644 index 816f72d6..00000000 --- a/python_module/test/unit/module/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.mlu binary diff --git a/python_module/test/unit/module/AtlasRuntimeOprTest.basic.om b/python_module/test/unit/module/AtlasRuntimeOprTest.basic.om deleted file mode 100644 index 942fe2edff071b681433616ea0de43b30aa9cb29..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 32916 zcmV*EfNOtAO;1Ds0RR91000mG0000000000000000000000000000000000000000 z000000000000000000000000000000000000001#e*gdg0001OZ)9a`0000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000020000nE-^7KdM+>k000000000000001000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000400000000000001;CjbBe0001;CjbBdCIA2f0001;O#lEBDgXci00026cK`se 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 zbYFCNaAgt(5(G_2PDxrG3KVo3II%98cb}^s<0a_3W3UhRF zWnpb!Zgp)E0vG{Wy$=cnbYXLAa}u);I000010sjF20000000000 z0000000000000000RI3000000000000000000000000000RI30000000000000000 z00000000000RI3000000000000000000000000000RI3000000000000000000000 z000000RI3000000000000000000000000000RI300000000062000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000005W*h?&TYuhlA2i36em`~nIM2m&AkG6DbqH~~Td1X2nuF<&rW zV{dMDF<1g%NNPv`002M%0000uH)isxssI20f&f4P0000000000000000000000030 z|NsC0|Ns900000000001000000000000IC20001TkOBYz06+l%001C>0000100961 z000000001j06+l%001Dw000010sjF200000000000000000000000000RI3000000 z000000000000000000000RI3000000000000000000000000000RI300000000000 z0000000000000000RI3000000000000000000000000000RI30000000000000000 z00000000000RI3000000000620000000000000000000000000000000000000000 z0000000000000000000000000000000000000000000000000000000005W*h?&TY zuhlA2{Q{x^@B#`A2m&AlG6DbqH~~Td1yU9*F<&rWbaG*Cb6-?)VQzCoVRT_%G*|*) zFlsOWf&f4P00000002M%0000000000000000000000001000000000000IC20001T zkOBaL06+l%001Dw0000100961000000000006+l%002N}000010sjF20000000000 z0000000000000000RI3000000000000000000000000000RI30000000000000000 z00000000000RI3000000000000000000000000000RI3000000000000000000000 z000000RI3000000000000000000000000000RI300000000062000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000005W*h?&TYuhlA2_yVE<>jDZ52m&AmG6DbqH~~Td22v3%F<&rW zbaG*Cb6-PYb97%dSOQ=$YA^r*06+l%0000;0YCu&0000000000000000000000960 z|NsC0|Nj6000000004530ssI2Kmh;%06=H}000310RR9100000000000000000000 z00000{{R300000000000000000000000000{{R300000000000000000000000000 z{{R300000000000000000000000000{{R300000000000000000000000000{{R30 z0000000000000000000000000{{R300000000000000000000000000{{R3000000 z00IC2000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000GI-ZnaGT<)hbd85CoV4h?&TYuhlA2 z3lI~S0@%HrkFV7#Sb&%baDYr&4+;rvVPa)$Uv7165&{?iS{VuuXmw|0UvqSFWnpb! zY-w|J5(NqapaB9}6ABA$Wo>VAd0%sBdSwy>7=V}wS{w=$dS!BNUt@1@d0%a1ZEtdU zUvp`CWfB7zfMi;e0SXdyVRLI=X>Md?cwcXDUv6P-WfFY~dlC$Ea$#5VQzC@Lt%4tUo{dDZEs{{Y+p`qWMyAZb#!ob zbf5tN000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000000000rL>`~ z^soQ`000000000000000000000000000000S(V|QuPy)p00000000000000000000 z000000000094urkzO4WN000000000000000000000000000000k})DK*s%Zr00000 z00000000000000000000000000kj#aP%r=h000000000000000000000000000000 z!>J;)DKP*5000000000000000000000000000000@3M9=TQdLv000000000000000 z000000000000000_$gbhj5YuO000000000000000000000000000000mM~*7j<5g# z0000000000000000000000000000003$vE1$t3^)0000000000000000000000000 z000004y{i#53>LO000000000000000000000000000000F|FRNh%f*E0000000000 z00000000000000000000nlKxwNUQ(=000000000000000000000000000000o}1${ z2QvTw0000000000000000000000000000004l|@H0I>i700000000000000000000 z0000000000FsRuxC9(hj000000000000000000000000000000;Vm~TY`6db00000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000b1644DLDWD000000000000000 z000000000000000`K)*|dNTk3000000000000000000000000000000=q(;GtDpb? z000000000000000000000000000000z%aV4p{f7?0000000000000000000000000 z00000ZnVd?LofgU000000000000000000000000000000aIzXMzbya&0000000000 z00000000000000000000!>4hv_pSf{000000000000000000000000000000W;Uv> zl`sGR000000000000000000000000000000J+!|n`kep(00000000000000000000 z0000000000+pUDK466VD0000000000000000000000000000003@ceIp)mje00000 z00000000000000000000000004=@ER!ZH8=000000000000000000000000000000 zUbP7**E0YB000000000000000000000000000000zcVr=5ibA$000000000000000 z0000000000000008n(0}zbpU%0000000000000000000000000000000WKFV_@)2= z000000000000000000000000000000(5(731gro60000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000e>C5#zU-000000000000000000000000000000JhMzKHn0Ey00000 z0000000000000000000000000%(THXBs2g3000000000000000000000000000000 zEH+UxpE3Xd000000000000000000000000000000eXk5LHZTAH000000000000000 z000000000000000L@v`YqB8&h000000000000000000000000000000!Yu~0lB)m! z0000000000000000000000000000008nHSm0j>Z50000000000000000000000000 z00000oF)aeJ000000000000000 z000000000000000At8w%@Gk%W0000000000000000000000000000001Fn;oHfXShfHF000000000000000000000000000000)-C}v2(ADC00000 z0000000000000000000000000Ij@|mhc*BJ000000000000000000000000000000 z*eSS$bl00000000000000000000 z0000000000h%68usWSio000000000000000000000000000000G_7nlD>48800000 z00000000000000000000000000kAtaFSY;x000000000000000000000000000000 zL$N?KwlM$z000000000000000000000000000000F0q!ZQLX?0000000000000000 z000000000000000gsH8r8883<000000000000000000000000000000WUsHSy{`ZO z000000000000000000000000000000__L8LUn&3q0000000000000000000000000 z00000?=N4qB_sd<000000000000000000000000000000LM?tPE;RrE0000000000 z00000000000000000000gENmIhpqqs000000000000000000000000000000bs<$P zt*`(9000000000000000000000000000000eldG61h4=A00000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000000000000000000V6(d~wI=`o000000000000000000000000000000 zg0#A;nJxeT000000000000000000000000000000LMTHt=`{cV000000000000000 z000000000000000JgFBgTQvXx000000000000000000000000000000Ke)Xq1vLNw z0000000000000000000000000000002C5pXPOJa`0000000000000000000000000 z00000Mn{KR000000000000000000000000000000rZV<5IIjQz00000000000000000000 z0000000000Ml|!XkTC!N000000000000000000000000000000qO)fyKA`{r00000 z00000000000000000000000007%#r5^D+Pc000000000000000000000000000000 zy)B6}V!Ne8 zrnCS6000000000000000000000000000000pfcqyYOVkP00000000000000000000 z0000000000x3GJqoU8x<000000000000000000000000000000KrWjv$t(Z>00000 z00000000000000000000000000kr2SF|7aq000000000000000000000000000000 zP_e)=1Tz2t0000000000000000000000000000006t=oB|E>T4000000000000000 z000000000000000qcXcD3$6eF000000000000000000000000000000^eA4lNU#6^ z000000000000000000000000000000zCNcm3000000000000000000000000000000TC68Awk`kw z000000000000000000000000000000{4stam@)tW0000000000000000000000000 z00000FdkU50y6*r0000000000000000000000000000005VU8igtPzv0000000000 z00000000000000000000Vz5>&p)3FZ0000000000000000000000000000004>R8| zptJx0000000000000000000000000000000Q?T+jVlV&z00000000000000000000 z0000000000fUQ(50Wtsp0000000000000000000000000000001g;}D6fyt+00000 z0000000000000000000000000b}-K~hM)id000000000000000000000000000000 z!Ll5#S0w-d000000000000000000000000000000Bq`Ii4Y2?K000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000000000000!m`^YJT?FT0000000000000000000000000 z00000ov$1-SEm2~000000000000000000000000000000@TVB5ucQC~0000000000 z00000000000000000000?>4ZpEhqp0000000000000000000000000000000ceBE@ z3Nioy000000000000000000000000000000q_vx_3N8Qu00000000000000000000 z0000000000E~;-dOfUcd0000000000000000000000000000003b6mEO{4$-00000 z0000000000000000000000000yEAyO(<=Y~000000000000000000000000000000 zpSOH0TCe~B000000000000000000000000000000d8LA>60iUO000000000000000 z000000000000000o;0AQAhZAg000000000000000000000000000000X0Cm#z_tJY z000000000000000000000000000000-?GdvN2CA%0000000000000000000000000 z000003AFhjVW|KB000000000000000000000000000000J2aE91S|jm0000000000 z00000000000000000000RkQo1?WzC(00000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z0000000000{cd+%3;+NC@B{z=baG*Cb6-PYb97%de??420s#R400000000000RSlw z0RR9100000000000000000000FarPp0000000000KmY&$002M$2LJ&80RR98fB*mj z!2dc2002OM0|0vmfB-;%0N6bOA^-vhfJguW0RTe>fB<@Q000OF01%)+01&`H5YWv7 zDA2_NE@A)xAkfDH7|_cD2++X;0MNq&3jiQMfG7_F0RRvOfN{0BQ^Z z4q^ZR0{|dEfan4Off51$E;0ZB3;-ZNfG7z90RRdIfI-LtKr+e#ibBQ!06GQ&000OF z4l)1$0{|dEfam}M0RaF20RRLCfFJ|{hyXx<2mnBUfH(#MH~%2tQ1M5C8-RK?6kxfCivIfCj)o01?1)fG7Y000;sC zumVB?{|^KQ3K7BpjuHR>02tsv2ml~JzPbVjt=>Zi@4kZvt=_{208qjN2vEQT004kN z003Y?05UK#FfA}PEiyD9GBP?eG&(dlAS*C9FfbrvY+-I^Aa-SPb7^mGAUG~CE-@e= zC}LrAWn>_4ZXirdR!tx{E-)@JDF6Tf00000000000000000000000000000000000 zE&u=k1OV~>00000000000000000000Q2+n{0009300000000000000000000dH?_b z0006200000000000000000000RsaA15&!}K0000000000tN{Q30000004{W8cys_R zV{dJ3Wo~o;E^cphWiCffRV{OLVPk6mE^KUeZC_zzWO8$9X8>(^Uu$J@Ze?s=V{dY0 zE@NY504{TMa&%#004{TRZFFH`03>8CF#vRBUt?i&bYEgMV>L21VrDQhV_`XBFfd;+ zUteowa&Bd8FaRWYE-(N9000000000000000000000000000000000000000000000 z00000000000000000000000000000000000K>z>%0{{R300000000000000000000 zumS)800000e*gdg0000000000000000RR910000000000000000RR910RR911^@s6 z000000000000000KmY&$00000tN{Q30000000000000001ONa4000000000000000 z2LJ#70RR91FaQ7m000000000000000>;V7(00000MgRZ+0000000000000000RR91 z000000RR91000005C8xG0RR9100000000000000000000G6Dbq000000000000000 z00000000000RR91000000000000000AOHXW15E#K0001h000000000000000umS)8 z0000000000000001^@s6000000RR91000000000000000NdN!<0ssI20000000000 z0000000000I066w00000cmMzZ000000RR911ONa42mk;8000007ytkO00000{cd+% z5dZ)HKobA}baG*Cb6-?)VQzCoVRT_%G=D`*Mgjo=00000000000096g5CH%H00000 z0000000000000000Duty000000000006+i$0000$00#g8009612Y>(o0>J+|2LJ#- zfCB(~2Y>)TfB@J%0wMqc2Y^Tb0s#O+2Y>*2bN~Pd2LKSDKmZWHKoHQ)11QkN11@3! z03guE0~pZD0|?N;0|3y&0}B8kK!7L@0s#OJ2Y_+T0zhKW0t$4@003$X0uEvT00RIZ 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 zKmZn?KmhA()2Z0(Y0097P2LM}5bN~%32Ln4N0Dw8C0s#W% z0)aUu000o6KmZWHKmY*XKmcHB0{{TvK!`DG1ONcwKp z0{{TvK#VbK1ONcwKww~M0{{TvK#nnM1ONcwK!9Ls0{{TvK#(zO1ONcwK%ii10{{Tv zK$0fKmZoNKmh<82Laa_000df2LXo=0G`zV00GAs0M7m(K!7L!0st7` zKmZ5=0z??K>#u^GB7PLHZ3wVATlyKG&DLiHy|r8I503EV{Bn=XCQWEa&u{K zZXh@=FfK75AShyCb7f>8Z*Cw=Ojb=GI4&?QF)0850000000000000000000000000 z000000000004@Lk00aQ>{{R3000000000000000008sz{00003000000000000000 z000000Dk}g000020000000000000000000009F7101^NK00000000000Q3(400000 z001s@Wq5P|E@N+PZDnqB04{ECbY(6_PE{>)bYWv_04{87c5Po_WMp!4X=ea!d0%T~ za&Bd8Ut@1_WiDf5WdJU7baHfIVgN34d2MuIVgMv$E-?UfWnXl1VQzC|VRT_%Vl`tm zGB#pnFfwCdIbtv{Uou}`Yh`k7Wo$42BzP_`000000000000000000000000000000 z000000000000000000000000000000000000000000000000000000006_o%00RI3 z000000000000000000000Qe99000000E7Sl000000000000000009610000000000 z00000009610096100sa600000000000000006+i$000000Q3(4000000000000000 z00aO400000000000000000#g70096105AXm00000000000000005lK)0000007d`+ z0000000000000000096100000009610000001yBG0096100000000000000000000 z0D2Gr00000000000000000000000000096100000000000000003ZMW00T__ZvX%Q zfB*mh00000000000Qe9900000000000000000sa60000000961000000000000000 z07(D<00IC2000000000000000000000Duqx000000C)fZ000000096100aO400;m8 z0000002lxO000000R3)vT?GID0Eh+v0Ap`%b}@fNOhy6$0RR910000000031DG&hw z000000000000000000000077Y0000000000002M$00000KmZ2-0RRC200)2o00N-@ zItKs%K!5`Pdk263K!5<)JpwWS0tbLd00IF3LkEBWdUOB)4hH}bpg;f+z(5$#(*r=z z#RIOB00219$pbLZ!viSL%>y9N(E||B!2<};%L4$=#{&xhAV7d96#@YO76*W#)B-?~ z)&h#9(f|OO5(18s00093AV7fV1_A*z1^}*O000aCAV7d94*~%I5C?#9&H_MU&;kl{ z%m4st3<3ZE4hN2700093AV7fV3Ic&p3IG5A0tc=@000XBAV7d94FUlG4hMi?%mP3{ z&H{>K$N&IJ2m+2k00093AV7fV00IF40000PECLV!3ah7zY3ipg;p4SqA_Oz(4?i*#|Ho#P9$B8V3MQ2nT=(pg;ftTL%CD90!ahNMiv3 zT?YVA9tQvbAO{R5USk3QVFv(GA_oj8Vq*Xepg_<7BnJQuz(4~aWd{HZCI`q##P9$B zC3X$JrRDhCWIL}LL0YX<-TEC-A#N@D^7Z3hf1Ok)5Ipg;f(z(4>PE(ZVr zG6%>j#P9$yvj>0(pg@Cs4gi1&pg<4+Fb9ALz(5)RaR(4AM0NmpI07I5ItQNuI0D1~ zdj|myH~L21VrDQhV_`XBFfd;*Uteowa&Bd8FaRWYE-(N9 z00000000000000000000000000000000000000000000000000000000000000000 z00000000000000000000002P%0009300000000000000000000002M)00000004mi z000000000000000000310000000000000000003100031000I6000000000000000 z002M$00000002A#000000000000000000C4000000000000000000L700031001xm z000000000000000004Xg00000002e+00000000000000000031000000003100000 z000mG0003100000000000000000000006=R000000000000000000000000000031 z000000000000000001BW0009_|8D>Q0Du4h0000000000002M)000000000000000 z000I60000000031000000000000000002n<00062000000000000000000000077X z00000004LZ0000000031000C4000O800000000;O00000008}NcU=(x000;U004Ay zVQzC@RB~Z%b3|cuVP7$SMNCEl0RaF2000000000104Wdw00000000000000000000 z000131ONa4000000000$0000006+i-00962000Mo0008O|2hW%06>5P0DA|306>5M z*gXOw00IYqNB{x>07D0W0D5!)00;*F5THN+5WqkX(9HuV(8U8TVgLXj(8mK9(8~h| z(7^)$(8B`@03bksC=UVw01yX&an1rjV$cE#bj$z%Y77DnVgLXG03bks=mG+P5&{4& zG5`P!03bksC5s06>6%I0OPX00svDG{gb`DFy-n0tN>F00aksApn2?1`-DV1PBKJ z3JM1R2n+`R5)=mj5Do_b6cz`NL;!#QAQ%UrVgP^u4hjbV3=9XbVgP^u1mHjbbpn6@ z78C~%wE}5s06>5N01yWO z08s}B2$2T>8qo(Jpi+W>7!m>i0~7}Xl@tH~01yWZ0@4D2sgwc%0@MNk1mHjc6#@Vd z02BuR2EafN096M76;O165f%V|nUVql0@4D31ONaK01^iP0aFJ76AS=>5()qSwMKLS z5*7e~69NDLwMcXj02T)U09OY95Z4EQ5THPS5WqmJ21J5@2B1Iy2B1KI2Eago#K3ZZ z6rex=2Eaf7Wl(egRYr9G4+aMS6-aadKmrGW0001h5THPS6u>}$5WqmJ21J5@2B1KI z2Eago#K3ZZC;$Qg2m%7I0zv|c5yAit5dZ)H7~nt%03blVx&jBS-a`lPzJmv?-opm~ zAi@L)Aix9w0DwUN0AN7?GB7eQEig7MGBhAEGCDLgIy5&RD=;`PFd$=WVQyz2c4cyN zX>V>II4&?QF(4o)VqtS-WFT*DAWTeFO&~ZfFfK7E0000000000000000000000000 z00000000000000k000040P+6-0000000000000000000{0000000RI30000000000 z000000001g0000000IC2000000000000000000110000I00IC2000000002Y0ssI2 z00000E_7vhbO0`6Z*6U5Zgc=HZf|sDE=NvPEpv2XV`~5|Y;1OIUtwfqa&u{C0Bw0+ zYh`k7Wo%z#Z*pZWV`F6iE^~BpbYWruE^~QpbYWruBxEiz0CZ(vbaG*Cb7Wz3VP9f3 zV>L21VrDQhV_`XBFfd;;Uteowa&Bd8FaRWYE-(N90000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000%00003 z000000000000000000000002c0{{R30001l000000000000000000010000000000 z000000000100001000060000000000000000000$000000002Y0ssI20000000000 z0000400000000000000000007000010000m0000000000000000000C0{{R30000+ z000000000000000000010000000001000000000G0000100000000000000000000 z0000|0{{R300000000000000000000000010000000000000000000W00003O#g2H z004jh00000000000002c0{{R30000000000000060000000001000000000000000 z0000<0000200000000000000000000000130{{R30001Z00000000010000400008 z000000000O000000002}Zg*V_0002U1ONbZa$#5P0DA|306>5M*gXOw00IYqNB{x>07D0W0D5!)00;*F5THN+ z5WqkX(9HuV(8U8TVgLXj(8mK9(8~h|(7^)$(8B`@03bksC=UVw01yX&an1rjV$cE# zbj$z%Y77DnVgLXG03bks=mG+P5&{4&G5`P!03bksC5U06>6%I0gbZ00;*F015{H zM8*Pu7zhFY28#!SLI?l=IR*j%00svDND2a;0ty0w5&{4a015}d080me5=L|Y015{H z7y<{M0tf;D0ssJj5THPm06>5U06>5N00ajC07VA`2!#iL5WqkH7{vz&KLUaf00akM z07VCY2B1KI2Eaf75x{bQC;$Qg2m%7I0zv}+4+IAa5yAkD5&!@I7~nt%03blVx&jBS z-a`lPzJmv?-opm~P{ITVP{0HL0DwUN0AN7?GB7eQEig7MGBhAEGCDLgIy5&RD=;`P zFd$=WVQyz2c4cyNX>V>II4&?QF(4o)VqtS-WFT*DAWTeFO&~ZfFfK7E0000000000 z000000000000000000000000k000040P+6-0000000000000000000{0000000RI3 z0000000000000000001b0000000IC2000000000000000000110000I00IC200000 z0001p0RR9100000E_7vhbO0`6Z*6U5Zgc=HZf|sDE=NvPEpv2XV`~5|Y;1OIUtwfq za&u{C0Bw0+Yh`k7Wo%z#Z*pZWV`F6iE^~BpbYWruE^~QpbYWruBxEiz0CZ(vV_|c2 zUt%?5H8M70W-u~iVL4(jFkduZUu$J@Ze?sR03>)WFaQ7m00000000000000000000 z00000000000000000000000000000000000000000000000000000000000%00003 z000000000000000000000001p0ssI20001g000000000000000000010000000000 z000000000100001000060000000000000000000$000000001p0RR910000000000 z0000400000000000000000007000010000m0000000000000000002U0RR910000+ z000000000000000000010000000001000000000G0000100000000000000000000 z0000E0ssI200000000000000000000000010000000000000000000W00003O#g2H z004jh00000000000001p0ssI20000000000000060000000001000000000000000 z0000<00002000000000000000000000000G0ssI20001Z00000000010000400008 z000000000O000000000|3lIaC0*IN&jIY%yQuqR*0qX(^4G01t0Wtyr05}0c0Rd7G zEiqp(UvzR|ZgXElVRLj}FjxX$FlsOW8UjE800000f&f4P00030|NsC0|Ns9000000 z000000000000000000000001TkOBaL06+l%001Bu000010sjC1000000000000000 z00000000000RI3000000000000000000000000000RI3000000000000000000000 z000000RI3000000000000000000000000000RI300000000000000000000000000 z0RI3000000000000000000000000000RI3000000000000000000000000000RI30 z00000000620000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000005W*h?&TYuhlA2{Q{x^@B#`A z2m&AiG6DbqH~~Td0#X(&F<&rWbaG*Cb6-?)VQzCoVRT_%F<1g%FlsOWf&f4P00000 z002M%0000000000000000000000001000000000000IC20001TkOBaL06+l%001Bu z0000100000000000000006+l%001C>000010sjF20000000000000000000000000 z0RI3000000000000000000000000000RI3000000000000000000000000000RI30 z00000000000000000000000000RI3000000000000000000000000000RI3000000 z000000000000000000000RI300000000062000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z005W*h?&TYuhlA2i36em`~nIM2m&AkG6DbqH~~Td1X2nuF<&rWV{dMDF<1g%NNPv` z002M%0000uH)isxssI20f&f4P0000000000000000000000030|NsC0|Ns9000000 z00001000000000000IC20001TkOBYz06+l%001C>0000100961000000001j06+l% z001Dw000010sjF200000000000000000000000000RI3000000000000000000000 z000000RI3000000000000000000000000000RI300000000000000000000000000 z0RI3000000000000000000000000000RI3000000000000000000000000000RI30 z00000000620000000000000000000000000000000000000000000000000000000 z0000000000000000000000000000000000000000005W*h?&TYuhlA2{Q{x^@B#`A z2m&AlG6DbqH~~Td1yU9*F<&rWbaG*Cb6-?)VQzCoVRT_%G*|*)FlsOWf&f4P00000 z002M%0000000000000000000000001000000000000IC20001TkOBaL06+l%001Dw z0000100961000000000006+l%002N}000010sjF20000000000000000000000000 z0RI3000000000000000000000000000RI3000000000000000000000000000RI30 z00000000000000000000000000RI3000000000000000000000000000RI3000000 z000000000000000000000RI300000000062000000000000000000000000000000 z00000000000000000000000000000000000000000000000000000000000000000 z005W*h?&TYuhlA2_yVE<>jDZ52m&AmG6DbqH~~Td22v3%F<&rWbaG*Cb6-PYb97%d zSOQ=$YA^r*06+l%0000;0YCu&0000000000000000000000960|NsC0|Nj6000000 z004530ssI2Kmh;%06=H}000310RR910000000000000000000000000{{R3000000 z00000000000000000000{{R300000000000000000000000000{{R300000000000 z000000000000000{{R300000000000000000000000000{{R30000000000000000 z0000000000{{R300000000000000000000000000{{R300000000IC20000000000 z00000000000000000000000000000000000000000000000000000000000000000 z000000000000000000000GI-ZnaGT<)hbd85CoV4h?&TYuhlA23lI~S0@%HrkFV7# PSb&%baDYq!00960#e~Bm diff --git a/python_module/test/unit/module/__init__.py b/python_module/test/unit/module/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/module/test_activation.py b/python_module/test/unit/module/test_activation.py deleted file mode 100644 index afca1fde..00000000 --- a/python_module/test/unit/module/test_activation.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine as mge -from megengine.module import LeakyReLU -from megengine.test import assertTensorClose - - -def test_leaky_relu(): - data = np.array([-8, -12, 6, 10]).astype(np.float32) - negative_slope = 0.1 - - leaky_relu = LeakyReLU(negative_slope) - output = leaky_relu(mge.tensor(data)) - - np_output = np.maximum(0, data) + negative_slope * np.minimum(0, data) - assertTensorClose(output.numpy(), np_output, max_err=0) diff --git a/python_module/test/unit/module/test_batchnorm.py b/python_module/test/unit/module/test_batchnorm.py deleted file mode 100644 index cd651444..00000000 --- a/python_module/test/unit/module/test_batchnorm.py +++ /dev/null @@ -1,406 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import multiprocessing as mp -import platform - -import numpy as np -import pytest - -import megengine as mge -import megengine.distributed as dist -from megengine.core import tensor -from megengine.module import BatchNorm1d, BatchNorm2d, SyncBatchNorm -from megengine.test import assertTensorClose - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -@pytest.mark.isolated_distributed -def test_syncbn(): - nr_chan = 8 - data_shape = (3, nr_chan, 4, 16) - momentum = 0.9 - eps = 1e-5 - running_mean = np.zeros((1, nr_chan, 1, 1), dtype=np.float32) - running_var = np.ones((1, nr_chan, 1, 1), dtype=np.float32) - steps = 4 - nr_ranks = 2 - - def worker(rank, data, yv_expect, running_mean, running_var): - if mge.get_device_count("gpu") < nr_ranks: - return - dist.init_process_group("localhost", 2333, nr_ranks, rank, rank) - bn = SyncBatchNorm(nr_chan, momentum=momentum, eps=eps) - data_tensor = tensor() - for i in range(steps): - data_tensor.set_value(data[i]) - yv = bn(data_tensor) - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - assertTensorClose(running_mean, bn.running_mean.numpy(), max_err=5e-6) - assertTensorClose(running_var, bn.running_var.numpy(), max_err=5e-6) - - xv = [] - for i in range(steps): - xv.append(np.random.normal(loc=2.3, size=data_shape).astype(np.float32)) - xv_transposed = np.transpose(xv[i], [0, 2, 3, 1]).reshape( - (data_shape[0] * data_shape[2] * data_shape[3], nr_chan) - ) - - mean = np.mean(xv_transposed, axis=0).reshape(1, nr_chan, 1, 1) - - var_biased = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1, 1)) - sd = np.sqrt(var_biased + eps) - - var_unbiased = np.var(xv_transposed, axis=0, ddof=1).reshape((1, nr_chan, 1, 1)) - running_mean = running_mean * momentum + mean * (1 - momentum) - running_var = running_var * momentum + var_unbiased * (1 - momentum) - - yv_expect = (xv[i] - mean) / sd - - data = [] - for i in range(nr_ranks): - data.append([]) - for j in range(steps): - data[i].append(xv[j][:, :, :, i * 8 : i * 8 + 8]) - - procs = [] - for rank in range(nr_ranks): - p = mp.Process( - target=worker, - args=( - rank, - data[rank], - yv_expect[:, :, :, rank * 8 : rank * 8 + 8], - running_mean, - running_var, - ), - ) - p.start() - procs.append(p) - - for p in procs: - p.join(10) - assert p.exitcode == 0 - - -def test_batchnorm(): - nr_chan = 8 - data_shape = (3, nr_chan, 4) - momentum = 0.9 - bn = BatchNorm1d(nr_chan, momentum=momentum) - running_mean = np.zeros((1, nr_chan, 1), dtype=np.float32) - running_var = np.ones((1, nr_chan, 1), dtype=np.float32) - data = tensor() - for i in range(3): - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - mean = np.mean(np.mean(xv, axis=0, keepdims=True), axis=2, keepdims=True) - xv_transposed = np.transpose(xv, [0, 2, 1]).reshape( - (data_shape[0] * data_shape[2], nr_chan) - ) - - var_biased = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1)) - sd = np.sqrt(var_biased + bn.eps) - - var_unbiased = np.var(xv_transposed, axis=0, ddof=1).reshape((1, nr_chan, 1)) - running_mean = running_mean * momentum + mean * (1 - momentum) - running_var = running_var * momentum + var_unbiased * (1 - momentum) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - assertTensorClose( - running_mean.reshape(-1), bn.running_mean.numpy().reshape(-1), max_err=5e-6 - ) - assertTensorClose( - running_var.reshape(-1), bn.running_var.numpy().reshape(-1), max_err=5e-6 - ) - - # test set 'training' flag to False - mean_backup = bn.running_mean.numpy() - var_backup = bn.running_var.numpy() - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - data.set_value(xv) - yv1 = bn(data) - yv2 = bn(data) - assertTensorClose(yv1.numpy(), yv2.numpy(), max_err=0) - assertTensorClose(mean_backup, bn.running_mean.numpy(), max_err=0) - assertTensorClose(var_backup, bn.running_var.numpy(), max_err=0) - yv_expect = (xv - running_mean) / np.sqrt(running_var + bn.eps) - assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -def test_syncbn1d(): - nr_chan = 8 - data_shape = (3, nr_chan, 4) - momentum = 0.9 - bn = SyncBatchNorm(nr_chan, momentum=momentum) - running_mean = np.zeros((1, nr_chan, 1), dtype=np.float32) - running_var = np.ones((1, nr_chan, 1), dtype=np.float32) - data = tensor() - for i in range(3): - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - mean = np.mean(np.mean(xv, axis=0, keepdims=True), axis=2, keepdims=True) - xv_transposed = np.transpose(xv, [0, 2, 1]).reshape( - (data_shape[0] * data_shape[2], nr_chan) - ) - - var_biased = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1)) - sd = np.sqrt(var_biased + bn.eps) - - var_unbiased = np.var(xv_transposed, axis=0, ddof=1).reshape((1, nr_chan, 1)) - running_mean = running_mean * momentum + mean * (1 - momentum) - running_var = running_var * momentum + var_unbiased * (1 - momentum) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - assertTensorClose( - running_mean.reshape(-1), bn.running_mean.numpy().reshape(-1), max_err=5e-6 - ) - assertTensorClose( - running_var.reshape(-1), bn.running_var.numpy().reshape(-1), max_err=5e-6 - ) - - # test set 'training' flag to False - mean_backup = bn.running_mean.numpy() - var_backup = bn.running_var.numpy() - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - data.set_value(xv) - yv1 = bn(data) - yv2 = bn(data) - assertTensorClose(yv1.numpy(), yv2.numpy(), max_err=0) - assertTensorClose(mean_backup, bn.running_mean.numpy(), max_err=0) - assertTensorClose(var_backup, bn.running_var.numpy(), max_err=0) - yv_expect = (xv - running_mean) / np.sqrt(running_var + bn.eps) - assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) - - -def test_batchnorm2d(): - nr_chan = 8 - data_shape = (3, nr_chan, 16, 16) - momentum = 0.9 - bn = BatchNorm2d(nr_chan, momentum=momentum) - running_mean = np.zeros((1, nr_chan, 1, 1), dtype=np.float32) - running_var = np.ones((1, nr_chan, 1, 1), dtype=np.float32) - data = tensor() - for i in range(3): - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - xv_transposed = np.transpose(xv, [0, 2, 3, 1]).reshape( - (data_shape[0] * data_shape[2] * data_shape[3], nr_chan) - ) - - mean = np.mean(xv_transposed, axis=0).reshape(1, nr_chan, 1, 1) - - var_biased = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1, 1)) - sd = np.sqrt(var_biased + bn.eps) - - var_unbiased = np.var(xv_transposed, axis=0, ddof=1).reshape((1, nr_chan, 1, 1)) - running_mean = running_mean * momentum + mean * (1 - momentum) - running_var = running_var * momentum + var_unbiased * (1 - momentum) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - assertTensorClose(running_mean, bn.running_mean.numpy(), max_err=5e-6) - assertTensorClose(running_var, bn.running_var.numpy(), max_err=5e-6) - - # test set 'training' flag to False - mean_backup = bn.running_mean.numpy() - var_backup = bn.running_var.numpy() - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - data.set_value(xv) - yv1 = bn(data) - yv2 = bn(data) - assertTensorClose(yv1.numpy(), yv2.numpy(), max_err=0) - assertTensorClose(mean_backup, bn.running_mean.numpy(), max_err=0) - assertTensorClose(var_backup, bn.running_var.numpy(), max_err=0) - yv_expect = (xv - running_mean) / np.sqrt(running_var + bn.eps) - assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -def test_syncbn2d(): - nr_chan = 8 - data_shape = (3, nr_chan, 16, 16) - momentum = 0.9 - bn = SyncBatchNorm(nr_chan, momentum=momentum) - running_mean = np.zeros((1, nr_chan, 1, 1), dtype=np.float32) - running_var = np.ones((1, nr_chan, 1, 1), dtype=np.float32) - data = tensor() - for i in range(3): - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - xv_transposed = np.transpose(xv, [0, 2, 3, 1]).reshape( - (data_shape[0] * data_shape[2] * data_shape[3], nr_chan) - ) - - mean = np.mean(xv_transposed, axis=0).reshape(1, nr_chan, 1, 1) - - var_biased = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1, 1)) - sd = np.sqrt(var_biased + bn.eps) - - var_unbiased = np.var(xv_transposed, axis=0, ddof=1).reshape((1, nr_chan, 1, 1)) - running_mean = running_mean * momentum + mean * (1 - momentum) - running_var = running_var * momentum + var_unbiased * (1 - momentum) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - assertTensorClose(running_mean, bn.running_mean.numpy(), max_err=5e-6) - assertTensorClose(running_var, bn.running_var.numpy(), max_err=5e-6) - - # test set 'training' flag to False - mean_backup = bn.running_mean.numpy() - var_backup = bn.running_var.numpy() - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - data.set_value(xv) - yv1 = bn(data) - yv2 = bn(data) - assertTensorClose(yv1.numpy(), yv2.numpy(), max_err=0) - assertTensorClose(mean_backup, bn.running_mean.numpy(), max_err=0) - assertTensorClose(var_backup, bn.running_var.numpy(), max_err=0) - yv_expect = (xv - running_mean) / np.sqrt(running_var + bn.eps) - assertTensorClose(yv_expect, yv1.numpy(), max_err=5e-6) - - -def test_batchnorm_no_stats(): - nr_chan = 8 - data_shape = (3, nr_chan, 4) - bn = BatchNorm1d(8, track_running_stats=False) - data = tensor() - for i in range(4): - if i == 2: - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - mean = np.mean(np.mean(xv, axis=0, keepdims=True), axis=2, keepdims=True) - var = np.var( - np.transpose(xv, [0, 2, 1]).reshape( - (data_shape[0] * data_shape[2], nr_chan) - ), - axis=0, - ).reshape((1, nr_chan, 1)) - sd = np.sqrt(var + bn.eps) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -def test_syncbn_no_stats(): - nr_chan = 8 - data_shape = (3, nr_chan, 4) - bn = SyncBatchNorm(8, track_running_stats=False) - data = tensor() - for i in range(4): - if i == 2: - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - mean = np.mean(np.mean(xv, axis=0, keepdims=True), axis=2, keepdims=True) - var = np.var( - np.transpose(xv, [0, 2, 1]).reshape( - (data_shape[0] * data_shape[2], nr_chan) - ), - axis=0, - ).reshape((1, nr_chan, 1)) - sd = np.sqrt(var + bn.eps) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - - -def test_batchnorm2d_no_stats(): - nr_chan = 8 - data_shape = (3, nr_chan, 16, 16) - bn = BatchNorm2d(8, track_running_stats=False) - data = tensor() - for i in range(4): - if i == 2: - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - xv_transposed = np.transpose(xv, [0, 2, 3, 1]).reshape( - (data_shape[0] * data_shape[2] * data_shape[3], nr_chan) - ) - - mean = np.mean(xv_transposed, axis=0).reshape(1, nr_chan, 1, 1) - var = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1, 1)) - sd = np.sqrt(var + bn.eps) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) - - -@pytest.mark.skipif( - platform.system() == "Darwin", reason="do not imp GPU mode at macos now" -) -@pytest.mark.skipif( - platform.system() == "Windows", reason="do not imp GPU mode at Windows now" -) -def test_syncbn2d_no_stats(): - nr_chan = 8 - data_shape = (3, nr_chan, 16, 16) - bn = SyncBatchNorm(8, track_running_stats=False) - data = tensor() - for i in range(4): - if i == 2: - bn.training = False - xv = np.random.normal(loc=2.3, size=data_shape).astype(np.float32) - xv_transposed = np.transpose(xv, [0, 2, 3, 1]).reshape( - (data_shape[0] * data_shape[2] * data_shape[3], nr_chan) - ) - - mean = np.mean(xv_transposed, axis=0).reshape(1, nr_chan, 1, 1) - var = np.var(xv_transposed, axis=0).reshape((1, nr_chan, 1, 1)) - sd = np.sqrt(var + bn.eps) - - data.set_value(xv) - yv = bn(data) - yv_expect = (xv - mean) / sd - - assertTensorClose(yv_expect, yv.numpy(), max_err=5e-6) diff --git a/python_module/test/unit/module/test_conv.py b/python_module/test/unit/module/test_conv.py deleted file mode 100644 index f67a8aaf..00000000 --- a/python_module/test/unit/module/test_conv.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import itertools - -import numpy as np - -from megengine import Parameter, tensor -from megengine.module import ConvTranspose2d, LocalConv2d -from megengine.test import assertTensorClose - - -def test_conv_transpose2d(): - SH, SW = 3, 1 - PH, PW = 2, 0 - N, IC, IH, IW = 4, 5, 8, 6 - KH, KW = 3, 4 - OC = 3 - BIAS = True - - def getsize(inp, kern, stride): - return (inp - 1) * stride + kern - - OH = getsize(IH, KH, SH) - OW = getsize(IW, KW, SW) - - inp = np.random.normal(size=(N, IC, IH, IW)).astype(np.float32) - out = np.zeros((N, OC, OH, OW), dtype=np.float32) - weight = np.random.normal(size=(IC, OC, KH, KW)).astype(np.float32) - bias = np.random.normal(size=(1, OC, 1, 1)).astype(np.float32) - - # naive calculation use numpy - for n, ic, ih, iw in itertools.product(*map(range, [N, IC, IH, IW])): - oh, ow = ih * SH, iw * SW - out[n, :, oh : oh + KH, ow : ow + KW] += inp[n, ic, ih, iw] * weight[ic] - out = out[:, :, PH : OH - PH, PW : OW - PW] - if BIAS: - out += bias - - # megengine conv_transpose2d calculation - conv_transpose2d = ConvTranspose2d(IC, OC, (KH, KW), (SH, SW), (PH, PW), bias=BIAS) - conv_transpose2d.weight = Parameter(weight, dtype=np.float32) - if BIAS: - conv_transpose2d.bias = Parameter(bias, dtype=np.float32) - y = conv_transpose2d(tensor(inp)) - - assertTensorClose(out, y.numpy(), max_err=2e-6) - - -def test_local_conv2d(): - batch_size = 10 - in_channels = 4 - out_channels = 8 - input_height = 8 - input_width = 8 - kernel_size = 3 - stride = 1 - padding = 1 - dilation = 1 - groups = 1 - local_conv2d = LocalConv2d( - in_channels=in_channels, - out_channels=out_channels, - input_height=input_height, - input_width=input_width, - kernel_size=kernel_size, - stride=stride, - padding=padding, - dilation=dilation, - groups=groups, - ) - inputs = np.random.normal( - size=(batch_size, in_channels, input_height, input_width) - ).astype(np.float32) - output_height = (input_height + padding * 2 - kernel_size) // stride + 1 - output_width = (input_width + padding * 2 - kernel_size) // stride + 1 - weights = np.random.normal( - size=( - groups, - output_height, - output_width, - in_channels // groups, - kernel_size, - kernel_size, - out_channels // groups, - ) - ).astype(np.float32) - local_conv2d.weight = Parameter(weights) - outputs = local_conv2d(tensor(inputs)) - # naive calculation use numpy - # only test output_height == input_height, output_width == input_width, group == 1 - inputs = np.pad(inputs, ((0, 0), (0, 0), (1, 1), (1, 1))) - expected = np.zeros( - (batch_size, out_channels, output_height, output_width), dtype=np.float32, - ) - for n, oc, oh, ow in itertools.product( - *map(range, [batch_size, out_channels, output_height, output_width]) - ): - ih, iw = oh * stride, ow * stride - expected[n, oc, ih, iw] = np.sum( - inputs[n, :, ih : ih + kernel_size, iw : iw + kernel_size] - * weights[0, oh, ow, :, :, :, oc] - ) - - assertTensorClose(outputs.numpy(), expected, max_err=1e-5) diff --git a/python_module/test/unit/module/test_external.py b/python_module/test/unit/module/test_external.py deleted file mode 100644 index 44f5cf21..00000000 --- a/python_module/test/unit/module/test_external.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os - -import numpy as np - -import megengine as mge -from megengine import tensor -from megengine.module import Module -from megengine.module.external import AtlasSubgraph, CambriconSubgraph - - -class CambriconModule(Module): - def __init__(self, data): - super().__init__() - self.cambricon = CambriconSubgraph(data, "subnet0", True) - - def forward(self, inputs): - out = self.cambricon(inputs) - return out - - -def test_cambricon_module(): - model = "CambriconRuntimeOprTest.MutableBatchSize.mlu" - model = os.path.join(os.path.dirname(__file__), model) - with open(model, "rb") as f: - data = f.read() - m = CambriconModule(data) - inputs = [] - inputs.append(tensor(dtype=np.float16, device="cambricon0")) - inputs[0].set_value(np.random.normal(size=(1, 64, 32, 32)).astype(np.float16)) - - def inference(inps): - pred = m(inps) - return pred - - pred = inference(inputs) - - -class AtlasModule(Module): - def __init__(self, data): - super().__init__() - self.atlas = AtlasSubgraph(data) - - def forward(self, inputs): - out = self.atlas(inputs) - return out - - -def test_atlas_module(): - model = "AtlasRuntimeOprTest.basic.om" - model = os.path.join(os.path.dirname(__file__), model) - with open(model, "rb") as f: - data = f.read() - m = AtlasModule(data) - inputs = [] - inputs.append(tensor(dtype=np.float32, device="atlas0")) - inputs[0].set_value(np.random.normal(size=(4, 3, 16, 16)).astype(np.float32)) - - def inference(inps): - pred = m(inps) - return pred - - pred = inference(inputs) diff --git a/python_module/test/unit/module/test_init.py b/python_module/test/unit/module/test_init.py deleted file mode 100644 index 06bc4339..00000000 --- a/python_module/test/unit/module/test_init.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import pytest - -from megengine.module import Conv2d, Linear -from megengine.module.init import calculate_fan_in_and_fan_out - - -def test_calculate_fan_in_and_fan_out(): - l = Linear(in_features=3, out_features=8) - fanin, fanout = calculate_fan_in_and_fan_out(l.weight) - assert fanin == 3 - assert fanout == 8 - - with pytest.raises(ValueError): - calculate_fan_in_and_fan_out(l.bias) - - l = Conv2d(in_channels=2, out_channels=3, kernel_size=(5, 7)) - fanin, fanout = calculate_fan_in_and_fan_out(l.weight) - assert fanin == 2 * 5 * 7 - assert fanout == 3 * 5 * 7 diff --git a/python_module/test/unit/module/test_module.py b/python_module/test/unit/module/test_module.py deleted file mode 100644 index 0766f6ee..00000000 --- a/python_module/test/unit/module/test_module.py +++ /dev/null @@ -1,464 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import os -import tempfile -from collections import OrderedDict -from io import BytesIO - -import numpy as np -import pytest -from helpers import MLP - -import megengine as mge -import megengine._internal as mgb -import megengine.functional as F -from megengine.core import Buffer, Parameter, Tensor, tensor -from megengine.module import ( - BatchNorm1d, - BatchNorm2d, - Conv2d, - Linear, - Module, - Sequential, -) -from megengine.quantization.quantize import quantize, quantize_qat -from megengine.test import assertTensorClose - - -class MyModule(Module): - class InnerModule(Module): - def __init__(self): - super().__init__() - self.bn = BatchNorm2d(4) - - def forward(self, x): - return self.bn(x) - - def __init__(self): - super().__init__() - self.i = self.InnerModule() - self.bn = BatchNorm2d(4) - self.param = Parameter(np.ones(1, dtype=np.float32)) - self.buff = Buffer(np.ones(1, dtype=np.float32)) - - def forward(self, x): - x = self.i(x) - x = self.bn(x) - return x - - -def test_module_api(): - m = MyModule() - assert list(m.children()) == [m.bn, m.i] - assert list(m.named_children()) == [("bn", m.bn), ("i", m.i)] - assert list(m.modules()) == [m, m.bn, m.i, m.i.bn] - assert list(m.named_modules()) == [ - ("", m), - ("bn", m.bn), - ("i", m.i), - ("i.bn", m.i.bn), - ] - assert list(m.named_modules(prefix="x")) == [ - ("x", m), - ("x.bn", m.bn), - ("x.i", m.i), - ("x.i.bn", m.i.bn), - ] - assert list(m.buffers()) == [ - m.bn.running_mean, - m.bn.running_var, - m.buff, - m.i.bn.running_mean, - m.i.bn.running_var, - ] - assert list(m.buffers(recursive=False)) == [m.buff] - assert list(m.named_buffers()) == [ - ("bn.running_mean", m.bn.running_mean), - ("bn.running_var", m.bn.running_var), - ("buff", m.buff), - ("i.bn.running_mean", m.i.bn.running_mean), - ("i.bn.running_var", m.i.bn.running_var), - ] - assert list(m.parameters()) == [ - m.bn.bias, - m.bn.weight, - m.i.bn.bias, - m.i.bn.weight, - m.param, - ] - assert list(m.named_parameters()) == [ - ("bn.bias", m.bn.bias), - ("bn.weight", m.bn.weight), - ("i.bn.bias", m.i.bn.bias), - ("i.bn.weight", m.i.bn.weight), - ("param", m.param), - ] - m.eval() - assert ( - m.training == False - and m.bn.training == False - and m.i.training == False - and m.i.bn.training == False - ) - m.bn.train() - assert m.training == False and m.bn.training == True and m.i.bn.training == False - m.eval() - m.i.train() - assert ( - m.training == False - and m.bn.training == False - and m.i.training == True - and m.i.bn.training == True - ) - m.eval() - m.train() - assert m.training == True and m.bn.training == True and m.i.bn.training == True - - def fn(m): - m.training = False - - m.apply(fn) - assert m.bn.training == False and m.i.bn.training == False - - -def test_module_api_reuse_submodule(): - m = MyModule() - m.h = m.i # pylint: disable=attribute-defined-outside-init - assert list(m.modules()) == [m, m.bn, m.i, m.i.bn] - assert list(m.named_modules()) == [ - ("", m), - ("bn", m.bn), - ("h", m.i), - ("h.bn", m.i.bn), - ] - - -def test_module_api_iterable_stability(): - m = MyModule() - l = list(m.modules()) - for _ in range(100): - assert list(m.modules()) == l - - -def test_module_api_hooks(): - net = MyModule() - pre_hook_num = 0 - post_hook_num = 0 - hooks = [] - - def pre_hook(module, inputs): - nonlocal pre_hook_num - pre_hook_num += 1 - modified_inputs = tuple(inp + 1 for inp in inputs) - return modified_inputs - - def post_hook(module, inputs, outputs): - nonlocal post_hook_num - post_hook_num += 1 - outputs += 1 - return outputs - - net.apply(lambda module: hooks.append(module.register_forward_pre_hook(pre_hook))) - net.apply(lambda module: hooks.append(module.register_forward_hook(post_hook))) - - shape = (1, 4, 1, 1) - x = tensor(np.zeros(shape, dtype=np.float32)) - y = net(x) - - assert pre_hook_num == 4 - assert post_hook_num == 4 - mean1 = Parameter(np.zeros(shape), dtype=np.float32) - bn1 = F.batch_norm2d( - x + 3, mean1, Parameter(np.ones(shape), dtype=np.float32), training=True - ) - assertTensorClose( - net.i.bn.running_mean, mean1, - ) - mean2 = Parameter(np.zeros(shape), dtype=np.float32) - bn2 = F.batch_norm2d( - bn1 + 3, mean2, Parameter(np.ones(shape), dtype=np.float32), training=True - ) - assertTensorClose( - net.bn.running_mean, mean2, - ) - assertTensorClose(bn2 + 2, y) - - assert len(hooks) == 8 - for handler in hooks: - handler.remove() - y = net(x) - assert pre_hook_num == 4 - assert post_hook_num == 4 - - -class MyModule2(Module): - class InnerModule(Module): - def __init__(self): - super().__init__() - self.bn = BatchNorm2d(4) - self.test_bool_key = {True: 1, False: 0} - - def forward(self, x): - x = self.bn(x) - - def __init__(self): - super().__init__() - self.bn = BatchNorm2d(4) - self.a = [ - BatchNorm2d(4), - {"x": BatchNorm2d(4), "y": [BatchNorm2d(4), self.InnerModule()], "z": 0}, - (self.InnerModule(),), - ] - - def forward(self, x): - return x - - -def test_expand_structure(): - m = MyModule2() - assert list(m.named_modules()) == [ - ("", m), - ("a.0", m.a[0]), - ("a.1.x", m.a[1]["x"]), - ("a.1.y.0", m.a[1]["y"][0]), - ("a.1.y.1", m.a[1]["y"][1]), - ("a.1.y.1.bn", m.a[1]["y"][1].bn), - ("a.2.0", m.a[2][0]), - ("a.2.0.bn", m.a[2][0].bn), - ("bn", m.bn), - ] - - -def test_flatten_others(): - def be_others(obj): - return not isinstance(obj, (Tensor, Module)) - - m = MyModule2() - assert len(list(m._flatten(with_key=True, predicate=be_others))) == 0 - - -def test_flatten_with_parent(): - m = MyModule2() - assert list(m.named_modules(with_parent=True)) == [ - ("", m, None), - ("a.0", m.a[0], m), - ("a.1.x", m.a[1]["x"], m), - ("a.1.y.0", m.a[1]["y"][0], m), - ("a.1.y.1", m.a[1]["y"][1], m), - ("a.1.y.1.bn", m.a[1]["y"][1].bn, m.a[1]["y"][1]), - ("a.2.0", m.a[2][0], m), - ("a.2.0.bn", m.a[2][0].bn, m.a[2][0]), - ("bn", m.bn, m), - ] - assert list(m.modules(with_parent=True)) == [ - (m, None), - (m.a[0], m), - (m.a[1]["x"], m), - (m.a[1]["y"][0], m), - (m.a[1]["y"][1], m), - (m.a[1]["y"][1].bn, m.a[1]["y"][1]), - (m.a[2][0], m), - (m.a[2][0].bn, m.a[2][0]), - (m.bn, m), - ] - - -class MyModule3(Module): - class InnerModule(Module): - def __init__(self): - super().__init__() - self.bn = BatchNorm2d(4) - - def forward(self, x): - x = self.bn(x) - - def __init__(self): - super().__init__() - self.bn = BatchNorm2d(4) - self.seq = Sequential(BatchNorm2d(4), self.InnerModule(),) - - def forward(self, x): - return x - - -def test_module_api_with_sequential(): - m = MyModule3() - assert list(m.named_modules()) == [ - ("", m), - ("bn", m.bn), - ("seq", m.seq), - ("seq.0", m.seq[0]), - ("seq.1", m.seq[1]), - ("seq.1.bn", m.seq[1].bn), - ] - - -def test_sequential_named_children(): - modules = OrderedDict() - modules["name0"] = Linear(20, 10) - modules["name1"] = Linear(10, 5) - modules["name2"] = Linear(5, 1) - m = Sequential(modules) - l = list(m.named_children()) - assert l[0][0] == "name0" - assert l[1][0] == "name1" - assert l[2][0] == "name2" - - -def test_state_dict(): - data_shape = (2, 28) - data = tensor() - data.set_value(np.random.random(data_shape)) - mlp = MLP() - pred0 = mlp(data) - - with BytesIO() as fout: - mge.save(mlp.state_dict(), fout) - fout.seek(0) - state_dict = mge.load(fout) - state_dict["extra"] = None - mlp1 = MLP() - mlp1.load_state_dict(state_dict, strict=False) - pred1 = mlp1(data) - assertTensorClose(pred0.numpy(), pred1.numpy(), max_err=5e-6) - with pytest.raises(KeyError): - mlp1.load_state_dict(state_dict) - del state_dict["extra"] - del state_dict["dense0.bias"] - with pytest.raises(KeyError): - mlp1.load_state_dict(state_dict) - - -class AssertModule(Module): - def __init__(self): - super().__init__() - self.error_tensor_key = {True: tensor(), False: 0} - - def forward(self, x): - return x - - -def test_assert_message(): - m = AssertModule() - with pytest.raises( - AssertionError, match="keys for Tensor and Module must be str, error key: True" - ): - list(m._flatten()) - - -class Simple(Module): - def __init__(self): - super().__init__() - self.conv0 = Conv2d(1, 1, kernel_size=3, bias=False) - self.conv1 = Conv2d(1, 1, kernel_size=3, bias=False) - self.conv1.weight = self.conv0.weight - - def forward(self, inputs): - pass - - -def test_shared_param(): - net = Simple() - assert net.conv0.weight is net.conv1.weight - data = tensor(np.random.random((1, 1, 8, 8)).astype(np.float32)) - assertTensorClose(net.conv0(data).numpy(), net.conv1(data).numpy()) - with BytesIO() as f: - mge.save(net, f) - f.seek(0) - net1 = mge.load(f) - assert net1.conv0.weight is net1.conv1.weight - assertTensorClose(net1.conv0(data).numpy(), net1.conv1(data).numpy()) - - with BytesIO() as f: - mge.save(net.conv0, f) - f.seek(0) - conv0 = mge.load(f) - - with BytesIO() as f: - mge.save(net.conv1, f) - f.seek(0) - conv1 = mge.load(f) - - assert conv0.weight is not conv1.weight - assertTensorClose(conv0(data).numpy(), conv1(data).numpy()) - - -def test_pickle_module(): - data_shape = (2, 28) - data = tensor() - data.set_value(np.random.random(data_shape)) - mlp = MLP() - # pickle before forward - with BytesIO() as fout: - mge.save(mlp, fout) - fout.seek(0) - mlp1 = mge.load(fout) - pred0 = mlp1(data) - - pred1 = mlp(data) - - # pickle after forward - with BytesIO() as fout: - mge.save(mlp, fout) - fout.seek(0) - mlp1 = mge.load(fout) - pred2 = mlp1(data) - - assertTensorClose(pred0.numpy(), pred1.numpy(), max_err=5e-6) - assertTensorClose(pred0.numpy(), pred2.numpy(), max_err=5e-6) - - -def test_dump_model(): - data_shape = (2, 28) - data = tensor() - data.set_value(np.random.random(data_shape)) - mlp = MLP() - pred = mlp(data) - f = tempfile.NamedTemporaryFile(delete=False) - f_name = f.name - try: - mge.dump(pred, f_name) - finally: - f.close() - os.unlink(f_name) - - -def test_load_quantized(): - data_shape = (2, 28) - data = tensor(np.random.random(data_shape), dtype="float32") - data = data.astype(mgb.dtype.qint8(0.1)) - mlp = MLP() - quantize_qat(mlp) - quantize(mlp) - mlp.dense0.weight = Parameter( - mlp.dense0.weight.astype(mgb.dtype.qint8(0.001)).numpy() - ) - mlp.dense1.weight = Parameter( - mlp.dense1.weight.astype(mgb.dtype.qint8(0.0002)).numpy() - ) - mlp.eval() - pred0 = mlp(data) - - with BytesIO() as fout: - mge.save(mlp.state_dict(), fout) - fout.seek(0) - checkpoint = mge.load(fout) - # change mlp weight. - mlp.dense0.weight = Parameter( - mlp.dense0.weight.astype(mgb.dtype.qint8(0.00001)).numpy() - ) - mlp.dense1.weight = Parameter( - mlp.dense1.weight.astype(mgb.dtype.qint8(0.2)).numpy() - ) - mlp.load_state_dict(checkpoint) - pred1 = mlp(data) - - assertTensorClose( - pred0.astype("float32").numpy(), pred1.astype("float32").numpy(), max_err=5e-6 - ) diff --git a/python_module/test/unit/module/test_pytorch.py b/python_module/test/unit/module/test_pytorch.py deleted file mode 100644 index d7b3ae9a..00000000 --- a/python_module/test/unit/module/test_pytorch.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import torch -from helpers import randomTorch - -import megengine as mge -import megengine._internal as mgb -import megengine.functional -import megengine.optimizer as optimizer -from megengine import get_default_device, set_default_device -from megengine.core import Parameter, tensor -from megengine.jit import trace -from megengine.module import Module as MGEModule -from megengine.module.pytorch import PyTorchModule -from megengine.test import assertTensorClose - - -def test_pytorch_forward(): - class APlusB(torch.nn.Module): - def __init__(self): - super(APlusB, self).__init__() - - def forward(self, a, b): - return a + b - - a = randomTorch(15, 15) - b = randomTorch(15, 15) - - def get_pytorch_forward(): - return APlusB()(a, b) - - def get_mge_forward(): - mge_module = PyTorchModule(APlusB()) - mge_a = tensor(a.numpy(), dtype=np.float32) - mge_b = tensor(b.numpy(), dtype=np.float32) - return mge_module(mge_a, mge_b) - - assertTensorClose(get_pytorch_forward().numpy(), get_mge_forward().numpy()) - - -def test_pytorch_backward(): - class APlusB(torch.nn.Module): - def __init__(self): - super(APlusB, self).__init__() - - def forward(self, a, b): - return a + b - - a = randomTorch(15, 15) - b = randomTorch(15, 15) - - def get_pytorch_backward(): - parameter_a = a.clone() - parameter_a.requires_grad = True - c = APlusB()(parameter_a, b) - d = APlusB()(c, b) - e = torch.sum(d) - e.backward() - return parameter_a.grad - - def get_mge_backward(): - mge_module = PyTorchModule(APlusB()) - mge_a = Parameter(a.numpy(), dtype=np.float32) - mge_b = tensor(b.numpy(), dtype=np.float32) - mge_c = mge_module(mge_a, mge_b) - mge_d = mge_module(mge_c, mge_b) - mge_e = mge.functional.sum(mge_d) - return mge.functional.grad(mge_e, mge_a, use_virtual_grad=False) - - assertTensorClose(get_pytorch_backward().numpy(), get_mge_backward().numpy()) - - -def test_pytorch_mixed(): - - init_param = (np.array([2.0], dtype=np.float32), np.array([3.0], dtype=np.float32)) - lr = 1.0 - - class Mixed(MGEModule): - class SubModule(torch.nn.Module): - def __init__(self): - super().__init__() - self.multiplier = torch.nn.Parameter(torch.tensor(init_param[0])) - - def forward(self, inp): - return inp * self.multiplier - - def __init__(self): - super().__init__() - self.torch_module = PyTorchModule(self.SubModule()) - self.multiplier = Parameter(init_param[1], dtype=np.float32) - - def forward(self, inp): - return self.torch_module(inp) * self.multiplier - - def run(step, enable_trace, use_symbolic): - def train_func(data, net=None, opt=None): - pred = net(data) - opt.backward(pred) - return pred - - if enable_trace: - train_func = trace(train_func, symbolic=use_symbolic) - - net = Mixed() - data = tensor() - opt = optimizer.SGD(net.parameters(), lr=lr) - - saved_param = init_param - for i in range(step): - opt.zero_grad() - data.set_value([i + 1.0]) - output = train_func(data, net=net, opt=opt) - opt.step() - - expect_param = ( - saved_param[0] - lr * saved_param[1] * data.numpy(), - saved_param[1] - lr * saved_param[0] * data.numpy(), - ) - assertTensorClose( - output.numpy(), saved_param[0] * saved_param[1] * data.numpy() - ) - torch_param = net.torch_module._torch_params[0].detach().cpu() - assertTensorClose(torch_param.numpy(), expect_param[0]) - assertTensorClose(net.multiplier.numpy(), expect_param[1]) - saved_param = expect_param - - run(1, False, False) - run(1, True, True) - run(1, True, False) - - run(2, False, False) - run(2, True, True) - run(2, True, False) diff --git a/python_module/test/unit/module/test_qat.py b/python_module/test/unit/module/test_qat.py deleted file mode 100644 index 6b6c5a86..00000000 --- a/python_module/test/unit/module/test_qat.py +++ /dev/null @@ -1,85 +0,0 @@ -from itertools import product - -import numpy as np - -from megengine import tensor -from megengine.module import ( - Conv2d, - ConvBn2d, - ConvRelu2d, - DequantStub, - Module, - QuantStub, -) -from megengine.quantization.quantize import disable_fake_quant, quantize_qat -from megengine.test import assertTensorClose - - -def test_qat_convbn2d(): - in_channels = 32 - out_channels = 64 - kernel_size = 3 - for groups, bias in product([1, 4], [True, False]): - module = ConvBn2d( - in_channels, out_channels, kernel_size, groups=groups, bias=bias - ) - module.train() - qat_module = quantize_qat(module, inplace=False) - disable_fake_quant(qat_module) - inputs = tensor(np.random.randn(4, in_channels, 32, 32).astype(np.float32)) - normal_outputs = module(inputs) - qat_outputs = qat_module(inputs) - assertTensorClose(normal_outputs, qat_outputs, max_err=5e-6) - assertTensorClose( - module.bn.running_mean, qat_module.bn.running_mean, max_err=5e-8 - ) - assertTensorClose( - module.bn.running_var, qat_module.bn.running_var, max_err=5e-7 - ) - module.eval() - normal_outputs = module(inputs) - qat_module.eval() - qat_outputs = qat_module(inputs) - assertTensorClose(normal_outputs, qat_outputs, max_err=5e-6) - - -def test_qat_conv(): - - in_channels = 32 - out_channels = 64 - kernel_size = 3 - - class TestNet(Module): - def __init__(self, groups, bias): - super().__init__() - self.quant = QuantStub() - self.dequant = DequantStub() - self.conv = Conv2d( - in_channels, out_channels, kernel_size, groups=groups, bias=bias - ) - self.conv_relu = ConvRelu2d( - out_channels, in_channels, kernel_size, groups=groups, bias=bias - ) - - def forward(self, inp): - out = self.quant(inp) - out = self.conv(out) - out = self.conv_relu(out) - out = self.dequant(out) - return out - - inputs = tensor(np.random.randn(4, in_channels, 32, 32).astype(np.float32)) - for groups, bias in product([1, 4], [True, False]): - net = TestNet(groups, bias) - net.train() - qat_net = quantize_qat(net, inplace=False) - disable_fake_quant(qat_net) - normal_outputs = net(inputs) - qat_outputs = qat_net(inputs) - assertTensorClose(normal_outputs, qat_outputs) - - net.eval() - normal_outputs = net(inputs) - qat_net.eval() - qat_outputs = qat_net(inputs) - assertTensorClose(normal_outputs, qat_outputs) diff --git a/python_module/test/unit/module/test_tensor.py b/python_module/test/unit/module/test_tensor.py deleted file mode 100644 index 86c5726e..00000000 --- a/python_module/test/unit/module/test_tensor.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import copy - -import numpy as np -import pytest - -import megengine as mge -import megengine.functional as F -from megengine.core import Buffer, Graph, Parameter -from megengine.module import Conv2d -from megengine.test import assertTensorClose - - -def test_set_value(): - v0 = np.random.random((2, 3)).astype(np.float32) - param = Parameter(v0) - v1 = np.random.random((2, 3)).astype(np.float32) - param.set_value(v1) - assertTensorClose(param.numpy(), v1, max_err=5e-6) - v2 = np.random.random((3, 3)).astype(np.float32) - # TODO: add this - # with pytest.raises(ValueError): - # param.set_value(v2) - assertTensorClose(param.numpy(), v1, max_err=5e-6) - - -def test_fill(): - a = Buffer(np.zeros((2, 3), dtype=np.float32)) - a.fill(3) - assertTensorClose(a.numpy(), np.full((2, 3), 3, dtype=np.float32)) - a.fill(124.568) - assertTensorClose(a.numpy(), np.full((2, 3), 124.568, dtype=np.float32)) - - -# TODO: remove or rewrite following test -# def test_attach(): -# p_ = np.random.random((2, 3)).astype(np.float32) - -# with Graph() as g: -# g.set_option('eager_evaluation', False) -# p = Parameter(p_) -# v = p * 2 -# f = compile(v, None) - -# out, = f() -# assertTensorClose(out, p_ * 2) - -# F.add_update(p, p) -# out, = f() -# assertTensorClose(out, p_ * 4) - -# TODO: remove or rewrite following test -# def test_module_attach(): -# v = np.random.random((1, 3, 64, 64)).astype(np.float32) -# net = Conv2d(3, 16, 3) - -# with Graph() as g: -# g.set_option('eager_evaluation', False) - -# data0 = Input("data") -# f = compile(net(data0), None) - -# out0, = f(data=v) - -# data1 = Input("data", value=v) -# out1 = net(data1) - -# assertTensorClose(out0, out1.numpy()) - - -def test_shape_warning(): - with Graph() as cg: - cg.set_option("eager_evaluation", False) - b = Buffer(np.ones((2, 3)).astype(np.float32)) - with pytest.warns(None) as record: - print(b.shape) - if len(record) != 0: - raise ValueError( - "Getting the shape of a constant Tensor should throw no Warning" - ) diff --git a/python_module/test/unit/optimizer/__init__.py b/python_module/test/unit/optimizer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python_module/test/unit/optimizer/test_lr_scheduler.py b/python_module/test/unit/optimizer/test_lr_scheduler.py deleted file mode 100644 index e185f179..00000000 --- a/python_module/test/unit/optimizer/test_lr_scheduler.py +++ /dev/null @@ -1,23 +0,0 @@ -from bisect import bisect_right - -import numpy as np -from helpers import MLP - -from megengine.optimizer import SGD, MultiStepLR -from megengine.test import assertTensorClose - - -def test_multi_step_lr(): - mlp = MLP() - opt = SGD(mlp.parameters(), lr=0.01, momentum=0.9) - scheduler = MultiStepLR(opt, [3, 6, 8]) - - lr = np.array(0.01, dtype=np.float32) - for i in range(10): - for group in opt.param_groups: - assertTensorClose( - np.array(group["lr"], dtype=np.float32), - (lr * 0.1 ** bisect_right([3, 6, 8], i)).astype(np.float32), - max_err=5e-6, - ) - scheduler.step() diff --git a/python_module/test/unit/optimizer/test_optimizer.py b/python_module/test/unit/optimizer/test_optimizer.py deleted file mode 100644 index e172df79..00000000 --- a/python_module/test/unit/optimizer/test_optimizer.py +++ /dev/null @@ -1,258 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from io import BytesIO - -import numpy as np -from helpers import MLP, graph_mode - -import megengine.functional as F -from megengine import load, optimizer, save -from megengine.core import TensorDict, tensor -from megengine.jit import trace -from megengine.test import assertTensorClose - - -def get_input(): - batch_size, input_dim = 2, 28 - data_shape, label_shape = (batch_size, input_dim), (batch_size,) - data, label = tensor(dtype=np.float32), tensor(dtype=np.int32) - data.set_value(np.random.random(data_shape).astype(np.float32)) - label.set_value(np.random.randint(0, 10, label_shape)) - return data, data_shape, label, label_shape - - -@graph_mode("eager", "static") -def test_optimizer_serialization(): - data, data_shape, label, label_shape = get_input() - mlp = MLP() - opt = optimizer.SGD(mlp.parameters(), lr=0.01, momentum=0.9) - slots = TensorDict() - for param in mlp.parameters(): - slots[param] = np.zeros(param.shape).astype(np.float32) - - pred = mlp(data) - loss = F.square_loss(pred, label.reshape(-1, 1)) - opt.zero_grad() - opt.backward(loss) - opt.step() - for param in mlp.parameters(): - slots[param] = slots[param] * 0.9 + param.grad.numpy() - - with BytesIO() as fout: - save(opt.state_dict(), fout) - fout.seek(0) - state_dict = load(fout) - opt1 = optimizer.SGD(mlp.parameters(), lr=0.02, momentum=0.8) - opt1.load_state_dict(state_dict) - - data.set_value(np.random.random(data_shape).astype(np.float32)) - label.set_value(np.random.randint(0, 10, label_shape)) - pred = mlp(data) - loss = F.square_loss(pred, label.reshape(-1, 1)) - opt1.zero_grad() - opt1.backward(loss) - orig_params = TensorDict() - for param in mlp.parameters(): - orig_params[param] = np.copy(param.numpy()) - opt1.step() - for param in mlp.parameters(): - orig_param = orig_params[param] - slots[param] = slots[param] * 0.9 + param.grad.numpy() - assertTensorClose(param.numpy(), orig_param - 0.01 * slots[param]) - - -def _test_optimizer(opt_str, test_case, check_class, update_lr=False): - iter_num = 3 - data, data_shape, label, label_shape = get_input() - - net = MLP() - opt = getattr(optimizer, opt_str)(net.parameters(), **test_case) - check_func = check_class(net, **test_case) - - step = 0 - - # eager graph - for i in range(iter_num): - if update_lr and i == 1: # change learning rate - for group in opt.param_groups: - group["lr"] += 0.01 - check_func.lr += 0.01 - data.set_value(np.random.random(data_shape).astype(np.float32)) - label.set_value(np.random.randint(0, 10, label_shape)) - pred = net(data) - loss = F.square_loss(pred, label.reshape(-1, 1)) - opt.zero_grad() - opt.backward(loss) - ori_params = TensorDict() - for param in net.parameters(): - ori_params[param] = np.copy(param.numpy()) - opt.step() - step += 1 - check_func(ori_params, net.parameters(), step) - - # static graph - @trace - def train_func(data, label): - pred = net(data) - loss = F.square_loss(pred, label.reshape(-1, 1)) - opt.backward(loss) - - for i in range(iter_num): - if update_lr and i == 1: # change learning rate - for group in opt.param_groups: - group["lr"] += 0.01 - check_func.lr += 0.01 - opt.zero_grad() - ori_params = TensorDict() - for param in net.parameters(): - ori_params[param] = np.copy(param.numpy()) - train_func( - np.random.random(data_shape).astype(np.float32), - np.random.randint(0, 10, label_shape).astype(np.int32), - ) - opt.step() - step += 1 - check_func(ori_params, net.parameters(), step) - - -def test_sgd(): - class CheckValue: - def __init__(self, net, **kwarg): - self.slots = TensorDict() - for param in net.parameters(): - self.slots[param] = np.zeros(param.shape).astype(np.float32) - for k, v in kwarg.items(): - setattr(self, k, v) - - def __call__(self, ori_params, new_params, step): - for param in new_params: - grad = param.grad.numpy() - if hasattr(self, "momentum"): - self.slots[param] = grad + self.slots[param] * self.momentum - delta = -self.lr * self.slots[param] - else: - delta = -self.lr * grad - assertTensorClose(param.numpy(), ori_params[param] + delta) - - cases = [ - {"momentum": 0.9, "lr": 0.01}, # SGD with momentum - {"lr": 0.01}, # simple SGD - {"weight_decay": 0.1, "lr": 0.01}, # with weight_decay - ] - for case in cases: - _test_optimizer("SGD", case, CheckValue) - _test_optimizer("SGD", case, CheckValue, update_lr=True) - - -def test_adam(): - class CheckValue: - def __init__(self, net, **kwarg): - self.m_slots = TensorDict() - self.v_slots = TensorDict() - for param in net.parameters(): - self.m_slots[param] = np.zeros(param.shape).astype(np.float32) - self.v_slots[param] = np.zeros(param.shape).astype(np.float32) - for k, v in kwarg.items(): - setattr(self, k, v) - - def __call__(self, ori_params, new_params, step): - for param in new_params: - grad = param.grad.numpy() - m = self.m_slots[param] - v = self.v_slots[param] - m *= self.betas[0] - m += (1 - self.betas[0]) * grad - v *= self.betas[1] - v += (1 - self.betas[1]) * grad * grad - delta = (m / (1 - self.betas[0] ** step)) / ( - np.sqrt(v / (1 - self.betas[1] ** step)) + self.eps - ) - assertTensorClose(param.numpy(), ori_params[param] - self.lr * delta) - - cases = [ - {"betas": (0.8, 0.9), "eps": 1e-04, "lr": 0.01}, - { - "betas": (0.8, 0.9), - "eps": 1e-04, - "lr": 0.01, - "weight_decay": 0.1, - }, # with weight_decay - ] - for case in cases: - _test_optimizer("Adam", case, CheckValue) - _test_optimizer("Adam", case, CheckValue, update_lr=True) - - -def test_adagrad(): - class CheckValue: - def __init__(self, net, **kwarg): - self.s_slots = TensorDict() - for param in net.parameters(): - self.s_slots[param] = np.zeros(param.shape).astype(np.float32) - for k, v in kwarg.items(): - setattr(self, k, v) - - def __call__(self, ori_params, new_params, step): - for param in new_params: - grad = param.grad.numpy() - self.s_slots[param] += grad ** 2 - delta = grad / (self.s_slots[param] + self.eps) ** 0.5 - delta *= -(self.lr / (1 + (step - 1) * self.lr_decay)) - assertTensorClose(param.numpy(), ori_params[param] + delta) - - cases = [ - {"lr": 0.01, "eps": 1e-06, "lr_decay": 0.01}, - {"lr": 0.01, "eps": 1e-06, "lr_decay": 0.0}, # without lr_decay - { - "lr": 0.01, - "eps": 1e-06, - "lr_decay": 0.01, - "weight_decay": 0.1, - }, # with weight_decay - ] - for case in cases: - _test_optimizer("Adagrad", case, CheckValue) - _test_optimizer("Adagrad", case, CheckValue, update_lr=True) - - -def test_adadelta(): - class CheckValue: - def __init__(self, net, **kwarg): - self.s_slots = TensorDict() - self.a_slots = TensorDict() - for param in net.parameters(): - self.s_slots[param] = np.zeros(param.shape).astype(np.float32) - self.a_slots[param] = np.zeros(param.shape).astype(np.float32) - for k, v in kwarg.items(): - setattr(self, k, v) - - def __call__(self, ori_params, new_params, step): - for param in new_params: - grad = param.grad.numpy() - self.s_slots[param] = self.s_slots[param] * self.rho + grad ** 2 * ( - 1 - self.rho - ) - delta = ( - grad - * ((self.a_slots[param] + self.eps) ** 0.5) - / (self.s_slots[param] + self.eps) ** 0.5 - ) - self.a_slots[param] = self.a_slots[param] * self.rho + delta ** 2 * ( - 1 - self.rho - ) - delta *= -self.lr - assertTensorClose(param.numpy(), ori_params[param] + delta) - - cases = [ - {"lr": 1.0, "eps": 1e-06, "rho": 0.9}, - {"lr": 1.0, "eps": 1e-06, "rho": 0.9, "weight_decay": 0.9}, # with weight_decay - ] - for case in cases: - _test_optimizer("Adadelta", case, CheckValue) - _test_optimizer("Adadelta", case, CheckValue, update_lr=True) diff --git a/python_module/test/unit/quantization/quantize.py b/python_module/test/unit/quantization/quantize.py deleted file mode 100644 index 236ef9e1..00000000 --- a/python_module/test/unit/quantization/quantize.py +++ /dev/null @@ -1,80 +0,0 @@ -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -from megengine import module as Float -from megengine.module import qat as QAT -from megengine.quantization.quantize import _get_quantable_module_names, quantize_qat - - -def test_get_quantable_module_names(): - # need to make sure names from Quantized and QAT are the same - def _get_qat_module_names(): - def is_qat(key: str): - value = getattr(QAT, key) - return ( - isinstance(value, type) - and issubclass(value, QAT.QATModule) - and value != QAT.QATModule - ) - - # source should have all quantable modules' names - quantable_module_names = [key for key in dir(QAT) if is_qat(key)] - return quantable_module_names - - qat_module_names = _get_qat_module_names() - quantized_module_names = _get_quantable_module_names() - assert set(qat_module_names) == set(quantized_module_names) - - for key in qat_module_names: - value = getattr(Float, key) - assert ( - isinstance(value, type) - and issubclass(value, Float.Module) - and value != Float.Module - ) - - -def test_disable_quantize(): - class Net(Float.Module): - def __init__(self): - super().__init__() - self.conv = Float.ConvBnRelu2d(3, 3, 3) - self.conv.disable_quantize() - - def forward(self, x): - return self.conv(x) - - net = Net() - qat_net = quantize_qat(net, inplace=False) - assert isinstance(qat_net.conv, Float.ConvBnRelu2d) - assert isinstance(qat_net.conv.conv, Float.Conv2d) - - -def test_convert_with_custom_mapping(): - class FloatExample(Float.Module): - def forward(self, x): - return x - - class QATExample(QAT.QATModule): - def forward(self, x): - return x - - @classmethod - def from_float_module(cls, float_module): - return cls() - - class Net(Float.Module): - def __init__(self): - super().__init__() - self.example = FloatExample() - - def forward(self, x): - return self.example(x) - - net = Net() - qat_net = quantize_qat(net, inplace=False, mapping={FloatExample: QATExample}) - assert isinstance(qat_net.example, QATExample) diff --git a/python_module/test/unit/quantization/test_fake_quant.py b/python_module/test/unit/quantization/test_fake_quant.py deleted file mode 100644 index 0fbd9eb1..00000000 --- a/python_module/test/unit/quantization/test_fake_quant.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np -import pytest - -import megengine as mge -import megengine._internal as mgb -from megengine.core import tensor -from megengine.quantization.fake_quant import TQT_Function -from megengine.quantization.internal_fake_quant import * -from megengine.test import assertTensorClose - - -class numpy_TQT_Function: - def __init__(self, lowerbound, upperbound): - super().__init__() - self.lowerbound = lowerbound - self.upperbound = upperbound - - def forward(self, inp, scale): - t = 2 ** scale - # t = F.maximum(t, 1e-4) - inp_scaled = inp / t - inp_clipped = np.maximum( - np.minimum(inp_scaled, self.upperbound), self.lowerbound - ) - inp_rounded = np.round(inp_clipped) - inp_flq = inp_rounded * t - self.saved_tensors = (inp_scaled, inp_rounded, t) - return inp_flq - - def backward(self, grad_inp_flq): - (inp_scaled, inp_rounded, t) = self.saved_tensors - mask_clip = (inp_scaled < -0.5 + self.lowerbound) + ( - inp_scaled > self.upperbound + 0.5 - ) # mask for accumulating the gradients of |data_scaled|>L - mask_quant = np.abs( - mask_clip - 1 - ) # mask for accumulating the gradients with |data_scaled|<=L - grad_quant = ( - grad_inp_flq * mask_quant * (inp_rounded - inp_scaled) - ) # gradient within |data_scaled|<=L - grad_clip = ( - grad_inp_flq * mask_clip * inp_rounded - ) # gradient with | data_scaled|>L - grad_s = grad_clip.sum() + grad_quant.sum() - # dL/ds = dL/dt * t * ln(2) - grad_s = grad_s * t * np.log(2) - grad_inp = grad_inp_flq * mask_quant - return grad_inp, grad_s - - -def test_TQT(): - f = TQT_Function(-127, 127) - nf = numpy_TQT_Function(-127, 127) - - def check_inp(a, b, c, a_np, b_np, c_np): - assertTensorClose( - f.forward(a, b).numpy(), nf.forward(a_np, b_np).astype("float32") - ) - c1, c2 = f.backward(c) - c1_np, c2_np = nf.backward(c_np) - assertTensorClose(c1.numpy(), c1_np.astype("float32")) - assertTensorClose(c2.numpy(), c2_np.astype("float32")) - - a = tensor() - b = tensor() - a_np = np.random.random((4, 3)).astype("float32") - b_np = np.random.random((1)).astype("float32") - a.set_value(a_np) - b.set_value(b_np) - check_inp(a, b, b, a_np, b_np, b_np) - - diff --git a/python_module/test/unit/random/test_random.py b/python_module/test/unit/random/test_random.py deleted file mode 100644 index 2e8023e8..00000000 --- a/python_module/test/unit/random/test_random.py +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8 -*- -# MegEngine is Licensed under the Apache License, Version 2.0 (the "License") -# -# Copyright (c) 2014-2020 Megvii Inc. All rights reserved. -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -import numpy as np - -import megengine as mge -import megengine.functional as F -import megengine.jit as jit -import megengine.module as M -import megengine.random as R - - -def test_random_static_diff_result(): - @jit.trace(symbolic=True) - def graph_a(): - return R.uniform(5) + R.gaussian(5) - - @jit.trace(symbolic=True) - def graph_b(): - return R.uniform(5) + R.gaussian(5) - - a = graph_a() - b = graph_b() - assert np.any(a.numpy() != b.numpy()) - - -def test_random_static_same_result(): - @jit.trace(symbolic=True) - def graph_a(): - R.manual_seed(731) - return R.uniform(5) + R.gaussian(5) - - @jit.trace(symbolic=True) - def graph_b(): - R.manual_seed(731) - return R.uniform(5) + R.gaussian(5) - - a = graph_a() - b = graph_b() - assert np.all(a.numpy() == b.numpy()) - - -def test_random_dynamic_diff_result(): - a = R.uniform(5) + R.gaussian(5) - b = R.uniform(5) + R.gaussian(5) - assert np.any(a.numpy() != b.numpy()) - - -def test_random_dynamic_same_result(): - R.manual_seed(0) - a = R.uniform(5) + R.gaussian(5) - R.manual_seed(0) - b = R.uniform(5) + R.gaussian(5) - assert np.all(a.numpy() == b.numpy()) - - -def test_range_uniform_static_diff_result(): - @jit.trace(symbolic=True) - def graph_a(): - return R.uniform(5, low=-2, high=2) - - @jit.trace(symbolic=True) - def graph_b(): - return R.uniform(5, low=-2, high=2) - - a = graph_a() - b = graph_b() - assert np.any(a.numpy() != b.numpy()) - - -def test_range_uniform_static_same_result(): - @jit.trace(symbolic=True) - def graph_a(): - R.manual_seed(731) - return R.uniform(5, low=-2, high=2) - - @jit.trace(symbolic=True) - def graph_b(): - R.manual_seed(731) - return R.uniform(5, low=-2, high=2) - - a = graph_a() - b = graph_b() - assert np.all(a.numpy() == b.numpy()) - - -def test_range_uniform_dynamic_diff_result(): - a = R.uniform(5, low=-2, high=2) - b = R.uniform(5, low=-2, high=2) - assert np.any(a.numpy() != b.numpy()) - - -def test_range_uniform_dynamic_same_result(): - R.manual_seed(0) - a = R.uniform(5, low=-2, high=2) - R.manual_seed(0) - b = R.uniform(5, low=-2, high=2) - assert np.all(a.numpy() == b.numpy()) - - -def test_dropout_dynamic_diff_result(): - x = mge.ones(10) - a = F.dropout(x, 0.5) - b = F.dropout(x, 0.5) - assert np.any(a.numpy() != b.numpy()) - - -def test_dropout_dynamic_same_result(): - x = mge.ones(10) - R.manual_seed(0) - a = F.dropout(x, 0.5) - R.manual_seed(0) - b = F.dropout(x, 0.5) - assert np.all(a.numpy() == b.numpy()) - - -def test_M_dropout_static_diff_result(): - m = M.Dropout(0.5) - - @jit.trace(symbolic=True) - def graph_a(x): - return m(x) - - @jit.trace(symbolic=True) - def graph_b(x): - return m(x) - - x = np.ones(10, dtype="float32") - a = graph_a(x) - a = a.numpy().copy() - b = graph_b(x) - c = graph_a(x) - assert np.any(a != b.numpy()) - assert np.any(a != c.numpy()) - - -def test_M_dropout_static_same_result(): - m = M.Dropout(0.5) - - @jit.trace(symbolic=True) - def graph_a(x): - return m(x) - - @jit.trace(symbolic=True) - def graph_b(x): - return m(x) - - x = np.ones(10, dtype="float32") - R.manual_seed(0) - a = graph_a(x) - a = a.numpy().copy() - R.manual_seed(0) - b = graph_b(x) - R.manual_seed(0) # useless - c = graph_a(x) - assert np.all(a == b.numpy()) - assert np.any(a != c.numpy()) diff --git a/scripts/cmake-build/host_build.sh b/scripts/cmake-build/host_build.sh index 8a8f1508..d522c2ca 100755 --- a/scripts/cmake-build/host_build.sh +++ b/scripts/cmake-build/host_build.sh @@ -9,7 +9,6 @@ function usage() { echo "-t : Build with training mode, default inference only" echo "-m : Build with m32 mode(only for windows build), default m64" echo "-r : remove old build dir before make, default off" - echo "-n : enable new python runtime(valid when training mode with -t, default is legacy runtime)" echo "-h : show usage" echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." echo "example: $0 -d" @@ -23,10 +22,9 @@ MGE_WINDOWS_BUILD_ARCH=x64 MGE_WINDOWS_BUILD_MARCH=m64 MGE_ARCH=x86_64 REMOVE_OLD_BUILD=false -MGE_BUILD_IMPERATIVE_RT=OFF echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" -while getopts "rhdctmn" arg +while getopts "rhdctm" arg do case $arg in d) @@ -55,10 +53,6 @@ do MGE_WINDOWS_BUILD_MARCH=m32 MGE_ARCH=i386 ;; - n) - echo "Enable imperative python wrapper runtime" - MGE_BUILD_IMPERATIVE_RT=ON - ;; ?) echo "unkonw argument" usage @@ -107,7 +101,6 @@ function cmake_build() { cmake \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \ - -DMGE_BUILD_IMPERATIVE_RT=${MGE_BUILD_IMPERATIVE_RT} \ -DMGE_WITH_CUDA=$MGE_WITH_CUDA \ -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \ ${EXTRA_CMAKE_ARGS} \ @@ -244,7 +237,6 @@ function cmake_build_windows() { vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && cmake -G "Ninja" \ -DMGE_ARCH=$MGE_ARCH \ -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \ - -DMGE_BUILD_IMPERATIVE_RT=${MGE_BUILD_IMPERATIVE_RT} \ -DMGE_WITH_CUDA=$MGE_WITH_CUDA \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \ @@ -257,12 +249,6 @@ function cmake_build_windows() { ${WINDOWS_BUILD_TARGET}" } -if [ ${MGE_BUILD_IMPERATIVE_RT} = "ON" ] && [ ${MGE_INFERENCE_ONLY} = "ON" ]; then - echo "ERR: MGE_BUILD_IMPERATIVE_RT(-n) only valid when enable training mode(-t)" - echo "pls remove -n or add -t" - exit -1 -fi - if [[ $OS =~ "NT" ]]; then if [ ${MGE_ARCH} = "i386" ] && [ ${MGE_INFERENCE_ONLY} = "OFF" ]; then echo "ERR: training mode(-t) only support 64 bit mode" diff --git a/scripts/whl/BUILD_PYTHON_WHL_README.md b/scripts/whl/BUILD_PYTHON_WHL_README.md index 07e55feb..a9510072 100644 --- a/scripts/whl/BUILD_PYTHON_WHL_README.md +++ b/scripts/whl/BUILD_PYTHON_WHL_README.md @@ -7,9 +7,8 @@ ``` 1: enable rootless docker env, refs: https://docs.docker.com/engine/security/rootless/ - 2: cd ./scripts/whl/linux/manylinux2010 - 3: ./build_image.sh cpu - 4: ./build_image.sh cuda + 2: cd ./scripts/whl/manylinux2010 + 3: ./build_image.sh ``` @@ -60,12 +59,10 @@ MegBrain delivers `wheel` package with `manylinux2010` tag defined in [PEP-571](https://www.python.org/dev/peps/pep-0571/). ``` - ./build_wheel.sh cpu - - CUDA_ROOT_DIR=/path/to/cuda \ - CUDNN_ROOT_DIR=/path/to/cudnn \ - TENSORRT_ROOT_DIR=/path/to/tensorrt \ - ./build_wheel.sh cuda + export CUDA_ROOT_DIR=/path/to/cuda + export CUDNN_ROOT_DIR=/path/to/cudnn + export TENSORRT_ROOT_DIR=/path/to/tensorrt + ./scripts/whl/manylinux2010/build_wheel.sh ``` And you can find all of the outputs in `output` directory. @@ -73,10 +70,14 @@ If you just want to build for a specific Python verison, you can use `ALL_PYTHON` environment variable. eg: ``` - ALL_PYTHON=35m ./build_wheel.sh cpu + ALL_PYTHON=35m ./scripts/whl/manylinux2010/build_wheel.sh + ``` + If you just want to build with cpu only version, you can set `BUILD_WHL_CPU_ONLY` environment 'ON'. eg: + + ``` + BUILD_WHL_CPU_ONLY=ON ALL_PYTHON=35m ./scripts/whl/manylinux2010/build_wheel.sh ``` - Please append `imperative` to `build_wheel.sh` to use the new runtime, e.g., `./build_wheel.sh cpu imperative`. ## build for macos ``` ./scripts/whl/macos/macos_build_whl.sh @@ -86,11 +87,6 @@ ``` ALL_PYTHON=3.5.9 ./scripts/whl/macos/macos_build_whl.sh ``` - If you want to build with imperative rt, set env BUILD_IMPERATIVE="ON", eg: - - ``` - ALL_PYTHON=3.5.9 BUILD_IMPERATIVE="ON" ./scripts/whl/macos/macos_build_whl.sh - ``` ## build for windows ``` ./scripts/whl/windows/windows_build_whl.sh @@ -100,10 +96,8 @@ ``` ALL_PYTHON=3.5.4 ./scripts/whl/windows/windows_build_whl.sh ``` - If you want to build windows whl with cuda, also a specific Python verison. eg: + If you just want to build with cpu only version, you can set `BUILD_WHL_CPU_ONLY` environment 'ON'. eg: ``` - WINDOWS_WHL_WITH_CUDA="ON" ALL_PYTHON=3.5.4 ./scripts/whl/windows/windows_build_whl.sh + BUILD_WHL_CPU_ONLY='ON' ALL_PYTHON=3.5.4 ./scripts/whl/windows/windows_build_whl.sh ``` - If you want to build with imperative rt, set env BUILD_IMPERATIVE="ON", eg: - BUILD_IMPERATIVE="ON" WINDOWS_WHL_WITH_CUDA="ON" ALL_PYTHON=3.5.4 ./scripts/whl/windows/windows_build_whl.sh diff --git a/scripts/whl/macos/macos_build_whl.sh b/scripts/whl/macos/macos_build_whl.sh index a10912dd..ef421621 100755 --- a/scripts/whl/macos/macos_build_whl.sh +++ b/scripts/whl/macos/macos_build_whl.sh @@ -84,11 +84,6 @@ function config_python_env() { fi } -if [[ -z ${BUILD_IMPERATIVE} ]] -then - BUILD_IMPERATIVE="OFF" -fi - function do_build() { for ver in ${ALL_PYTHON} do @@ -116,65 +111,38 @@ function do_build() { #change PYTHON_LIBRARY and PYTHON_INCLUDE_DIR, so add #-r to remove build cache after a new ver build, which #will be more slow build than without -r - if [ ${BUILD_IMPERATIVE} = "ON" ]; then - echo "build whl with IMPERATIVE python rt" - ${SRC_DIR}/scripts/cmake-build/host_build.sh -t -n -r - else - echo "build whl with legacy python rt" - ${SRC_DIR}/scripts/cmake-build/host_build.sh -t -r - fi + echo "build whl with legacy python rt" + ${SRC_DIR}/scripts/cmake-build/host_build.sh -t -r #call setup.py BUILD_DIR=${SRC_DIR}/build_dir/host/MGE_WITH_CUDA_OFF/MGE_INFERENCE_ONLY_OFF/Release/build/ cd ${BUILD_DIR} - if [ -d "staging" ]; then - echo "remove old build cache file" - rm -rf staging - fi + rm -rf staging mkdir -p staging - if [ ${BUILD_IMPERATIVE} = "ON" ]; then - echo "build whl with IMPERATIVE python rt" - cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - cd ${BUILD_DIR}/staging/megengine/core - rt_file=`ls _imperative_rt.*.so` - echo "rt file is: ${rt_file}" - if [[ -z ${rt_file} ]] - then - echo "ERR: can not find valid rt file" - exit -1 - fi - llvm-strip -s ${rt_file} - mv ${rt_file} _imperative_rt.so - echo "check so valid or not..." - otool_out=`otool -L _imperative_rt.so` - if [[ "${otool_out}" =~ "ython" ]]; then - echo "ERR: invalid _imperative_rt.so which depend on python lib, detail: log" - echo ${otool_out} - exit -1 - else - echo "valid..." - fi + cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ + cd ${BUILD_DIR}/staging/megengine/core + rt_file=`ls _imperative_rt.*.so` + echo "rt file is: ${rt_file}" + if [[ -z ${rt_file} ]] + then + echo "ERR: can not find valid rt file" + exit -1 + fi + llvm-strip -s ${rt_file} + mv ${rt_file} _imperative_rt.so + echo "check so valid or not..." + otool_out=`otool -L _imperative_rt.so` + if [[ "${otool_out}" =~ "ython" ]]; then + echo "ERR: invalid _imperative_rt.so which depend on python lib, detail: log" + echo ${otool_out} + exit -1 else - echo "build whl with legacy python rt" - - cp -a python_module/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - cd ${BUILD_DIR}/staging/megengine/_internal - #FIXME: set lib suffix to dylib may be better, BUT we find after distutils.file_util.copy_file - #will change to .so at macos even we set suffix to dylib, at the same time, macos also support .so - echo "check so valid or not..." - llvm-strip -s _mgb.so - otool_out=`otool -L _mgb.so` - if [[ "${otool_out}" =~ "ython" ]]; then - echo "ERR: invalid _mgb.so which depend on python lib, detail: log" - echo ${otool_out} - exit -1 - else - echo "valid..." - fi + echo "valid..." fi + cd ${BUILD_DIR}/staging ${PYTHON_DIR}/bin/python3 setup.py bdist_wheel cd ${BUILD_DIR}/staging/dist/ diff --git a/scripts/whl/manylinux2010/build_wheel.sh b/scripts/whl/manylinux2010/build_wheel.sh index 02adf235..c4762356 100755 --- a/scripts/whl/manylinux2010/build_wheel.sh +++ b/scripts/whl/manylinux2010/build_wheel.sh @@ -6,7 +6,11 @@ OUTPUTDIR=$(readlink -f ${CWD}/output) USERID=$(id -u) TMPFS_ARGS="--tmpfs /tmp:exec" -IMPERATIVE=${2:-mgb} +BUILD_WHL_CPU_ONLY=${BUILD_WHL_CPU_ONLY} +if [[ -z ${BUILD_WHL_CPU_ONLY} ]] +then + BUILD_WHL_CPU_ONLY="OFF" +fi echo ${BASEDIR} pushd ${BASEDIR}/third_party >/dev/null @@ -16,84 +20,84 @@ popd >/dev/null cd ${CWD} mkdir -p ${OUTPUTDIR} -if [[ -z ${CUDA_ROOT_DIR} ]]; then - echo "Environment variable CUDA_ROOT_DIR not set." - exit -1 -fi -if [[ -z ${CUDNN_ROOT_DIR} ]]; then - echo "Environment variable CUDNN_ROOT_DIR not set." - exit -1 -fi -if [[ -z ${TENSORRT_ROOT_DIR} ]]; then - echo "Environment variable TENSORRT_ROOT_DIR not set." - exit -1 -fi - -## YOU SHOULD MODIFY CUDA VERSION AS BELOW WHEN UPGRADE -REQUIR_CUDA_VERSION="10010" -REQUIR_CUDNN_VERSION="7.6.3" -REQUIR_TENSORRT_VERSION="6.0.1.5" - -CUDA_ROOT_DIR_=${CUDA_ROOT_DIR%*/} -CUDNN_ROOT_DIR_=${CUDNN_ROOT_DIR%*/} -TENSORRT_ROOT_DIR_=${TENSORRT_ROOT_DIR%*/} - -CUDA_VERSION_PATH=${CUDA_ROOT_DIR_}/include/cuda.h -CUDNN_VERSION_PATH=${CUDNN_ROOT_DIR_}/include/cudnn.h -TENSORRT_VERSION_PATH=${TENSORRT_ROOT_DIR_}/include/NvInferVersion.h - -if [ ! -e $CUDA_VERSION_PATH ] ; then - echo file $CUDA_VERSION_PATH is not exist - echo please check the Environment must use CUDA-10.1 NO.$REQUIR_CUDA_VERSION - exit -1 -fi -if [ ! -e $CUDNN_VERSION_PATH ] ; then - echo file $CUDNN_VERSION_PATH is not exist - echo please check the Environment must use CUDNN-V$REQUIR_CUDNN_VERSION - exit -1 -fi -if [ ! -e $TENSORRT_VERSION_PATH ] ; then - echo file $TENSORRT_VERSION_PATH is not exist - echo please check the Environment must use TensorRT-$REQUIR_TENSORRT_VERSION - exit -1 -fi - -CUDA_VERSION_CONTEXT=$(head -85 ${CUDA_VERSION_PATH}) -CUDNN_VERSION_CONTEXT=$(head -62 ${CUDNN_VERSION_PATH}) -TENSORRT_VERSION_CONTEXT=$(tail -12 ${TENSORRT_VERSION_PATH}) - -CUDA_API_VERSION=$(echo $CUDA_VERSION_CONTEXT | grep -Eo "define __CUDA_API_VERSION * +([0-9]+)") -CUDA_VERSION=${CUDA_API_VERSION:0-5} -echo CUDA_VERSION:$CUDA_VERSION - -CUDNN_VERSION_MAJOR=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_MAJOR * +([0-9]+)") -CUDNN_VERSION_MINOR=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_MINOR * +([0-9]+)") -CUDNN_VERSION_PATCH=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_PATCHLEVEL * +([0-9]+)") -CUDNN_VERSION=${CUDNN_VERSION_MAJOR:0-1}.${CUDNN_VERSION_MINOR:0-1}.${CUDNN_VERSION_PATCH:0-1} -echo CUDNN_VERSION:$CUDNN_VERSION - -TENSORRT_VERSION_MAJOR=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_MAJOR * +([0-9]+)") -TENSORRT_VERSION_MINOR=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_MINOR * +([0-9]+)") -TENSORRT_VERSION_PATCH=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_PATCH * +([0-9]+)") -TENSORRT_VERSION_BUILD=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_BUILD * +([0-9]+)") -TENSORRT_VERSION=${TENSORRT_VERSION_MAJOR:0-1}.${TENSORRT_VERSION_MINOR:0-1}.${TENSORRT_VERSION_PATCH:0-1}.${TENSORRT_VERSION_BUILD:0-1} -echo TENSORRT_VERSION:$TENSORRT_VERSION - -if [ $CUDA_VERSION != $REQUIR_CUDA_VERSION ] ; then - echo please check the Environment must use CUDA-10.1 NO.$REQUIR_CUDA_VERSION - exit -1 -fi - -if [ $CUDNN_VERSION != $REQUIR_CUDNN_VERSION ] ; then - echo please check the Environment must use CUDNN-V$REQUIR_CUDNN_VERSION - exit -1 +if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then + if [[ -z ${CUDA_ROOT_DIR} ]]; then + echo "Environment variable CUDA_ROOT_DIR not set." + exit -1 + fi + if [[ -z ${CUDNN_ROOT_DIR} ]]; then + echo "Environment variable CUDNN_ROOT_DIR not set." + exit -1 + fi + if [[ -z ${TENSORRT_ROOT_DIR} ]]; then + echo "Environment variable TENSORRT_ROOT_DIR not set." + exit -1 + fi + + ## YOU SHOULD MODIFY CUDA VERSION AS BELOW WHEN UPGRADE + REQUIR_CUDA_VERSION="10010" + REQUIR_CUDNN_VERSION="7.6.3" + REQUIR_TENSORRT_VERSION="6.0.1.5" + + CUDA_ROOT_DIR_=${CUDA_ROOT_DIR%*/} + CUDNN_ROOT_DIR_=${CUDNN_ROOT_DIR%*/} + TENSORRT_ROOT_DIR_=${TENSORRT_ROOT_DIR%*/} + + CUDA_VERSION_PATH=${CUDA_ROOT_DIR_}/include/cuda.h + CUDNN_VERSION_PATH=${CUDNN_ROOT_DIR_}/include/cudnn.h + TENSORRT_VERSION_PATH=${TENSORRT_ROOT_DIR_}/include/NvInferVersion.h + + if [ ! -e $CUDA_VERSION_PATH ] ; then + echo file $CUDA_VERSION_PATH is not exist + echo please check the Environment must use CUDA-10.1 NO.$REQUIR_CUDA_VERSION + exit -1 + fi + if [ ! -e $CUDNN_VERSION_PATH ] ; then + echo file $CUDNN_VERSION_PATH is not exist + echo please check the Environment must use CUDNN-V$REQUIR_CUDNN_VERSION + exit -1 + fi + if [ ! -e $TENSORRT_VERSION_PATH ] ; then + echo file $TENSORRT_VERSION_PATH is not exist + echo please check the Environment must use TensorRT-$REQUIR_TENSORRT_VERSION + exit -1 + fi + + CUDA_VERSION_CONTEXT=$(head -85 ${CUDA_VERSION_PATH}) + CUDNN_VERSION_CONTEXT=$(head -62 ${CUDNN_VERSION_PATH}) + TENSORRT_VERSION_CONTEXT=$(tail -12 ${TENSORRT_VERSION_PATH}) + + CUDA_API_VERSION=$(echo $CUDA_VERSION_CONTEXT | grep -Eo "define __CUDA_API_VERSION * +([0-9]+)") + CUDA_VERSION=${CUDA_API_VERSION:0-5} + echo CUDA_VERSION:$CUDA_VERSION + + CUDNN_VERSION_MAJOR=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_MAJOR * +([0-9]+)") + CUDNN_VERSION_MINOR=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_MINOR * +([0-9]+)") + CUDNN_VERSION_PATCH=$(echo $CUDNN_VERSION_CONTEXT | grep -Eo "define CUDNN_PATCHLEVEL * +([0-9]+)") + CUDNN_VERSION=${CUDNN_VERSION_MAJOR:0-1}.${CUDNN_VERSION_MINOR:0-1}.${CUDNN_VERSION_PATCH:0-1} + echo CUDNN_VERSION:$CUDNN_VERSION + + TENSORRT_VERSION_MAJOR=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_MAJOR * +([0-9]+)") + TENSORRT_VERSION_MINOR=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_MINOR * +([0-9]+)") + TENSORRT_VERSION_PATCH=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_PATCH * +([0-9]+)") + TENSORRT_VERSION_BUILD=$(echo $TENSORRT_VERSION_CONTEXT | grep -Eo "NV_TENSORRT_BUILD * +([0-9]+)") + TENSORRT_VERSION=${TENSORRT_VERSION_MAJOR:0-1}.${TENSORRT_VERSION_MINOR:0-1}.${TENSORRT_VERSION_PATCH:0-1}.${TENSORRT_VERSION_BUILD:0-1} + echo TENSORRT_VERSION:$TENSORRT_VERSION + + if [ $CUDA_VERSION != $REQUIR_CUDA_VERSION ] ; then + echo please check the Environment must use CUDA-10.1 NO.$REQUIR_CUDA_VERSION + exit -1 + fi + + if [ $CUDNN_VERSION != $REQUIR_CUDNN_VERSION ] ; then + echo please check the Environment must use CUDNN-V$REQUIR_CUDNN_VERSION + exit -1 + fi + + if [ $TENSORRT_VERSION != $REQUIR_TENSORRT_VERSION ] ; then + echo please check the Environment must use TENSORRT-$REQUIR_TENSORRT_VERSION + exit -1 + fi fi -if [ $TENSORRT_VERSION != $REQUIR_TENSORRT_VERSION ] ; then - echo please check the Environment must use TENSORRT-$REQUIR_TENSORRT_VERSION - exit -1 -fi - -docker run -it --rm $TMPFS_ARGS -e UID=${USERID} -e LOCAL_VERSION=${LOCAL_VERSION} -e ALL_PYTHON=${ALL_PYTHON} -v ${CUDA_ROOT_DIR}:/usr/local/cuda -v ${CUDNN_ROOT_DIR}:/opt/cudnn -v ${TENSORRT_ROOT_DIR}:/opt/tensorrt -v ${BASEDIR}:/home/code -v ${OUTPUTDIR}:/home/output:rw env_manylinux2010:latest /home/code/scripts/whl/manylinux2010/do_build.sh $IMPERATIVE - - +docker run -it --rm $TMPFS_ARGS -e UID=${USERID} -e LOCAL_VERSION=${LOCAL_VERSION} -e BUILD_WHL_CPU_ONLY=${BUILD_WHL_CPU_ONLY} -e ALL_PYTHON=${ALL_PYTHON} -v ${CUDA_ROOT_DIR}:/usr/local/cuda -v ${CUDNN_ROOT_DIR}:/opt/cudnn -v ${TENSORRT_ROOT_DIR}:/opt/tensorrt -v ${BASEDIR}:/home/code -v ${OUTPUTDIR}:/home/output:rw env_manylinux2010:latest /home/code/scripts/whl/manylinux2010/do_build.sh diff --git a/scripts/whl/manylinux2010/do_build.sh b/scripts/whl/manylinux2010/do_build.sh index bf06afd0..10286006 100755 --- a/scripts/whl/manylinux2010/do_build.sh +++ b/scripts/whl/manylinux2010/do_build.sh @@ -5,80 +5,70 @@ then ALL_PYTHON="35m 36m 37m 38" fi -EXTRA_CMAKE_ARGS= -if [[ "$1" == imperative ]]; then - BUILD_IMPERATIVE=ON - SO_NAME=_imperative_rt - SO_PATH=megengine/core -else - BUILD_IMPERATIVE=OFF - SO_NAME=_mgb - SO_PATH=megengine/_internal +BUILD_WHL_CPU_ONLY=${BUILD_WHL_CPU_ONLY} +if [[ -z ${BUILD_WHL_CPU_ONLY} ]] +then + BUILD_WHL_CPU_ONLY="OFF" +fi + +SRC_DIR=$(readlink -f "`dirname $0`/../../../") +BUILD_DIR=${SRC_DIR}/build_dir/host/MGE_WITH_CUDA_OFF/MGE_INFERENCE_ONLY_OFF/Release/build/ +if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then + BUILD_DIR=${SRC_DIR}/build_dir/host/MGE_WITH_CUDA_ON/MGE_INFERENCE_ONLY_OFF/Release/build/ fi +SO_NAME=_imperative_rt +SO_PATH=megengine/core +NEW_LIB_PATH=core/lib for ver in ${ALL_PYTHON} do python_ver=${ver:0:2} - BUILD_DIR=/tmp/build_megengine/python${python_ver} MAJOR=${python_ver:0:1} MINOR=${ver:1} PYTHON_DIR=/opt/python/cp${python_ver}-cp${ver}/ EXT_NAME=${SO_NAME}.cpython-${ver}-x86_64-linux-gnu.so - mkdir -p ${BUILD_DIR} - pushd ${BUILD_DIR} >/dev/null - MGE_CMAKE_FLAGS="-DMGE_WITH_DISTRIBUTED=ON \ - -DMGE_WITH_CUDA=ON \ - -DCMAKE_PREFIX_PATH=${PYTHON_DIR} \ - -DCMAKE_INSTALL_PREFIX=/home/output " - if [[ "$BUILD_IMPERATIVE" == ON ]]; then - MGE_CMAKE_FLAGS+=" -DMGE_BUILD_IMPERATIVE_RT=ON \ - -DPYTHON_EXECUTABLE=${PYTHON_DIR}/bin/python3" - else - MGE_CMAKE_FLAGS+=" -DPYTHON_LIBRARY=${PYTHON_DIR}lib/ \ - -DPYTHON_INCLUDE_DIR=${PYTHON_DIR}include/python${MAJOR}.${MINOR}" - fi - cmake /home/code ${MGE_CMAKE_FLAGS} ${EXTRA_CMAKE_ARGS} - make -j$(nproc) VERBOSE=1 - make install - mkdir -p staging - mkdir -p /home/output/debug - if [[ "$BUILD_IMPERATIVE" == ON ]]; then - cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - else - cp -a python_module/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - fi - pushd dnn/cuda-stub/ >/dev/null - strip -s libcuda.so - ln -sf libcuda.so libcuda.so.1 - popd >/dev/null - pushd staging >/dev/null - pushd ${SO_PATH} >/dev/null - SO_NAME_EXT=${SO_NAME}.so - objcopy --only-keep-debug ${SO_NAME_EXT} ${EXT_NAME}.dbg - strip -s ${SO_NAME_EXT} - objcopy --add-gnu-debuglink=${EXT_NAME}.dbg ${SO_NAME_EXT} - cp -a ${EXT_NAME}.dbg /home/output/debug - mkdir -p lib/ucx - cp -L /usr/local/cuda/lib*/libnvrtc-builtins.so lib - cp -L ${BUILD_DIR}/third_party/MegRay/third_party/ucx/lib/ucx/*.so lib/ucx/ - strip -s lib/ucx/*.so - popd >/dev/null - ${PYTHON_DIR}/bin/python setup.py bdist_wheel - popd >/dev/null - popd >/dev/null - pushd /home/output >/dev/null - if [[ "$BUILD_IMPERATIVE" == ON ]]; then - NEW_LIB_PATH=core/lib - else - NEW_LIB_PATH=_internal/lib - fi - LD_LIBRARY_PATH=${BUILD_DIR}/dnn/cuda-stub:$LD_LIBRARY_PATH auditwheel repair -L ${NEW_LIB_PATH} ${BUILD_DIR}/staging/dist/Meg*.whl - chown -R ${UID}.${UID} . - popd >/dev/null - rm -rf ${BUILD_DIR} -done + export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=RelWithDebInfo" + export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DCMAKE_PREFIX_PATH=${PYTHON_DIR}" + export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_EXECUTABLE=${PYTHON_DIR}/bin/python3" + export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_LIBRARY=${PYTHON_DIR}lib/" + export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_INCLUDE_DIR=${PYTHON_DIR}include/python${MAJOR}.${MINOR}" + + if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then + ${SRC_DIR}/scripts/cmake-build/host_build.sh -c -t -r + else + ${SRC_DIR}/scripts/cmake-build/host_build.sh -t -r + fi + cd ${BUILD_DIR} + rm -rf staging + mkdir -p staging + cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ -pushd /home/code/dnn/scripts >/dev/null -rm -rf __pycache__ -popd >/dev/null + + if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then + cd ${BUILD_DIR}/dnn/cuda-stub/ + strip -s libcuda.so + ln -sf libcuda.so libcuda.so.1 + fi + + cd ${BUILD_DIR}/staging/${SO_PATH} + SO_NAME_EXT=${SO_NAME}.so + objcopy --only-keep-debug ${SO_NAME_EXT} ${EXT_NAME}.dbg + strip -s ${SO_NAME_EXT} + objcopy --add-gnu-debuglink=${EXT_NAME}.dbg ${SO_NAME_EXT} + mkdir -p lib/ucx + + if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then + cp -L /usr/local/cuda/lib*/libnvrtc-builtins.so lib + cp -L ${BUILD_DIR}/third_party/MegRay/third_party/ucx/lib/ucx/*.so lib/ucx/ + strip -s lib/ucx/*.so + fi + + cd ${BUILD_DIR}/staging/ + ${PYTHON_DIR}/bin/python setup.py bdist_wheel + cd /home/output + LD_LIBRARY_PATH=${BUILD_DIR}/dnn/cuda-stub:$LD_LIBRARY_PATH auditwheel repair -L ${NEW_LIB_PATH} ${BUILD_DIR}/staging/dist/Meg*.whl + chown -R ${UID}.${UID} . + # compat for root-less docker env to remove output at host side + chmod -R 777 . +done diff --git a/scripts/whl/windows/windows_build_whl.sh b/scripts/whl/windows/windows_build_whl.sh index 1e1d553a..d7fd0b86 100755 --- a/scripts/whl/windows/windows_build_whl.sh +++ b/scripts/whl/windows/windows_build_whl.sh @@ -58,9 +58,10 @@ function config_python_env() { PYTHON_INCLUDE_DIR=${PYTHON_DIR}/include } -if [[ -z ${WINDOWS_WHL_WITH_CUDA} ]] +BUILD_WHL_CPU_ONLY=${BUILD_WHL_CPU_ONLY} +if [[ -z ${BUILD_WHL_CPU_ONLY} ]] then - WINDOWS_WHL_WITH_CUDA="OFF" + BUILD_WHL_CPU_ONLY="OFF" fi @@ -86,32 +87,23 @@ function depend_real_copy() { function copy_more_dll() { # for python whl real use - if [ ${BUILD_IMPERATIVE} = "ON" ]; then - echo "config BUILD_IMPERATIVE core lib dir" - CP_WHL_DST=${BUILD_DIR}/staging/megengine/core/lib - else - echo "config legacy python lib dir" - CP_WHL_DST=${BUILD_DIR}/staging/megengine/_internal/lib - fi - rm -rf ${CP_WHL_DST} - mkdir ${CP_WHL_DST} + echo "config BUILD_IMPERATIVE core lib dir" + CP_WHL_DST_IMP=${BUILD_DIR}/staging/megengine/core/lib + rm -rf ${CP_WHL_DST_IMP} + mkdir ${CP_WHL_DST_IMP} + # workround for cpu-only version import failed, use a # empty.file to triger setup.py to create a null empty - echo "empty" > ${CP_WHL_DST}/empty.file + echo "empty" > ${CP_WHL_DST_IMP}/empty.file - if [ ${WINDOWS_WHL_WITH_CUDA} = "ON" ]; then + if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then echo "copy nvidia lib to whl use...." - depend_real_copy ${CP_WHL_DST} + depend_real_copy ${CP_WHL_DST_IMP} fi } -if [[ -z ${BUILD_IMPERATIVE} ]] -then - BUILD_IMPERATIVE="OFF" -fi - function do_build() { for ver in ${ALL_PYTHON} do @@ -144,14 +136,8 @@ function do_build() { #-r to remove build cache after a new ver build, which #will be more slow build than without -r BUILD_ARGS=" -t -r" - if [ ${BUILD_IMPERATIVE} = "ON" ]; then - echo "build whl with IMPERATIVE python rt" - BUILD_ARGS="${BUILD_ARGS} -n " - else - echo "build whl with legacy python rt" - fi - if [ ${WINDOWS_WHL_WITH_CUDA} = "ON" ]; then + if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then echo "build windows whl with cuda" BUILD_ARGS="${BUILD_ARGS} -c " else @@ -161,39 +147,27 @@ function do_build() { echo "host_build.sh BUILD_ARGS: ${BUILD_ARGS}" ${SRC_DIR}/scripts/cmake-build/host_build.sh ${BUILD_ARGS} - #call setup.py BUILD_DIR=${SRC_DIR}/build_dir/host/build/ cd ${BUILD_DIR} - if [ -d "staging" ]; then - echo "remove old build cache file" - rm -rf staging - fi + rm -rf staging mkdir -p staging - - if [ ${BUILD_IMPERATIVE} = "ON" ]; then - echo "build whl with IMPERATIVE python rt" - cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - cd ${BUILD_DIR}/staging/megengine/core - rt_file=`ls _imperative_rt.*.pyd` - echo "rt file is: ${rt_file}" - if [[ -z ${rt_file} ]] - then - echo "ERR: can not find valid rt file" - exit -1 - fi - llvm-strip -s ${rt_file} - mv ${rt_file} _imperative_rt.pyd - else - echo "build whl with legacy python rt" - - cp -a python_module/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ - cd ${BUILD_DIR}/staging/megengine/_internal - llvm-strip -s _mgb.pyd + cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/ + cd ${BUILD_DIR}/staging/megengine/core + rt_file=`ls _imperative_rt.*.pyd` + echo "rt file is: ${rt_file}" + if [[ -z ${rt_file} ]] + then + echo "ERR: can not find valid rt file" + exit -1 fi + llvm-strip -s ${rt_file} + mv ${rt_file} _imperative_rt.pyd + copy_more_dll cd ${BUILD_DIR}/staging + echo "call setup.py now" ${PYTHON_DIR}/python3 setup.py bdist_wheel cp ${BUILD_DIR}/staging/dist/Meg*.whl ${WINDOWS_WHL_HOME}/