From 6b380e896580919cada2846b80a82c7ff6448083 Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Thu, 27 Aug 2020 16:59:41 +0800 Subject: [PATCH] feat(mge/imperative): run oss test and restore cmake list build items GitOrigin-RevId: 11411b6964185700ead75f8f4319d28adaf64907 --- CMakeLists.txt | 8 +- dnn/CMakeLists.txt | 4 +- imperative/.gitignore | 5 + imperative/CMakeLists.txt | 110 ++ imperative/python/megengine/__init__.py | 25 + imperative/python/megengine/core/__init__.py | 12 + imperative/python/megengine/core/_wrap.py | 46 + .../python/megengine/core/autodiff/__init__.py | 8 + .../megengine/core/autodiff/builtin_op_utils.py | 134 ++ imperative/python/megengine/core/autodiff/grad.py | 390 +++++ imperative/python/megengine/core/ops/__init__.py | 8 + .../megengine/core/ops/_internal/__init__.py | 8 + .../python/megengine/core/ops/_internal/all_ops.py | 10 + .../python/megengine/core/ops/_internal/enum36.py | 929 ++++++++++++ .../python/megengine/core/ops/_internal/helper.py | 94 ++ .../megengine/core/ops/_internal/misc_ops.py | 194 +++ .../python/megengine/core/ops/builtin/__init__.py | 37 + imperative/python/megengine/core/ops/special.py | 16 + .../python/megengine/core/tensor/__init__.py | 9 + imperative/python/megengine/core/tensor/core.py | 115 ++ imperative/python/megengine/core/tensor/dtype.py | 289 ++++ .../python/megengine/core/tensor/function.py | 158 ++ .../python/megengine/core/tensor/indexing.py | 251 ++++ .../python/megengine/core/tensor/megbrain_graph.py | 196 +++ .../megengine/core/tensor/raw_tensor/__init__.py | 108 ++ .../python/megengine/core/tensor/raw_tensor/jit.py | 251 ++++ .../megengine/core/tensor/raw_tensor/trace_exec.py | 263 ++++ imperative/python/megengine/core/tensor/tensor.py | 106 ++ .../python/megengine/core/tensor/tensor_wrapper.py | 367 +++++ imperative/python/megengine/core/tensor/utils.py | 154 ++ imperative/python/megengine/data/__init__.py | 17 + imperative/python/megengine/data/_queue.py | 139 ++ imperative/python/megengine/data/collator.py | 76 + imperative/python/megengine/data/dataloader.py | 500 +++++++ .../python/megengine/data/dataset/__init__.py | 10 + .../python/megengine/data/dataset/meta_dataset.py | 73 + .../megengine/data/dataset/vision/__init__.py | 17 + .../python/megengine/data/dataset/vision/cifar.py | 171 +++ .../megengine/data/dataset/vision/cityscapes.py | 151 ++ .../python/megengine/data/dataset/vision/coco.py | 366 +++++ .../python/megengine/data/dataset/vision/folder.py | 90 ++ .../megengine/data/dataset/vision/imagenet.py | 248 ++++ .../megengine/data/dataset/vision/meta_vision.py | 41 + .../python/megengine/data/dataset/vision/mnist.py | 197 +++ .../megengine/data/dataset/vision/objects365.py | 498 +++++++ .../python/megengine/data/dataset/vision/utils.py | 89 ++ .../python/megengine/data/dataset/vision/voc.py | 195 +++ imperative/python/megengine/data/sampler.py | 274 ++++ .../python/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 +++++++++++++ imperative/python/megengine/device.py | 89 ++ .../python/megengine/distributed/__init__.py | 25 + imperative/python/megengine/distributed/group.py | 176 +++ imperative/python/megengine/distributed/helper.py | 28 + .../python/megengine/distributed/launcher.py | 68 + imperative/python/megengine/distributed/server.py | 170 +++ imperative/python/megengine/distributed/util.py | 25 + imperative/python/megengine/functional/__init__.py | 32 + .../python/megengine/functional/debug_param.py | 49 + .../python/megengine/functional/distributed.py | 299 ++++ imperative/python/megengine/functional/elemwise.py | 481 ++++++ imperative/python/megengine/functional/external.py | 44 + imperative/python/megengine/functional/graph.py | 41 + imperative/python/megengine/functional/loss.py | 388 +++++ imperative/python/megengine/functional/math.py | 696 +++++++++ imperative/python/megengine/functional/nn.py | 1556 ++++++++++++++++++++ .../python/megengine/functional/quantized.py | 83 ++ imperative/python/megengine/functional/tensor.py | 934 ++++++++++++ imperative/python/megengine/functional/types.py | 37 + imperative/python/megengine/functional/utils.py | 80 + imperative/python/megengine/hub/__init__.py | 16 + imperative/python/megengine/hub/const.py | 17 + imperative/python/megengine/hub/exceptions.py | 30 + imperative/python/megengine/hub/fetcher.py | 300 ++++ imperative/python/megengine/hub/hub.py | 333 +++++ imperative/python/megengine/hub/tools.py | 48 + imperative/python/megengine/logger.py | 237 +++ imperative/python/megengine/module/__init__.py | 24 + imperative/python/megengine/module/activation.py | 231 +++ imperative/python/megengine/module/batchnorm.py | 281 ++++ imperative/python/megengine/module/concat.py | 22 + imperative/python/megengine/module/conv.py | 391 +++++ imperative/python/megengine/module/conv_bn.py | 69 + imperative/python/megengine/module/dropout.py | 29 + imperative/python/megengine/module/elemwise.py | 79 + imperative/python/megengine/module/embedding.py | 171 +++ imperative/python/megengine/module/external.py | 56 + imperative/python/megengine/module/identity.py | 17 + imperative/python/megengine/module/init.py | 261 ++++ imperative/python/megengine/module/linear.py | 61 + imperative/python/megengine/module/module.py | 508 +++++++ imperative/python/megengine/module/parampack.py | 156 ++ imperative/python/megengine/module/pooling.py | 80 + imperative/python/megengine/module/qat/__init__.py | 14 + imperative/python/megengine/module/qat/concat.py | 30 + imperative/python/megengine/module/qat/conv.py | 59 + imperative/python/megengine/module/qat/conv_bn.py | 193 +++ imperative/python/megengine/module/qat/elemwise.py | 31 + imperative/python/megengine/module/qat/linear.py | 39 + imperative/python/megengine/module/qat/module.py | 154 ++ .../python/megengine/module/qat/quant_dequant.py | 50 + .../python/megengine/module/quant_dequant.py | 28 + .../python/megengine/module/quantized/__init__.py | 14 + .../python/megengine/module/quantized/concat.py | 35 + .../python/megengine/module/quantized/conv.py | 107 ++ .../python/megengine/module/quantized/conv_bn.py | 56 + .../python/megengine/module/quantized/elemwise.py | 36 + .../python/megengine/module/quantized/linear.py | 52 + .../python/megengine/module/quantized/module.py | 31 + .../megengine/module/quantized/quant_dequant.py | 49 + imperative/python/megengine/module/sequential.py | 94 ++ imperative/python/megengine/optimizer/__init__.py | 15 + imperative/python/megengine/optimizer/adadelta.py | 96 ++ imperative/python/megengine/optimizer/adagrad.py | 91 ++ imperative/python/megengine/optimizer/adam.py | 96 ++ .../megengine/optimizer/distributed_optimizer.py | 120 ++ .../python/megengine/optimizer/lr_scheduler.py | 73 + .../python/megengine/optimizer/multi_step_lr.py | 75 + imperative/python/megengine/optimizer/optimizer.py | 347 +++++ .../python/megengine/optimizer/param_pack.py | 79 + imperative/python/megengine/optimizer/sgd.py | 81 + .../python/megengine/quantization/__init__.py | 20 + .../python/megengine/quantization/fake_quant.py | 154 ++ .../megengine/quantization/internal_fake_quant.py | 19 + .../python/megengine/quantization/observer.py | 404 +++++ .../python/megengine/quantization/qconfig.py | 109 ++ .../python/megengine/quantization/quantize.py | 191 +++ imperative/python/megengine/quantization/utils.py | 116 ++ imperative/python/megengine/random/__init__.py | 13 + imperative/python/megengine/random/distribution.py | 85 ++ imperative/python/megengine/random/rng.py | 27 + imperative/python/megengine/serialization.py | 125 ++ imperative/python/megengine/tensor.py | 120 ++ imperative/python/megengine/tensor_nn.py | 20 + imperative/python/megengine/test/__init__.py | 67 + imperative/python/megengine/utils/__init__.py | 8 + .../megengine/utils/_timed_func_fork_exec_entry.py | 36 + imperative/python/megengine/utils/hook.py | 23 + imperative/python/megengine/utils/http_download.py | 66 + .../python/megengine/utils/max_recursion_limit.py | 60 + imperative/python/megengine/utils/net_stats.py | 280 ++++ .../python/megengine/utils/profile_analyze.py | 424 ++++++ .../python/megengine/utils/profile_analyzer.py | 401 +++++ imperative/python/megengine/utils/profiler.py | 29 + imperative/python/megengine/utils/types.py | 37 + imperative/python/megengine/version.py | 10 + imperative/python/requires-style.txt | 4 + imperative/python/requires-test.txt | 1 + imperative/python/requires.txt | 8 + imperative/python/setup.py | 103 ++ imperative/python/src/common.cpp | 117 ++ imperative/python/src/common.h | 5 + imperative/python/src/graph_rt.cpp | 191 +++ imperative/python/src/graph_rt.h | 78 + imperative/python/src/helper.cpp | 705 +++++++++ imperative/python/src/helper.h | 320 ++++ imperative/python/src/imperative_rt.cpp | 94 ++ imperative/python/src/imperative_rt.h | 7 + imperative/python/src/module.cpp | 55 + imperative/python/src/numpy_dtypes.h | 45 + imperative/python/src/numpy_dtypes_bfloat16.cpp | 275 ++++ imperative/python/src/numpy_dtypes_intbx.cpp | 333 +++++ imperative/python/src/ops.cpp | 83 ++ imperative/python/src/ops.h | 5 + imperative/python/src/utils.cpp | 236 +++ imperative/python/src/utils.h | 5 + .../test/integration/mnist_model_with_test.mge | Bin 0 -> 1568739 bytes .../test/integration/mnist_model_with_test_cpu.mge | Bin 0 -> 1568745 bytes .../test/integration/test_advance_indexing.py | 70 + imperative/python/test/integration/test_ai.py | 41 + imperative/python/test/integration/test_bn.py | 87 ++ .../python/test/integration/test_converge.py | 114 ++ .../python/test/integration/test_correctness.py | 194 +++ imperative/python/test/integration/test_detach.py | 44 + .../python/test/integration/test_dp_correctness.py | 203 +++ .../python/test/integration/test_hello_world.py | 43 + .../python/test/integration/test_lr_scheduler.py | 40 + .../python/test/integration/test_optimizer.py | 206 +++ .../python/test/integration/test_save_load.py | 58 + .../python/test/integration/test_sgd_momentum.py | 59 + imperative/python/test/pytest.ini | 12 + imperative/python/test/unit/functional/__init__.py | 8 + .../test/unit/functional/test_distributed.py | 463 ++++++ .../python/test/unit/functional/test_elemwise.py | 139 ++ .../python/test/unit/functional/test_functional.py | 623 ++++++++ .../python/test/unit/functional/test_math.py | 258 ++++ .../python/test/unit/functional/test_tensor.py | 313 ++++ .../python/test/unit/quantization/quantize.py | 80 + .../test/unit/quantization/test_fake_quant.py | 77 + imperative/python/test/unit/test_autodiff.py | 227 +++ imperative/python/test/unit/test_distributed.py | 193 +++ imperative/python/test/unit/test_function.py | 128 ++ imperative/python/test/unit/test_imperative_rt.py | 70 + imperative/python/test/unit/test_indexing_op.py | 546 +++++++ imperative/python/test/unit/test_jit.py | 29 + imperative/python/test/unit/test_loss.py | 20 + imperative/python/test/unit/test_megbrain_graph.py | 85 ++ imperative/python/test/unit/test_module.py | 108 ++ imperative/python/test/unit/test_raw_tensor.py | 30 + imperative/python/test/unit/test_serialization.py | 69 + imperative/python/test/unit/test_tensor_wrapper.py | 52 + imperative/python/test/unit/test_util.py | 15 + imperative/python/tools/gen_op_defs.py | 504 +++++++ imperative/python/tools/gen_ops.py | 276 ++++ imperative/python/tools/ops.tpl.py | 40 + imperative/src/impl/blob_manager_impl.cpp | 162 ++ imperative/src/impl/blob_manager_impl.h | 59 + imperative/src/impl/dnn_op_helper.h | 54 + imperative/src/impl/interpreter_impl.cpp | 213 +++ imperative/src/impl/interpreter_impl.h | 95 ++ imperative/src/impl/op_def.cpp | 82 ++ imperative/src/impl/op_trait.cpp | 160 ++ imperative/src/impl/op_trait.h | 119 ++ imperative/src/impl/opr_utility.cpp | 185 +++ imperative/src/impl/ops/backward_graph.cpp | 113 ++ imperative/src/impl/ops/collective_comm.cpp | 59 + imperative/src/impl/ops/cond_take.cpp | 118 ++ imperative/src/impl/ops/io_remote.cpp | 64 + imperative/src/impl/ops/nms.cpp | 42 + imperative/src/impl/ops/opr_attr.cpp | 123 ++ imperative/src/impl/ops/tensor_manip.cpp | 145 ++ imperative/src/impl/physical_tensor.cpp | 425 ++++++ imperative/src/impl/profiler.cpp | 214 +++ imperative/src/impl/proxy_graph.cpp | 850 +++++++++++ imperative/src/impl/proxy_graph.h | 104 ++ imperative/src/impl/proxy_graph_detail.cpp | 124 ++ imperative/src/impl/proxy_graph_detail.h | 39 + imperative/src/include/megbrain/imperative.h | 16 + .../src/include/megbrain/imperative/blob_manager.h | 35 + .../src/include/megbrain/imperative/interpreter.h | 39 + .../src/include/megbrain/imperative/op_def.h | 91 ++ .../src/include/megbrain/imperative/opr_utility.h | 95 ++ .../megbrain/imperative/ops/backward_graph.h | 58 + .../megbrain/imperative/ops/collective_comm.h | 56 + .../include/megbrain/imperative/ops/cond_take.h | 22 + .../include/megbrain/imperative/ops/io_remote.h | 61 + .../src/include/megbrain/imperative/ops/nms.h | 26 + .../src/include/megbrain/imperative/ops/opr_attr.h | 53 + .../include/megbrain/imperative/ops/tensor_manip.h | 56 + .../include/megbrain/imperative/physical_tensor.h | 138 ++ .../src/include/megbrain/imperative/profiler.h | 52 + imperative/src/test/backward_graph.cpp | 145 ++ imperative/src/test/collective_comm.cpp | 51 + imperative/src/test/cond_take.cpp | 22 + imperative/src/test/helper.cpp | 164 +++ imperative/src/test/helper.h | 32 + imperative/src/test/imperative.cpp | 181 +++ imperative/src/test/io_remote.cpp | 66 + imperative/src/test/opr_utility.cpp | 138 ++ imperative/src/version.ld | 17 + imperative/test/CMakeLists.txt | 45 + src/CMakeLists.txt | 37 +- src/opr/impl/standalone/nms_cpu.cpp | 60 + src/opr/impl/standalone/nms_cpu.h | 25 + src/opr/impl/standalone/nms_kern.cu | 216 +++ src/opr/impl/standalone/nms_kern.cuh | 49 + src/opr/impl/standalone/nms_opr.cpp | 272 ++++ src/opr/include/megbrain/opr/standalone/nms_opr.h | 62 + src/opr/test/standalone/nms.cpp | 77 + 262 files changed, 36523 insertions(+), 27 deletions(-) create mode 100644 imperative/.gitignore create mode 100644 imperative/CMakeLists.txt create mode 100644 imperative/python/megengine/__init__.py create mode 100644 imperative/python/megengine/core/__init__.py create mode 100644 imperative/python/megengine/core/_wrap.py create mode 100644 imperative/python/megengine/core/autodiff/__init__.py create mode 100644 imperative/python/megengine/core/autodiff/builtin_op_utils.py create mode 100644 imperative/python/megengine/core/autodiff/grad.py create mode 100644 imperative/python/megengine/core/ops/__init__.py create mode 100644 imperative/python/megengine/core/ops/_internal/__init__.py create mode 100644 imperative/python/megengine/core/ops/_internal/all_ops.py create mode 100644 imperative/python/megengine/core/ops/_internal/enum36.py create mode 100644 imperative/python/megengine/core/ops/_internal/helper.py create mode 100644 imperative/python/megengine/core/ops/_internal/misc_ops.py create mode 100644 imperative/python/megengine/core/ops/builtin/__init__.py create mode 100644 imperative/python/megengine/core/ops/special.py create mode 100644 imperative/python/megengine/core/tensor/__init__.py create mode 100644 imperative/python/megengine/core/tensor/core.py create mode 100644 imperative/python/megengine/core/tensor/dtype.py create mode 100644 imperative/python/megengine/core/tensor/function.py create mode 100644 imperative/python/megengine/core/tensor/indexing.py create mode 100644 imperative/python/megengine/core/tensor/megbrain_graph.py create mode 100644 imperative/python/megengine/core/tensor/raw_tensor/__init__.py create mode 100644 imperative/python/megengine/core/tensor/raw_tensor/jit.py create mode 100644 imperative/python/megengine/core/tensor/raw_tensor/trace_exec.py create mode 100644 imperative/python/megengine/core/tensor/tensor.py create mode 100644 imperative/python/megengine/core/tensor/tensor_wrapper.py create mode 100644 imperative/python/megengine/core/tensor/utils.py create mode 100644 imperative/python/megengine/data/__init__.py create mode 100644 imperative/python/megengine/data/_queue.py create mode 100644 imperative/python/megengine/data/collator.py create mode 100644 imperative/python/megengine/data/dataloader.py create mode 100644 imperative/python/megengine/data/dataset/__init__.py create mode 100644 imperative/python/megengine/data/dataset/meta_dataset.py create mode 100644 imperative/python/megengine/data/dataset/vision/__init__.py create mode 100644 imperative/python/megengine/data/dataset/vision/cifar.py create mode 100644 imperative/python/megengine/data/dataset/vision/cityscapes.py create mode 100644 imperative/python/megengine/data/dataset/vision/coco.py create mode 100644 imperative/python/megengine/data/dataset/vision/folder.py create mode 100644 imperative/python/megengine/data/dataset/vision/imagenet.py create mode 100644 imperative/python/megengine/data/dataset/vision/meta_vision.py create mode 100644 imperative/python/megengine/data/dataset/vision/mnist.py create mode 100644 imperative/python/megengine/data/dataset/vision/objects365.py create mode 100644 imperative/python/megengine/data/dataset/vision/utils.py create mode 100644 imperative/python/megengine/data/dataset/vision/voc.py create mode 100644 imperative/python/megengine/data/sampler.py create mode 100644 imperative/python/megengine/data/transform/__init__.py create mode 100644 imperative/python/megengine/data/transform/meta_transform.py create mode 100644 imperative/python/megengine/data/transform/vision/__init__.py create mode 100644 imperative/python/megengine/data/transform/vision/functional.py create mode 100644 imperative/python/megengine/data/transform/vision/transform.py create mode 100644 imperative/python/megengine/device.py create mode 100644 imperative/python/megengine/distributed/__init__.py create mode 100644 imperative/python/megengine/distributed/group.py create mode 100644 imperative/python/megengine/distributed/helper.py create mode 100644 imperative/python/megengine/distributed/launcher.py create mode 100644 imperative/python/megengine/distributed/server.py create mode 100644 imperative/python/megengine/distributed/util.py create mode 100644 imperative/python/megengine/functional/__init__.py create mode 100644 imperative/python/megengine/functional/debug_param.py create mode 100644 imperative/python/megengine/functional/distributed.py create mode 100644 imperative/python/megengine/functional/elemwise.py create mode 100644 imperative/python/megengine/functional/external.py create mode 100644 imperative/python/megengine/functional/graph.py create mode 100644 imperative/python/megengine/functional/loss.py create mode 100644 imperative/python/megengine/functional/math.py create mode 100644 imperative/python/megengine/functional/nn.py create mode 100644 imperative/python/megengine/functional/quantized.py create mode 100644 imperative/python/megengine/functional/tensor.py create mode 100644 imperative/python/megengine/functional/types.py create mode 100644 imperative/python/megengine/functional/utils.py create mode 100644 imperative/python/megengine/hub/__init__.py create mode 100644 imperative/python/megengine/hub/const.py create mode 100644 imperative/python/megengine/hub/exceptions.py create mode 100644 imperative/python/megengine/hub/fetcher.py create mode 100644 imperative/python/megengine/hub/hub.py create mode 100644 imperative/python/megengine/hub/tools.py create mode 100644 imperative/python/megengine/logger.py create mode 100644 imperative/python/megengine/module/__init__.py create mode 100644 imperative/python/megengine/module/activation.py create mode 100644 imperative/python/megengine/module/batchnorm.py create mode 100644 imperative/python/megengine/module/concat.py create mode 100644 imperative/python/megengine/module/conv.py create mode 100644 imperative/python/megengine/module/conv_bn.py create mode 100644 imperative/python/megengine/module/dropout.py create mode 100644 imperative/python/megengine/module/elemwise.py create mode 100644 imperative/python/megengine/module/embedding.py create mode 100644 imperative/python/megengine/module/external.py create mode 100644 imperative/python/megengine/module/identity.py create mode 100644 imperative/python/megengine/module/init.py create mode 100644 imperative/python/megengine/module/linear.py create mode 100644 imperative/python/megengine/module/module.py create mode 100644 imperative/python/megengine/module/parampack.py create mode 100644 imperative/python/megengine/module/pooling.py create mode 100644 imperative/python/megengine/module/qat/__init__.py create mode 100644 imperative/python/megengine/module/qat/concat.py create mode 100644 imperative/python/megengine/module/qat/conv.py create mode 100644 imperative/python/megengine/module/qat/conv_bn.py create mode 100644 imperative/python/megengine/module/qat/elemwise.py create mode 100644 imperative/python/megengine/module/qat/linear.py create mode 100644 imperative/python/megengine/module/qat/module.py create mode 100644 imperative/python/megengine/module/qat/quant_dequant.py create mode 100644 imperative/python/megengine/module/quant_dequant.py create mode 100644 imperative/python/megengine/module/quantized/__init__.py create mode 100644 imperative/python/megengine/module/quantized/concat.py create mode 100644 imperative/python/megengine/module/quantized/conv.py create mode 100644 imperative/python/megengine/module/quantized/conv_bn.py create mode 100644 imperative/python/megengine/module/quantized/elemwise.py create mode 100644 imperative/python/megengine/module/quantized/linear.py create mode 100644 imperative/python/megengine/module/quantized/module.py create mode 100644 imperative/python/megengine/module/quantized/quant_dequant.py create mode 100644 imperative/python/megengine/module/sequential.py create mode 100644 imperative/python/megengine/optimizer/__init__.py create mode 100644 imperative/python/megengine/optimizer/adadelta.py create mode 100644 imperative/python/megengine/optimizer/adagrad.py create mode 100644 imperative/python/megengine/optimizer/adam.py create mode 100644 imperative/python/megengine/optimizer/distributed_optimizer.py create mode 100644 imperative/python/megengine/optimizer/lr_scheduler.py create mode 100644 imperative/python/megengine/optimizer/multi_step_lr.py create mode 100644 imperative/python/megengine/optimizer/optimizer.py create mode 100644 imperative/python/megengine/optimizer/param_pack.py create mode 100644 imperative/python/megengine/optimizer/sgd.py create mode 100644 imperative/python/megengine/quantization/__init__.py create mode 100644 imperative/python/megengine/quantization/fake_quant.py create mode 100644 imperative/python/megengine/quantization/internal_fake_quant.py create mode 100644 imperative/python/megengine/quantization/observer.py create mode 100644 imperative/python/megengine/quantization/qconfig.py create mode 100644 imperative/python/megengine/quantization/quantize.py create mode 100644 imperative/python/megengine/quantization/utils.py create mode 100644 imperative/python/megengine/random/__init__.py create mode 100644 imperative/python/megengine/random/distribution.py create mode 100644 imperative/python/megengine/random/rng.py create mode 100644 imperative/python/megengine/serialization.py create mode 100644 imperative/python/megengine/tensor.py create mode 100644 imperative/python/megengine/tensor_nn.py create mode 100644 imperative/python/megengine/test/__init__.py create mode 100644 imperative/python/megengine/utils/__init__.py create mode 100644 imperative/python/megengine/utils/_timed_func_fork_exec_entry.py create mode 100644 imperative/python/megengine/utils/hook.py create mode 100644 imperative/python/megengine/utils/http_download.py create mode 100644 imperative/python/megengine/utils/max_recursion_limit.py create mode 100644 imperative/python/megengine/utils/net_stats.py create mode 100755 imperative/python/megengine/utils/profile_analyze.py create mode 100644 imperative/python/megengine/utils/profile_analyzer.py create mode 100644 imperative/python/megengine/utils/profiler.py create mode 100644 imperative/python/megengine/utils/types.py create mode 100644 imperative/python/megengine/version.py create mode 100644 imperative/python/requires-style.txt create mode 100644 imperative/python/requires-test.txt create mode 100644 imperative/python/requires.txt create mode 100644 imperative/python/setup.py create mode 100644 imperative/python/src/common.cpp create mode 100644 imperative/python/src/common.h create mode 100644 imperative/python/src/graph_rt.cpp create mode 100644 imperative/python/src/graph_rt.h create mode 100644 imperative/python/src/helper.cpp create mode 100644 imperative/python/src/helper.h create mode 100644 imperative/python/src/imperative_rt.cpp create mode 100644 imperative/python/src/imperative_rt.h create mode 100644 imperative/python/src/module.cpp create mode 100644 imperative/python/src/numpy_dtypes.h create mode 100644 imperative/python/src/numpy_dtypes_bfloat16.cpp create mode 100644 imperative/python/src/numpy_dtypes_intbx.cpp create mode 100644 imperative/python/src/ops.cpp create mode 100644 imperative/python/src/ops.h create mode 100644 imperative/python/src/utils.cpp create mode 100644 imperative/python/src/utils.h create mode 100644 imperative/python/test/integration/mnist_model_with_test.mge create mode 100644 imperative/python/test/integration/mnist_model_with_test_cpu.mge create mode 100644 imperative/python/test/integration/test_advance_indexing.py create mode 100644 imperative/python/test/integration/test_ai.py create mode 100644 imperative/python/test/integration/test_bn.py create mode 100644 imperative/python/test/integration/test_converge.py create mode 100644 imperative/python/test/integration/test_correctness.py create mode 100644 imperative/python/test/integration/test_detach.py create mode 100644 imperative/python/test/integration/test_dp_correctness.py create mode 100644 imperative/python/test/integration/test_hello_world.py create mode 100644 imperative/python/test/integration/test_lr_scheduler.py create mode 100644 imperative/python/test/integration/test_optimizer.py create mode 100644 imperative/python/test/integration/test_save_load.py create mode 100644 imperative/python/test/integration/test_sgd_momentum.py create mode 100644 imperative/python/test/pytest.ini create mode 100644 imperative/python/test/unit/functional/__init__.py create mode 100644 imperative/python/test/unit/functional/test_distributed.py create mode 100644 imperative/python/test/unit/functional/test_elemwise.py create mode 100644 imperative/python/test/unit/functional/test_functional.py create mode 100644 imperative/python/test/unit/functional/test_math.py create mode 100644 imperative/python/test/unit/functional/test_tensor.py create mode 100644 imperative/python/test/unit/quantization/quantize.py create mode 100644 imperative/python/test/unit/quantization/test_fake_quant.py create mode 100644 imperative/python/test/unit/test_autodiff.py create mode 100644 imperative/python/test/unit/test_distributed.py create mode 100644 imperative/python/test/unit/test_function.py create mode 100644 imperative/python/test/unit/test_imperative_rt.py create mode 100644 imperative/python/test/unit/test_indexing_op.py create mode 100644 imperative/python/test/unit/test_jit.py create mode 100644 imperative/python/test/unit/test_loss.py create mode 100644 imperative/python/test/unit/test_megbrain_graph.py create mode 100644 imperative/python/test/unit/test_module.py create mode 100644 imperative/python/test/unit/test_raw_tensor.py create mode 100644 imperative/python/test/unit/test_serialization.py create mode 100644 imperative/python/test/unit/test_tensor_wrapper.py create mode 100644 imperative/python/test/unit/test_util.py create mode 100755 imperative/python/tools/gen_op_defs.py create mode 100755 imperative/python/tools/gen_ops.py create mode 100644 imperative/python/tools/ops.tpl.py create mode 100644 imperative/src/impl/blob_manager_impl.cpp create mode 100644 imperative/src/impl/blob_manager_impl.h create mode 100644 imperative/src/impl/dnn_op_helper.h create mode 100644 imperative/src/impl/interpreter_impl.cpp create mode 100644 imperative/src/impl/interpreter_impl.h create mode 100644 imperative/src/impl/op_def.cpp create mode 100644 imperative/src/impl/op_trait.cpp create mode 100644 imperative/src/impl/op_trait.h create mode 100644 imperative/src/impl/opr_utility.cpp create mode 100644 imperative/src/impl/ops/backward_graph.cpp create mode 100644 imperative/src/impl/ops/collective_comm.cpp create mode 100644 imperative/src/impl/ops/cond_take.cpp create mode 100644 imperative/src/impl/ops/io_remote.cpp create mode 100644 imperative/src/impl/ops/nms.cpp create mode 100644 imperative/src/impl/ops/opr_attr.cpp create mode 100644 imperative/src/impl/ops/tensor_manip.cpp create mode 100644 imperative/src/impl/physical_tensor.cpp create mode 100644 imperative/src/impl/profiler.cpp create mode 100644 imperative/src/impl/proxy_graph.cpp create mode 100644 imperative/src/impl/proxy_graph.h create mode 100644 imperative/src/impl/proxy_graph_detail.cpp create mode 100644 imperative/src/impl/proxy_graph_detail.h create mode 100644 imperative/src/include/megbrain/imperative.h create mode 100644 imperative/src/include/megbrain/imperative/blob_manager.h create mode 100644 imperative/src/include/megbrain/imperative/interpreter.h create mode 100644 imperative/src/include/megbrain/imperative/op_def.h create mode 100644 imperative/src/include/megbrain/imperative/opr_utility.h create mode 100644 imperative/src/include/megbrain/imperative/ops/backward_graph.h create mode 100644 imperative/src/include/megbrain/imperative/ops/collective_comm.h create mode 100644 imperative/src/include/megbrain/imperative/ops/cond_take.h create mode 100644 imperative/src/include/megbrain/imperative/ops/io_remote.h create mode 100644 imperative/src/include/megbrain/imperative/ops/nms.h create mode 100644 imperative/src/include/megbrain/imperative/ops/opr_attr.h create mode 100644 imperative/src/include/megbrain/imperative/ops/tensor_manip.h create mode 100644 imperative/src/include/megbrain/imperative/physical_tensor.h create mode 100644 imperative/src/include/megbrain/imperative/profiler.h create mode 100644 imperative/src/test/backward_graph.cpp create mode 100644 imperative/src/test/collective_comm.cpp create mode 100644 imperative/src/test/cond_take.cpp create mode 100644 imperative/src/test/helper.cpp create mode 100644 imperative/src/test/helper.h create mode 100644 imperative/src/test/imperative.cpp create mode 100644 imperative/src/test/io_remote.cpp create mode 100644 imperative/src/test/opr_utility.cpp create mode 100644 imperative/src/version.ld create mode 100644 imperative/test/CMakeLists.txt create mode 100644 src/opr/impl/standalone/nms_cpu.cpp create mode 100644 src/opr/impl/standalone/nms_cpu.h create mode 100644 src/opr/impl/standalone/nms_kern.cu create mode 100644 src/opr/impl/standalone/nms_kern.cuh create mode 100644 src/opr/impl/standalone/nms_opr.cpp create mode 100644 src/opr/include/megbrain/opr/standalone/nms_opr.h create mode 100644 src/opr/test/standalone/nms.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 39bf70cd..2bb5d3b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -247,10 +247,6 @@ if(MGE_BUILD_IMPERATIVE_RT) set(CMAKE_CXX_STANDARD 17) endif() -if(MGE_BUILD_IMPERATIVE_RT) - set(MGE_BUILD_SDK OFF) -endif() - if(NOT MGE_WITH_CUDA) message("-- Disable distributed support, as CUDA is not enabled.") set(MGE_WITH_DISTRIBUTED OFF) @@ -697,9 +693,7 @@ if(MGE_WITH_PYTHON_MODULE) endif() if(MGE_WITH_TEST AND MGE_ENABLE_RTTI) - if(NOT MGE_BUILD_IMPERATIVE_RT) - add_subdirectory(test) - endif() + add_subdirectory(test) endif() if(TARGET mgb) diff --git a/dnn/CMakeLists.txt b/dnn/CMakeLists.txt index 6bdb2681..7e2012d1 100644 --- a/dnn/CMakeLists.txt +++ b/dnn/CMakeLists.txt @@ -66,9 +66,7 @@ if(MGE_WITH_CUDA) endif() if(MGE_WITH_TEST) - if(NOT MGE_BUILD_IMPERATIVE_RT) - add_subdirectory(test) - endif() + add_subdirectory(test) endif() add_subdirectory(src) diff --git a/imperative/.gitignore b/imperative/.gitignore new file mode 100644 index 00000000..67074a4e --- /dev/null +++ b/imperative/.gitignore @@ -0,0 +1,5 @@ +Makefile +/test/imperative_test +*.so +/python/megengine/core/ops/_internal/generated_ops.py +/python/megengine/core/ops/_internal/param_defs.py diff --git a/imperative/CMakeLists.txt b/imperative/CMakeLists.txt new file mode 100644 index 00000000..55a97a20 --- /dev/null +++ b/imperative/CMakeLists.txt @@ -0,0 +1,110 @@ +find_package(NumPy REQUIRED) + +set(PACKAGE_NAME megengine) +set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE) +set(MODULE_NAME _imperative_rt) +set(MODULE_NAME ${MODULE_NAME} PARENT_SCOPE) +file(GLOB_RECURSE SRCS src/impl/*.cpp src/include/*.h python/src/*.cpp python/src/*.h) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_WITH_IMPERATIVE=1") + +file(GLOB_RECURSE OPR_DECL_SRCS "${PROJECT_SOURCE_DIR}/src/**/*.oprdecl") +file(GLOB_RECURSE PYTHON_SRCS python/${PACKAGE_NAME}/*.py) +list(REMOVE_ITEM PYTHON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/ops/_internal/generated_ops.py ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/ops/_internal/param_defs.py) +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/*) + +set(MEGENGINE_DIR ${CMAKE_CURRENT_BINARY_DIR}/python/) +set(GEN_OPS_DIR ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/ops/_internal) +file(MAKE_DIRECTORY ${GEN_OPS_DIR}) +set(GEN_OPS_FILE ${GEN_OPS_DIR}/generated_ops.py) +set(GEN_OP_PARAMS_FILE ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/ops/_internal/param_defs.py) +set(GEN_OP_PARAMS_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/ops.tpl.py) + +##################### generate python opr_param_defs.py ############## + +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 ${GEN_OPS_FILE} + COMMAND ${CMAKE_COMMAND} -E touch ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/${MODULE_NAME}.so ${GEN_OPS_FILE} ${GEN_OP_PARAMS_FILE} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/${PACKAGE_NAME} ${MEGENGINE_DIR}/${PACKAGE_NAME} + COMMAND ${CMAKE_COMMAND} -E remove -f ${MEGENGINE_DIR}/${PACKAGE_NAME}/core/${MODULE_NAME}.so ${GEN_OPS_FILE} ${GEN_OP_PARAMS_FILE} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/gen_ops.py ${OPR_DECL_SRCS} -o ${GEN_OPS_FILE} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${MEGENGINE_DIR}/${PACKAGE_NAME}/test + COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py -t py --imperative ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py ${GEN_OP_PARAMS_FILE} + DEPENDS ${OPR_DECL_SRCS} ${PYTHON_SRCS} ${ALL_HEADERS} ${GEN_OP_PARAMS_TEMPLATE} + VERBATIM +) + +add_custom_target(gen_opr_py DEPENDS ${GEN_OPS_FILE}) + +##################### generate opdef c header and python binding ############## + +set(OP_DEF_HEADER_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/include) +file(MAKE_DIRECTORY ${OP_DEF_HEADER_OUT_DIR}/megbrain/imperative/opdef) +set(OP_DEF_HEADER ${OP_DEF_HEADER_OUT_DIR}/megbrain/imperative/opdef/all.h) +set(OP_DEF_PYTHON_BINDING_OUT_DIR ${MEGENGINE_DIR}/${PACKAGE_NAME}/src) +file(MAKE_DIRECTORY ${OP_DEF_PYTHON_BINDING_OUT_DIR}) +set(OP_DEF_PYTHON_BINDING ${OP_DEF_PYTHON_BINDING_OUT_DIR}/opdef.inl) +set(OP_PARAM_DEF ${CMAKE_CURRENT_BINARY_DIR}/opr_param_defs.py) +set(GEN_OP_DEF_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/python/tools/gen_op_defs.py) + +add_custom_command( + OUTPUT ${OP_DEF_HEADER} ${OP_DEF_PYTHON_BINDING} + COMMAND ${PYTHON_EXECUTABLE} ${GEN_OP_DEF_SCRIPT} ${OP_PARAM_DEF} ${OP_DEF_HEADER} + COMMAND ${PYTHON_EXECUTABLE} ${GEN_OP_DEF_SCRIPT} -t py ${OP_PARAM_DEF} ${OP_DEF_PYTHON_BINDING} + DEPENDS ${GEN_OP_DEF_SCRIPT} ${OP_PARAM_DEF} + VERBATIM +) + +add_custom_target(gen_op_def_internal DEPENDS ${OP_DEF_HEADER} ${OP_DEF_PYTHON_BINDING}) +add_library(gen_op_def INTERFACE) +target_include_directories(gen_op_def INTERFACE ${OP_DEF_HEADER_OUT_DIR} ${OP_DEF_PYTHON_BINDING_OUT_DIR}) +add_dependencies(gen_op_def gen_op_def_internal) + +##################### end of opdef generation ######################### + +set(VERSION_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/src/version.ld) +add_custom_target(_version_ld SOURCES ${VERSION_SCRIPT}) + +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11 ${PROJECT_BINARY_DIR}/third_party/pybind11) +pybind11_add_module(${MODULE_NAME} NO_EXTRAS ${SRCS}) +target_link_libraries(${MODULE_NAME} PRIVATE gen_op_def megbrain megdnn -Wl,--version-script=${VERSION_SCRIPT}) +if (MGE_WITH_DISTRIBUTED) + message("Imperative configured to link megray") + target_link_libraries(${MODULE_NAME} PRIVATE megray) +endif() +target_include_directories(${MODULE_NAME} PUBLIC src/include PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) +target_compile_definitions(${MODULE_NAME} PRIVATE MODULE_NAME=${MODULE_NAME}) +target_compile_options(${MODULE_NAME} PRIVATE -Wno-unused-parameter) +if(CXX_SUPPORT_WCLASS_MEMACCESS) + target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess") +endif() +set_target_properties(${MODULE_NAME} PROPERTIES + SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} + LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core +) +add_dependencies(${MODULE_NAME} gen_opr_py _version_ld) + +if(MGE_WITH_TEST AND MGE_ENABLE_RTTI) + add_subdirectory(test) +endif() + +add_custom_command( + TARGET ${MODULE_NAME} 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}/python/megengine ${CMAKE_CURRENT_BINARY_DIR}/python/megengine + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${CMAKE_CURRENT_BINARY_DIR}/python/test + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt +) + diff --git a/imperative/python/megengine/__init__.py b/imperative/python/megengine/__init__.py new file mode 100644 index 00000000..f27cdc72 --- /dev/null +++ b/imperative/python/megengine/__init__.py @@ -0,0 +1,25 @@ +# -*- 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 + +from .core._imperative_rt.utils import _set_fork_exec_path_for_timed_func +from .device import * +from .logger import enable_debug_log, get_logger, set_log_file, set_log_level +from .serialization import load, save +from .tensor import Tensor, tensor +from .tensor_nn import Buffer, Parameter +from .version import __version__ + +_set_fork_exec_path_for_timed_func( + sys.executable, + os.path.join(os.path.dirname(__file__), "utils", "_timed_func_fork_exec_entry.py"), +) + +del _set_fork_exec_path_for_timed_func diff --git a/imperative/python/megengine/core/__init__.py b/imperative/python/megengine/core/__init__.py new file mode 100644 index 00000000..e2405755 --- /dev/null +++ b/imperative/python/megengine/core/__init__.py @@ -0,0 +1,12 @@ +# -*- 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 + +from .tensor import Tensor diff --git a/imperative/python/megengine/core/_wrap.py b/imperative/python/megengine/core/_wrap.py new file mode 100644 index 00000000..c4bf7564 --- /dev/null +++ b/imperative/python/megengine/core/_wrap.py @@ -0,0 +1,46 @@ +# -*- 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 ._imperative_rt import CompNode + + +class Device: + def __init__(self, device=None): + if device is None: + self._cn = CompNode() + elif isinstance(device, Device): + self._cn = device._cn + elif isinstance(device, CompNode): + self._cn = device + else: + self._cn = CompNode(device) + + def to_c(self): + return self._cn + + def __repr__(self): + return "{}({})".format(type(self).__qualname__, self) + + def __str__(self): + return str(self._cn) + + def __hash__(self): + return hash(str(self._cn)) + + def __eq__(self, rhs): + if not isinstance(rhs, Device): + rhs = Device(rhs) + return str(self._cn) == str(rhs._cn) + + +def device(obj): + if isinstance(obj, Device): + return obj + return Device(obj) diff --git a/imperative/python/megengine/core/autodiff/__init__.py b/imperative/python/megengine/core/autodiff/__init__.py new file mode 100644 index 00000000..1207b5d9 --- /dev/null +++ b/imperative/python/megengine/core/autodiff/__init__.py @@ -0,0 +1,8 @@ +# -*- 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. diff --git a/imperative/python/megengine/core/autodiff/builtin_op_utils.py b/imperative/python/megengine/core/autodiff/builtin_op_utils.py new file mode 100644 index 00000000..54d959d1 --- /dev/null +++ b/imperative/python/megengine/core/autodiff/builtin_op_utils.py @@ -0,0 +1,134 @@ +# -*- 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 itertools + +import numpy as np + +from .._imperative_rt import TensorAttr, imperative +from ..ops.builtin import Elemwise, GetVarShape, OpDef, OprAttr, Reduce, Reshape +from ..tensor.core import apply +from ..tensor.function import Function + + +@functools.singledispatch +def builtin_op_get_backward_fn(op: OpDef, inputs, outputs, input_requires_grad): + assert 0 + + +_elemwise_add_param = Elemwise(mode="add").to_c().param + + +@builtin_op_get_backward_fn.register(OpDef) +def _(op: OpDef, inputs, outputs, input_requires_grad): + if ( + isinstance(op, OprAttr) + and op.type == "Elemwise" + and op.param == _elemwise_add_param + ): + grad_fn = elemwise_grad_fn + elif isinstance(op, OprAttr) and op.type == Reshape.name: + grad_fn = reshape_grad_fn + else: + grad_fn = default_grad_fn + return grad_fn(op, inputs, outputs, input_requires_grad) + + +@builtin_op_get_backward_fn.register(Function) +def _(op: Function, inputs, outputs, input_requires_grad): + return op.get_backward_fn(), [True,] * len(outputs) + + +def default_grad_fn(op, inputs, outputs, input_requires_grad): + def get_tensor_attr(x): + attr = TensorAttr() + attr.dtype = x.dtype + attr.comp_node = x.device.to_c() + return attr + + output_has_grads = [True,] * len(outputs) + result = imperative.make_backward_graph( + op, list(map(get_tensor_attr, inputs)), input_requires_grad, output_has_grads + ) + if result is None: + nr_inputs = len(inputs) + nr_outputs = len(outputs) + + def backward(*args): + return nr_inputs * [ + None, + ] + + return backward, nr_outputs * [False,] + backward_graph, save_for_backward_mask, input_has_grad = result + + intput_output_mask = save_for_backward_mask[: len(inputs + outputs) :] + output_grad_mask = save_for_backward_mask[len(inputs + outputs) :] + save_for_backward = tuple( + val for val, mask in zip(inputs + outputs, intput_output_mask) if mask + ) + del inputs + del outputs + + def backward(*args): + output_grads = tuple(val for val, mask in zip(args, output_grad_mask) if mask) + assert None not in output_grads + ret = iter(apply(backward_graph, *(save_for_backward + output_grads))) + return tuple(next(ret) if mask else None for mask in input_has_grad) + + return backward, output_grad_mask + + +# override for elemwise +def elemwise_grad_fn(op, inputs, outputs, input_requires_grad): + assert len(inputs) == len(input_requires_grad) == 2 + + def get_shape(x): + (s,) = apply(GetVarShape(), x) + return s + + input_shapes = [ + get_shape(x) if i else None for i, x in zip(input_requires_grad, inputs) + ] + + def reduce_to(x, s): + (y,) = apply(Reduce(), x, s) + return y + + def backward(dy): + return tuple( + reduce_to(dy, s) if i else None + for i, s in zip(input_requires_grad, input_shapes) + ) + + return backward, [True] + + +def reshape_grad_fn(op, inputs, outputs, input_requires_grad): + assert len(inputs) == len(input_requires_grad) == 2 + + def get_shape(x): + (s,) = apply(GetVarShape(), x) + return s + + input_shapes = [ + get_shape(x) if i else None for i, x in zip(input_requires_grad, inputs) + ] + + def reshape_to(dy, s): + (dx,) = apply(Reshape(), dy, s) + return dx + + def backward(dy): + return tuple( + reshape_to(dy, s) if i else None + for i, s in zip(input_requires_grad, input_shapes) + ) + + return backward, [True] diff --git a/imperative/python/megengine/core/autodiff/grad.py b/imperative/python/megengine/core/autodiff/grad.py new file mode 100644 index 00000000..8b1b3376 --- /dev/null +++ b/imperative/python/megengine/core/autodiff/grad.py @@ -0,0 +1,390 @@ +# -*- 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 heapq +import itertools +import typing +import weakref + +import numpy as np + +from ..ops.builtin import Elemwise, OpDef +from ..ops.special import Const +from ..tensor.core import TensorBase, TensorWrapperBase, apply +from ..tensor.function import Function +from ..tensor.tensor import Tensor, get_context +from . import builtin_op_utils + +""" Some notes: + 1. Initialize the optimizer: + for each trainable parameter: + call wrt(param, callback) + Each parameter tensor will be assciated with a Tracer object saved in Tensor._extra_data + 2. Tracer has one member: node, which is a VariableNode + 3. VariableNode has a OpNode member: opnode + 4. OpNode has four members: + a. id + b. inputs, which is made of VariableNode + c. outputs, which are weakref's to VariableNode + d. backward: call back function + e. has_grad_fn: call has_grad_fn(opnode, reached) to check grad exist + f. backward_allow_noinput: whether backward allow noinput + +""" + +_grad_count = 0 +_grad_manager_dict = weakref.WeakValueDictionary() + + +def get_grad_managers(): + return [_grad_manager_dict[key] for key in _grad_manager_dict] + + +def add(a, b): + (c,) = apply(Elemwise(mode="add"), a, b) + return c + + +def get_tensor(x): + # use recursion to avoid infinite loop + if isinstance(x, Tensor): + return x + try: + x = x.__wrapped__ + except AttributeError: + raise TypeError(type(x)) + return get_tensor(x) + + +class Grad: + def __init__(self, name=None): + + if name is None: + global _grad_count + self._name = "grad_" + str(_grad_count) + _grad_count += 1 + else: + self._name = name + assert self._name not in _grad_manager_dict, "grad manager name duplicated" + _grad_manager_dict[self._name] = self + + # list of all x in partial(y) / partial(x) + self.xs = [] + + # constains weak reference of all OpNode during forward + # OpNode contains inputs, outputs and its backward + # ops forms the computational graph + self.ops = [] + + self._enabled = True + + @property + def name(self): + return self._name + + def wrt(self, *args: Tensor, callback=None): + """ Indicates the loss is a function of the input tensors (usually the net trainable parameters), + i.e., d (loss) / d (Tensor) != 0 + + callback is used to perform additional operations after gradient is obtained in backward. + e.g., copy the grad to a particular place + + A VariableNode will be created and saved in the tensor/s _extra_data slot. + """ + + for x in map(get_tensor, args): + v = self._new_variable(x, callback=callback) + assert self not in x._extra_data + x._extra_data[self] = Tracer(v) + self.xs.append(v) + + return self + + def _new_variable(self, owner, opnode=None, callback=None): + return VariableNode(self, owner, opnode=opnode, callback=callback) + + def _new_opnode(self, inputs, outputs): + inputs = tuple(inputs) + for i in inputs: + assert i is None or isinstance(i, VariableNode) + o = OpNode() + o.inputs = inputs + o.outputs = [] + tracers = [] + for i in outputs: + assert isinstance(i, Tensor) + v = self._new_variable(i, o) + o.outputs.append(weakref.ref(v)) + tracers.append(Tracer(v)) + self.ops.append(weakref.ref(o)) + return o, tracers + + def copy(self): + raise NotImplementedError + + def __enter__(self): + return self + + def __exit__(self, *_): + """clear all resources""" + self._enabled = False + for o in self.ops: + o = o() + if o: + o.clear() + + def __call__(self, ys, dys): + """ Defines Grad(). + + :param ys: outputs of forward operators, e.g., the loss tensor + :type ys: list of Tensor or TensorWrapperBase + :param dys: delta of outputs, physically equivalent to sensitivity of outputs to the loss, + e.g., one for the loss itself + :type dys: list of Tensor or TensorWrapperBase + """ + assert self._enabled + self._enabled = False + + def check_wrapper(): + if isinstance(dys, TensorWrapperBase): + return type(dys) + if isinstance(dys, TensorBase): + return + assert isinstance(dys, (tuple, list)) + for i in dys: + if isinstance(i, TensorWrapperBase): + return type(i) + + Wrapper = check_wrapper() + + def aslist(x): + if isinstance(x, (Tensor, TensorWrapperBase)): + x = [x] + else: + x = list(x) + x = [i.__wrapped__ if isinstance(i, TensorWrapperBase) else i for i in x] + for i in x: + assert isinstance(i, Tensor) + return x + + ys = aslist(ys) + dys = aslist(dys) + assert len(ys) == len(dys) + + # ys is changed to a list of VariableNode which contains more information + # such as OpNode, callback, etc. + ys = [i._extra_data[self].node for i in ys] + + # NOTE: callback is called only if grad is not None + + # the OpNode sequence in backward + op_seq = [] + + # VariableNode -> (i, j), where i is time stamp in backward, j means jth input + last_written_to = {} + + def schedule(): + reached = set(ys) + # i is the time stamp in backward + i = 0 + for o in self.ops[::-1]: + o = o() + if o is None: + continue + + if not o.has_grad_fn(o, reached): + continue + op_seq.append(o) + for j, v in enumerate(o.inputs): + reached.add(v) + last_written_to[v] = i, j + i += 1 + + schedule() + + # VariableNode -> Tensor + cache = {} + + def initialize(): + for y, dy in zip(ys, dys): + cache[y] = dy + if y not in last_written_to and y.callback: + y.callback(y.owner(), dy) + + initialize() + + # NOTE: None is used to mark a node has been consumed + + for seqno, opnode in enumerate(op_seq): + input_nodes = opnode.inputs + output_nodes = [i() for i in opnode.outputs] + backward = opnode.backward + backward_allow_noinput = opnode.backward_allow_noinput + opnode.clear() + + output_grads = [] + for i in output_nodes: + if i is not None: + if i in cache: + assert cache[i] is not None + output_grads.append(cache[i]) + else: + output_grads.append(None) + # read by backward, mark consumed + cache[i] = None + else: + output_grads.append(None) + if ( + any([grad is not None for grad in output_grads]) + or backward_allow_noinput + ): + input_grads = backward(*output_grads) + else: + input_grads = [None] * len(input_nodes) + + assert len(input_nodes) == len(input_grads) + for i, (v, g) in enumerate(zip(input_nodes, input_grads)): + if v is None: + continue + if v in cache: + assert cache[v] + if g is not None: + cache[v] = add(cache[v], g) + elif g is not None: + cache[v] = g + if last_written_to[v] == (seqno, i): + if v.callback: + v.callback( + v.owner(), Wrapper(cache[v]) if Wrapper else cache[v] + ) + if v.opnode is None: + # won't read by backward, mark consumed + cache[v] = None + + for v in cache.values(): + assert v is None + + +class clearable: + __cleared = False + + def __bool__(self): + return not self.__cleared + + def clear(self): + self.__dict__.clear() + self.__cleared = True + + +class OpNode(clearable): + """ OpNode saves all the information to form the computational graph. + """ + + def __init__(self): + self.id = None + self.inputs = None # Could be VariableNode + self.outputs = None # Could be VariableNode + self.backward = None + self.has_grad_fn = None + self.backward_allow_noinput = False + + +class VariableNode(clearable): + """ VariableNode saves OpNode and callback. + FIXME!!! Explain manager and owner + """ + + def __init__(self, manager, owner, opnode=None, callback=None): + # manager is Grad type + self.manager = weakref.ref(manager) + # owner is Tensor type + self.owner = weakref.ref(owner) + self.opnode = opnode + self.callback = callback + + +class Tracer(clearable, TensorBase): + def __init__(self, node=None): + """ type(node) is VariableNode + """ + self.node = node + + +@functools.singledispatch +def check_backward_allow_noinput(op: OpDef): + return False + + +@functools.singledispatch +def get_op_has_grad_fn(op: OpDef): + assert 0 + + +@get_op_has_grad_fn.register(OpDef) +def _(op: OpDef): + return default_has_grad_fn + + +@get_op_has_grad_fn.register(Function) +def _(op: Function): + return default_has_grad_fn + + +def default_has_grad_fn(opnode, reached): + for v in opnode.outputs: + if v() in reached: + return True + return False + + +@apply.add +def tracer_apply(op: (OpDef, Function), *args: typing.Optional[Tracer]): + args = tuple(i if isinstance(i, Tracer) else None for i in args) + input_requires_grad = list(map(bool, args)) + if not any(input_requires_grad): + return + + ctx = get_context() + manager = None + assert len(ctx.inputs) == len(args) + for i, j in zip(ctx.inputs, args): + if j: + j = j.node + assert i is j.owner() + if manager is None: + manager = j.manager() + assert manager + else: + assert manager is j.manager() + + if not manager._enabled: + return + + opnode, outputs = manager._new_opnode([i and i.node for i in args], ctx.outputs) + + # register backward method + # tuple of backward functions corresponding to dy / dx_i + # None means y is not a function of x_i + opnode.backward, output_need_grad = builtin_op_utils.builtin_op_get_backward_fn( + op, ctx.inputs, ctx.outputs, input_requires_grad + ) + + assert len(outputs) == len(output_need_grad) + outputs = [x if y else None for (x, y) in zip(outputs, output_need_grad)] + + opnode.backward_allow_noinput = check_backward_allow_noinput(op) + + opnode.has_grad_fn = get_op_has_grad_fn(op) + + return tuple(outputs) + + +@apply.add +def _(op: Const, *_: typing.Optional[Tracer]): + return None diff --git a/imperative/python/megengine/core/ops/__init__.py b/imperative/python/megengine/core/ops/__init__.py new file mode 100644 index 00000000..1207b5d9 --- /dev/null +++ b/imperative/python/megengine/core/ops/__init__.py @@ -0,0 +1,8 @@ +# -*- 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. diff --git a/imperative/python/megengine/core/ops/_internal/__init__.py b/imperative/python/megengine/core/ops/_internal/__init__.py new file mode 100644 index 00000000..1207b5d9 --- /dev/null +++ b/imperative/python/megengine/core/ops/_internal/__init__.py @@ -0,0 +1,8 @@ +# -*- 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. diff --git a/imperative/python/megengine/core/ops/_internal/all_ops.py b/imperative/python/megengine/core/ops/_internal/all_ops.py new file mode 100644 index 00000000..f1627ee9 --- /dev/null +++ b/imperative/python/megengine/core/ops/_internal/all_ops.py @@ -0,0 +1,10 @@ +# -*- 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 .generated_ops import * +from .misc_ops import * diff --git a/imperative/python/megengine/core/ops/_internal/enum36.py b/imperative/python/megengine/core/ops/_internal/enum36.py new file mode 100644 index 00000000..1fb4bb6f --- /dev/null +++ b/imperative/python/megengine/core/ops/_internal/enum36.py @@ -0,0 +1,929 @@ +# -*- 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 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/imperative/python/megengine/core/ops/_internal/helper.py b/imperative/python/megengine/core/ops/_internal/helper.py new file mode 100644 index 00000000..52af3aa0 --- /dev/null +++ b/imperative/python/megengine/core/ops/_internal/helper.py @@ -0,0 +1,94 @@ +# -*- 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 warnings + +from ..._imperative_rt.ops import OprAttr +from . import param_defs + + +def make_param(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) + + +class PodOpVisitor: + __name2subclass = {} + __c = None + + name = None + param_names = [] + config = None + + def __init__(self, config, **params): + self.config = config + assert set(params) == set(self.param_names) + self.__dict__.update(params) + + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) # python 3.5 does not have this + name = cls.name + if name in cls.__name2subclass: + if not issubclass(cls, cls.__name2subclass[name]): + warnings.warn("Multiple subclasses for bultin op: %s" % name) + cls.__name2subclass[name] = cls + + def to_c(self): + if self.__c: + return self.__c + op = OprAttr() + op.type = self.name + if self.config is not None: + op.config = self.config + # first 4 bytes is TAG, has to remove them currently + op.param = b"".join(self.__dict__[k].serialize()[4:] for k in self.param_names) + self.__c = op + return op + + def __eq__(self, rhs): + return self.to_c() == rhs.to_c() + + def __repr__(self): + name = self.__class__.__name__ + + if self.__c: + return "{}()".format(name) + + kwargs = {} + for i in self.param_names: + p = self.__dict__[i] + if isinstance(p, param_defs._ParamDefBase): + for k in p.__slots__: + v = getattr(p, k) + if isinstance(v, param_defs._EnumBase): + v = v.name + kwargs[k] = repr(v) + else: + kwargs[i] = repr(p) + if self.config: + if len(self.config.comp_node_arr) == 1: + kwargs["device"] = "'%s'" % self.config.comp_node + return "{}({})".format( + name, ", ".join("{}={}".format(k, v) for k, v in kwargs.items()) + ) diff --git a/imperative/python/megengine/core/ops/_internal/misc_ops.py b/imperative/python/megengine/core/ops/_internal/misc_ops.py new file mode 100644 index 00000000..e02ddee9 --- /dev/null +++ b/imperative/python/megengine/core/ops/_internal/misc_ops.py @@ -0,0 +1,194 @@ +# -*- 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 ctypes + +from ..._imperative_rt import OperatorNodeConfig as Config +from . import param_defs +from .helper import PodOpVisitor, make_param + +__all__ = ["ConvolutionBackwardData", "Dimshuffle", "Reshape", "AxisAddRemove"] + + +class TensorShape: + MAX_NDIM = 7 + + +class ConvolutionBackwardData(PodOpVisitor): + param_names = ( + "param", + "execution_polity", + ) + name = "ConvolutionBackwardDataV1" + + def __init__( + self, + *, + param=None, + execution_polity=None, + name=None, + comp_node=None, + config=None, + dtype=None, + **kwargs + ): + config = config or Config() + if name: + config.name = name + if comp_node: + config.comp_node = comp_node + if dtype: + config.dtype = dtype + self.config = config + + self.param = make_param(param, param_defs.Convolution, kwargs) + self.execution_polity = make_param( + execution_polity, param_defs.ExecutionPolicy, kwargs + ) + assert not kwargs, "extra kwargs: {}".format(kwargs) + + +class Dimshuffle(PodOpVisitor): + name = "Dimshuffle" + param_names = ("pattern",) + + class Pattern(ctypes.Structure): + Pattern_Array = ctypes.c_int32 * TensorShape.MAX_NDIM + _fields_ = [ + ("length", ctypes.c_uint32), + ("pattern", Pattern_Array), + ("ndim", ctypes.c_uint32), + ] + + def serialize(self): + return bytes(ctypes.c_uint32(0)) + bytes(self) + + def __init__(self, pattern, ndim=0): + assert isinstance(pattern, collections.Iterable) + assert len(pattern) <= TensorShape.MAX_NDIM + pattern_array = Dimshuffle.Pattern.Pattern_Array() + for idx, v in enumerate(pattern): + pattern_array[idx] = ctypes.c_int32(-1 if v == "x" else int(v)) + self.pattern = Dimshuffle.Pattern(len(pattern), pattern_array, ndim) + + +class Reshape(PodOpVisitor): + name = "ReshapeV1" + param_names = ("unspec_axis",) + + def __init__(self, unspec_axis=None): + if unspec_axis is None: + self.unspec_axis = param_defs.OptionalAxisV1() + else: + self.unspec_axis = param_defs.OptionalAxisV1(unspec_axis) + + +class AxisNum(ctypes.Structure): + _fields_ = [ + ("m_num", ctypes.c_int), + ] + + +class AxisDesc(ctypes.Structure): + class Method(ctypes.c_int): + ADD_1 = 0 + REMOVE = 1 + + _fields_ = [ + ("method", Method), + ("axis", AxisNum), + ] + + @classmethod + def make_add(cls, axis): + return cls(cls.Method.ADD_1, AxisNum(axis)) + + @classmethod + def make_remove(cls, axis): + return cls(cls.Method.REMOVE, AxisNum(axis)) + + +class AxisAddRemove(PodOpVisitor): + name = "AxisAddRemove" + param_names = ("param",) + + AxisDesc = AxisDesc + + class Param(ctypes.Structure): + MAX_DESC_SIZE = TensorShape.MAX_NDIM * 2 + + _fields_ = [("nr_desc", ctypes.c_uint32), ("desc", AxisDesc * MAX_DESC_SIZE)] + + def __init__(self, *args): + super().__init__() + self.nr_desc = len(args) + for i, a in enumerate(args): + self.desc[i] = a + + def serialize(self): + return bytes(ctypes.c_uint32(0)) + bytes(self) + + def __init__(self, param): + assert isinstance(param, self.Param) + self.param = param + + +del AxisDesc + + +class IndexingOpBase(PodOpVisitor): + param_names = ("index_desc",) + + class IndexDescMaskDump(ctypes.Structure): + class Item(ctypes.Structure): + _fields_ = [ + ("axis", ctypes.c_int8), + ("begin", ctypes.c_bool), + ("end", ctypes.c_bool), + ("step", ctypes.c_bool), + ("idx", ctypes.c_bool), + ] + + Item_Array = Item * TensorShape.MAX_NDIM + + _fields_ = [("nr_item", ctypes.c_uint8), ("items", Item_Array)] + + def serialize(self): + return bytes(ctypes.c_uint32(0)) + bytes(self) + + def __init__(self, items): + nr_item = len(items) + assert nr_item <= TensorShape.MAX_NDIM + item_array = IndexingOpBase.IndexDescMaskDump.Item_Array() + for idx, item in enumerate(items): + assert isinstance(item, (tuple, list)) and len(item) == 5 + item_array[idx] = IndexingOpBase.IndexDescMaskDump.Item(*item) + self.index_desc = IndexingOpBase.IndexDescMaskDump(nr_item, item_array) + + +def _gen_indexing_defs(*names): + for name in names: + globals()[name] = type(name, (IndexingOpBase,), dict(name=name)) + __all__.append(name) + + +_gen_indexing_defs( + "Subtensor", + "SetSubtensor", + "IncrSubtensor", + "IndexingMultiAxisVec", + "IndexingSetMultiAxisVec", + "IndexingIncrMultiAxisVec", + "MeshIndexing", + "IncrMeshIndexing", + "SetMeshIndexing", + "BatchedMeshIndexing", + "BatchedIncrMeshIndexing", + "BatchedSetMeshIndexing", +) diff --git a/imperative/python/megengine/core/ops/builtin/__init__.py b/imperative/python/megengine/core/ops/builtin/__init__.py new file mode 100644 index 00000000..4656cbd2 --- /dev/null +++ b/imperative/python/megengine/core/ops/builtin/__init__.py @@ -0,0 +1,37 @@ +# -*- 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 warnings +from typing import Union + +from ..._imperative_rt import OpDef, ops +from ...tensor.core import OpBase, TensorBase, TensorWrapperBase, apply +from .._internal import all_ops +from .._internal.helper import PodOpVisitor + +# register OpDef as a "virtual subclass" of OpBase, so any of registered +# apply(OpBase, ...) rules could work well on OpDef +OpBase.register(OpDef) + +# forward to apply(OpDef, ...) +@apply.add +def _(op: PodOpVisitor, *args: Union[TensorBase, TensorWrapperBase]): + return apply(op.to_c(), *args) + + +__all__ = ["OpDef", "PodOpVisitor"] + +for k, v in all_ops.__dict__.items(): + if isinstance(v, type) and issubclass(v, PodOpVisitor): + globals()[k] = v + __all__.append(k) + +for k, v in ops.__dict__.items(): + if isinstance(v, type) and issubclass(v, OpDef): + globals()[k] = v + __all__.append(k) diff --git a/imperative/python/megengine/core/ops/special.py b/imperative/python/megengine/core/ops/special.py new file mode 100644 index 00000000..e427c8f5 --- /dev/null +++ b/imperative/python/megengine/core/ops/special.py @@ -0,0 +1,16 @@ +# -*- 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.core import OpBase, TensorBase, apply + + +class Const(OpBase): + def __init__(self, value=None, *, dtype=None, device=None): + self.value = value + self.dtype = dtype + self.device = device diff --git a/imperative/python/megengine/core/tensor/__init__.py b/imperative/python/megengine/core/tensor/__init__.py new file mode 100644 index 00000000..e008c110 --- /dev/null +++ b/imperative/python/megengine/core/tensor/__init__.py @@ -0,0 +1,9 @@ +# -*- 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_wrapper import TensorWrapper as Tensor diff --git a/imperative/python/megengine/core/tensor/core.py b/imperative/python/megengine/core/tensor/core.py new file mode 100644 index 00000000..3a09f524 --- /dev/null +++ b/imperative/python/megengine/core/tensor/core.py @@ -0,0 +1,115 @@ +# -*- 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 +import inspect +import sys +import typing +from abc import ABC + +import multipledispatch + + +class OpBase(ABC): + def __call__(self, *args): + return apply(self, *args) + + +class TensorBase: + pass + + +class TensorWrapperBase: + pass + + +class Dispatcher(multipledispatch.Dispatcher): + def add(self, f, g=None): + if g is None: + super().add(get_signature(f), f) + else: + super().add(f, g) + + return f + + def __get__(self, instance, owner=None): + if instance is not None: + return self + return functools.partial(self, instance) + + +if sys.version_info < (3, 6): + + def parse_union(ann): + if type(ann) is not typing.UnionMeta: + return + return ann.__union_params__ + + +elif sys.version_info < (3, 7): + + def parse_union(ann): + if type(ann) is not typing._Union: + return + return ann.__args__ + + +elif sys.version_info < (3, 8): + + def parse_union(ann): + if type(ann) is not typing._GenericAlias: + if type(ann) is not typing.Union: + return + else: + if ann.__origin__ is not typing.Union: + return + return ann.__args__ + + +else: + + def parse_union(ann): + if typing.get_origin(ann) is not typing.Union: + return + return typing.get_args(ann) + + +def get_signature(function, op_type=None): + sig = inspect.signature(function) + types = [] + for p in sig.parameters.values(): + ann = p.annotation + ann = parse_union(ann) or ann + if p.kind in ( + inspect.Parameter.POSITIONAL_ONLY, + inspect.Parameter.POSITIONAL_OR_KEYWORD, + ): + types.append(ann) + if p.kind == inspect.Parameter.VAR_POSITIONAL: + types.append([ann]) + return tuple(types) + + +apply = Dispatcher("apply") + +OpBase.apply = apply + + +@apply.add +def _(op: OpBase, *args: TensorBase): + raise NotImplementedError + + +@apply.add +def _(op: OpBase, *args: TensorWrapperBase): + assert args + Wrapper = type(args[0]) + outputs = apply(op, *(i.__wrapped__ for i in args)) + assert isinstance(outputs, tuple) + return tuple(map(Wrapper, outputs)) diff --git a/imperative/python/megengine/core/tensor/dtype.py b/imperative/python/megengine/core/tensor/dtype.py new file mode 100644 index 00000000..85c22bb7 --- /dev/null +++ b/imperative/python/megengine/core/tensor/dtype.py @@ -0,0 +1,289 @@ +# 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 + +# normal dtype related +from .._imperative_rt import bfloat16, intb1, intb2, intb4 + + +def is_lowbit(dtype): + return (dtype is intb1) or (dtype is intb2) or (dtype is intb4) + + +def is_bfloat16(dtype): + return dtype is bfloat16 + + +# quantization dtype related +_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 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/imperative/python/megengine/core/tensor/function.py b/imperative/python/megengine/core/tensor/function.py new file mode 100644 index 00000000..9cbb3d56 --- /dev/null +++ b/imperative/python/megengine/core/tensor/function.py @@ -0,0 +1,158 @@ +# 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 ..ops.builtin import OpDef +from .core import TensorBase, TensorWrapperBase, apply +from .raw_tensor import RawTensor +from .tensor import Tensor, push_context +from .tensor_wrapper import TensorWrapper + + +class Function: + """ + 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.y = y + return y + + def backward(self. output_grads): + y = self.y + return output_grads * y * (1-y) + + """ + + def __init__(self, *args, **kwargs): + pass + + def __call__(self, *args): + ret = apply(self, *args) + if type(ret) == tuple and len(ret) == 1: + return ret[0] + return ret + + def forward(self, *args, **kwargs): + """ + Applies operations to ``inputs`` and returns results. It must be overriden by all subclasses. + + :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 + + def backward(self, *output_grads): + """ + 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 get_backward_fn(self): + if self.backward is None: + return None + + def _backward(*output_grads): + if type(output_grads) is tuple: + _output_grads = map(TensorWrapper, output_grads) + else: + _output_grads = (TensorWrapper(output_grads),) + ret = self.backward(*_output_grads) + if type(ret) is not tuple: + ret = (ret,) + ret = tuple([i.__wrapped__ for i in ret]) + return ret + + return _backward + + +Function.apply = Function.__call__ + + +@apply.add +def _(op: Function, *args: TensorWrapperBase): + assert args + Wrapper = type(args[0]) + + # compute the value for self define function + extra_data_dic = {} + for arg in args: + extra_data_dic[arg.__wrapped__] = arg.__wrapped__._extra_data + arg.__wrapped__._extra_data = {} + + rets = op.forward(*args) + + for arg in args: + arg.__wrapped__._extra_data = extra_data_dic[arg.__wrapped__] + + # update the gradient information for self define function + inputs = tuple(map(lambda i: i.__wrapped__, args)) + outputs = ( + tuple(map(lambda i: i.__wrapped__, rets)) + if type(rets) is tuple + else (rets.__wrapped__,) + ) + + for output in outputs: + output._extra_data = {} + + with push_context() as ctx: + ctx.inputs = inputs + ctx.outputs = outputs + for k in set().union(*(i._extra_data for i in inputs if isinstance(i, Tensor))): + ctx.key = k + data = tuple( + i._extra_data.get(k) if isinstance(i, Tensor) else i for i in inputs + ) + # data are instances of Tracer + # dispatched to apply.add@grad.py + rets = apply(op, *data) + if rets is not None: + assert len(outputs) == len(rets) + for t, i in zip(outputs, rets): + t._extra_data[k] = i + + return tuple(map(Wrapper, outputs)) + + +@apply.add +def _(op: Function, *args: Tensor): + raise NotImplementedError + + +@apply.add +def _(op: Function, *args: RawTensor): + raise NotImplementedError diff --git a/imperative/python/megengine/core/tensor/indexing.py b/imperative/python/megengine/core/tensor/indexing.py new file mode 100644 index 00000000..2c612c9b --- /dev/null +++ b/imperative/python/megengine/core/tensor/indexing.py @@ -0,0 +1,251 @@ +# -*- 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 ..ops import builtin +from ..ops.special import Const +from .core import TensorBase, TensorWrapperBase, apply + + +def remove_ellipsis(tensor, tuple_val): + ndim_sum = tensor.ndim + cur_sum = 0 + pos = -1 + for i_idx, i in enumerate(tuple_val): + if i is Ellipsis: + for j in tuple_val[:i_idx:-1]: + if j is Ellipsis: + raise IndexError("only one ellipsis is allowed") + pos = i_idx + else: + cur_sum += i.ndim if hasattr(i, "ndim") else 1 + if pos == -1: + return tuple_val + else: + return ( + tuple_val[:pos] + + (slice(None, None, None),) * (ndim_sum - cur_sum) + + tuple_val[pos + 1 :] + ) + + +def check_bool_index(tensor, tuple_val): + cur_shape = tensor.shape + new_tuple_val = [] + offset = 0 + tdim = 0 + for idx, i in enumerate(tuple_val): + if hasattr(i, "dtype") and i.dtype == np.bool_: + if i.ndim > 1: + tot = i.ndim + for j in range(i.ndim): + if cur_shape[tdim + j - offset] != i.shape[j]: + raise IndexError( + "boolean index did not match tensor along dimension {}; dimension is {} but corresponding boolean dimension is {}".format( + tdim + j, cur_shape[tdim + j - offset], i.shape[j] + ) + ) + i = i.reshape(-1) + cur_shape = ( + cur_shape[:idx] + (i.shape[0],) + cur_shape[tdim + tot - offset :] + ) + offset += 1 + tensor = tensor.reshape(cur_shape) + tdim += tot + new_tuple_val.append(i) + else: + new_tuple_val.append(i) + tdim += 1 + return tensor, new_tuple_val + + +def unpack_getitem(inp, tuple_val, *, allow_newaxis=True): + if not isinstance(tuple_val, tuple): + tuple_val = (tuple_val,) + ndim_indexed = 0 + for i in tuple_val: + if not i is Ellipsis: + ndim_indexed += 1 if not hasattr(i, "ndim") else i.ndim + if ndim_indexed > inp.ndim: + raise IndexError( + "too many indices for tensor: tensor is {}-dimensional, but {} were indexed".format( + inp.ndim, ndim_indexed + ) + ) + + tuple_val = remove_ellipsis(inp, tuple_val) + use_subtensor = True + inp, tuple_val = check_bool_index(inp, tuple_val) + + def is_scalar(d): + if isinstance(i, int): + return True + if type(d).__module__ == np.__name__: + return np.isscalar(d) + # if isinstance(d, (TensorBase, TensorWrapperBase)): + # return d.shape == (1,) + return False + + new_axes = [] + tensors = [] + items = [] + 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 ( + not is_scalar(i) + and not i is np.newaxis + and not i is Ellipsis + and not isinstance(i, slice) + ): + use_subtensor = False + + item = [ + cur_axis, + ] + + def is_bool_list(x): + if not isinstance(x, list): + return False + for i in x: + if not isinstance(i, bool): + return False + return True + + def get_index(i): + if not isinstance(i, (TensorBase, TensorWrapperBase)): + if is_bool_list(i) or isinstance(i, np.ndarray) and i.dtype == np.bool_: + (i,) = Const(i, dtype=np.bool_, device=inp.device)(inp) + else: + (i,) = Const(i, dtype=np.int32, device=inp.device)(inp) + return i + assert isinstance(i, (TensorBase, TensorWrapperBase)) + if i.dtype != np.bool_: + return i + _, ind = apply(builtin.CondTake(), i, i) + return ind + + def push(v, item, tensors): + if v is None: + item.append(False) + else: + item.append(True) + v = get_index(v) + assert np.issubdtype(v.dtype, np.integer) or np.issubdtype( + v.dtype, np.bool + ), "var type in the subscript must be int or bool" + tensors.append(v) + + if isinstance(i, slice): + if i.start is None and i.stop is None and i.step is None: + continue + push(i.start, item, tensors) + push(i.stop, item, tensors) + push(i.step, item, tensors) + item.append(False) # idx + else: + item += [False,] * 3 # begin, end, stop + push(i, item, tensors) + assert len(item) == 5 + items.append(item) + if new_axes: + raise IndexError("newaxis is not allowed here") + return inp, tensors, items, use_subtensor + + +def try_condtake(tensor, index): + if not hasattr(index, "dtype") or not hasattr(index, "shape"): + return [] + if index.dtype != np.bool_ or index.shape != tensor.shape: + return [] + if isinstance(index, np.ndarray): + (i,) = Const(i, dtype=np.bool_, device=inp.device)(inp) + assert isinstance(index, (TensorBase, TensorWrapperBase)) + if not isinstance(tensor, (TensorWrapperBase, TensorBase)): + raise TypeError("input must be a tensor") + if tensor.device != index.device: + raise ValueError( + "ambiguous device: {} vs {}".format(tensor.device, index.device) + ) + return apply(builtin.CondTake(), tensor, index) + + +def getitem(tensor, index): + try_result = try_condtake(tensor, index) + if len(try_result) == 2: + return try_result[0] + tensor, tensors, items, use_subtensor = unpack_getitem(tensor, index) + for v in tensors: + if v.shape[0] == 0: + (empty_tensor,) = Const([], dtype=tensor.dtype, device=tensor.device)( + tensor + ) + return empty_tensor + if use_subtensor: + op = builtin.Subtensor(items=items) + else: + op = builtin.IndexingMultiAxisVec(items=items) + (result,) = apply(op, tensor, *tensors) + return result + + +def setitem(tensor, index, value): + org_shape = tensor.shape + try_result = try_condtake(tensor, index) + if len(try_result) == 2: + index = try_result[1] + if index.shape[0] == 0: + return tensor + tensor = tensor.reshape(-1) + if not isinstance(value, (TensorBase, TensorWrapperBase)): + op = Const(value, dtype=tensor.dtype, device=tensor.device) + (value,) = op(tensor) + tensor, tensors, items, use_subtensor = unpack_getitem(tensor, index) + for v in tensors: + if v.shape[0] == 0: + return tensor + if use_subtensor: + op = builtin.Subtensor(items=items) + else: + op = builtin.IndexingMultiAxisVec(items=items) + (tmp_result,) = apply(op, tensor, *tensors) + if value.shape != tmp_result.shape: + for i in range(min(len(value.shape), len(tmp_result.shape))): + if ( + value.shape[-i - 1] != 1 + and value.shape[-i - 1] != tmp_result.shape[-i - 1] + ): + raise ValueError( + "cannot copy tensor with shape {} to subtensor with shape {}".format( + value.shape, tmp_result.shape + ) + ) + value = value.broadcast(tmp_result.shape) + if use_subtensor: + op = builtin.SetSubtensor(items=items) + else: + op = builtin.IndexingSetMultiAxisVec(items=items) + (result,) = apply(op, tensor, value, *tensors) + result = result.reshape(org_shape) + return result diff --git a/imperative/python/megengine/core/tensor/megbrain_graph.py b/imperative/python/megengine/core/tensor/megbrain_graph.py new file mode 100644 index 00000000..86f7bcc1 --- /dev/null +++ b/imperative/python/megengine/core/tensor/megbrain_graph.py @@ -0,0 +1,196 @@ +# -*- 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 weakref +from concurrent.futures import Future, ThreadPoolExecutor + +from .. import _imperative_rt +from .._wrap import device as as_device +from ..ops.builtin import OpDef +from .core import OpBase, TensorBase, apply + + +class CompiledFunction: + def __init__(self, graph, function): + self._graph = graph + self._function = function + self._future = None + + def execute(self, *args): + assert self._future is None + self._future = self._graph._executor.submit(self._function.execute, *args) + + def wait(self): + assert self._future is not None + self._future.exception() + self._function.wait() + try: + return self._future.result() + finally: + self._future = None + + def __call__(self, *args): + self.execute(*args) + return self.wait() + + +class Graph(_imperative_rt.ComputingGraph): + def __init__(self): + super().__init__() + self._var_cache = weakref.WeakKeyDictionary() + self._op_cache = weakref.WeakKeyDictionary() + self._executor = ThreadPoolExecutor(1) + + def _wrap(self, obj): + if type(obj) is _imperative_rt.VarNode: + wrapper, cache = VarNode, self._var_cache + elif type(obj) is _imperative_rt.OperatorNode: + wrapper, cache = OpNode, self._op_cache + if obj not in cache: + cache[obj] = wrapper(obj) + return cache[obj] + + def compile(self, *args): + return CompiledFunction(self, super().compile(_unwrap(args))) + + +class VarNode(TensorBase): + def __init__(self, node: _imperative_rt.VarNode): + self._node = node + + @property + def graph(self) -> Graph: + return self._node.graph + + @property + def op(self): + return self.graph._wrap(self._node.owner) + + @property + def dtype(self): + return self._node.dtype + + @property + def device(self): + return as_device(self._node.comp_node) + + +class OpNode: + def __init__(self, node: _imperative_rt.OperatorNode): + self._node = node + + @property + def graph(self) -> Graph: + return self._node.graph + + @property + def inputs(self): + return tuple(map(self.graph._wrap, self._node.inputs)) + + @property + def outputs(self): + return tuple(map(self.graph._wrap, self._node.outputs)) + + +def _wrap(x): + if isinstance(x, collections.Sequence): + return type(x)(map(_wrap, x)) + return x.graph._wrap(x) + + +def _unwrap(x): + if isinstance(x, collections.Sequence): + return type(x)(map(_unwrap, x)) + return x._node + + +@apply.add +def _(op: OpDef, *args: VarNode): + outputs = _imperative_rt.invoke_op(op, _unwrap(args)) + return _wrap(outputs) + + +def input_callback(callback, *args, device=None, dtype=None, graph=None): + outputs = _imperative_rt.input_callback( + callback, as_device(device).to_c(), dtype, _unwrap(args), graph=graph + ) + value, dummy = _wrap(outputs) + return value, dummy + + +class InputNode(OpNode): + def __init__(self, *args: VarNode, device=None, dtype=None, graph=None): + r = _imperative_rt.DeviceTensorNDRendezvous() + if device is not None: + device = as_device(device).to_c() + outputs = _imperative_rt.input_callback( + r, device, dtype, _unwrap(args), graph=graph + ) + super().__init__(outputs[0].owner) + self._rendezvous = r + + def set_value(self, value): + assert isinstance(value, _imperative_rt.DeviceTensorND) + self._rendezvous.set(value) + + def reset(self): + self._rendezvous.reset() + + @property + def device(self): + return self.outputs[0].device + + @property + def dtype(self): + return self.outputs[0].dtype + + +def output_callback(callback, var, *args): + args = (var,) + args + dummy = _imperative_rt.output_callback(callback, _unwrap(args)) + return _wrap(dummy) + + +class OutputNode(OpNode): + def __init__(self, var, *args): + args = (var,) + args + r = _imperative_rt.DeviceTensorNDRendezvous() + dummy = _imperative_rt.output_callback(r, _unwrap(args)) + super().__init__(dummy.owner) + self._rendezvous = r + + def get_value(self): + return self._rendezvous.get() + + def reset(self): + self._rendezvous.reset() + + +class TensorAttr: + def __init__(self, shape, dtype, device): + self.shape = shape + self.dtype = dtype + self.device = device + + +class AttrOutputNode(OpNode): + def __init__(self, var, *args): + args = (var,) + args + r = _imperative_rt.TensorAttrRendezvous() + dummy = _imperative_rt.attr_output_callback(r, _unwrap(args)) + super().__init__(dummy.owner) + self._rendezvous = r + + def get_value(self): + attr = self._rendezvous.get() + return TensorAttr(attr.shape, attr.dtype, as_device(attr.comp_node)) + + def reset(self): + self._rendezvous.reset() diff --git a/imperative/python/megengine/core/tensor/raw_tensor/__init__.py b/imperative/python/megengine/core/tensor/raw_tensor/__init__.py new file mode 100644 index 00000000..decca86d --- /dev/null +++ b/imperative/python/megengine/core/tensor/raw_tensor/__init__.py @@ -0,0 +1,108 @@ +# -*- 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 numpy as np + +from ..._imperative_rt import CompNode, DeviceTensorND +from ..._imperative_rt.imperative import ( + _get_dev_tensor, + apply_op, + delete, + get_device, + get_dtype, + get_shape, + get_value, + put, +) +from ..._wrap import device as as_device +from ...ops.builtin import Copy, OpDef, TypeCvt +from ...ops.special import Const +from ..core import OpBase, TensorBase, apply + + +class RawTensor(TensorBase): + + _init_cb = None + _del_cb = None + + def __init__(self, handle): + self._handle = handle + if self._init_cb: + self._init_cb() + + @property + def dtype(self): + return get_dtype(self._handle) + + @property + def device(self): + return as_device(get_device(self._handle)) + + @property + def shape(self): + return get_shape(self._handle) + + def numpy(self): + return get_value(self._handle) + + def _dev_tensor(self): + return _get_dev_tensor(self._handle) + + def __repr__(self): + return "{}({}, device='{}')".format( + type(self).__qualname__, repr(self.numpy()), self.device + ) + + def __del__(self): + if self._del_cb: + self._del_cb() + delete(self._handle) + + +@apply.add +def _(op: OpDef, *args: RawTensor): + outputs = apply_op(op, tuple(i._handle for i in args)) + return tuple(map(RawTensor, outputs)) + + +@apply.add +def _(op: Const, *args: RawTensor): + dtype = op.dtype + device = as_device(op.device).to_c() + return (as_raw_tensor(op.value, dtype=dtype, device=device),) + + +@functools.singledispatch +def as_raw_tensor(obj, dtype=None, device=None): + obj = np.asarray(obj, dtype=dtype) + if obj.dtype == np.float64: + obj = obj.astype(np.float32) + if obj.dtype == np.int64: + obj = obj.astype(np.int32) + return as_raw_tensor(obj, device=device) + + +@as_raw_tensor.register(np.ndarray) +def _(array: np.ndarray, dtype=None, device=None): + device = None if device is None else as_device(device).to_c() + return RawTensor(put(array, dtype=dtype, device=device)) + + +@as_raw_tensor.register(RawTensor) +def _(tensor: RawTensor, dtype=None, device=None): + if dtype is not None: + dtype = np.dtype(dtype) + if dtype != tensor.dtype: + (tensor,) = apply(TypeCvt(dtype=dtype), tensor) + if device is not None: + device = as_device(device) + if device != tensor.device: + (tensor,) = apply(Copy(comp_node=device.to_c()), tensor) + return tensor diff --git a/imperative/python/megengine/core/tensor/raw_tensor/jit.py b/imperative/python/megengine/core/tensor/raw_tensor/jit.py new file mode 100644 index 00000000..091b3789 --- /dev/null +++ b/imperative/python/megengine/core/tensor/raw_tensor/jit.py @@ -0,0 +1,251 @@ +# -*- 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 io +import weakref + + +class partial(functools.partial): + def __get__(self, instance, owner=None): + if instance is None: + return self + return functools.partial(self, instance) + + +def hook(f): + def decorator(impl): + return functools.update_wrapper(partial(f, impl), impl) + + return decorator + + +def on_input(impl, value): + tensor = impl(value) + trace = get_trace() + if trace: + var = trace.get_var(tensor) + event = InputEvent(var) + trace.append(event) + return tensor + + +def on_read_dtype(impl, self): + trace = get_trace() + if trace: + var = trace.get_var(self) + event = ReadDtypeEvent(var) + trace.append(event) + + return impl(self) + + +def on_read_device(impl, self): + trace = get_trace() + if trace: + var = trace.get_var(self) + event = ReadDeviceEvent(var) + trace.append(event) + + return impl(self) + + +def on_read_shape(impl, self): + trace = get_trace() + if trace: + var = trace.get_var(self) + event = ReadShapeEvent(var) + trace.append(event) + + return impl(self) + + +def on_read_value(impl, self): + trace = get_trace() + if trace: + var = trace.get_var(self) + event = ReadValueEvent(var) + trace.append(event) + + return impl(self) + + +def on_builtin_op(impl, op, *args): + outputs = impl(op, *args) + + trace = get_trace() + if trace: + input_vars = tuple(map(trace.get_var, args)) + output_vars = outputs and tuple(map(trace.get_var, outputs)) + event = OpEvent(op, input_vars, output_vars) + trace.append(event) + + return outputs + + +def on_del(impl, self): + trace = get_trace() + if trace: + var = trace.get_var(self) + event = DelEvent(var) + trace.append(event) + + return impl(self) + + +class Trace(list): + def __init__(self): + self._var_id = 1 + self._t2v = weakref.WeakKeyDictionary() + self._v2t = weakref.WeakValueDictionary() + + def get_var(self, x): + v = self._t2v.get(x) + if v: + return v + v = self._var_id + self._var_id += 1 + self._t2v[x] = v + self._v2t[v] = x + return v + + def __bool__(self): + return True + + def __enter__(self): + global _current_trace + if hasattr(self, "_prev_trace"): + raise RuntimeError + self._prev_trace = _current_trace + _current_trace = self + return self + + def __exit__(self, *_): + global _current_trace + if _current_trace is not self: + raise RuntimeError + _current_trace = self._prev_trace + del self._prev_trace + + +class Event: + pass + + +class InputEvent(Event): + def __init__(self, var): + self.var = var + + +class ReadEvent(Event): + def __init__(self, var): + self.var = var + + +class ReadDtypeEvent(ReadEvent): + pass + + +class ReadDeviceEvent(ReadEvent): + pass + + +class ReadShapeEvent(ReadEvent): + pass + + +class ReadValueEvent(ReadEvent): + pass + + +class OpEvent(Event): + def __init__(self, op, inputs, outputs): + self.op = op + self.inputs = inputs + self.outputs = outputs + + +class DelEvent(Event): + def __init__(self, var): + self.var = var + + +_current_trace = None + + +def get_trace() -> Trace: + global _current_trace + return _current_trace + + +def format_trace(trace): + buf = io.StringIO() + active_vars = set() + + def write(fmt, *args, **kwargs): + print(fmt.format(*args, **kwargs), file=buf) + + def init_vars(*args): + for i in args: + if i in active_vars: + continue + active_vars.add(i) + write("_{} = input()", i) + + for event in trace: + if isinstance(event, InputEvent): + init_vars(event.var) + elif isinstance(event, ReadDtypeEvent): + init_vars(event.var) + write("output(_{}.dtype)", event.var) + elif isinstance(event, ReadDeviceEvent): + init_vars(event.var) + write("output(_{}.device)", event.var) + elif isinstance(event, ReadShapeEvent): + init_vars(event.var) + write("output(_{}.shape)", event.var) + elif isinstance(event, ReadValueEvent): + init_vars(event.var) + write("output(_{}.dtype)", event.var) + elif isinstance(event, ReadValueEvent): + init_vars(event.var) + write("output(_{}.value)", event.var) + elif isinstance(event, OpEvent): + init_vars(*event.inputs) + active_vars.update(event.outputs) + ovars = ", ".join(map("_{}".format, event.outputs)) + ivars = ", ".join(map("_{}".format, event.inputs)) + if ovars: + write("{} = {}({})", ovars, repr(event.op), ivars) + else: + write("{}({})", repr(event.op), ivars) + elif isinstance(event, DelEvent): + init_vars(event.var) + write("del _{}", event.var) + else: + raise TypeError(type(event)) + + return buf.getvalue() + + +def compile_trace(trace): + trace = list(trace) + + +def static_function(f): + trace = None + + @functools.wraps(f) + def wrapper(*args, **kwargs): + nonlocal trace + if trace is None: + with Trace() as trace: + return f(*args, **kwargs) + return f(*args, **kwargs) + + return wrapper diff --git a/imperative/python/megengine/core/tensor/raw_tensor/trace_exec.py b/imperative/python/megengine/core/tensor/raw_tensor/trace_exec.py new file mode 100644 index 00000000..d16a6ef0 --- /dev/null +++ b/imperative/python/megengine/core/tensor/raw_tensor/trace_exec.py @@ -0,0 +1,263 @@ +# -*- 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 weakref + +# Concepts +# +# * Internal tensor +# Tensor produced by the static sequence +# +# * External tensor +# Tensor not produced, but used as input, by the static sequence +# +# * Irrelevant tensor +# Tensor not present in input/output of any op +# +# * Escape +# An internal tensor is said to escape if it is still alive +# at the end of the sequence + +# JIT-ed execution +# +# 1. read attr (dtype, device, shape) +# a. internal tensor +# read out as soon as tensor is produced +# b. external or irrelevant tensor +# fallback +# +# 2. apply op +# bind external tensors in input +# +# 3. del + + +class Action: + pass + + +class ReadAttrAction(Action): + def __init__(self, var, name, getter): + self.var = var + self.name = name + self.getter = getter + + +class ReadValueAction(Action): + def __init__(self, var, getter): + self.var = var + self.getter = getter + + +class GetTensorAction(Action): + def __init__(self, var, getter): + self.var = var + self.getter = getter + + +class OpAction(Action): + def __init__(self, op, inputs, outputs, input_receivers): + self.op = op + self.inputs = inputs + self.outputs = outputs + self.input_receivers = input_receivers + + +class TensorAttr: + def __init__(self): + self.shape = None + self.dtype = None + self.device = None + + +class Bailout(Exception): + pass + + +class Fallback(Exception): + pass + + +def handle_bailout_fallback_finalize(f): + @functools.wraps(f) + def wrapper(self, impl, *args, **kwargs): + try: + return f(*args, **kwargs) + except Bailout: + self.bailout() + except Fallback: + pass + finally: + if self.pc == len(self): + self.finalize() + return impl(*args, **kwargs) + + return wrapper + + +class ExecTrajectory(list): + def __init__(self): + super().__init__() + self.reset() + + def __bool__(self): + return True + + def __enter__(self): + global _current_trajectory + if hasattr(self, "_prev_trajectory"): + raise RuntimeError + self._prev_trajectory = _current_trajectory + _current_trajectory = self + self._exited = False + return self + + def __exit__(self, *exc_info): + # cleanup should be done at completion, + # which is before exiting context manager + assert self._exited == (exc_info == (None, None, None)) + if not self._exited: + assert self.pc < len(self) + self.bailout() + + def _exit(self): + # clean up self and global varaible + assert not self._exited + self.reset() + + global _current_trajectory + if _current_trajectory is not self: + raise RuntimeError + _current_trajectory = self._prev_trajectory + del self._prev_trajectory + + def reset(self): + self._exited = True + self.pc = 0 + self.attr_cache = weakref.WeakKeyDictionary() + + ### Internal and External Tensor ### + # internal tensors are those produced by us + # external tensors are those received from outside + # during JIT-ed execution, internal tensors are just placeholders. + # var_to_tensor is the binding table for all tensors + self.var_to_tensor = {} # var -> weakref[tensor] + # tensor_to_var is the reverse binding table for internal tensors + # note that external tensors could map to >1 vars. + self.tensor_to_var = weakref.WeakKeyDictionary() + # internal tensor will be materialized if its .data is accessed from outside + # after being meterialized, an intern tensor is much like an external tensor + + def finalize(self): + assert self.pc == len(self) + self._exit() + + def bailout(self): + self._exit() + raise NotImplementedError + + def next_action(self): + assert not self._exited + assert self.pc < len(self) + return self[self.pc] + + @handle_bailout_fallback_finalize + def read_attr(self, tensor, name): + attrs = self.attr_cache.setdefault(tensor, TensorAttr()) + value = getattr(attrs, name, None) + if value is None: + action = self.next_action() + if not isinstance(action, ReadAttrAction): + raise Bailout + if name != action.name: + raise Bailout + value = action.getter() + setattr(attrs, name, value) + return value + + @handle_bailout_fallback_finalize + def read_value(self, impl, tensor): + # possibilities: + # 1. internal tensor + # 2. external tensor + # 3. irrelevant tensor (not an input / output of any op) + if tensor not in self.tensor_to_var: + raise Fallback + assert tensor._data is None + action = self.next_action() + if not isinstance(action, ReadValueAction): + raise Bailout + return action.getter() + + @handle_bailout_fallback_finalize + def apply_op(self, impl, op, *args): + from . import RawTensor + + action = self.next_action() + if not isinstance(action, OpAction): + raise Bailout + if len(args) != len(action.inputs): + raise Bailout + assert len(actions.inputs) == len(action.input_receivers) + + for v, t, r in zip(action.inputs, args, action.input_receivers): + if v in self.var_to_tensor: + assert r is None + if t is not self.var_to_tensor[v](): + raise Bailout + else: + # NOTE: not checking for aliasing (>=2 vars map to 1 tensor) + # the static execution backend must handle this + self.var_to_tensor[v] = weakref.ref(t) + r(t) + + outputs = [] + for v in action.outputs: + assert v not in self.var_to_tensor + t = RawTensor() + t._data_getter = functools.partial(self.get_data, v) + outputs.append(t) + self.var_to_tensor[v] = weakref.ref(t) + + return tuple(outputs) + + def get_data(self, var): + tensor = self.var_to_tensor[var]() + assert tensor is not None + assert tensor._data is None + assert tensor in self.tensor_to_var + action = self.next_action() + if not isinstance(action, GetTensorAction): + self.bailout() + elif action.var != var: + self.bailout() + else: + tensor._data = action.getter() + del tensor._data_getter + del self.tensor_to_var[tensor] + assert "_data_getter" not in tensor.__dict__ + return tensor._data_getter() + + +_current_trajectory = None + + +def get_trajectory(): + return _current_trajectory + + +def compile_trace(trace): + from .jit import ReadDTypeEvent, ReadDeviceEvent, ReadShapeEvent, OpEvent, DelEvent + + traj = ExecutionTrajectory() + active_vars = set() + + for event in trace: + if isinstance(event, ReadDTypeEvent): + traj.append(ReadAttrAction()) diff --git a/imperative/python/megengine/core/tensor/tensor.py b/imperative/python/megengine/core/tensor/tensor.py new file mode 100644 index 00000000..0f2ff9d7 --- /dev/null +++ b/imperative/python/megengine/core/tensor/tensor.py @@ -0,0 +1,106 @@ +# -*- 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 copy + +from .core import Dispatcher, OpBase, TensorBase, apply + + +class Tensor(TensorBase): + def __init__(self, data: TensorBase): + self._data = data + # _extra_data is set up in Grad.wrt + self._extra_data = {} + self._user_data = {} + + def __getattr__(self, name): + if name in self._user_data: + return self._user_data[name] + raise AttributeError(name) + + def reset(self, other): + assert isinstance(other, __class__) + self.__dict__.clear() + self._data = other.data + self._extra_data = other._extra_data.copy() + self._user_data = other._user_data.copy() + + def copy(self): + other = object.__new__(type(self)) + other.reset(self) + return other + + # tensor interface + + @property + def shape(self): + return self._data.shape + + @property + def dtype(self): + return self._data.dtype + + @property + def device(self): + return self._data.device + + def numpy(self): + return self._data.numpy() + + +class ApplyContext: + def __init__(self): + self.inputs = None + self.outputs = None + self.key = None + + +_context = None + + +@contextlib.contextmanager +def push_context(): + global _context + backup = _context + try: + _context = ApplyContext() + yield _context + finally: + _context = backup + + +def get_context(): + return _context + + +@apply.add +def tensor_apply(op: OpBase, *args: Tensor): + data = tuple(i._data if isinstance(i, Tensor) else i for i in args) + # type(Tensor._data) is RawTensor + # dispached to apply.add@RawTensor.py if passed Tensor args + outputs = apply(op, *data) + ret = tuple(map(Tensor, outputs)) + + with push_context() as ctx: + ctx.inputs = args + ctx.outputs = ret + for k in set().union(*(i._extra_data for i in args if isinstance(i, Tensor))): + ctx.key = k + data = tuple( + i._extra_data.get(k) if isinstance(i, Tensor) else i for i in args + ) + # data are instances of Tracer + # dispatched to apply.add@grad.py + outputs = apply(op, *data) + if outputs is not None: + assert len(outputs) == len(ret) + for t, i in zip(ret, outputs): + t._extra_data[k] = i + + return ret diff --git a/imperative/python/megengine/core/tensor/tensor_wrapper.py b/imperative/python/megengine/core/tensor/tensor_wrapper.py new file mode 100644 index 00000000..011e7d11 --- /dev/null +++ b/imperative/python/megengine/core/tensor/tensor_wrapper.py @@ -0,0 +1,367 @@ +# -*- 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 abc +import collections + +import numpy as np + +from ..ops import builtin +from ..ops.special import Const +from . import utils +from .core import OpBase, TensorBase, TensorWrapperBase, apply +from .indexing import getitem as _getitem +from .indexing import setitem as _setitem +from .raw_tensor import RawTensor, as_raw_tensor +from .tensor import Tensor + + +def _elwise(*args, mode): + op = builtin.Elemwise(mode=mode) + args = utils.convert_inputs(*args) + (result,) = apply(op, *args) + return result + + +def _matmul(inp1, inp2): + op = builtin.MatrixMul( + transposeA=False, transposeB=False, compute_mode="DEFAULT", format="DEFAULT" + ) + inp1, inp2 = utils.convert_inputs(inp1, inp2) + (result,) = apply(op, inp1, inp2) + return result + + +def _transpose(data, axes): + op = builtin.Dimshuffle(axes) + (data,) = utils.convert_inputs(data) + (result,) = apply(op, data) + return result + + +def _broadcast(inp, shape): + shape = utils.astensor1d(shape, inp, dtype="int32", device=inp.device) + (result,) = apply(builtin.Broadcast(), inp, shape) + return result + + +def _reshape(x, shape): + if isinstance(shape, (TensorBase, TensorWrapperBase)): + shape = shape.numpy() + shape = tuple(map(int, shape)) + unspec_axis = None + for i, s in enumerate(shape): + if s < 0: + if s != -1: + raise ValueError("expect shape[{}] >= -1, got {}".format(i, s)) + if unspec_axis is not None: + raise ValueError("multiple -1 in shape: {} & {}".format(unspec_axis, i)) + unspec_axis = i + + # TODO: device should be None (cpu) + (shape,) = Const(shape, dtype=np.int32, device=x.device)(x) + if unspec_axis is None: + op = builtin.Reshape() + else: + op = builtin.Reshape(unspec_axis=unspec_axis) + (x,) = apply(op, x, shape) + return x + + +def _unary_elwise(mode): + def f(self): + return _elwise(self, mode=mode) + + return f + + +def _binary_elwise(mode, rev=False): + if not rev: + + def f(self, value): + return _elwise(self, value, mode=mode) + + else: + + def f(self, value): + return _elwise(value, self, mode=mode) + + return f + + +def _logical_unary_elwise(mode, rev=False): + def f(self): + if self.dtype != np.bool_: + raise TypeError("{} requires a bool tensor".format(mode)) + return _elwise(self, mode=mode) + + return f + + +def _logical_binary_elwise(mode, rev=False): + if not rev: + + def f(self, value): + if self.dtype != np.bool_ or value.dtype != np.bool_: + raise TypeError("{} requires 2 bool tensors".format(mode)) + return _elwise(self, value, mode=mode) + + else: + + def f(self, value): + if self.dtype != np.bool_ or value.dtype != np.bool_: + raise TypeError("{} requires 2 bool tensors".format(mode)) + return _elwise(value, self, mode=mode) + + return f + + +def _reduce(mode): + def f(self, axis=None): + inp = self + if axis is None: + inp = self.flatten() + axis = 0 + op = builtin.Reduce(mode=mode, axis=axis) + (result,) = utils.convert_inputs(inp) + (result,) = apply(op, result) + return result + + return f + + +def _inplace(f): + def g(self, value): + result = f(self, value) + if result is NotImplemented: + raise NotImplementedError + self._reset(result) + return self + + return g + + +def _todo(*_): + raise NotImplementedError + + +class ArrayMethodMixin(abc.ABC): + + __array_priority__ = 233333 + + @abc.abstractmethod + def _reset(self, other): + pass + + @abc.abstractproperty + def dtype(self) -> np.dtype: + pass + + @abc.abstractproperty + def shape(self) -> tuple: + pass + + @abc.abstractmethod + def numpy(self) -> np.ndarray: + pass + + __hash__ = None # due to __eq__ diviates from python convention + + __lt__ = lambda self, value: _elwise(self, value, mode="LT").astype("bool") + __le__ = lambda self, value: _elwise(self, value, mode="LEQ").astype("bool") + __gt__ = lambda self, value: _elwise(value, self, mode="LT").astype("bool") + __ge__ = lambda self, value: _elwise(value, self, mode="LEQ").astype("bool") + __eq__ = lambda self, value: _elwise(self, value, mode="EQ").astype("bool") + __ne__ = lambda self, value: _elwise( + _elwise(self, value, mode="EQ").astype("bool"), mode="NOT" + ) + + __neg__ = _unary_elwise("NEGATE") + __pos__ = lambda self: self + __abs__ = _unary_elwise("ABS") + __invert__ = _logical_unary_elwise("NOT") + __round__ = _unary_elwise("ROUND") + __trunc__ = _todo + __floor__ = _unary_elwise("FLOOR") + __ceil__ = _unary_elwise("CEIL") + + __add__ = _binary_elwise("ADD") + __sub__ = _binary_elwise("SUB") + __mul__ = _binary_elwise("MUL") + __matmul__ = lambda self, other: _matmul(self, other) + __truediv__ = _binary_elwise("TRUE_DIV") + __floordiv__ = _binary_elwise("FLOOR_DIV") + __mod__ = _binary_elwise("MOD") + # __divmode__ + __pow__ = _binary_elwise("POW") + __lshift__ = _binary_elwise("SHL") + __rshift__ = _binary_elwise("SHR") + __and__ = _logical_binary_elwise("AND") + __or__ = _logical_binary_elwise("OR") + __xor__ = _logical_binary_elwise("XOR") + + __radd__ = _binary_elwise("ADD", rev=1) + __rsub__ = _binary_elwise("SUB", rev=1) + __rmul__ = _binary_elwise("MUL", rev=1) + __rmatmul__ = lambda self, other: _matmul(other, self) + __rtruediv__ = _binary_elwise("TRUE_DIV", rev=1) + __rfloordiv__ = _binary_elwise("FLOOR_DIV", rev=1) + __rmod__ = _binary_elwise("MOD", rev=1) + # __rdivmode__ + __rpow__ = _binary_elwise("POW", rev=1) + __rlshift__ = _binary_elwise("SHL", rev=1) + __rrshift__ = _binary_elwise("SHR", rev=1) + __rand__ = _logical_binary_elwise("AND", rev=1) + __ror__ = _logical_binary_elwise("OR", rev=1) + __rxor__ = _logical_binary_elwise("XOR", rev=1) + + __iadd__ = _inplace(__add__) + __isub__ = _inplace(__sub__) + __imul__ = _inplace(__mul__) + __imatmul__ = _inplace(__matmul__) + __itruediv__ = _inplace(__truediv__) + __ifloordiv__ = _inplace(__floordiv__) + __imod__ = _inplace(__mod__) + __ipow__ = _inplace(__pow__) + __ilshift__ = _inplace(__lshift__) + __irshift__ = _inplace(__rshift__) + __iand__ = _inplace(__and__) + __ior__ = _inplace(__or__) + __ixor__ = _inplace(__xor__) + + __index__ = lambda self: self.item().__index__() + __bool__ = lambda self: bool(self.item()) + __int__ = lambda self: int(self.item()) + __float__ = lambda self: float(self.item()) + __complex__ = lambda self: complex(self.item()) + + def __len__(self): + shape = self.shape + if shape: + return int(shape[0]) + raise TypeError("ndim is 0") + + def __iter__(self): + for i in range(len(self)): + yield self[i] + + def __getitem__(self, index): + return _getitem(self, index) + + def __setitem__(self, index, value): + if index is not Ellipsis: + value = _setitem(self, index, value) + self._reset(value) + + __contains__ = _todo + + @property + def ndim(self): + return len(self.shape) + + @property + def size(self): + return np.prod(self.shape).item() + + @property + def T(self): + return self.transpose() + + def item(self, *args): + if not args: + assert self.size == 1 + return self.numpy().item() + return self[args].item() + + def tolist(self): + return self.numpy().tolist() + + def astype(self, dtype): + return utils.astype(self, dtype) + + def reshape(self, *args): + if len(args) == 1: + if isinstance(args[0], collections.Sequence): + args = args[0] + return _reshape(self, args) + + def broadcast(self, *args): + if len(args) == 1: + if isinstance(args[0], collections.Sequence): + args = args[0] + return _broadcast(self, args) + + def transpose(self, *args): + if not args: + args = reversed(range(self.ndim)) + elif len(args) == 1: + if isinstance(args[0], collections.Sequence): + args = args[0] + return _transpose(self, args) + + def flatten(self): + return self.reshape(-1) + + sum = _reduce("SUM") + prod = _reduce("PRODUCT") + min = _reduce("MIN") + max = _reduce("MAX") + mean = _reduce("MEAN") + + +class GenericTensorWrapper(ArrayMethodMixin, TensorWrapperBase): + def __init__(self, data): + self.__wrapped__ = data + + def _reset(self, other): + if not isinstance(other, __class__): + raise TypeError(type(other)) + self.__wrapped__ = other.__wrapped__ + return self + + @property + def dtype(self): + return self.__wrapped__.dtype + + @property + def shape(self): + return self.__wrapped__.shape + + @property + def device(self): + return self.__wrapped__.device + + def numpy(self): + return self.__wrapped__.numpy() + + +class TensorWrapper(GenericTensorWrapper): + def __init__(self, data, dtype=None, device=None): + if isinstance(data, TensorWrapperBase): + data = data.__wrapped__ + elif not isinstance(data, TensorBase): + assert data is not None, "Cannot init a tensor with data as None" + data = Tensor(as_raw_tensor(data, dtype=dtype, device=device)) + super().__init__(data) + + def _reset(self, other): + if isinstance(other, TensorWrapperBase): + self.__wrapped__ = other.__wrapped__ + elif isinstance(other, TensorBase): + self.__wrapped__ = other + else: + self._reset(type(self)(other, dtype=self.dtype, device=self.device)) + + 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) + piece += ", device={}".format(self.device) + ")" + return piece diff --git a/imperative/python/megengine/core/tensor/utils.py b/imperative/python/megengine/core/tensor/utils.py new file mode 100644 index 00000000..a059ff8d --- /dev/null +++ b/imperative/python/megengine/core/tensor/utils.py @@ -0,0 +1,154 @@ +# -*- 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, Union + +import numpy as np + +from ..ops import builtin +from ..ops.special import Const +from ..tensor.core import OpBase, TensorBase, TensorWrapperBase, apply + + +def dtype_promotion(raw_inputs): + def add_dtype(i): + if type(i) == int: + return np.array(i, dtype=np.int32) + if type(i) == float: + return np.array(i, dtype=np.float32) + if type(i) == bool: + return np.array(i, dtype=np.bool_) + return None + + scalar_inputs = [ + add_dtype(i) for i in raw_inputs if not hasattr(i, "dtype") and add_dtype(i) + ] + inputs = [i for i in raw_inputs if hasattr(i, "dtype")] + assert len(scalar_inputs + inputs) > 0 + dtype = np.result_type(*inputs) + dtype_all = np.result_type(*(inputs + scalar_inputs)) + assert ( + dtype != np.float64 and dtype != np.int64 + ), "unsupport dtype {} by dtype_promotion, please use explict type convert".format( + dtype + ) + if dtype_all == np.bool_: + for i in raw_inputs: + if not hasattr(i, "dtype") or i.dtype != np.bool_: + raise TypeError( + "bool dtype can not be operated with an element without bool dtype" + ) + if dtype_all == np.float64: + dtype_all = np.float32 + return dtype_all + + +def get_device(inputs): + device = None + for i in inputs: + if isinstance(i, (TensorWrapperBase, TensorBase)): + if device is None: + device = i.device + elif device != i.device: + raise ValueError("ambiguous device: {} vs {}".format(device, i.device)) + assert device is not None + return device + + +def concatenate(inputs, axis=0, *, device=None): + dtype = dtype_promotion(inputs) + device = get_device(inputs) + + def convert(x): + return convert_single_value(x, inputs, dtype=dtype) + + inputs = tuple(map(convert, inputs)) + (result,) = apply(builtin.Concat(axis=axis, comp_node=device.to_c()), *inputs) + return result + + +def astype(x, dtype): + dtype = np.dtype(dtype) + if x.dtype != dtype: + (x,) = apply(builtin.TypeCvt(param=dtype), x) + return x + + +def convert_single_value(v, inputs, *, dtype=None, device=None): + tensors = [i for i in inputs if isinstance(i, (TensorBase, TensorWrapperBase))] + assert len(tensors) > 0 + if isinstance(v, (TensorWrapperBase, TensorBase)): + v = astype(v, dtype) + else: + (v,) = Const(v, dtype=dtype, device=device)(*tensors) + return v + + +def convert_inputs(*args: TensorBase): + dtype = dtype_promotion(args) + device = get_device(args) + + def convert(value): + if value is None: + return value + return convert_single_value(value, args, dtype=dtype, device=device) + + return tuple(map(convert, args)) + + +def result_type(*args): + dtypes = [] + for i in args: + if isinstance(i, (TensorWrapperBase, TensorBase)): + dtypes.append(i.dtype) + continue + try: + dtypes.append(np.dtype(i)) + except TypeError: + pass + return np.result_type(*dtypes) + + +def isscalar(x): + try: + return x.ndim == 0 + except: + pass + return np.isscalar(x) + + +def astensor1d(x, *reference, dtype=None, device=None): + """ + Convert something to 1D tensor. Support following types + * sequence of scalar literal / tensor + * numpy array + * tensor (returned as is, regardless of dtype and device) + """ + try: + ndim = x.ndim + except AttributeError: + pass + else: + if ndim != 1: + raise ValueError("ndim != 1: %d" % ndim) + if not isinstance(x, (TensorBase, TensorWrapperBase)): + (x,) = Const(x, dtype=dtype, device=device)(*reference) + return x + + if not isinstance(x, collections.Sequence): + raise TypeError + + if any(isinstance(i, (TensorBase, TensorWrapperBase)) for i in x): + x = concatenate(x, device=device) + if dtype is not None: + x = astype(x, dtype) + return x + + (x,) = Const(x, dtype=dtype, device=device)(*reference) + return x diff --git a/imperative/python/megengine/data/__init__.py b/imperative/python/megengine/data/__init__.py new file mode 100644 index 00000000..3b1e0d55 --- /dev/null +++ b/imperative/python/megengine/data/__init__.py @@ -0,0 +1,17 @@ +# -*- 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/imperative/python/megengine/data/_queue.py b/imperative/python/megengine/data/_queue.py new file mode 100644 index 00000000..a9e328c6 --- /dev/null +++ b/imperative/python/megengine/data/_queue.py @@ -0,0 +1,139 @@ +# -*- 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: + 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 + + 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) + ) + + 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() + _clear_plasma_store() + + def cancel_join_thread(self): + self.queue.cancel_join_thread() diff --git a/imperative/python/megengine/data/collator.py b/imperative/python/megengine/data/collator.py new file mode 100644 index 00000000..952fc398 --- /dev/null +++ b/imperative/python/megengine/data/collator.py @@ -0,0 +1,76 @@ +# -*- 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/imperative/python/megengine/data/dataloader.py b/imperative/python/megengine/data/dataloader.py new file mode 100644 index 00000000..1fd3482d --- /dev/null +++ b/imperative/python/megengine/data/dataloader.py @@ -0,0 +1,500 @@ +# -*- 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/imperative/python/megengine/data/dataset/__init__.py b/imperative/python/megengine/data/dataset/__init__.py new file mode 100644 index 00000000..8b70d221 --- /dev/null +++ b/imperative/python/megengine/data/dataset/__init__.py @@ -0,0 +1,10 @@ +# -*- 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/imperative/python/megengine/data/dataset/meta_dataset.py b/imperative/python/megengine/data/dataset/meta_dataset.py new file mode 100644 index 00000000..4415a427 --- /dev/null +++ b/imperative/python/megengine/data/dataset/meta_dataset.py @@ -0,0 +1,73 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/__init__.py b/imperative/python/megengine/data/dataset/vision/__init__.py new file mode 100644 index 00000000..dd2b0fc3 --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/__init__.py @@ -0,0 +1,17 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/cifar.py b/imperative/python/megengine/data/dataset/vision/cifar.py new file mode 100644 index 00000000..9ce73688 --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/cifar.py @@ -0,0 +1,171 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/cityscapes.py b/imperative/python/megengine/data/dataset/vision/cityscapes.py new file mode 100644 index 00000000..aa05ac92 --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/cityscapes.py @@ -0,0 +1,151 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/coco.py b/imperative/python/megengine/data/dataset/vision/coco.py new file mode 100644 index 00000000..d247e52b --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/coco.py @@ -0,0 +1,366 @@ +# -*- 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(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/imperative/python/megengine/data/dataset/vision/folder.py b/imperative/python/megengine/data/dataset/vision/folder.py new file mode 100644 index 00000000..7124ef56 --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/folder.py @@ -0,0 +1,90 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/imagenet.py b/imperative/python/megengine/data/dataset/vision/imagenet.py new file mode 100644 index 00000000..94c2396c --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/imagenet.py @@ -0,0 +1,248 @@ +# -*- 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 ....distributed.group import is_distributed +from ....logger import get_logger +from ....serialization import load, save +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/imperative/python/megengine/data/dataset/vision/meta_vision.py b/imperative/python/megengine/data/dataset/vision/meta_vision.py new file mode 100644 index 00000000..6d03d3ed --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/meta_vision.py @@ -0,0 +1,41 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/mnist.py b/imperative/python/megengine/data/dataset/vision/mnist.py new file mode 100644 index 00000000..5e89a314 --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/mnist.py @@ -0,0 +1,197 @@ +# -*- 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/imperative/python/megengine/data/dataset/vision/objects365.py b/imperative/python/megengine/data/dataset/vision/objects365.py new file mode 100644 index 00000000..7c1481ba --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/objects365.py @@ -0,0 +1,498 @@ +# -*- 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(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/imperative/python/megengine/data/dataset/vision/utils.py b/imperative/python/megengine/data/dataset/vision/utils.py new file mode 100644 index 00000000..9a028d9c --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/utils.py @@ -0,0 +1,89 @@ +# -*- 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.group 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/imperative/python/megengine/data/dataset/vision/voc.py b/imperative/python/megengine/data/dataset/vision/voc.py new file mode 100644 index 00000000..42bf712d --- /dev/null +++ b/imperative/python/megengine/data/dataset/vision/voc.py @@ -0,0 +1,195 @@ +# -*- 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 + + 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": + if image is None: + image = cv2.imread(self.images[index], cv2.IMREAD_COLOR) + info = [image.shape[0], image.shape[1], self.file_names[index]] + target.append(info) + else: + raise NotImplementedError + + return tuple(target) + + def __len__(self): + return len(self.images) + + 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", + ) + class_colors = [ + [0, 0, 128], + [0, 128, 0], + [0, 128, 128], + [128, 0, 0], + [128, 0, 128], + [128, 128, 0], + [128, 128, 128], + [0, 0, 64], + [0, 0, 192], + [0, 128, 64], + [0, 128, 192], + [128, 0, 64], + [128, 0, 192], + [128, 128, 64], + [128, 128, 192], + [0, 64, 0], + [0, 64, 128], + [0, 192, 0], + [0, 192, 128], + [128, 64, 0], + ] diff --git a/imperative/python/megengine/data/sampler.py b/imperative/python/megengine/data/sampler.py new file mode 100644 index 00000000..dbd5d3a3 --- /dev/null +++ b/imperative/python/megengine/data/sampler.py @@ -0,0 +1,274 @@ +# -*- 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/imperative/python/megengine/data/transform/__init__.py b/imperative/python/megengine/data/transform/__init__.py new file mode 100644 index 00000000..30424cbc --- /dev/null +++ b/imperative/python/megengine/data/transform/__init__.py @@ -0,0 +1,10 @@ +# -*- 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/imperative/python/megengine/data/transform/meta_transform.py b/imperative/python/megengine/data/transform/meta_transform.py new file mode 100644 index 00000000..d7fd4f47 --- /dev/null +++ b/imperative/python/megengine/data/transform/meta_transform.py @@ -0,0 +1,31 @@ +# -*- 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/imperative/python/megengine/data/transform/vision/__init__.py b/imperative/python/megengine/data/transform/vision/__init__.py new file mode 100644 index 00000000..d90c9e98 --- /dev/null +++ b/imperative/python/megengine/data/transform/vision/__init__.py @@ -0,0 +1,9 @@ +# -*- 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/imperative/python/megengine/data/transform/vision/functional.py b/imperative/python/megengine/data/transform/vision/functional.py new file mode 100644 index 00000000..e2f4e512 --- /dev/null +++ b/imperative/python/megengine/data/transform/vision/functional.py @@ -0,0 +1,111 @@ +# -*- 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/imperative/python/megengine/data/transform/vision/transform.py b/imperative/python/megengine/data/transform/vision/transform.py new file mode 100644 index 00000000..bf3834a9 --- /dev/null +++ b/imperative/python/megengine/data/transform/vision/transform.py @@ -0,0 +1,1025 @@ +# -*- 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/imperative/python/megengine/device.py b/imperative/python/megengine/device.py new file mode 100644 index 00000000..008920fe --- /dev/null +++ b/imperative/python/megengine/device.py @@ -0,0 +1,89 @@ +# -*- 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 + +from .core._imperative_rt.common import CompNode, DeviceType + +__all__ = [ + "is_cuda_available", + "get_device_count", + "get_default_device", + "set_default_device", +] + +_default_device = os.getenv("MGE_DEFAULT_DEVICE", "xpux") + + +def _valid_device(inp): + if isinstance(inp, str) and len(inp) == 4: + if inp[0] in {"x", "c", "g"} and inp[1:3] == "pu": + if inp[3] == "x" or inp[3].isdigit(): + return True + return False + + +def _str2device_type(type_str: str, allow_unspec: bool = True): + type_str = type_str.upper() + if type_str == "CPU": + return DeviceType.CPU + elif type_str == "GPU" or type_str == "CUDA": + return DeviceType.CUDA + else: + assert allow_unspec and str == "XPU", "bad device type" + return DeviceType.UNSPEC + + +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 + ) + device_type = _str2device_type(device_type) + return CompNode._get_device_count(device_type, False) + + +def is_cuda_available() -> bool: + """Returns whether cuda device is available on this system. + + """ + t = _str2device_type("gpu") + return CompNode._get_device_count(t, 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 'gpux' 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 + assert _valid_device(device), "Invalid device name {}".format(device) + _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/imperative/python/megengine/distributed/__init__.py b/imperative/python/megengine/distributed/__init__.py new file mode 100644 index 00000000..30e0766f --- /dev/null +++ b/imperative/python/megengine/distributed/__init__.py @@ -0,0 +1,25 @@ +# -*- 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 .group import ( + WORLD, + get_backend, + get_client, + get_mm_server_addr, + get_py_server_addr, + get_rank, + get_world_size, + group_barrier, + init_process_group, + is_distributed, + new_group, +) +from .helper import synchronized +from .launcher import launcher +from .server import Client, Server +from .util import get_free_ports diff --git a/imperative/python/megengine/distributed/group.py b/imperative/python/megengine/distributed/group.py new file mode 100644 index 00000000..2e60a4d5 --- /dev/null +++ b/imperative/python/megengine/distributed/group.py @@ -0,0 +1,176 @@ +# -*- 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, Optional, Tuple + +from ..device import set_default_device +from .server import Client, Server + + +class StaticData: + server = None + client = None + master_ip = None + py_server_port = None + mm_server_port = None + world_size = None + proc_rank = None + device = None + backend = None + next_stream = None + + +_sd = None + + +class Group: + def __init__(self, proc_ranks): + if len(proc_ranks) == 0: # empty group + self.proc_ranks = None + self.stream = None + else: + self.reset(proc_ranks) + + def reset(self, proc_ranks): + self.check(proc_ranks) + self.proc_ranks = proc_ranks + self.stream = _sd.next_stream + _sd.next_stream += 1 + + def check(self, proc_ranks): + assert _sd is not None, "please call init_process_group first" + for rank in proc_ranks: + assert isinstance(rank, int) + assert rank >= 0 and rank < _sd.world_size + assert _sd.proc_rank in proc_ranks + + @property + def size(self): + assert len(self.proc_ranks) > 0, "invalid group" + return len(self.proc_ranks) + + @property + def key(self): + assert len(self.proc_ranks) > 0, "invalid group" + return ",".join(map(str, self.proc_ranks)) + + @property + def rank(self): + assert len(self.proc_ranks) > 0, "invalid group" + return self.proc_ranks.index(_sd.proc_rank) + + @property + def comp_node(self): + assert len(self.proc_ranks) > 0, "invalid group" + return "gpu{}:{}".format(_sd.device, self.stream) + + +WORLD = Group([]) + + +def init_process_group( + master_ip: str, + port: int, + world_size: int, + rank: int, + device: int, + backend: Optional[str] = "nccl", +) -> None: + """Initialize the distributed process group and specify the device used in the current process + + :param master_ip: IP address of the master node + :param 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 device: The GPU device id to bind this process to + :param backend: Communicator backend, currently support 'nccl' and 'ucx' + """ + if not isinstance(master_ip, str): + raise TypeError("Expect type str but got {}".format(type(master_ip))) + if not isinstance(port, int): + raise TypeError("Expect type int but got {}".format(type(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(device, int): + raise TypeError("Expect type int but got {}".format(type(backend))) + if not isinstance(backend, str): + raise TypeError("Expect type str but got {}".format(type(backend))) + + global _sd + assert _sd is None, "init_process_group should be called only once" + _sd = StaticData() + + assert world_size > 1 + assert rank >= 0 and rank < world_size + assert port > 0 + + _sd.client = Client(master_ip, port) + _sd.master_ip = master_ip + _sd.py_server_port = port + _sd.mm_server_port = _sd.client.get_mm_server_port() + _sd.world_size = world_size + _sd.proc_rank = rank + _sd.device = device + _sd.backend = backend + _sd.next_stream = 1 + + WORLD.reset(list(range(world_size))) + + set_default_device("gpu{}".format(device)) + + +def is_distributed() -> bool: + """Return True if the distributed process group has been initialized""" + return _sd is not None + + +def get_rank() -> int: + """Get the rank of the current process""" + return _sd.proc_rank if _sd is not None else 0 + + +def get_world_size() -> int: + """Get the total number of processes participating in the job""" + return _sd.world_size if _sd is not None else 1 + + +def get_backend() -> str: + """Get the backend str""" + assert _sd is not None, "please call init_process_group first" + return _sd.backend if _sd is not None else None + + +def get_py_server_addr() -> Tuple[str, int]: + """Get master_ip and port of python XML RPC server""" + assert _sd is not None, "please call init_process_group first" + return _sd.master_ip, _sd.py_server_port + + +def get_mm_server_addr() -> Tuple[str, int]: + """Get master_ip and port of C++ mm_server""" + assert _sd is not None, "please call init_process_group first" + return _sd.master_ip, _sd.mm_server_port + + +def get_client() -> Client: + """Get client of python XML RPC server""" + assert _sd is not None, "please call init_process_group first" + return _sd.client + + +def new_group(proc_ranks: List[int]) -> Group: + """Build a subgroup containing certain ranks""" + return Group(proc_ranks) + + +def group_barrier(group: Optional[Group] = WORLD) -> None: + """Block until all ranks in the group reach this barrier""" + assert isinstance(group, Group) + _sd.client.group_barrier(group.key, group.size) diff --git a/imperative/python/megengine/distributed/helper.py b/imperative/python/megengine/distributed/helper.py new file mode 100644 index 00000000..f56cddc0 --- /dev/null +++ b/imperative/python/megengine/distributed/helper.py @@ -0,0 +1,28 @@ +# -*- 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 Callable + +from .group import group_barrier, is_distributed + + +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 diff --git a/imperative/python/megengine/distributed/launcher.py b/imperative/python/megengine/distributed/launcher.py new file mode 100644 index 00000000..152180ab --- /dev/null +++ b/imperative/python/megengine/distributed/launcher.py @@ -0,0 +1,68 @@ +# -*- 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 + +from ..device import get_device_count +from .group import init_process_group +from .server import Server +from .util import get_free_ports + + +def _get_device_count(): + """use subprocess to avoid cuda environment initialization in the main process""" + + def run(q): + count = get_device_count("gpu") + q.put(count) + + q = mp.Queue() + p = mp.Process(target=run, args=(q,)) + p.start() + p.join() + return q.get() + + +def _run_wrapped(func, master_ip, port, world_size, rank, dev, args, kwargs): + """init distributed process group and run wrapped function""" + init_process_group( + master_ip=master_ip, port=port, world_size=world_size, rank=rank, device=dev + ) + func(*args, **kwargs) + + +def launcher(n_gpus): + """decorator for launching multiple processes in single-machine multi-gpu training""" + + count = _get_device_count() + assert isinstance(n_gpus, int) and n_gpus > 1, "invalid n_gpus" + assert n_gpus <= count, "{} gpus required, {} gpus provided".format(n_gpus, count) + + def decorator(func): + def wrapper(*args, **kwargs): + master_ip = "localhost" + port = get_free_ports(1)[0] + server = Server(port) + + procs = [] + for rank in range(n_gpus): + p = mp.Process( + target=_run_wrapped, + args=(func, master_ip, port, n_gpus, rank, rank, args, kwargs), + ) + p.start() + procs.append(p) + + for rank in range(n_gpus): + procs[rank].join() + code = procs[rank].exitcode + assert code == 0, "subprocess {} exit with code {}".format(rank, code) + + return wrapper + + return decorator diff --git a/imperative/python/megengine/distributed/server.py b/imperative/python/megengine/distributed/server.py new file mode 100644 index 00000000..d3d81120 --- /dev/null +++ b/imperative/python/megengine/distributed/server.py @@ -0,0 +1,170 @@ +# -*- 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 threading +import time +from collections import defaultdict +from functools import partial +from socketserver import ThreadingMixIn +from xmlrpc.client import ServerProxy +from xmlrpc.server import SimpleXMLRPCServer + +from ..core._imperative_rt.utils import create_mm_server +from .util import get_free_ports + + +class Future: + def __init__(self, ack=True): + self.ready = threading.Event() + self.ack = threading.Event() if ack else None + + def set(self, value): + self.value = value + self.ready.set() + if self.ack: + self.ack.wait() + + def get(self): + self.ready.wait() + if self.ack: + self.ack.set() + return self.value + + +class Methods: + def __init__(self, mm_server_port): + self.lock = threading.Lock() + self.mm_server_port = mm_server_port + self.dict_is_grad = defaultdict(partial(Future, True)) + self.dict_remote_tracer = defaultdict(partial(Future, True)) + self.dict_pack_list = defaultdict(partial(Future, False)) + self.dict_barrier_counter = defaultdict(int) + self.dict_barrier_event = defaultdict(threading.Event) + + def connect(self): + return True + + def get_mm_server_port(self): + return self.mm_server_port + + def set_is_grad(self, rank_peer, is_grad): + with self.lock: + future = self.dict_is_grad[rank_peer] + future.set(is_grad) + return True + + def check_is_grad(self, rank_peer): + with self.lock: + future = self.dict_is_grad[rank_peer] + ret = future.get() + with self.lock: + del self.dict_is_grad[rank_peer] + return ret + + def set_remote_tracer(self, rank_peer, tracer_set): + with self.lock: + future = self.dict_remote_tracer[rank_peer] + future.set(tracer_set) + return True + + def check_remote_tracer(self, rank_peer): + with self.lock: + future = self.dict_remote_tracer[rank_peer] + ret = future.get() + with self.lock: + del self.dict_remote_tracer[rank_peer] + return ret + + def set_pack_list(self, key, pack_list): + with self.lock: + future = self.dict_pack_list[key] + future.set(pack_list) + return True + + def get_pack_list(self, key): + with self.lock: + future = self.dict_pack_list[key] + return future.get() + + def group_barrier(self, key, size): + with self.lock: + self.dict_barrier_counter[key] += 1 + counter = self.dict_barrier_counter[key] + event = self.dict_barrier_event[key] + if counter == size: + del self.dict_barrier_counter[key] + del self.dict_barrier_event[key] + event.set() + else: + event.wait() + return True + + +class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer): + pass + + +def start_server(py_server_port, mm_server_port): + server = ThreadXMLRPCServer(("0.0.0.0", py_server_port), logRequests=False) + server.register_instance(Methods(mm_server_port)) + server.serve_forever() + + +class Server: + def __init__(self, port): + self.py_server_port = get_free_ports(1)[0] if port == 0 else port + self.mm_server_port = create_mm_server("0.0.0.0", 0) + self.proc = mp.Process( + target=start_server, + args=(self.py_server_port, self.mm_server_port), + daemon=True, + ) + self.proc.start() + + +class Client: + def __init__(self, master_ip, port): + self.master_ip = master_ip + self.port = port + self.connect() + + def connect(self): + while True: + try: + self.proxy = ServerProxy( + "http://{}:{}".format(self.master_ip, self.port) + ) + if self.proxy.connect(): + break + except: + time.sleep(1) + + def get_mm_server_port(self): + return self.proxy.get_mm_server_port() + + def set_is_grad(self, rank_peer, is_grad): + self.proxy.set_is_grad(rank_peer, is_grad) + + def check_is_grad(self, rank_peer): + return self.proxy.check_is_grad(rank_peer) + + def set_remote_tracer(self, rank_peer, tracer_set): + self.proxy.set_remote_tracer(rank_peer, tracer_set) + + def check_remote_tracer(self, rank_peer): + return self.proxy.check_remote_tracer(rank_peer) + + def set_pack_list(self, key, pack_list): + self.proxy.set_pack_list(key, pack_list) + + def get_pack_list(self, key): + return self.proxy.get_pack_list(key) + + def group_barrier(self, key, size): + self.proxy.group_barrier(key, size) diff --git a/imperative/python/megengine/distributed/util.py b/imperative/python/megengine/distributed/util.py new file mode 100644 index 00000000..b3a0a2aa --- /dev/null +++ b/imperative/python/megengine/distributed/util.py @@ -0,0 +1,25 @@ +# -*- 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 List + + +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/imperative/python/megengine/functional/__init__.py b/imperative/python/megengine/functional/__init__.py new file mode 100644 index 00000000..14fef9b3 --- /dev/null +++ b/imperative/python/megengine/functional/__init__.py @@ -0,0 +1,32 @@ +# -*- 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 . import distributed +from .elemwise import * +from .graph import add_update +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 * +from .nn import * +from .quantized import conv_bias_activation +from .tensor import * +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/imperative/python/megengine/functional/debug_param.py b/imperative/python/megengine/functional/debug_param.py new file mode 100644 index 00000000..b27f4b4b --- /dev/null +++ b/imperative/python/megengine/functional/debug_param.py @@ -0,0 +1,49 @@ +# -*- 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/imperative/python/megengine/functional/distributed.py b/imperative/python/megengine/functional/distributed.py new file mode 100644 index 00000000..92e93f84 --- /dev/null +++ b/imperative/python/megengine/functional/distributed.py @@ -0,0 +1,299 @@ +# -*- 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, Tuple + +from ..core._imperative_rt.ops import CollectiveCommDefModeEnum +from ..core.autodiff.builtin_op_utils import builtin_op_get_backward_fn +from ..core.autodiff.grad import ( + Tracer, + check_backward_allow_noinput, + get_grad_managers, + get_op_has_grad_fn, + tracer_apply, +) +from ..core.ops.builtin import CollectiveComm, Copy, RemoteRecv, RemoteSend +from ..core.tensor.core import apply +from ..core.tensor.tensor import Tensor, tensor_apply +from ..distributed.group import ( + WORLD, + Group, + get_backend, + get_client, + get_mm_server_addr, + get_rank, +) +from ..tensor import tensor + +__all__ = [ + "reduce_sum", + "broadcast", + "all_gather", + "reduce_scatter_sum", + "all_reduce_sum", + "all_reduce_max", + "all_reduce_min", + "gather", + "scatter", + "all_to_all", + "remote_send", + "remote_recv", +] + + +@apply.add +def _(op: RemoteSend, *args: Tensor): + ret = tensor_apply(op, *args) + + # set extra information + tracer_set = dict() + for k in set().union(*(i._extra_data for i in args if isinstance(i, Tensor))): + tracer_set[k.name] = True + + # check tracer_set in remote_recv + get_client().set_remote_tracer(op.key, tracer_set) + return ret + + +@builtin_op_get_backward_fn.register(RemoteSend) +def _(op: RemoteSend, inputs, outputs, input_requires_grad): + def backward(*args): + return [ + remote_recv( + op.rank_to, inputs[0].shape, inputs[0].dtype, str(inputs[0].device) + ) + ] + + return backward, [True] + + +@get_op_has_grad_fn.register(RemoteSend) +def _(op: RemoteSend): + def has_grad(opnode, reached): + return get_client().check_is_grad(op.key) + + return has_grad + + +@check_backward_allow_noinput.register(RemoteSend) +def _(op: RemoteSend): + return True + + +@builtin_op_get_backward_fn.register(RemoteRecv) +def _(op: RemoteRecv, inputs, outputs, input_requires_grad): + def backward(*output_grads): + return [remote_send(output_grads[0], op.rank_from)] + + return backward, [True] + + +@get_op_has_grad_fn.register(RemoteRecv) +def _(op: RemoteRecv): + def has_grad(opnode, reached): + ret = False + for v in opnode.outputs: + if v() in reached: + ret = True + break + get_client().set_is_grad(op.key, ret) + return ret + + return has_grad + + +def collective_comm(inp, mode, group, device): + """Helper function for applying collective communication functions""" + assert isinstance(group, Group) + if group is None: + return inp + op = CollectiveComm() + op.key = group.key + op.nr_devices = group.size + op.rank = group.rank + op.is_root = op.rank == 0 + op.local_grad = False + op.addr, op.port = get_mm_server_addr() + op.mode = mode + op.dtype = inp.dtype + op.backend = get_backend() + op.comp_node = device + return apply(op, inp)[0] + + +def reduce_sum( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create reduce_sum operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.REDUCE_SUM + return collective_comm(inp, mode, group, device) + + +def broadcast( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create broadcast operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.BROADCAST + return collective_comm(inp, mode, group, device) + + +def all_gather( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create all_gather operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.ALL_GATHER + return collective_comm(inp, mode, group, device) + + +def reduce_scatter_sum( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create reduce_scatter_sum operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.REDUCE_SCATTER_SUM + return collective_comm(inp, mode, group, device) + + +def all_reduce_sum( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create all_reduce_sum operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.ALL_REDUCE_SUM + return collective_comm(inp, mode, group, device) + + +def all_reduce_max( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create all_reduce_max operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.ALL_REDUCE_MAX + return collective_comm(inp, mode, group, device) + + +def all_reduce_min( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create all_reduce_min operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.ALL_REDUCE_MIN + return collective_comm(inp, mode, group, device) + + +def gather( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create gather operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.GATHER + return collective_comm(inp, mode, group, device) + + +def scatter( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create scatter operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.SCATTER + return collective_comm(inp, mode, group, device) + + +def all_to_all( + inp: Tensor, group: Optional[Group] = WORLD, device: Optional[str] = "" +) -> Tensor: + """Create all_to_all operator for collective communication + + :param inp: input tensor + :param group: communication group + :param device: execute placement + """ + mode = CollectiveCommDefModeEnum.ALL_TO_ALL + return collective_comm(inp, mode, group, device) + + +def remote_send(inp: Tensor, dest_rank: int) -> Tensor: + """Send a Tensor to a remote process + + :param inp: tensor to send + :param dest_rank: destination process rank + """ + op = RemoteSend() + op.key = "{}->{}".format(get_rank(), dest_rank) + op.addr, op.port = get_mm_server_addr() + op.rank_to = dest_rank + return apply(op, inp)[0] + + +def remote_recv( + src_rank: int, shape: Tuple[int], dtype: type, cn: Optional[str] = "gpu0" +) -> Tensor: + """Receive a Tensor from a remote process + + :param src_rank: source process rank + :param shape: the shape of the tensor to receive + :param dtype: the data type of the tensor to receive + :param cn: the comp node to place the received tensor + """ + key = "{}->{}".format(src_rank, get_rank()) + + # dummpy input + inp = tensor([0]) + tracer_set = get_client().check_remote_tracer(key) + for grad_manager in get_grad_managers(): + if grad_manager.name in tracer_set: + grad_manager.wrt(inp) + + op = RemoteRecv() + op.key = key + op.cn = cn + op.shape = shape + op.dtype = dtype + op.addr, op.port = get_mm_server_addr() + op.rank_from = src_rank + + return apply(op, inp)[0] diff --git a/imperative/python/megengine/functional/elemwise.py b/imperative/python/megengine/functional/elemwise.py new file mode 100644 index 00000000..3b8ac1f0 --- /dev/null +++ b/imperative/python/megengine/functional/elemwise.py @@ -0,0 +1,481 @@ +# -*- 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 + +from ..core.ops import builtin +from ..core.tensor import utils +from ..core.tensor.core import apply +from ..tensor import Tensor + +__all__ = [ + "abs", + "add", + "acos", + "asin", + "atan", + "atan2", + "asinh", + "acosh", + "atanh", + "bitwise_and", # TODO + "bitwise_not", # TODO + "bitwise_or", # TODO + "bitwise_xor", # TODO + "ceil", + "clamp", + "cos", + "cosh", + "div", + "eq", + "exp", + "expm1", + "floor", + "floor_div", + "gt", + "ge", + "hswish", + "hsigmoid", + "left_shift", + "lt", + "le", + "log", + "log1p", + "logical_and", + "logical_not", + "logical_or", + "logical_xor", + "maximum", + "minimum", + "mod", + "mul", + "neg", + "ne", + "pow", + "relu", + "relu6", + "right_shift", + "round", + "sigmoid", + "sin", + "sinh", + "sqrt", + "square", + "sub", + "tan", + "tanh", + "fast_tanh", +] + + +def _elwise(*args, mode): + op = builtin.Elemwise(mode=mode) + args = utils.convert_inputs(*args) + (result,) = apply(op, *args) + return result + + +def _logical(*args, mode): + op = builtin.CondExecPredLogical(mode=mode) + args = utils.convert_inputs(*args) + (result,) = apply(op, *args) + return result + + +def _elemwise_multi_type(*args, mode, **kwargs): + op = builtin.ElemwiseMultiType(mode=mode, **kwargs) + args = utils.convert_inputs(*args) + (result,) = apply(op, *args) + return result + + +# math operations + + +def add(x, y): + """Element-wise addition. + At least one operand should be tensor. + same for sub/mul/div/floor_div/pow/mod/atan2/eq/ne/lt/le/gt/ge/maximum/minmium. + """ + return _elwise(x, y, mode="add") + + +def sub(x, y): + """Element-wise subtract.""" + return _elwise(x, y, mode="sub") + + +def mul(x, y): + """Element-wise multiplication.""" + return _elwise(x, y, mode="mul") + + +def div(x, y): + """Element-wise (x / y).""" + return _elwise(x, y, mode="true_div") + + +def floor_div(x, y): + """Element-wise floor(x / y).""" + return _elwise(x, y, mode="floor_divide") + + +def neg(x): + """Element-wise negation.""" + return _elwise(x, mode="negate") + + +def pow(x, y): + """Element-wise power.""" + return _elwise(x, y, mode="pow") + + +def mod(x, y): + """Element-wise remainder of division.""" + return _elwise(x, y, mode="mod") + + +def abs(x): + """Element-wise absolute value.""" + return _elwise(x, mode="abs") + + +def exp(x): + """Element-wise exponential.""" + return _elwise(x, mode="exp") + + +def expm1(x): + """Element-wise exp(x)-1.""" + return _elwise(x, mode="expm1") + + +def log(x): + """Element-wise logarithm (base `e`).""" + return _elwise(x, mode="log") + + +def log1p(x): + """Element-wise log(x+1) (base `e`).""" + return _elwise(x, mode="log1p") + + +def sqrt(inp: Tensor) -> Tensor: + """ + Return a new tensor with the square-root of the elements of ``inp``. + For negative value, return nan. + + :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 inp ** 0.5 + + +def square(inp: Tensor) -> Tensor: + """ + Return a new tensor with the square 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.square(data) + print(out.numpy()) + + Outputs: + + .. testoutput:: + + [[0. 1. 4.] + [9. 16. 25.]] + + """ + return inp ** 2 + + +def round(x): + """Round tensor to int element-wise.""" + return _elwise(x, mode="round") + + +def ceil(x): + """Return the ceil of the input, element-wise.""" + return _elwise(x, mode="ceil") + + +def floor(x): + """Calculate the floor element-wise""" + return _elwise(x, mode="floor") + + +# trigonometric functions + + +def cos(x): + """Cosine, element-wise.""" + return _elwise(x, mode="cos") + + +def sin(x): + """Sine, element-wise.""" + return _elwise(x, mode="sin") + + +def tan(x): + return sin(x) / cos(x) + + +def acos(x): + """Inverse cosine, element-wise.""" + return _elwise(x, mode="acos") + + +def asin(x): + """Inverse sine, element-wise.""" + return _elwise(x, mode="asin") + + +def atan(x): + return _elwise(x, 1, mode="atan2") + + +def atan2(y, x): + return _elwise(y, x, mode="atan2") + + +def cosh(x): + r"""Compute element-wise hyperbolic cosine.""" + return 0.5 * (exp(x) + exp(-x)) + + +def sinh(x): + r"""Compute element-wise hyperbolic sine.""" + u = expm1(x) + return 0.5 * u / (u + 1) * (u + 2) + + +def tanh(x): + r"""Compute element-wise hyperbolic tangent.""" + return _elwise(x, mode="tanh") + + +def asinh(x): + r"""Compute element-wise inverse hyperbolic sine.""" + return log(x + (x ** 2 + 1) ** 0.5) + + +def acosh(x): + r"""Compute element-wise inverse hyperbolic cosine.""" + return log(x + (x ** 2 - 1) ** 0.5) + + +def atanh(x): + r"""Compute element-wise inverse hyperbolic tangent.""" + return log1p(2 * x / (1 - x)) / 2 + + +def fast_tanh(x): + r"""Compute element-wise fast tanh; this is an approximation: + + .. math:: + \text{fast_tanh}(x) = x * (27. + x * x) / (27. + 9. * x * x) + """ + return _elwise(x, mode="fast_tanh") + + +# bit-twiddling functions + + +def left_shift(x, y): + return _elwise(x, y, mode="shl") + + +def right_shift(x, y): + return _elwise(x, y, mode="shl") + + +def bitwise_and(x, y): + raise NotImplementedError + + +def bitwise_not(x): + raise NotImplementedError + + +def bitwise_or(x, y): + raise NotImplementedError + + +def bitwise_xor(x, y): + raise NotImplementedError + + +# logical functions + + +def logical_and(x, y): + return _elwise(x, y, mode="AND") + + +def logical_not(x): + return _elwise(x, mode="NOT") + + +def logical_or(x, y): + return _elwise(x, y, mode="OR") + + +def logical_xor(x, y): + return _elwise(x, y, mode="XOR") + + +# comparison functions + + +def eq(x, y): + """Return (x == y) element-wise.""" + return _elwise(x, y, mode="eq") + + +def ne(x, y): + return x != y + + +def lt(x, y): + """Return (x < y) element-wise.""" + return _elwise(x, y, mode="lt") + + +def le(x, y): + """Return (x =< y) element-wise.""" + return _elwise(x, y, mode="leq") + + +def gt(x, y): + """Return (x > y) element-wise.""" + return _elwise(y, x, mode="lt") + + +def ge(x, y): + """Return (x >= y) element-wise""" + return _elwise(y, x, mode="leq") + + +def hswish(x): + """Return x * relu6(x + 3) / 6 element-wise""" + return _elwise(x, mode="h_swish") + + +def hsigmoid(x): + """Return relu6(x + 3) / 6 element-wise""" + return relu6(x + 3) / 6 + + +def relu(x): + """Return `max(x, 0)` element-wise.""" + return _elwise(x, mode="relu") + + +def relu6(x): + """Return min(max(x, 0), 6) element-wise.""" + return minimum(maximum(x, 0), 6) + + +def sigmoid(x): + """Return 1 / ( 1 + exp( -x ) ) element-wise.""" + return _elwise(x, mode="sigmoid") + + +def maximum(x, y): + """Element-wise maximum of array elements.""" + return _elwise(x, y, mode="max") + + +def minimum(x, y): + """Element-wise minimum of array elements.""" + return _elwise(x, y, mode="min") + + +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) diff --git a/imperative/python/megengine/functional/external.py b/imperative/python/megengine/functional/external.py new file mode 100644 index 00000000..6411be0a --- /dev/null +++ b/imperative/python/megengine/functional/external.py @@ -0,0 +1,44 @@ +# -*- 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 + +from ..core import 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 + """ + raise NotImplementedError + + +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 + """ + raise NotImplementedError diff --git a/imperative/python/megengine/functional/graph.py b/imperative/python/megengine/functional/graph.py new file mode 100644 index 00000000..54009172 --- /dev/null +++ b/imperative/python/megengine/functional/graph.py @@ -0,0 +1,41 @@ +# -*- 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 + +from ..core.tensor import Tensor + + +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 beta is not None and beta != 1.0: + delta = delta * beta + if bias is not None and bias != 0.0: + delta = delta + bias + if alpha is not None and alpha != 1.0: + dest *= alpha + dest += delta + return dest diff --git a/imperative/python/megengine/functional/loss.py b/imperative/python/megengine/functional/loss.py new file mode 100644 index 00000000..400065d4 --- /dev/null +++ b/imperative/python/megengine/functional/loss.py @@ -0,0 +1,388 @@ +# -*- 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 ..tensor import Tensor +from .elemwise import abs, eq, exp, log, maximum, pow, 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] + + """ + raise NotImplementedError + # 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.shape[axis] + + # Denominator of the softmax + offset = pred.max(axis=axis).detach() + pred = pred - offset + down = exp(pred).sum(axis=axis) + + up = pred[np.arange(pred.shape[0]), label] + + if label_smooth != 0: + factor = label_smooth / num_classes + up = up * (1 - label_smooth) + pred.sum(axis=axis) * 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. + + """ + assert pred.shape == label.shape + + 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] + + """ + raise NotImplementedError + # 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_i_j*y_i_j)) + + :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]], dtype="float32") + label = tensor([[1, -1, -1], [-1, 1, 1]], dtype="float32") + + 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] + """ + raise NotImplementedError + # 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/imperative/python/megengine/functional/math.py b/imperative/python/megengine/functional/math.py new file mode 100644 index 00000000..3483ad81 --- /dev/null +++ b/imperative/python/megengine/functional/math.py @@ -0,0 +1,696 @@ +# -*- 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 +import math +import numbers +from typing import Optional, Sequence, Tuple, Union + +from ..core.ops import builtin +from ..core.ops._internal import param_defs as P +from ..core.tensor import utils +from ..core.tensor.core import apply +from ..tensor import Tensor +from .elemwise import clamp, exp, log, log1p +from .tensor import remove_axis, reshape + +__all__ = [ + "all", # TODO + "all_close", # TODO + "any", # TODO + "argmax", + "argmin", + "argsort", + "isinf", + "isnan", # TODO + "max", + "mean", + "median", # TODO + "min", + "norm", + "normalize", + "prod", + "sign", # TODO + "sort", + "std", + "sum", + "topk", + "unique", # TODO + "var", +] + + +def all(inp): + raise NotImplementedError + + +def all_close(inp): + raise NotImplementedError + + +def any(inp): + raise NotImplementedError + + +def unique(inp): + raise NotImplementedError + + +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) + + """ + raise NotImplementedError + # 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).astype("float32") == float("inf")).astype("uint8") + + +def sign(inp: Tensor): + raise NotImplementedError + + +def _reduce( + data, + *, + mode, + axis: Optional[Union[int, Sequence[int]]] = None, + keepdims: bool = False +): + (data,) = utils.convert_inputs(data) + if axis is None: + data = data.reshape(-1) + assert not keepdims, "can not set axis=None and keepdims=True" + + op = builtin.Reduce(mode=mode, axis=0) + (result,) = apply(op, data) + elif isinstance(axis, collections.Iterable): + axis = list(axis) + axis.sort(reverse=True) + + for ai in axis: + op = builtin.Reduce(mode=mode, axis=ai) + (data,) = apply(op, data) + if not keepdims: + data = remove_axis(data, ai) + result = data + else: + op = builtin.Reduce(mode=mode, axis=axis) + (result,) = apply(op, data) + + if not keepdims: + result = remove_axis(result, axis) + + return result + + +def sum( + inp: Tensor, + axis: Optional[Union[int, Sequence[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 _reduce(inp, mode="SUM", axis=axis, keepdims=keepdims) + + +def prod( + inp: Tensor, axis: Optional[Union[int, Sequence[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 _reduce(inp, mode="PRODUCT", axis=axis, keepdims=keepdims) + + +def mean( + inp: Tensor, + axis: Optional[Union[int, Sequence[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 _reduce(inp, mode="MEAN", axis=axis, keepdims=keepdims) + + +def median( + inp: Tensor, + axis: Optional[Union[int, Sequence[int]]] = None, + keepdims: bool = False, +) -> Tensor: + raise NotImplementedError + + +def var( + inp: Tensor, + axis: Optional[Union[int, Sequence[int]]] = None, + keepdims: bool = False, +) -> Tensor: + """Returns the variance value of input tensor along + 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``. + :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.float32).reshape(2, 3)) + out = F.var(data) + print(out.numpy()) + + .. testoutput:: + + [2.9166667] + """ + if axis is None: + m = mean(inp, axis=axis, keepdims=False) + else: + m = mean(inp, axis=axis, keepdims=True) + v = inp - m + return mean(v ** 2, axis=axis, keepdims=keepdims) + + +def std( + inp: Tensor, + axis: Optional[Union[int, Sequence[int]]] = None, + keepdims: bool = False, +) -> Tensor: + """Returns the standard deviation of input tensor along + 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``. + :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.float32).reshape(2, 3)) + out = F.std(data, axis=1) + print(out.numpy()) + + .. testoutput:: + + [0.8164966 0.8164966] + """ + return var(inp, axis=axis, keepdims=keepdims) ** 0.5 + + +def min( + inp: Tensor, + axis: Optional[Union[int, Sequence[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 _reduce(inp, mode="MIN", axis=axis, keepdims=keepdims) + + +def max( + inp: Tensor, + axis: Optional[Union[int, Sequence[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 _reduce(inp, mode="MAX", axis=axis, keepdims=keepdims) + + +def norm( + inp: Tensor, + p: int = 2, + axis: Optional[Union[int, Sequence[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 + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-3, 3, dtype=np.float32).reshape(2,3)) + y = F.norm(x) + print(y.numpy()) + + .. testoutput:: + + [4.358899] + + """ + if p == 0: + return sum(inp != 0, axis=axis, keepdims=keepdims) + if p == math.inf: + return max(abs(inp)) + if p == -math.inf: + return min(abs(inp)) + return sum(abs(inp) ** p, axis=axis, keepdims=keepdims) ** (1.0 / p) + + +def argmin( + inp: Tensor, + axis: Optional[Union[int, Sequence[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] + + """ + if isinstance(axis, collections.Iterable): + axis = list(axis) + axis.sort(reverse=True) + + for ai in axis: + op = builtin.Argmin(axis=ai) + (inp,) = apply(op, inp) + + if not keepdims: + inp = remove_axis(inp, ai) + + return inp + + if axis is None: + assert not keepdims, "can not set axis=None and keepdims=True" + inp = inp.flatten() + axis = 0 + + op = builtin.Argmin(axis=axis) + (result,) = apply(op, inp) + if not keepdims: + result = remove_axis(result, axis) + return result + + +def argmax( + inp: Tensor, + axis: Optional[Union[int, Sequence[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] + + """ + if isinstance(axis, collections.Iterable): + axis = list(axis) + axis.sort(reverse=True) + + for ai in axis: + op = builtin.Argmax(axis=ai) + (inp,) = apply(op, inp) + + if not keepdims: + inp = remove_axis(inp, ai) + + return inp + + if axis is None: + assert not keepdims, "can not set axis=None and keepdims=True" + inp = inp.flatten() + axis = 0 + + op = builtin.Argmax(axis=axis) + (result,) = apply(op, inp) + if not keepdims: + result = remove_axis(result, axis) + return result + + +def normalize( + inp: Tensor, + p: int = 2, + axis: Optional[Union[int, Sequence[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, axis), lower=eps) + else: + return inp / clamp(norm(inp, p, axis, keepdims=True), lower=eps) + + +def argsort(inp: Tensor, descending: bool = False) -> 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)) + indices = F.argsort(data) + print(indices.numpy()) + + Outputs: + + .. testoutput:: + + [0 1] + + """ + assert len(inp.shape) <= 2, "Input should be 1d or 2d" + if descending: + order = P.Argsort.Order.DESCENDING + else: + order = P.Argsort.Order.ASCENDING + + op = builtin.Argsort(order=order) + if len(inp.shape) == 1: + inp = inp.reshape(1, -1) + _, result = apply(op, inp) + return result[0] + _, result = apply(op, inp) + return result + + +def sort(inp: Tensor, descending: bool = False) -> Tuple[Tensor, Tensor]: + assert len(inp.shape) <= 2, "Input should be 1d or 2d" + if descending: + order = P.Argsort.Order.DESCENDING + else: + order = P.Argsort.Order.ASCENDING + + op = builtin.Argsort(order=order) + if len(inp.shape) == 1: + inp = inp.reshape(1, -1) + tns, ind = apply(op, inp) + return tns[0], ind[0] + tns, ind = apply(op, inp) + return tns, ind + + +def topk( + 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.topk(data, 5) + print(top.numpy(), indices.numpy()) + + Outputs: + + .. testoutput:: + + [1. 2. 3. 4. 5.] [7 0 6 1 5] + + """ + if descending: + inp = -inp + + Mode = P.TopK.Mode + if kth_only: + mode = Mode.KTH_ONLY + elif no_sort: + mode = Mode.VALUE_IDX_NOSORT + else: + mode = Mode.VALUE_IDX_SORTED + op = builtin.TopK(mode=mode) + + if len(inp.shape) == 1: + inp = inp.reshape(1, -1) + res = apply(op, inp, Tensor(k, dtype="int32")) + if kth_only: + tns = res[0] + else: + tns, ind = res[0][0], res[1][0] + else: + res = apply(op, inp, Tensor(k, dtype="int32")) + if kth_only: + tns = res + else: + tns, ind = res[0], res[1] + + if descending: + tns = -tns + return tns, ind diff --git a/imperative/python/megengine/functional/nn.py b/imperative/python/megengine/functional/nn.py new file mode 100644 index 00000000..5596058d --- /dev/null +++ b/imperative/python/megengine/functional/nn.py @@ -0,0 +1,1556 @@ +# -*- 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, Sequence, Tuple, Union + +from ..core._imperative_rt import CompNode +from ..core.ops import builtin +from ..core.ops._internal import param_defs as P +from ..core.ops.special import Const +from ..core.tensor import utils +from ..core.tensor.core import apply +from ..distributed import WORLD, is_distributed +from ..random import uniform +from ..tensor import Tensor +from .debug_param import get_conv_execution_strategy +from .distributed import all_reduce_sum +from .elemwise import exp, floor, log, log1p, maximum, minimum, relu +from .math import argsort, max, sum +from .tensor import add_axis, broadcast, concat, full, remove_axis, reshape +from .types import _pair, _pair_nonzero + +__all__ = [ + "linear", + "conv2d", + "conv_transpose2d", + "local_conv2d", + "max_pool2d", + "avg_pool2d", + "prelu", + "leaky_relu", + "softplus", + "log_softmax", + "logsigmoid", + "logsumexp", + "flatten", + "softmax", + "batch_norm2d", + "sync_batch_norm", + "one_hot", + "warp_perspective", + "matmul", + "interpolate", + "dropout", + "identity", + "embedding", + "roi_pooling", + "roi_align", + "assert_equal", + "indexing_one_hot", + "dot", + "svd", + "nms", + "batched_nms", +] + + +def expand_hw(x): + # NOTE: >1d array is accepted, as long as 1 <= size <= 2 + try: + x = int(x) + return [x, x] + except (TypeError, ValueError): + pass + h, w = x + return int(h), int(w) + + +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`` + """ + ret = matmul(inp, weight, transpose_b=True) + if bias is not None: + ret += bias + return ret + + +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:`P.Convolution.Mode` + :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: + 'CROSS_CORRELATION'. + :type compute_mode: string or + :class:`P.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. + + """ + assert conv_mode == "CROSS_CORRELATION" or conv_mode.name == "CROSS_CORRELATION" + assert compute_mode == "DEFAULT" or compute_mode.name == "DEFAULT" + + stride_h, stride_w = expand_hw(stride) + pad_h, pad_w = expand_hw(padding) + dilate_h, dilate_w = expand_hw(dilation) + + Sparse = P.Convolution.Sparse + sparse_type = Sparse.DENSE if groups == 1 else Sparse.GROUP + op = builtin.Convolution( + stride_h=stride_h, + stride_w=stride_w, + pad_h=pad_h, + pad_w=pad_w, + dilate_h=dilate_h, + dilate_w=dilate_w, + strategy=get_conv_execution_strategy(), + mode=conv_mode, + compute_mode=compute_mode, + sparse=sparse_type, + ) + (output,) = apply(op, inp, weight) + if bias is not None: + output += bias + return output + + +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:`P.Convolution.Mode` + :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: + 'CROSS_CORRELATION'. + :type compute_mode: string or + :class:`P.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. + + """ + assert conv_mode == "CROSS_CORRELATION" or conv_mode.name == "CROSS_CORRELATION" + assert compute_mode == "DEFAULT" or compute_mode.name == "DEFAULT" + + if groups != 1: + raise NotImplementedError("TODO") + + stride_h, stride_w = expand_hw(stride) + pad_h, pad_w = expand_hw(padding) + dilate_h, dilate_w = expand_hw(dilation) + + op = builtin.ConvolutionBackwardData( + stride_h=stride_h, + stride_w=stride_w, + pad_h=pad_h, + pad_w=pad_w, + dilate_h=dilate_h, + dilate_w=dilate_w, + strategy=get_conv_execution_strategy(), + ) + (output,) = apply(op, inp, weight) + if bias is not None: + output += bias + return output + + +def local_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, + conv_mode="CROSS_CORRELATION", +) -> Tensor: + """Applies spatial 2D convolution over an image with untied kernels. + + Refer to :class:`~.LocalConv2d` for more information. + """ + assert conv_mode == "CROSS_CORRELATION" or conv_mode.name == "CROSS_CORRELATION" + + stride_h, stride_w = expand_hw(stride) + pad_h, pad_w = expand_hw(padding) + dilate_h, dilate_w = expand_hw(dilation) + + op = builtin.GroupLocal( + stride_h=stride_h, + stride_w=stride_w, + pad_h=pad_h, + pad_w=pad_w, + dilate_h=dilate_h, + dilate_w=dilate_w, + strategy=get_conv_execution_strategy(), + ) + (output,) = apply(op, inp, weight) + if bias is not None: + output += bias + return output + + +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 + + """ + if stride is None: + stride = kernel_size + window_h, window_w = _pair_nonzero(kernel_size) + stride_h, stride_w = _pair_nonzero(stride) + padding_h, padding_w = _pair(padding) + + op = builtin.Pooling( + window_h=window_h, + window_w=window_w, + stride_h=stride_h, + stride_w=stride_w, + pad_h=padding_h, + pad_w=padding_w, + mode="MAX", + ) + (output,) = apply(op, inp) + return output + + +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, + mode: str = "AVERAGE_COUNT_EXCLUDE_PADDING", +) -> 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 + :param mode: Whether to count padding values. Default: "AVERAGE_COUNT_EXCLUDE_PADDING" + + """ + if stride is None: + stride = kernel_size + window_h, window_w = _pair_nonzero(kernel_size) + stride_h, stride_w = _pair_nonzero(stride) + padding_h, padding_w = _pair(padding) + + op = builtin.Pooling( + window_h=window_h, + window_w=window_w, + stride_h=stride_h, + stride_w=stride_w, + pad_h=padding_h, + pad_w=padding_w, + mode=mode, + ) + (output,) = apply(op, inp) + return output + + +def prelu(inp: Tensor, weight: Tensor) -> Tensor: + r""" + Applies the element-wise PReLU function. + + Refer to :class:`~.PReLU` for more information. + """ + return maximum(inp, 0) + weight * minimum(inp, 0) + + +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 maximum(inp, 0) + negative_slope * minimum(inp, 0) + + +def softplus(inp: Tensor) -> Tensor: + r"""Applies the element-wise function: + + .. math:: + \text{softplus}(x) = \log(1 + \exp(x)) + + softplus is a smooth approximation to the ReLU function and can be used + to constrain the output of a machine to always be positive. + For numerical stability the implementation follows this transformation: + + .. math:: + \text{softplus}(x) = \log(1 + \exp(x)) + = \log(1 + \exp(-\text{abs}(x))) + \max(x, 0) + = \log1p(\exp(-\text{abs}(x))) + \text{relu}(x) + + :param inp: The input tensor + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-3, 3, dtype=np.float32)) + y = F.softplus(x) + print(y.numpy()) + + .. output:: + + [0.04858735 0.126928 0.3132617 0.6931472 1.3132617 2.126928 ] + + """ + return log1p(exp(-abs(inp))) + relu(inp) + + +def log_softmax(inp: Tensor, axis: Union[int, Sequence[int]]) -> Tensor: + r"""Applies the :math:`\log(\text{Softmax}(x))` function to an n-dimensional + input Tensor. The LogSoftmax formulation can be simplified as: + + .. math:: + \text{LogSoftmax}(x_{i}) = \log(\frac{\exp(x_i) }{ \sum_j \exp(x_j)} ) + + For numerical stability the implementation follows this transformation: + + .. math:: + \operatorname{logsoftmax}(x) + = \log (\frac{\exp (x)}{\sum_{i}(\exp (x_{i}))}) + = x - \log (\sum_{i}(\exp (x_{i}))) + = x - logsumexp(x) + + :param inp: The input tensor + :param axis: An axis along which log_softmax will be applied. + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-5, 5, dtype=np.float32)).reshape(2,5) + y = F.log_softmax(x, axis=1) + print(y.numpy()) + + .. output:: + + [[-4.4519143 -3.4519143 -2.4519143 -1.4519144 -0.4519144] + [-4.4519143 -3.4519143 -2.4519143 -1.4519144 -0.4519144]] + + """ + return inp - logsumexp(inp, axis, keepdims=True) + + +def logsigmoid(inp: Tensor) -> Tensor: + r"""Applies the element-wise function: + + .. math:: + \text{logsigmoid}(x) = \log(\frac{ 1 }{ 1 + \exp(-x)}) + = \log(1/(1 + exp(-x))) + = - \log(1 + exp(-x)) + = - \text{softplus}(-x) + + :param inp: The input tensor + + Examples: + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-5, 5, dtype=np.float32)) + y = F.logsigmoid(x) + print(y.numpy()) + + .. output:: + + [-5.0067153 -4.01815 -3.0485873 -2.126928 -1.3132617 -0.6931472 -0.3132617 -0.126928 -0.04858735 -0.01814993] + + """ + return -softplus(-inp) + + +def logsumexp( + inp: Tensor, axis: Union[int, Sequence[int]], keepdims: bool = False +) -> Tensor: + r""" + Compute the log of the sum of exponentials of inputs along the given :attr:`axis`. + The computation is numerically stabilized. + + .. math:: + + \operatorname{logsumexp}(\boldsymbol{x})= \log \sum_{j=1}^{n} \exp \left(x_{j}\right) + + For numerical stability, the implementation follows this transformation: + + .. math:: + + \operatorname{logsumexp}(\boldsymbol{x})= \log \sum_{j=1}^{n} \exp \left(x_{j}\right) + = \operatorname{logsumexp}(\boldsymbol{x})=b+\log \sum_{j=1}^{n} \exp \left(x_{j}-b\right) + + where + + .. math:: + b = \max(x_j) + + :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. + + Examples: + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-5, 5, dtype=np.float32)).reshape(2,5) + y = F.logsumexp(x, axis=1, keepdims=False) + print(y.numpy()) + + .. output:: + + [-0.5480856 4.4519143] + + """ + max_value = max(inp, axis, keepdims=True) + if keepdims: + return max_value + log(sum(exp(inp - max_value), axis, keepdims)) + else: + return remove_axis(max_value, axis=None) + log( + sum(exp(inp - max_value), axis, keepdims) + ) + + +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 + + +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. + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(-5, 5, dtype=np.float32)).reshape(2,5) + out = F.softmax(x) + print(out.numpy()) + + Outputs: + + .. testoutput:: + [[0.01165623 0.03168492 0.08612854 0.23412167 0.6364086 ] + [0.01165623 0.03168492 0.08612854 0.23412167 0.6364086 ]] + + """ + if axis is None: + axis = _get_softmax_axis(len(inp.shape)) + offset = inp.max(axis=axis).detach() + cached = exp(inp - offset) + down = sum(cached, axis=axis, keepdims=True) + return cached / down + + +def batch_norm2d( + data: Tensor, + running_mean: Tensor = None, + running_var: Tensor = None, + weight: Optional[Tensor] = None, + bias: Optional[Tensor] = None, + *, + training: bool = False, + momentum: float = 0.9, + eps: float = 1e-5, + inplace: bool = True +): + """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. + :param inplace: whether to update running_mean and running_var inplace or return new tensors + Default: True + + """ + from .tensor import expand_dims, squeeze, broadcast + + def full(value): + N, C, H, W = data.shape + (x,) = Const(value, dtype=data.dtype, device=data.device)(data) + return broadcast(x, [1, C, 1, 1]) + + def expand_or_full(x, value): + if x is None: + return full(value) + return expand_dims(x, [0, 2, 3]) + + def make_full_if_none(x, value): + if x is None: + return full(value) + return x + + has_mean = running_mean is not None + has_var = running_var is not None + + if not training: + assert has_mean, "running_mean must be provided in inference mode" + assert has_var, "running_var must be provided in inference mode" + + if has_mean and running_mean.ndim != 4: + raise ValueError + if has_var and running_var.ndim != 4: + raise ValueError + + data, weight, bias, running_mean, running_var = utils.convert_inputs( + data, weight, bias, running_mean, running_var + ) + + weight = expand_or_full(weight, 1) + bias = expand_or_full(bias, 0) + + if not training: + op = builtin.BatchNorm(fwd_mode="INFERENCE", epsilon=eps, param_dim="DIM_1C11") + ret = apply(op, data, weight, bias, running_mean, running_var)[-1] + return ret + + else: + op = builtin.BatchNorm( + avg_factor=1 - momentum, epsilon=eps, param_dim="DIM_1C11" + ) + + if has_mean or has_var: + running_mean = make_full_if_none(running_mean, 0) + running_var = make_full_if_none(running_var, 1) + new_mean, new_var, _, _, data = apply( + op, data, weight, bias, running_mean, running_var + ) + if not has_mean: + new_mean = None + if not has_var: + new_var = None + + if inplace: + if has_mean: + running_mean[...] = new_mean + if has_var: + running_var[...] = new_var + + return data + else: + return data, new_mean, new_var + else: + _, _, data, = apply(op, data, weight, bias) + return data + + +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", + group=WORLD, +) -> 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) + _channels = input.shape[1] + _ndim = len(input.shape) + _param_shape = (1, _channels) + (1,) * (_ndim - 2) + + if training: + + def _sum_on_channel(input): + return apply(builtin.Reduce(mode="SUM"), input, Tensor(_param_shape))[0] + + 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 is_distributed(): + # reduce all nodes' data to calculate mean and variance + reduce_size = full([1 for _ in range(_ndim)], reduce_size) + stat = concat([reduce_size, channel_x1s, channel_x2s], axis=1) + stat = all_reduce_sum(stat, group) + 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 = ( + maximum(channel_variance, eps) if eps_mode == "MAX" else 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: + running_mean *= momentum + running_mean += (1 - momentum) * channel_mean + channel_variance_unbiased = channel_x1s ** 2 / ( + -reduce_size * (reduce_size - 1) + ) + channel_x2s / (reduce_size - 1) + running_var *= momentum + running_var += (1 - momentum) * channel_variance_unbiased + + 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]] + + """ + raise NotImplementedError + # 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 + # ) + # ) + + +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.]]]] + + """ + op = builtin.WarpPerspective( + imode=interp_mode, bmode=border_mode, format="NCHW", border_val=border_val + ) + (result,) = apply(op, inp, M, Tensor(dsize)) + return result + + +def matmul( + inp1: Tensor, + inp2: Tensor, + transpose_a=False, + transpose_b=False, + compute_mode="DEFAULT", + format="DEFAULT", +) -> Tensor: + """ + Performs a matrix multiplication of the matrices ``inp1`` and ``inp2``. + + With different inputs dim, this function behaves differently: + + - Both 1-D tensor, simply forward to dot. + - Both 2-D tensor, normal matrix multiplication. + - If one input tensor is 1-D, matrix vector multiplication. + - If at least one tensor are 3-dimensional or >3-dimensional, the batched matrix-matrix is returned, and the tensor with smaller dimension will + be broadcasted. For example: + - inp1: `(k, m)`, inp2: `(m, p)`, return: `(k, p)` + - inp1: `(n, k, m)`, inp2: `(n, m, p)`, return: `(n, k, p)` + - inp1: `(n, k, m)`, inp2: `(m, p)`, return: `(n, k, p)` + - inp1: `(n, j, k, m)`, inp2: `(n, j, m, p)`, return: `(n, j, k, p)` + + :param inp1: The first matrix to be multiplied + :param inp2: The second matrix to be multiplied + :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(0, 6, dtype=np.float32).reshape(3, 2)) + out = F.matmul(data1, data2) + print(out.numpy()) + + Outputs: + + .. testoutput:: + + [[10. 13.] + [28. 40.]] + + """ + inp1, inp2 = utils.convert_inputs(inp1, inp2) + dim1, dim2 = inp1.ndim, inp2.ndim + if dim1 == 1 and dim2 == 1: + return dot(inp1, inp2) + + shp = None + if dim1 > 3 or dim2 > 3: + shape1, shape2 = list(inp1.shape), list(inp2.shape) + if dim1 != dim2: + if dim1 < dim2: + shape1 = shape2[: dim2 - dim1] + shape1 + inp1 = inp1.broadcast(*shape1) + else: + shape2 = shape1[: dim1 - dim2] + shape2 + inp2 = inp2.broadcast(*shape2) + reshaped_batch_size = 1 + for i in shape1[:-2]: + reshaped_batch_size *= i + inp1 = inp1.reshape(*([reshaped_batch_size] + shape1[-2:])) + inp2 = inp2.reshape(*([reshaped_batch_size] + shape2[-2:])) + op = builtin.BatchedMatrixMul( + transposeA=transpose_a, + transposeB=transpose_b, + compute_mode=compute_mode, + format=format, + ) + shp = shape1[:-1] + shape2[-1:] + elif dim1 == 3 or dim2 == 3: + if dim2 < 3: + inp2 = inp2.broadcast(*(inp1.shape[:1] + inp2.shape)) + elif dim1 < 3: + inp1 = inp1.broadcast(*(inp2.shape[:1] + inp1.shape)) + op = builtin.BatchedMatrixMul( + transposeA=transpose_a, + transposeB=transpose_b, + compute_mode=compute_mode, + format=format, + ) + else: + if dim1 == 1: + shp = (inp2.shape[1],) + inp1 = add_axis(inp1, 0) + if dim2 == 1: + shp = (inp1.shape[0],) + inp2 = add_axis(inp2, 1) + op = builtin.MatrixMul( + transposeA=transpose_a, + transposeB=transpose_b, + compute_mode=compute_mode, + format=format, + ) + + (result,) = apply(op, inp1, inp2) + if shp is not None: + result = result.reshape(shp) + return result + + +def dot(inp1: Tensor, inp2: Tensor) -> Tensor: + """ + Compute dot-product of two vectors ``inp1`` and ``inp2``. + inputs must be 1-dimensional, scalar input can be automatically broadcasted. + + :param inp1: The first vector + :param inp2: The second vector + :return: The output value + + Examples: + + .. teestcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + data1 = tensor(np.arange(0, 6, dtype=np.float32)) + data2 = tensor(np.arange(0, 6, dtype=np.float32)) + out = F.dot(data1, data2) + print(out.numpy()) + + Outputs: + + [55.] + + .. testoutputs:: + """ + op = builtin.Dot() + inp1, inp2 = utils.convert_inputs(inp1, inp2) + (result,) = apply(op, inp1, inp2) + return result + + +def svd(inp: Tensor, full_matrices=False, compute_uv=True) -> Tensor: + """ + Compute the singular value decompositions of input matrix ``inp``. + + :param inp: The input matrix, must has shape ``[..., M, N]`` + :return: The output matrices, U, sigma, V + + Examples: + + .. teestcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.arange(0, 6, dtype=np.float32).reshape(2,3)) + _, y, _ = F.svd(x) + print(y.numpy()) + + Outputs: + + [7.348, 1.] + + """ + op = builtin.SVD(full_matrices=full_matrices, compute_uv=compute_uv) + U, sigma, V = apply(op, inp) + return U, sigma, V + + +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 = add_axis(inp, 3) + + if len(inp.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( + floor( + Tensor( + inp.shape[i + 2] * scale_factor[i], + dtype="float32", + device=inp.device, + ) + ) + for i in range(2) + ) + dsize = 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 = concat( + [wscale, Tensor([0, 0], dtype="float32", device=inp.device)], axis=0 + ).reshape(1, 3) + row1 = concat( + [ + Tensor(0, dtype="float32", device=inp.device), + hscale, + Tensor(0, dtype="float32", device=inp.device), + ], + axis=0, + ).reshape(1, 3) + weight = concat( + [row0, row1, Tensor([[0, 0, 1]], dtype="float32", device=inp.device)], + axis=0, + ).reshape(1, 3, 3) + weight = broadcast(weight, (inp.shape[0], 3, 3)) + else: + hscale = 1.0 * ih / oh + wscale = 1.0 * iw / ow + row0 = concat( + [wscale, Tensor(0, dtype="float32", device=inp.device), 0.5 * wscale - 0.5], + axis=0, + ).reshape(1, 3) + row1 = concat( + [Tensor(0, dtype="float32", device=inp.device), hscale, 0.5 * hscale - 0.5], + axis=0, + ).reshape(1, 3) + weight = concat( + [row0, row1, Tensor([[0, 0, 1]], dtype="float32", device=inp.device)], + axis=0, + ).reshape(1, 3, 3) + weight = broadcast(weight, (inp.shape[0], 3, 3)) + + weight = weight.astype("float32") + ret = warp_perspective(inp, weight, dsize, interp_mode="LINEAR") + if mode == "LINEAR": + ret = reshape(ret, ret.shape[0:3]) + return ret + + +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 + + +def identity(inp: Tensor) -> Tensor: + """applies an identity transform to the input tensor. + + :param inp: The input tensor + """ + op = builtin.Identity() + (data,) = utils.convert_inputs(inp) + (output,) = apply(op, data) + return output + + +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!") + + dest_shp = list(input.shape) + [weight.shape[-1]] + return weight[input.reshape(-1)].reshape(dest_shp) + + +def roi_pooling( + inp: Tensor, + rois: Tensor, + output_shape: Union[int, tuple, list], + mode: str = "max", + scale: float = 1.0, +) -> Tensor: + """ + Apply roi pooling on input feature + + :param inp: 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) + + op = builtin.ROIPooling(mode=mode, scale=scale) + result, _ = apply( + op, inp, rois, Tensor(output_shape, dtype="int32", device=inp.device) + ) + return result + + +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 + + op = builtin.ROIAlign( + mode=mode, + format="NCHW", + spatial_scale=spatial_scale, + offset=offset, + pooled_height=pooled_height, + pooled_width=pooled_width, + sample_height=sample_height, + sample_width=sample_width, + ) + result, *_ = apply(op, input, rois) + return result + + +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] + + """ + raise NotImplementedError + # op = builtin.AssertEqual(maxerr=max_err, verbose=verbose) + # result, = apply(op, get, expect) + # return result + + +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.] + + """ + op = builtin.IndexingOneHot(axis=axis) + (result,) = apply(op, src, index) + if not keepdims: + result = remove_axis(result, axis) + return result + + +def nms(boxes: Tensor, iou_thresh: float, scores: Optional[Tensor] = None) -> Tensor: + r""" + Performs non-maximum suppression (NMS) on the boxes according to their intersection-over-union (IoU). + + :param boxes: tensor of shape ``(N, 4)``; the boxes to perform nms on; each box is expected to be in (x1, y1, x2, y2) format. + :param iou_thresh: iou threshold for overlapping. + :param scores: tensor of shape ``(N,)``, the score of boxes. + :return: indices of the elements that have been kept by NMS. + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = np.zeros((100,4)) + np.random.seed(42) + x[:,:2] = np.random.rand(100,2)*20 + x[:,2:] = np.random.rand(100,2)*20 + 100 + scores = tensor(np.random.rand(100)) + inp = tensor(x) + result = F.nms(inp, iou_thresh=0.7, scores=scores) + print(result.numpy()) + + Outputs: + + .. testoutput:: + + [75 69] + + """ + assert ( + boxes.ndim == 2 and boxes.shape[1] == 4 + ), "the expected shape of boxes is (N, 4)" + + sorted_idx = None + if not scores is None: + assert scores.ndim == 1, "the expected shape of scores is (N,)" + sorted_idx = argsort(scores, descending=True) + boxes = boxes[sorted_idx] + max_output = boxes.shape[0] + + op = builtin.NMSKeep(iou_thresh, max_output) + inp = utils.convert_inputs(boxes.reshape(1, -1, 4)) + indices, count = apply(op, *inp) + indices = indices[0][: count.item()] + ret = sorted_idx[indices] if sorted_idx is not None else indices + return ret + + +def batched_nms( + boxes: Tensor, iou_thresh: float, idxs: Tensor, scores: Optional[Tensor] = None +) -> Tensor: + r""" + Performs non-maximum suppression (NMS) on the boxes according to their intersection-over-union (IoU). + + :param boxes: tensor of shape ``(N, 4)``; the boxes to perform nms on; each box is expected to be in (x1, y1, x2, y2) format + :param iou_thresh: iou threshold for overlapping + :param idxs: tensor of shape ``(N,)``, the class indexs of boxes in the batch. + :param scores: tensor of shape ``(N,)``, the score of boxes. + :return: indices and the number of the elements that have been kept by NMS + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = np.zeros((100,4)) + np.random.seed(42) + x[:,:2] = np.random.rand(100,2)*20 + x[:,2:] = np.random.rand(100,2)*20 + 100 + scores = tensor(np.random.rand(100)) + idxs = tensor(np.random.randint(0, 10, 100)) + inp = tensor(x) + result = F.batched_nms(inp, iou_thresh=0.6, idxs=idxs, scores=scores) + print(result.numpy()) + + Outputs: + + .. testoutput:: + + [75 41 99 98 69 64 11 27 35 18] + + """ + assert ( + boxes.ndim == 2 and boxes.shape[1] == 4 + ), "the expected shape of boxes is (N, 4)" + max_coordinate = boxes.max() + offsets = idxs.astype("float32") * (max_coordinate + 1) + boxes = boxes + offsets.reshape(-1, 1).broadcast(boxes.shape[0], 4) + + sorted_idx = None + if not scores is None: + assert scores.ndim == 1, "the expected shape of scores is (N,)" + sorted_idx = argsort(scores, descending=True) + boxes = boxes[sorted_idx] + max_output = boxes.shape[0] + + op = builtin.NMSKeep(iou_thresh, max_output) + inp = utils.convert_inputs(boxes.reshape(1, -1, 4)) + indices, count = apply(op, *inp) + indices = indices[0][: count.item()] + ret = sorted_idx[indices] if sorted_idx is not None else indices + return ret diff --git a/imperative/python/megengine/functional/quantized.py b/imperative/python/megengine/functional/quantized.py new file mode 100644 index 00000000..9bee9311 --- /dev/null +++ b/imperative/python/megengine/functional/quantized.py @@ -0,0 +1,83 @@ +# 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 ..core.ops import builtin +from ..core.tensor.core import apply +from ..tensor import Tensor +from .debug_param import get_conv_execution_strategy +from .types import _pair, _pair_nonzero + + +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, + format="NCHW", + 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:`P.Convolution.Mode` + :param conv_mode: Supports 'CROSS_CORRELATION' or 'CONVOLUTION'. Default: + 'CROSS_CORRELATION'. + :param dtype: Support for np.dtype, Default: + np.int8. + :param scale: scale if use quantization, Default: + 0.0. + :param zero_point: scale if use quantization quint8, Default: + 0.0. + :type compute_mode: string or + :class:`P.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" + op = builtin.ConvBiasForward( + stride_h=sh, + stride_w=sw, + pad_h=ph, + pad_w=pw, + dilate_h=dh, + dilate_w=dw, + dtype=dtype, + format=format, + strategy=get_conv_execution_strategy(), + nonlineMode=nonlinear_mode, + mode=conv_mode, + compute_mode=compute_mode, + sparse=sparse_type, + ) + (outputs,) = apply(op, inp, weight, bias) + return outputs diff --git a/imperative/python/megengine/functional/tensor.py b/imperative/python/megengine/functional/tensor.py new file mode 100644 index 00000000..15c26bf0 --- /dev/null +++ b/imperative/python/megengine/functional/tensor.py @@ -0,0 +1,934 @@ +# -*- 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 math +from itertools import accumulate +from typing import Iterable, List, Optional, Sequence, Tuple, Union + +import numpy as np + +from ..core._imperative_rt import CompNode +from ..core.ops import builtin +from ..core.ops._internal import param_defs as P +from ..core.ops.special import Const +from ..core.tensor.core import TensorBase, TensorWrapperBase, apply +from ..core.tensor.utils import ( + astensor1d, + convert_inputs, + convert_single_value, + dtype_promotion, + get_device, +) +from ..device import get_default_device +from ..tensor import Tensor +from .elemwise import ceil + +__all__ = [ + "add_axis", # expand_dims + "arange", + "broadcast", + "concat", + "cond_take", + "dimshuffle", # transpose, permute + "expand_dims", + "full", + "full_like", + "gather", + "eye", + "linspace", + "ones", + "ones_like", + "remove_axis", # squeeze + "split", + "squeeze", + "stack", + "reshape", + "scatter", + "where", + "zeros", + "zeros_like", + "param_pack_split", + "param_pack_concat", +] + + +def eye(n: int, *, dtype=None, device: Optional[CompNode] = 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.]] + + """ + op = builtin.Eye(k=0, dtype=dtype, comp_node=device) + (result,) = apply(op, Tensor(n, dtype="int32", device=device)) + return result + + +def full(shape, value, dtype="float32", device=None): + if device is None: + device = get_default_device() + (x,) = Const(value, dtype=dtype, device=device)( + Tensor(value, dtype=dtype, device=device) + ) + return broadcast(x, shape) + + +def ones(shape, dtype="float32", device=None): + return full(shape, 1.0, dtype=dtype, device=device) + + +def zeros(shape, dtype="float32", device=None): + return full(shape, 0.0, dtype=dtype, device=device) + + +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.shape, dtype=inp.dtype, device=inp.device) + + +def ones_like(inp: Tensor) -> Tensor: + r""" + Returns a identity tensor with the same shape as input tensor + """ + return ones(inp.shape, dtype=inp.dtype, device=inp.device) + + +def full_like(inp: Tensor, value: Union[int, float]) -> Tensor: + r""" + Returns a tensor filled with value val with the same shape as input tensor + """ + return full(inp.shape, value, dtype=inp.dtype, device=inp.device) + + +def broadcast(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(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.]]] + + """ + shape = astensor1d(shape, inp, dtype="int32", device=inp.device) + (result,) = apply(builtin.Broadcast(), inp, shape) + return result + + +def concat( + inps: Iterable[Tensor], axis: int = 0, device: Optional[CompNode] = 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.]] + + """ + dtype = dtype_promotion(inps) + device = get_device(inps) + + def convert(x): + return convert_single_value(x, inps, dtype=dtype) + + inps = tuple(map(convert, inps)) + (result,) = apply(builtin.Concat(axis=axis, comp_node=device.to_c()), *inps) + return result + + +def stack(inps, axis=0): + """Concats a sequence of tensors along a new axis. + The input tensors must have the same shape. + + :param inps: The input tensors. + :param axis: Which axis will be concatenated. + :return: The output concatenated tensor. + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x1 = tensor(np.arange(0, 6, dtype=np.float32).reshape((2, 3))) + x2 = tensor(np.arange(6, 12, dtype=np.float32).reshape((2, 3))) + out = F.stack([x1, x2], axis=0) + print(out.numpy()) + + Outputs: + + .. testoutput:: + + [[[ 0. 1. 2.] + [ 3. 4. 5.]] + + [[ 6. 7. 8.] + [ 9. 10. 11.]]] + + """ + shapes = {arr.shape for arr in inps} + if len(shapes) != 1: + raise ValueError("All input tensors must have the same shape") + + inps = [add_axis(inp, axis=axis) for inp in inps] + return concat(inps, axis=axis) + + +def split(inp, nsplits_or_sections, axis=0): + """Splits the input tensor into several smaller tensors. + When nsplits_or_sections is int, the last tensor may be smaller than others. + + :param inp: The input tensor. + :param nsplits_or_sections: Number of sub tensors or section information list. + :param axis: Which axis will be splited. + :return: The output tensor list. + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + + x = tensor(np.random.random((2,3,4,5)), dtype=np.float32) + out = F.split(x, 2, axis=3) + print(out[0].shape, out[1].shape) + + Outputs: + + .. testoutput:: + + (2, 3, 4, 3) (2, 3, 4, 2) + + """ + sub_tensors = [] + sections = [] + + def swapaxis(inp, src, dst): + if src == dst: + return inp + shape = [i for i in range(len(inp.shape))] + shape[src] = dst + shape[dst] = src + return inp.transpose(shape) + + inp = swapaxis(inp, 0, axis) + + if isinstance(nsplits_or_sections, int): + incr_step = math.ceil(inp.shape[0] / nsplits_or_sections) + while incr_step < inp.shape[0]: + sections.append(incr_step) + incr_step += nsplits_or_sections + else: + sections = nsplits_or_sections + + st = 0 + for se in sections: + sub_tensors.append(swapaxis(inp[st:se], axis, 0)) + st = se + + if st < inp.shape[0]: + sub_tensors.append(swapaxis(inp[st:], axis, 0)) + + return sub_tensors + + +def _get_idx(index, axis): + index_dims = len(index.shape) + idx = [] + for i in range(index_dims): + if i != axis: + shape = [1] * index_dims + shape[i] = index.shape[i] + arange = linspace( + 0, index.shape[i] - 1, index.shape[i], device=index.device, + ) + arange = ( + arange.reshape(*shape) + .broadcast(index.shape) + .reshape(-1) + .astype(np.int32) + ) + idx.append(arange) + else: + idx.append(index.reshape(-1)) + return tuple(idx) + + +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 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.shape + index_shape = index.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 inp[idx].reshape(index.shape) # pylint: disable=no-member + + +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 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.shape + index_shape = index.shape + source_shape = source.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) + inp[idx] = source.flatten() + return inp + + +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.]] + """ + raise NotImplementedError + # v0, index0 = mgb.opr.cond_take( + # x, mask, mode=P.CondTake.Mode.EQ, val=1 + # ) + # v1, index1 = mgb.opr.cond_take( + # y, mask, mode=P.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 + + +def cond_take(mask: Tensor, x: Tensor) -> 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 + + Examples: + + .. testcode:: + + import numpy as np + from megengine import tensor + import megengine.functional as F + mask = tensor(np.array([[True, False], [False, True]], dtype=np.bool_)) + x = tensor(np.array([[1, np.inf], [np.nan, 4]], + dtype=np.float32)) + v, index = F.cond_take(mask, x) + print(v.numpy(), index.numpy()) + + Outputs: + + .. testoutput:: + + Tensor([1. 4.]) Tensor([0 3], dtype=int32) + + """ + if not isinstance(x, (TensorWrapperBase, TensorBase)): + raise TypeError("input must be a tensor") + if not isinstance(mask, (TensorWrapperBase, TensorBase)): + raise TypeError("mask must be a tensor") + if mask.dtype != np.bool_: + raise ValueError("mask must be bool") + if x.device != mask.device: + raise ValueError("ambiguous device: {} vs {}".format(x.device, mask.device)) + + op = builtin.CondTake() + v, index = apply(op, x, mask) + return v, index + + +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]] + + """ + op = builtin.Dimshuffle(pattern) + (inp,) = convert_inputs(inp) + (result,) = apply(op, inp) + return result + + +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]]] + + """ + if isinstance(target_shape, (TensorBase, TensorWrapperBase)): + target_shape = target_shape.numpy() + target_shape = tuple(map(int, target_shape)) + unspec_axis = None + for i, s in enumerate(target_shape): + if s < 0: + if s != -1: + raise ValueError("expect shape[{}] >= -1, got {}".format(i, s)) + if unspec_axis is not None: + raise ValueError("multiple -1 in shape: {} & {}".format(unspec_axis, i)) + unspec_axis = i + + # TODO: device should be None (cpu) + (target_shape,) = Const(target_shape, dtype="int32", device=inp.device)(inp) + if unspec_axis is None: + op = builtin.Reshape() + else: + op = builtin.Reshape(unspec_axis=unspec_axis) + (x,) = apply(op, inp, target_shape) + return x + + +transpose = dimshuffle + + +AxisAddRemove = builtin.AxisAddRemove +AxisDesc = AxisAddRemove.AxisDesc + + +def add_axis(inp: Tensor, axis: Union[int, Sequence[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) + + """ + Param = AxisAddRemove.Param + + def get_axes(): + try: + return [int(axis)] + except (TypeError, ValueError): + pass + return list(map(int, axis)) + + axis = get_axes() + ndim = inp.ndim + len(axis) + axis = sorted(i + ndim if i < 0 else i for i in axis) + + param = Param(*map(AxisDesc.make_add, axis)) + op = AxisAddRemove(param=param) + (result,) = apply(op, inp) + return result + + +expand_dims = add_axis + + +def remove_axis(inp: Tensor, axis: Union[int, Sequence[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) + + """ + Param = AxisAddRemove.Param + + def get_axes(): + if axis is None: + return [i for i, s in enumerate(inp.shape) if s == 1] + try: + return [int(axis)] + except (TypeError, ValueError): + pass + return list(map(int, axis)) + + axis = get_axes() + axis = sorted(i + inp.ndim if i < 0 else i for i in axis) + axis = [a - i for i, a in enumerate(axis)] + + param = Param(*map(AxisDesc.make_remove, axis)) + op = AxisAddRemove(param=param) + (result,) = apply(op, inp) + return result + + +squeeze = remove_axis + + +def linspace( + start: Union[int, float, Tensor], + stop: Union[int, float, Tensor], + num: Union[int, Tensor], + dtype="float32", + device: Optional[CompNode] = 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. ] + + """ + start = Tensor(start, device=device) + stop = Tensor(stop, device=device) + num = Tensor(num, device=device) + + device = device if device is None else device.to_c() + op = builtin.Linspace(comp_node=device) + (result,) = apply(op, start, stop, num) + if np.dtype(dtype) == np.int32: + return result.astype(dtype) + return result + + +def arange( + start: Union[int, float, Tensor], + end: Union[int, float, Tensor], + step: Union[int, float, Tensor] = 1, + dtype="float32", + device: Optional[CompNode] = 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 isinstance(start, Tensor): + start = start.astype("float32") + if isinstance(end, Tensor): + end = end.astype("float32") + if isinstance(step, Tensor): + step = step.astype("float32") + num = ceil(Tensor((end - start) / step, device=device)) + stop = start + step * (num - 1) + result = linspace(start, stop, num, device=device) + if np.dtype(dtype) == np.int32: + return result.astype(dtype) + return result + + +def param_pack_split(inp: Tensor, offsets: List, shapes: List) -> Tensor: + op = builtin.ParamPackSplit() + op.offsets = offsets + op.shapes = shapes + return apply(op, inp) + + +def param_pack_concat(inps: List, offsets: Tensor, offsets_val: List) -> Tensor: + op = builtin.ParamPackConcat() + op.offsets = offsets_val + return apply(op, *inps, offsets)[0] diff --git a/imperative/python/megengine/functional/types.py b/imperative/python/megengine/functional/types.py new file mode 100644 index 00000000..465ca03c --- /dev/null +++ b/imperative/python/megengine/functional/types.py @@ -0,0 +1,37 @@ +# -*- 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/imperative/python/megengine/functional/utils.py b/imperative/python/megengine/functional/utils.py new file mode 100644 index 00000000..85c85d43 --- /dev/null +++ b/imperative/python/megengine/functional/utils.py @@ -0,0 +1,80 @@ +# -*- 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, Union + +import numpy as np + +from ..core.ops.builtin import Copy +from ..core.tensor import Tensor +from ..core.tensor.core import apply +from .math import topk as _topk +from .tensor import dimshuffle as _dimshuffle + + +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 = _topk(logits, k=max(topk), descending=True) + accs = [] + for k in topk: + correct = pred[:, :k].detach() == _dimshuffle(target, (0, "x")).broadcast( + target.shape[0], k + ) + accs.append(correct.astype(np.float32).sum() / target.shape[0]) + if len(topk) == 1: # type: ignore[arg-type] + accs = accs[0] + return accs + + +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. + """ + print("zero_grad is obsoleted, please use detach instead") + raise NotImplementedError + + +def copy(inp, cn): + return apply(Copy(comp_node=cn), inp)[0] diff --git a/imperative/python/megengine/hub/__init__.py b/imperative/python/megengine/hub/__init__.py new file mode 100644 index 00000000..f07c3979 --- /dev/null +++ b/imperative/python/megengine/hub/__init__.py @@ -0,0 +1,16 @@ +# -*- 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/imperative/python/megengine/hub/const.py b/imperative/python/megengine/hub/const.py new file mode 100644 index 00000000..5f53420b --- /dev/null +++ b/imperative/python/megengine/hub/const.py @@ -0,0 +1,17 @@ +# -*- 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/imperative/python/megengine/hub/exceptions.py b/imperative/python/megengine/hub/exceptions.py new file mode 100644 index 00000000..aab0a134 --- /dev/null +++ b/imperative/python/megengine/hub/exceptions.py @@ -0,0 +1,30 @@ +# -*- 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/imperative/python/megengine/hub/fetcher.py b/imperative/python/megengine/hub/fetcher.py new file mode 100644 index 00000000..4f60b3ce --- /dev/null +++ b/imperative/python/megengine/hub/fetcher.py @@ -0,0 +1,300 @@ +# -*- 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 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/imperative/python/megengine/hub/hub.py b/imperative/python/megengine/hub/hub.py new file mode 100644 index 00000000..139256e9 --- /dev/null +++ b/imperative/python/megengine/hub/hub.py @@ -0,0 +1,333 @@ +# -*- 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 ..distributed import is_distributed +from ..logger import get_logger +from ..serialization import load as _mge_load_serialized +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/imperative/python/megengine/hub/tools.py b/imperative/python/megengine/hub/tools.py new file mode 100644 index 00000000..0bf9c98c --- /dev/null +++ b/imperative/python/megengine/hub/tools.py @@ -0,0 +1,48 @@ +# -*- 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/imperative/python/megengine/logger.py b/imperative/python/megengine/logger.py new file mode 100644 index 00000000..9e926ca3 --- /dev/null +++ b/imperative/python/megengine/logger.py @@ -0,0 +1,237 @@ +# -*- 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", "ERROR") +_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 .core._imperative_rt.utils import Logger as _imperative_rt_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) + _imperative_rt_logger.set_log_handler(_megbrain_logger) + if _default_level == logging.getLevelName("ERROR"): + _imperative_rt_logger.set_log_level(_imperative_rt_logger.LogLevel.Error) + elif _default_level == logging.getLevelName("INFO"): + _imperative_rt_logger.set_log_level(_imperative_rt_logger.LogLevel.Info) + else: + _imperative_rt_logger.set_log_level(_imperative_rt_logger.LogLevel.Debug) + + 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("imperative_rt 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/imperative/python/megengine/module/__init__.py b/imperative/python/megengine/module/__init__.py new file mode 100644 index 00000000..a10228f2 --- /dev/null +++ b/imperative/python/megengine/module/__init__.py @@ -0,0 +1,24 @@ +# -*- 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/imperative/python/megengine/module/activation.py b/imperative/python/megengine/module/activation.py new file mode 100644 index 00000000..025844ed --- /dev/null +++ b/imperative/python/megengine/module/activation.py @@ -0,0 +1,231 @@ +# -*- 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 import leaky_relu, prelu, relu, sigmoid, softmax +from ..tensor_nn import Parameter +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( + data=np.full((1, num_parameters, 1, 1), init, dtype=np.float32) + ) + else: + self.weight = Parameter(data=[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/imperative/python/megengine/module/batchnorm.py b/imperative/python/megengine/module/batchnorm.py new file mode 100644 index 00000000..ac154e1c --- /dev/null +++ b/imperative/python/megengine/module/batchnorm.py @@ -0,0 +1,281 @@ +# -*- 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 ..distributed.group import WORLD, Group +from ..functional import batch_norm2d, sync_batch_norm +from ..tensor_nn import Buffer, Parameter +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, + freeze=False, + ): + 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 + self._track_running_stats_saved = track_running_stats + self.freeze = freeze + 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) + if self._track_running_stats_saved == False: + assert ( + self.track_running_stats == False + ), "track_running_stats can not be initilized to False and changed to True later" + + _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.freeze and self.training and self._track_running_stats_saved: + scale = self.weight.reshape(1, -1, 1, 1) * ( + self.running_var + self.eps + ) ** (-0.5) + bias = self.bias.reshape(1, -1, 1, 1) - self.running_mean * scale + return inp * scale.detach() + bias.detach() + + if self.training and self.track_running_stats: + exponential_average_factor = self.momentum + else: + exponential_average_factor = 0.0 # useless + + output = batch_norm2d( + inp, + self.running_mean if self.track_running_stats else None, + self.running_var if self.track_running_stats else None, + self.weight, + self.bias, + training=self.training + or ((self.running_mean is None) and (self.running_var is None)), + momentum=exponential_average_factor, + eps=self.eps, + ) + + if _ndims != 4: + output = output.reshape(origin_shape) + + return output + + +class SyncBatchNorm(_BatchNorm): + r""" + Applies Synchronization Batch Normalization. + """ + + def __init__( + self, + num_features, + eps=1e-5, + momentum=0.9, + affine=True, + track_running_stats=True, + freeze=False, + group: Optional[Group] = None, + ) -> None: + super().__init__( + num_features, eps, momentum, affine, track_running_stats, freeze + ) + self.group = group + + 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, + group=self.group, + ) + + 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``. + + :type freeze: bool + :param freeze: when set to ``True``, this module does not update the + running mean and variance, and uses the running mean and variance instead of + the batch mean and batch variance to normalize the input. The parameter takes effect + only when the module is initilized with ``track_running_stats`` as ``True`` and + the module is in training mode. + Default: ``False``. + + Examples: + + .. testcode:: + + 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/imperative/python/megengine/module/concat.py b/imperative/python/megengine/module/concat.py new file mode 100644 index 00000000..7eca519c --- /dev/null +++ b/imperative/python/megengine/module/concat.py @@ -0,0 +1,22 @@ +# 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 ..functional import concat +from ..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 concat(inps, axis) diff --git a/imperative/python/megengine/module/conv.py b/imperative/python/megengine/module/conv.py new file mode 100644 index 00000000..87bdc244 --- /dev/null +++ b/imperative/python/megengine/module/conv.py @@ -0,0 +1,391 @@ +# 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 + +from ..core.ops._internal import param_defs as P +from ..functional import conv2d, conv_transpose2d, local_conv2d, relu +from ..functional.types import _pair, _pair_nonzero +from ..tensor_nn import Parameter +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 = P.Convolution.Mode + _compute_mode_type = P.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 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 = P.Convolution.Mode + _compute_mode_type = P.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 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 = P.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 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 relu(self.calc_conv(inp, self.weight, self.bias)) diff --git a/imperative/python/megengine/module/conv_bn.py b/imperative/python/megengine/module/conv_bn.py new file mode 100644 index 00000000..76713b0f --- /dev/null +++ b/imperative/python/megengine/module/conv_bn.py @@ -0,0 +1,69 @@ +# 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/imperative/python/megengine/module/dropout.py b/imperative/python/megengine/module/dropout.py new file mode 100644 index 00000000..146eba24 --- /dev/null +++ b/imperative/python/megengine/module/dropout.py @@ -0,0 +1,29 @@ +# -*- 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/imperative/python/megengine/module/elemwise.py b/imperative/python/megengine/module/elemwise.py new file mode 100644 index 00000000..041f56a5 --- /dev/null +++ b/imperative/python/megengine/module/elemwise.py @@ -0,0 +1,79 @@ +# 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.ops._internal import param_defs as P +from ..functional.elemwise import _elwise +from ..tensor import Tensor +from .module import Module + + +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 = P.Elemwise.Mode + + def __init__(self, method): + super().__init__() + self.method = self._elemwise_mode_type.convert(method) + + def forward(self, *inps): + return _elwise(*inps, mode=self.method) diff --git a/imperative/python/megengine/module/embedding.py b/imperative/python/megengine/module/embedding.py new file mode 100644 index 00000000..15c19651 --- /dev/null +++ b/imperative/python/megengine/module/embedding.py @@ -0,0 +1,171 @@ +# -*- 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 ..functional import embedding as embedding_func +from ..tensor_nn import Parameter +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/imperative/python/megengine/module/external.py b/imperative/python/megengine/module/external.py new file mode 100644 index 00000000..387125c4 --- /dev/null +++ b/imperative/python/megengine/module/external.py @@ -0,0 +1,56 @@ +# -*- 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 import 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 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/imperative/python/megengine/module/identity.py b/imperative/python/megengine/module/identity.py new file mode 100644 index 00000000..51b31e50 --- /dev/null +++ b/imperative/python/megengine/module/identity.py @@ -0,0 +1,17 @@ +# -*- 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/imperative/python/megengine/module/init.py b/imperative/python/megengine/module/init.py new file mode 100644 index 00000000..c2cb5075 --- /dev/null +++ b/imperative/python/megengine/module/init.py @@ -0,0 +1,261 @@ +# -*- 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 ..tensor import Tensor + + +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 + """ + tensor.set_value(np.random.uniform(a, b, tensor.shape).astype(tensor.dtype)) + + +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 + """ + tensor.set_value(np.random.normal(mean, std, tensor.shape).astype(np.float32)) + + +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` - + Glorot, X. & Bengio, Y. (2010). + + :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` - + Glorot, X. & Bengio, Y. (2010). + + :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/imperative/python/megengine/module/linear.py b/imperative/python/megengine/module/linear.py new file mode 100644 index 00000000..34900a2e --- /dev/null +++ b/imperative/python/megengine/module/linear.py @@ -0,0 +1,61 @@ +# 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 import linear +from ..tensor_nn 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 linear(x, weight, bias) + + def forward(self, x): + return self._calc_linear(x, self.weight, self.bias) diff --git a/imperative/python/megengine/module/module.py b/imperative/python/megengine/module/module.py new file mode 100644 index 00000000..723a9fbb --- /dev/null +++ b/imperative/python/megengine/module/module.py @@ -0,0 +1,508 @@ +# 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 ..core.tensor.dtype import is_quantize +from ..logger import get_logger +from ..tensor import Tensor +from ..tensor_nn import Buffer, Parameter +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 = var.astype(to_be_load.dtype) + var.set_value(to_be_load) + loaded.append(k) + + return set(loaded), set(skipped) diff --git a/imperative/python/megengine/module/parampack.py b/imperative/python/megengine/module/parampack.py new file mode 100644 index 00000000..feb14c61 --- /dev/null +++ b/imperative/python/megengine/module/parampack.py @@ -0,0 +1,156 @@ +# -*- 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 ..tensor_nn 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/imperative/python/megengine/module/pooling.py b/imperative/python/megengine/module/pooling.py new file mode 100644 index 00000000..8126ddc1 --- /dev/null +++ b/imperative/python/megengine/module/pooling.py @@ -0,0 +1,80 @@ +# -*- 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/imperative/python/megengine/module/qat/__init__.py b/imperative/python/megengine/module/qat/__init__.py new file mode 100644 index 00000000..b6adab4d --- /dev/null +++ b/imperative/python/megengine/module/qat/__init__.py @@ -0,0 +1,14 @@ +# 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/imperative/python/megengine/module/qat/concat.py b/imperative/python/megengine/module/qat/concat.py new file mode 100644 index 00000000..a1f01893 --- /dev/null +++ b/imperative/python/megengine/module/qat/concat.py @@ -0,0 +1,30 @@ +# 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 ...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/imperative/python/megengine/module/qat/conv.py b/imperative/python/megengine/module/qat/conv.py new file mode 100644 index 00000000..315da839 --- /dev/null +++ b/imperative/python/megengine/module/qat/conv.py @@ -0,0 +1,59 @@ +# 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/imperative/python/megengine/module/qat/conv_bn.py b/imperative/python/megengine/module/qat/conv_bn.py new file mode 100644 index 00000000..baa0d769 --- /dev/null +++ b/imperative/python/megengine/module/qat/conv_bn.py @@ -0,0 +1,193 @@ +# 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 add_update, ones, relu, sqrt, sum, zeros +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.size / inp.shape[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 = bn_mean.detach() + bn_var = ( + bn_var.detach() * 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.size / conv.shape[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.size / conv.shape[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/imperative/python/megengine/module/qat/elemwise.py b/imperative/python/megengine/module/qat/elemwise.py new file mode 100644 index 00000000..f99583bd --- /dev/null +++ b/imperative/python/megengine/module/qat/elemwise.py @@ -0,0 +1,31 @@ +# 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/imperative/python/megengine/module/qat/linear.py b/imperative/python/megengine/module/qat/linear.py new file mode 100644 index 00000000..4067d51c --- /dev/null +++ b/imperative/python/megengine/module/qat/linear.py @@ -0,0 +1,39 @@ +# 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/imperative/python/megengine/module/qat/module.py b/imperative/python/megengine/module/qat/module.py new file mode 100644 index 00000000..544e04af --- /dev/null +++ b/imperative/python/megengine/module/qat/module.py @@ -0,0 +1,154 @@ +# 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 ...quantization import FakeQuantize, Observer, QConfig +from ...tensor import Tensor +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: + 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/imperative/python/megengine/module/qat/quant_dequant.py b/imperative/python/megengine/module/qat/quant_dequant.py new file mode 100644 index 00000000..0baa3e1c --- /dev/null +++ b/imperative/python/megengine/module/qat/quant_dequant.py @@ -0,0 +1,50 @@ +# 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/imperative/python/megengine/module/quant_dequant.py b/imperative/python/megengine/module/quant_dequant.py new file mode 100644 index 00000000..aaf2b0cc --- /dev/null +++ b/imperative/python/megengine/module/quant_dequant.py @@ -0,0 +1,28 @@ +# 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/imperative/python/megengine/module/quantized/__init__.py b/imperative/python/megengine/module/quantized/__init__.py new file mode 100644 index 00000000..e641476d --- /dev/null +++ b/imperative/python/megengine/module/quantized/__init__.py @@ -0,0 +1,14 @@ +# 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/imperative/python/megengine/module/quantized/concat.py b/imperative/python/megengine/module/quantized/concat.py new file mode 100644 index 00000000..5815d7d9 --- /dev/null +++ b/imperative/python/megengine/module/quantized/concat.py @@ -0,0 +1,35 @@ +# 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 ...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/imperative/python/megengine/module/quantized/conv.py b/imperative/python/megengine/module/quantized/conv.py new file mode 100644 index 00000000..696e4f63 --- /dev/null +++ b/imperative/python/megengine/module/quantized/conv.py @@ -0,0 +1,107 @@ +# 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 + +from ... import module as Float +from ...core.tensor import dtype +from ...functional import conv_bias_activation +from ...tensor_nn import Parameter +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 = dtype.get_scale(inp.dtype) + w_scale = dtype.get_scale(self.weight.dtype) + bias_scale = inp_scale * w_scale + return conv_bias_activation( + inp, + self.weight, + self.bias.astype(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/imperative/python/megengine/module/quantized/conv_bn.py b/imperative/python/megengine/module/quantized/conv_bn.py new file mode 100644 index 00000000..e7c1de08 --- /dev/null +++ b/imperative/python/megengine/module/quantized/conv_bn.py @@ -0,0 +1,56 @@ +# 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_nn 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/imperative/python/megengine/module/quantized/elemwise.py b/imperative/python/megengine/module/quantized/elemwise.py new file mode 100644 index 00000000..8caee62e --- /dev/null +++ b/imperative/python/megengine/module/quantized/elemwise.py @@ -0,0 +1,36 @@ +# 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.ops._internal import param_defs as P +from ...functional.elemwise import _elemwise_multi_type +from ...tensor import Tensor +from ..qat import elemwise as QAT +from .module import QuantizedModule + + +class Elemwise(QuantizedModule): + r"""quantized version of :class:`~.qat.elemwise.Elemwise`.""" + + _elemwise_multi_type_mode = P.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(*inps, mode=self.method, 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/imperative/python/megengine/module/quantized/linear.py b/imperative/python/megengine/module/quantized/linear.py new file mode 100644 index 00000000..e42fe266 --- /dev/null +++ b/imperative/python/megengine/module/quantized/linear.py @@ -0,0 +1,52 @@ +# 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.tensor import dtype +from ...tensor_nn 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 = dtype.get_scale(inp.dtype) + w_scale = dtype.get_scale(self.weight.dtype) + bias_dtype = dtype.qint32(inp_scale * w_scale) + return F.linear( + inp, + self.weight, + None if self.bias is None else self.bias.astype(bias_dtype), + ).astype(self.output_dtype) + + @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/imperative/python/megengine/module/quantized/module.py b/imperative/python/megengine/module/quantized/module.py new file mode 100644 index 00000000..4fccdbfa --- /dev/null +++ b/imperative/python/megengine/module/quantized/module.py @@ -0,0 +1,31 @@ +# 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/imperative/python/megengine/module/quantized/quant_dequant.py b/imperative/python/megengine/module/quantized/quant_dequant.py new file mode 100644 index 00000000..0c245011 --- /dev/null +++ b/imperative/python/megengine/module/quantized/quant_dequant.py @@ -0,0 +1,49 @@ +# 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/imperative/python/megengine/module/sequential.py b/imperative/python/megengine/module/sequential.py new file mode 100644 index 00000000..03afd48a --- /dev/null +++ b/imperative/python/megengine/module/sequential.py @@ -0,0 +1,94 @@ +# -*- 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:: + + import numpy as np + import megengine.nn as nn + import megengine.nn.functional as F + + batch_size = 64 + data = nn.Input("data", shape=(batch_size, 1, 28, 28), dtype=np.float32, value=np.zeros((batch_size, 1, 28, 28))) + label = nn.Input("label", shape=(batch_size,), dtype=np.int32, value=np.zeros(batch_size,)) + + data = data.reshape(batch_size, -1) + net = nn.Sequential( + nn.Linear(28 * 28, 320), + nn.Linear(320, 500), + nn.Linear(500, 320), + nn.Linear(320, 10) + ) + pred = net(data) + + loss = F.cross_entropy_with_softmax(pred, label) + + """ + + def __init__(self, *args): + super().__init__() + self.layer_keys = [] + self.layer_values = [] + 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) + self.layer_values.append(module) + else: + for idx, module in enumerate(args): + # self.add_module(str(idx), module) + setattr(self, str(idx), module) + self.layer_keys.append(str(idx)) + self.layer_values.append(module) + + def __getitem__(self, idx): + if isinstance(idx, slice): + return self.__class__( + OrderedDict(zip(self.layer_keys[idx], self.layer_values[idx])) + ) + else: + return self.layer_values[idx] + + def __setitem__(self, idx, module): + key = self.layer_keys[idx] + self.layer_values[idx] = module + 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] + del self.layer_values[idx] + else: + delattr(self, self.layer_keys[idx]) + del self.layer_keys[idx] + del self.layer_values[idx] + + def __len__(self): + return len(self.layer_keys) + + def __iter__(self): + return iter(self.layer_values) + + def forward(self, inp): + for layer in self.layer_values: + inp = layer(inp) + return inp diff --git a/imperative/python/megengine/optimizer/__init__.py b/imperative/python/megengine/optimizer/__init__.py new file mode 100644 index 00000000..ad783e06 --- /dev/null +++ b/imperative/python/megengine/optimizer/__init__.py @@ -0,0 +1,15 @@ +# -*- 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/imperative/python/megengine/optimizer/adadelta.py b/imperative/python/megengine/optimizer/adadelta.py new file mode 100644 index 00000000..9de92fa9 --- /dev/null +++ b/imperative/python/megengine/optimizer/adadelta.py @@ -0,0 +1,96 @@ +# -*- 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 numpy as np + +from ..functional import sqrt +from ..tensor_nn import Buffer, Parameter +from .distributed_optimizer import DistributedOptimizer + + +class Adadelta(DistributedOptimizer): + 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, + **kwargs + ): + 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, **kwargs) + + 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 param.__wrapped__ in self._grad_skip: + self._grad_skip.remove(param.__wrapped__) + continue + + 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 + + states = self._state[param] + step = states["step"] + step += 1.0 + grad = param.grad + if weight_decay != 0.0: + grad += param * weight_decay + + square_avg = states["square_avg"] + acc_delta = states["acc_delta"] + square_avg = rho * square_avg + (1 - rho) * grad ** 2 + std = sqrt(square_avg + eps) + delta = sqrt(acc_delta + eps) / std * grad + param -= lr * delta + acc_delta = rho * acc_delta + (1 - rho) * delta ** 2 + states["square_avg"]._reset(square_avg) + states["acc_delta"]._reset(acc_delta) + + assert len(self._grad_skip) == 0 diff --git a/imperative/python/megengine/optimizer/adagrad.py b/imperative/python/megengine/optimizer/adagrad.py new file mode 100644 index 00000000..804c7abe --- /dev/null +++ b/imperative/python/megengine/optimizer/adagrad.py @@ -0,0 +1,91 @@ +# -*- 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 numpy as np + +from ..functional import sqrt +from ..tensor_nn import Buffer, Parameter +from .distributed_optimizer import DistributedOptimizer + + +class Adagrad(DistributedOptimizer): + 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, + **kwargs + ): + 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, **kwargs) + + 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 param.__wrapped__ in self._grad_skip: + self._grad_skip.remove(param.__wrapped__) + continue + + 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 + + states = self._state[param] + step = states["step"] + step += 1.0 + grad = param.grad + if weight_decay != 0.0: + grad += param * weight_decay + + square_avg = states["square_avg"] + square_avg += grad ** 2 + delta = grad / sqrt(square_avg + eps) + clr = lr / (1 + (step - 1) * lr_decay) + + param -= clr * delta + assert len(self._grad_skip) == 0 diff --git a/imperative/python/megengine/optimizer/adam.py b/imperative/python/megengine/optimizer/adam.py new file mode 100644 index 00000000..fac9f4cb --- /dev/null +++ b/imperative/python/megengine/optimizer/adam.py @@ -0,0 +1,96 @@ +# -*- 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 ..tensor_nn import Buffer, Parameter +from .distributed_optimizer import DistributedOptimizer + + +class Adam(DistributedOptimizer): + 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, + **kwargs + ): + 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, **kwargs) + + 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 param.__wrapped__ in self._grad_skip: + self._grad_skip.remove(param.__wrapped__) + continue + + if not param.requires_grad: + continue + + 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 += param * weight_decay + + states = self._state[param] + step = states["step"] + step += 1.0 + exp_avg = states["exp_avg"] + exp_avg_sq = states["exp_avg_sq"] + exp_avg = beta0 * exp_avg + grad * (1 - beta0) + exp_avg_sq = beta1 * exp_avg_sq + (1 - beta1) * (grad * grad) + + delta = (exp_avg / (1 - beta0 ** step)) / ( + (exp_avg_sq / (1 - beta1 ** step)) ** 0.5 + eps + ) + param -= lr * delta + + # not inplace change, need to update underlying tensor handler in state + states["exp_avg"]._reset(exp_avg) + states["exp_avg_sq"]._reset(exp_avg_sq) + + assert len(self._grad_skip) == 0 diff --git a/imperative/python/megengine/optimizer/distributed_optimizer.py b/imperative/python/megengine/optimizer/distributed_optimizer.py new file mode 100644 index 00000000..86168c9a --- /dev/null +++ b/imperative/python/megengine/optimizer/distributed_optimizer.py @@ -0,0 +1,120 @@ +# -*- 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 as Iter +from typing import Optional, Union + +from ..device import get_default_device +from ..distributed.group import get_client, is_distributed +from ..functional import add_update +from ..functional.distributed import WORLD, Group, all_reduce_sum, broadcast +from ..functional.utils import copy +from ..tensor import Tensor, TensorDict +from ..tensor_nn import Parameter +from .optimizer import Optimizer +from .param_pack import get_pack_list, pack_allreduce_split + + +class DistributedOptimizer(Optimizer): + r"""Add Distributed Func for distributed training. + + :param params: specifies what Tensors should be optimized. + :param defaults: a dict of default parameters of Optimizer, like learning rate or momentum. + :param reduce_method: use all_reduce_sum or all_reduce_mean to reduce gradients + :param bcast_period: broadcasts params every *bcast_period* iterations. + if it equals to 0, it will broadcast params only at the beginning. Default: 500 + :param param_pack: whether to pack gradients to avoid small packages send/recv. Default: False + :param param_pack_thd: max size of packed gradients by bytes. Default: 10 * 1024 * 1024 + """ + + def __init__( + self, + params: Union[Iter[Parameter], dict], + defaults: dict, + reduce_method: Optional[str] = None, + dist_group: Optional[Group] = WORLD, + bcast_period: int = 0, + param_pack: bool = False, + param_pack_thd: int = 10 * 1024 * 1024, + ): + if is_distributed(): + assert reduce_method in ["sum", "mean"], "reduce_method must be specified" + defaults["orders"] = [] + defaults["dist_group"] = dist_group + super().__init__(params, defaults) + self._bcast_period = bcast_period + self._param_pack = param_pack + self._param_pack_thd = param_pack_thd + self._reduce_method = reduce_method + + self.add_save_load_state_ignore_keys( + {"grads", "orders", "pack_list", "shape_list", "dist_group"} + ) + + if is_distributed() and bcast_period != -1: + self.bcast_param() + + def grad_callback(self, grad, i, group): + if is_distributed() and group["dist_group"] is not None: + dist_group = group["dist_group"] + if self._param_pack and "pack_list" in group: + for pack, shapes in zip(group["pack_list"], group["shape_list"]): + if i == pack[-1]: + pack_allreduce_split(group, pack, shapes, self._reduce_method) + else: + group["orders"].append(i) + group["grads"][i] = all_reduce_sum( + grad, dist_group, dist_group.comp_node + ) + if self._reduce_method == "mean": + group["grads"][i] /= dist_group.size + + def _gen_pack_list(self, group): + if "pack_list" not in group: + dist_group = group["dist_group"] + if dist_group.rank == 0: + pack_list, shape_list = get_pack_list(group, self._param_pack_thd) + get_client().set_pack_list(dist_group.key, (pack_list, shape_list)) + else: + pack_list, shape_list = get_client().get_pack_list(dist_group.key) + group["pack_list"] = pack_list + group["shape_list"] = shape_list + + def backward(self, loss: Tensor): + ret = super().backward(loss) + if is_distributed(): + for group in self.param_groups: + if self._param_pack and group["dist_group"] is not None: + self._gen_pack_list(group) + return ret + + def step(self): + if is_distributed(): + for group in self.param_groups: + device = get_default_device() + for param in group["params"]: + if param.__wrapped__ not in self._grad_skip: + if param.grad.device != device: + param.grad = copy(param.grad, device) + if self._bcast_period > 0: + self._bcast_iter += 1 + if self._bcast_iter == self._bcast_period: + self.bcast_param() + self._bcast_iter = 0 + super().step() + + def bcast_param(self): + device = get_default_device() + for group in self.param_groups: + for param in group["params"]: + dist_group = group["dist_group"] + new_param = broadcast(param, dist_group) + if new_param.device != device: + new_param = copy(new_param, device) + add_update(param, new_param, alpha=0) + param._reset(new_param) diff --git a/imperative/python/megengine/optimizer/lr_scheduler.py b/imperative/python/megengine/optimizer/lr_scheduler.py new file mode 100644 index 00000000..46d08d5d --- /dev/null +++ b/imperative/python/megengine/optimizer/lr_scheduler.py @@ -0,0 +1,73 @@ +# -*- 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 + +from .distributed_optimizer import DistributedOptimizer + + +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: DistributedOptimizer, current_epoch: int = -1 + ): + if not isinstance(optimizer, DistributedOptimizer): + 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/imperative/python/megengine/optimizer/multi_step_lr.py b/imperative/python/megengine/optimizer/multi_step_lr.py new file mode 100644 index 00000000..45cc74c3 --- /dev/null +++ b/imperative/python/megengine/optimizer/multi_step_lr.py @@ -0,0 +1,75 @@ +# -*- 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 bisect import bisect_right +from typing import Iterable as Iter + +from .distributed_optimizer import DistributedOptimizer +from .lr_scheduler import LRScheduler + + +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: DistributedOptimizer, + 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/imperative/python/megengine/optimizer/optimizer.py b/imperative/python/megengine/optimizer/optimizer.py new file mode 100644 index 00000000..f5bf18b0 --- /dev/null +++ b/imperative/python/megengine/optimizer/optimizer.py @@ -0,0 +1,347 @@ +# -*- 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 contextlib import contextmanager +from typing import Dict +from typing import Iterable as Iter +from typing import Set, Union + +import numpy as np + +from ..core.autodiff.grad import Grad +from ..device import get_default_device +from ..distributed.group import get_client, is_distributed +from ..functional import add_update +from ..functional.distributed import all_reduce_sum, broadcast +from ..functional.utils import copy +from ..logger import get_logger +from ..tensor import Tensor, TensorDict +from ..tensor_nn import Buffer, Parameter + +logger = get_logger(__name__) + + +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. + """ + + _recording = None + _grad = None + _gradients = None + + def __init__( # pylint: disable=too-many-branches + self, params: Union[Iter[Parameter], dict], defaults: dict, + ): + self._state = TensorDict() + self._defaults = defaults + + 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 + self.save_load_state_ignore_keys = set() + + 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) + + 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(initializer) + state_dict[state_name] = state + + @abstractmethod + def _create_state(self, param_group): + pass + + @abstractmethod + def _updates(self, param_group): + pass + + def _get_params(self): + params = [] + for group in self.param_groups: + for param in group["params"]: + params.append(param) + return params + + def grad_callback(self, grad, i, group): + pass + + def record(self): + @contextmanager + def recorder(): + params = self._get_params() + grad = Grad() + gradients = [None] * len(params) + if self._recording: + raise RuntimeError("already recording!") + try: + self._recording = True + self._grad = grad + for group in self.param_groups: + group["grads"] = [None] * len(group["params"]) + for i, param in enumerate(group["params"]): + + def callback(tensor, grad, i=i, group=group, self=self): + group["grads"][i] = grad + self.grad_callback(grad, i, group) + + grad.wrt(param, callback=callback) + with grad: + yield + finally: + self._recording = False + self._grad = None + for group in self.param_groups: + group["grads"] = [] + + return recorder() + + def _calculate_gradients(self, loss: Tensor): + if not self._recording: + raise RuntimeError( + "no computation history. " + "did you forget record() or " + "call a method that clears the history?" + ) + assert self._grad is not None + + if len(loss.__wrapped__._extra_data) == 0: # in case loss depends on no tensor + self._grad = None + return + + one = Tensor([1.0], dtype=loss.dtype, device=loss.device) + one = one.reshape(loss.shape) + try: + self._grad(loss, one) + finally: + self._grad = None + + def minimize(self, loss: Tensor): + self.backward(loss) + self.step() + + def backward(self, loss: Tensor): + """Computes the back-propagation of the network given loss. + + :param loss: The obtained loss tensor + """ + rst = [] + self._calculate_gradients(loss) + + # _grad_skip records the parameters which are not in the path of backward + self._grad_skip = set() + for group in self.param_groups: + # _grad_skip is consumed in optimizer.step() + # XXX: assumptions + # 1. Assume the same execution sequence for all GPUs in data parallel + # 2. If backward is called by multiple times to accumulate grad, + # it's also assumed same _grad_skip for all backward() calls + # Please change the code if any assumption is invalid + for param, grad in zip(group["params"], group["grads"]): + if grad is None: + self._grad_skip.add(param.__wrapped__) + continue + grad = Buffer(grad) + if getattr(param, "grad", None) is None: + param.grad = grad + else: + assert isinstance(param.grad, Buffer) + param.grad += grad + rst.append(param.grad) + if len(self._grad_skip) > 0: + get_logger(__name__).warning( + "{} parameters have no grad! " + "Make sure you pass the right parameters list".format( + len(self._grad_skip) + ) + ) + return rst + + 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) + + def zero_grad(self): + r"""Reset the grad to zeros. + + """ + for param_group in self.param_groups: + for param in param_group["params"]: + if getattr(param, "grad", None) is not None: + param.grad = None + + def add_save_load_state_ignore_keys(self, keys: Set[str]): + self.save_load_state_ignore_keys |= keys + + 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" and k not in self.save_load_state_ignore_keys + } + 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): + self._state[p][k] = Buffer(v.numpy()) + + new_keys = set(group_new.keys()) - self.save_load_state_ignore_keys + saved_keys = set(group_saved.keys()) - self.save_load_state_ignore_keys + if new_keys != saved_keys: + raise ValueError( + "loaded state dict contains a parameter group that " + "doesn't match the keys of optimizer's group" + ) + for key in saved_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/imperative/python/megengine/optimizer/param_pack.py b/imperative/python/megengine/optimizer/param_pack.py new file mode 100644 index 00000000..ea117aa8 --- /dev/null +++ b/imperative/python/megengine/optimizer/param_pack.py @@ -0,0 +1,79 @@ +# -*- 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 import param_pack_concat, param_pack_split +from ..functional.distributed import all_reduce_sum +from ..tensor import Tensor + + +def get_offsets(shapes): + offsets = [] + offset = 0 + for shape in shapes: + offsets.append(offset) + offset += int(np.prod(shape)) + offsets.append(offset) + return offsets + + +def get_pack_list(param_group, param_pack_thd): + pack_list = dict() + shape_list = dict() + pack_sum = dict() + pack_ret, shape_ret = [], [] + ignore_first = 8 + ignore_last = 0 + orders_len = len(param_group["orders"]) + for i, idx in enumerate(param_group["orders"]): + param = param_group["params"][idx] + dtype = str(np.dtype(param.dtype)) + dtype_size = np.dtype(param.dtype).itemsize + shape = param.shape + if ignore_first > 0: + ignore_first -= 1 + pack_ret.append([idx]) + shape_ret.append([shape]) + continue + if dtype in pack_list.keys(): + pack_list[dtype].append(idx) + shape_list[dtype].append(shape) + pack_sum[dtype] += int(np.prod(shape)) + else: + pack_list[dtype] = [idx] + shape_list[dtype] = [shape] + pack_sum[dtype] = int(np.prod(shape)) + if ( + pack_sum[dtype] * dtype_size > param_pack_thd + or i + ignore_last > orders_len + ): + pack_ret.append(pack_list[dtype]) + shape_ret.append(shape_list[dtype]) + pack_list[dtype] = [] + shape_list[dtype] = [] + pack_sum[dtype] = 0 + for key in sorted(pack_list.keys()): + if len(pack_list[key]) > 0: + pack_ret.append(pack_list[key]) + shape_ret.append(shape_list[key]) + return pack_ret, shape_ret + + +def pack_allreduce_split(group, pack, shapes, reduce_method): + dist_group = group["dist_group"] + grads = [group["grads"][idx] for idx in pack] + offsets_val = get_offsets(shapes) + offsets = Tensor(offsets_val) + packed_grads = param_pack_concat(grads, offsets, offsets_val) + packed_grads = all_reduce_sum(packed_grads, dist_group, dist_group.comp_node) + if reduce_method == "mean": + packed_grads /= dist_group.size + grads = param_pack_split(packed_grads, offsets_val, shapes) + for i, grad in enumerate(grads): + group["grads"][pack[i]] = grad diff --git a/imperative/python/megengine/optimizer/sgd.py b/imperative/python/megengine/optimizer/sgd.py new file mode 100644 index 00000000..4dfb485b --- /dev/null +++ b/imperative/python/megengine/optimizer/sgd.py @@ -0,0 +1,81 @@ +# -*- 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 ..tensor_nn import Buffer, Parameter +from .distributed_optimizer import DistributedOptimizer + + +class SGD(DistributedOptimizer): + 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, + **kwargs + ): + 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, **kwargs) + + 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 param.__wrapped__ in self._grad_skip: + self._grad_skip.remove(param.__wrapped__) + continue + + 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 += param * weight_decay + + if momentum: + v = self._state[param]["momentum_buffer"] + v = momentum * v + grad + param -= lr * v + self._state[param]["momentum_buffer"]._reset(v) + else: + param -= lr * grad + + assert len(self._grad_skip) == 0 diff --git a/imperative/python/megengine/quantization/__init__.py b/imperative/python/megengine/quantization/__init__.py new file mode 100644 index 00000000..9c8a0e0d --- /dev/null +++ b/imperative/python/megengine/quantization/__init__.py @@ -0,0 +1,20 @@ +# 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/imperative/python/megengine/quantization/fake_quant.py b/imperative/python/megengine/quantization/fake_quant.py new file mode 100644 index 00000000..941445c3 --- /dev/null +++ b/imperative/python/megengine/quantization/fake_quant.py @@ -0,0 +1,154 @@ +# 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 typing import Iterable + +import numpy as np + +from .. import functional as F +from ..core.tensor.dtype import _metadata_dict, get_quantized_dtype +from ..core.tensor.function import Function +from ..module import Module +from ..tensor import Tensor +from ..tensor_nn import Parameter +from .utils import QuantMode, 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 + self.saved_tensors = () + + 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 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 = F.logical_and( + inp_scaled < -0.5 + self.lowerbound, inp_scaled > self.upperbound + 0.5 + ) # mask for accumulating the gradients of |data_scaled|>L + mask_quant = F.logical_not(mask_clip) + 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) / math.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/imperative/python/megengine/quantization/internal_fake_quant.py b/imperative/python/megengine/quantization/internal_fake_quant.py new file mode 100644 index 00000000..02d1d897 --- /dev/null +++ b/imperative/python/megengine/quantization/internal_fake_quant.py @@ -0,0 +1,19 @@ +# 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.tensor.function import Function +from .fake_quant import _FakeQuantize +from .observer import MinMaxObserver +from .qconfig import QConfig + diff --git a/imperative/python/megengine/quantization/observer.py b/imperative/python/megengine/quantization/observer.py new file mode 100644 index 00000000..3aa61082 --- /dev/null +++ b/imperative/python/megengine/quantization/observer.py @@ -0,0 +1,404 @@ +# 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 + +import numpy as np + +from .. import functional as F +from ..core.tensor.dtype import _metadata_dict, get_quantized_dtype +from ..module import Module +from ..tensor_nn import Buffer +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 = x_orig.detach() + # find max and min + self.min_val = F.minimum(self.min_val, x.min()) + self.max_val = F.maximum(self.max_val, x.max()) + 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 = x_orig.detach() + # Exponential Moving Average + self.min_val = ( + self.min_val * self.runtime_momentum + + (1 - self.runtime_momentum) * x.min() + ) + self.max_val = ( + self.max_val * self.runtime_momentum + + (1 - self.runtime_momentum) * x.max() + ) + self.runtime_momentum = self.momentum + + 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 + + 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/imperative/python/megengine/quantization/qconfig.py b/imperative/python/megengine/quantization/qconfig.py new file mode 100644 index 00000000..6606c1a5 --- /dev/null +++ b/imperative/python/megengine/quantization/qconfig.py @@ -0,0 +1,109 @@ +# 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/imperative/python/megengine/quantization/quantize.py b/imperative/python/megengine/quantization/quantize.py new file mode 100644 index 00000000..5dab2ae4 --- /dev/null +++ b/imperative/python/megengine/quantization/quantize.py @@ -0,0 +1,191 @@ +# 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/imperative/python/megengine/quantization/utils.py b/imperative/python/megengine/quantization/utils.py new file mode 100644 index 00000000..810bbbb3 --- /dev/null +++ b/imperative/python/megengine/quantization/utils.py @@ -0,0 +1,116 @@ +# 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 ..core.tensor.dtype import _metadata_dict +from ..core.tensor.function import Function +from ..tensor import 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 F.round(x) + + 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/imperative/python/megengine/random/__init__.py b/imperative/python/megengine/random/__init__.py new file mode 100644 index 00000000..86c8d797 --- /dev/null +++ b/imperative/python/megengine/random/__init__.py @@ -0,0 +1,13 @@ +# -*- 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/imperative/python/megengine/random/distribution.py b/imperative/python/megengine/random/distribution.py new file mode 100644 index 00000000..2f4655af --- /dev/null +++ b/imperative/python/megengine/random/distribution.py @@ -0,0 +1,85 @@ +# -*- 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 + +from .. import Tensor +from ..core._imperative_rt import invoke_op +from ..core.ops.builtin import GaussianRNG, UniformRNG +from ..core.tensor import utils +from ..core.tensor.core import apply +from .rng import _random_seed_generator + +__all__ = ["gaussian", "uniform"] + + +def gaussian(shape: Iterable[int], mean: float = 0, std: float = 1,) -> 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$) + :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 ]] + + """ + seed = _random_seed_generator().__next__() + op = GaussianRNG(seed=seed, mean=mean, std=std) + shape = Tensor(shape, dtype="int32") + (output,) = apply(op, shape) + return output + + +def uniform(shape: Iterable[int], low: float = 0, high: float = 1,) -> Tensor: + r"""Random variable with uniform distribution $U(0, 1)$ + + :param shape: Output tensor shape + :param low: Lower range + :param high: Upper range + :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" + + seed = _random_seed_generator().__next__() + op = UniformRNG(seed=seed) + shape = Tensor(shape, dtype="int32") + (output,) = apply(op, shape) + + return low + (high - low) * output diff --git a/imperative/python/megengine/random/rng.py b/imperative/python/megengine/random/rng.py new file mode 100644 index 00000000..992c6a49 --- /dev/null +++ b/imperative/python/megengine/random/rng.py @@ -0,0 +1,27 @@ +# -*- 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.group 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/imperative/python/megengine/serialization.py b/imperative/python/megengine/serialization.py new file mode 100644 index 00000000..300d92b5 --- /dev/null +++ b/imperative/python/megengine/serialization.py @@ -0,0 +1,125 @@ +# -*- 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 .device import _valid_device, get_default_device +from .tensor import Tensor +from .utils.max_recursion_limit import max_recursion_limit + + +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): + Tensor.dmap_callback = staticmethod(self.map_location) + return self + + def __exit__(self, type, value, traceback): + Tensor.dmap_callback = None + + +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): + for key, value in map_location.items(): + # dict key and values can only be "xpux", "cpux", "gpu0", etc. + assert _valid_device(key), "Invalid locator_map key value {}".format(key) + assert _valid_device(value), "Invalid locator_map key value {}".format( + value + ) + + def callable_map_location(state): + if state[:4] in map_location.keys(): + state = map_location[state[:4]] + 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 defines device mapping. See examples for usage. + + :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 + # Load tensors to the same device as defined in model.mge + mge.load('model.mge') + # Load all tensors to gpu0. + mge.load('model.mge', map_location='gpu0') + # Load all tensors originally on gpu0 to cpu0 + mge.load('model.mge', map_location={'gpu0':'cpu0'}) + # Load all tensors to cpu0 + mge.load('model.mge', map_location=lambda dev: '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) as dm: + return pickle_module.load(f) diff --git a/imperative/python/megengine/tensor.py b/imperative/python/megengine/tensor.py new file mode 100644 index 00000000..1848463c --- /dev/null +++ b/imperative/python/megengine/tensor.py @@ -0,0 +1,120 @@ +# -*- 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 .core import Tensor as _Tensor +from .device import get_default_device + + +class Tensor(_Tensor): + requires_grad = False + dmap_callback = None + + def __init__(self, data, dtype=None, device=None): + if device is None: + device = get_default_device() + self.q_dict = {"mode": None, "scale": None, "zero_point": None} + super().__init__(data, dtype=dtype, device=device) + + def set_value(self, value): + self._reset(value) + + def reset_zero(self): + self *= 0 + + def __getstate__(self): + r""" __getstate__ will be called for pickle serialization or deep copy + """ + + state = { + "data": self.numpy(), + "device": str(self.device), + "dtype": self.dtype, + "qdict": self.q_dict, + } + return state + + def __setstate__(self, state): + data = state.pop("data") + device = state.pop("device") + if self.dmap_callback is not None: + assert isinstance(device, str) + device = self.dmap_callback(device) + dtype = state.pop("dtype") + self.q_dict = state.pop("qdict") + super().__init__(data, dtype=dtype, device=device) + + def detach(self): + r""" + Returns a new tensor which is treated as constant during backward gradient calcuation, + i.e. its gradient is zero. + + :param inp: input tensor + + """ + Wrapper = type(self) + Tensor = type(self.__wrapped__) + return Wrapper(Tensor(self.__wrapped__._data)) + + +tensor = Tensor + + +class Dict(collections.MutableMapping): + def __init__(self, *args, key=None, **kwargs): + self.data = {} + if key: + self.keyfn = key + for i in args: + self.update(i) + self.update(**kwargs) + + @staticmethod + def keyfn(key): # pylint: disable=method-hidden + return key + + 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) + + +class TensorDict(Dict): # pylint: disable=too-many-ancestors + 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): + # pylint: disable=undefined-variable + return isinstance(other, __class__) and id(self._data) == id(other._data) + + def __init__(self, *args): + super().__init__(*args) diff --git a/imperative/python/megengine/tensor_nn.py b/imperative/python/megengine/tensor_nn.py new file mode 100644 index 00000000..0c4916fb --- /dev/null +++ b/imperative/python/megengine/tensor_nn.py @@ -0,0 +1,20 @@ +# -*- 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 . import Tensor, tensor + + +class Buffer(Tensor): + r"""A kind of Tensor with ``requires_grad=False``. + """ + + +class Parameter(Tensor): + r"""A kind of Tensor that is to be considered a module parameter. + """ + requires_grad = True diff --git a/imperative/python/megengine/test/__init__.py b/imperative/python/megengine/test/__init__.py new file mode 100644 index 00000000..44ed54c2 --- /dev/null +++ b/imperative/python/megengine/test/__init__.py @@ -0,0 +1,67 @@ +# -*- 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/imperative/python/megengine/utils/__init__.py b/imperative/python/megengine/utils/__init__.py new file mode 100644 index 00000000..1207b5d9 --- /dev/null +++ b/imperative/python/megengine/utils/__init__.py @@ -0,0 +1,8 @@ +# -*- 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. diff --git a/imperative/python/megengine/utils/_timed_func_fork_exec_entry.py b/imperative/python/megengine/utils/_timed_func_fork_exec_entry.py new file mode 100644 index 00000000..b962d365 --- /dev/null +++ b/imperative/python/megengine/utils/_timed_func_fork_exec_entry.py @@ -0,0 +1,36 @@ +# -*- 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 + +from megengine.core._imperative_rt.utils import _timed_func_exec_cb + +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())) + _timed_func_exec_cb(args.user_data) + raise SystemError("_timed_func_exec_cb returned") + + +if __name__ == "__main__": + main() diff --git a/imperative/python/megengine/utils/hook.py b/imperative/python/megengine/utils/hook.py new file mode 100644 index 00000000..9864a94a --- /dev/null +++ b/imperative/python/megengine/utils/hook.py @@ -0,0 +1,23 @@ +# 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/imperative/python/megengine/utils/http_download.py b/imperative/python/megengine/utils/http_download.py new file mode 100644 index 00000000..add2a649 --- /dev/null +++ b/imperative/python/megengine/utils/http_download.py @@ -0,0 +1,66 @@ +# -*- 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/imperative/python/megengine/utils/max_recursion_limit.py b/imperative/python/megengine/utils/max_recursion_limit.py new file mode 100644 index 00000000..0870b7fa --- /dev/null +++ b/imperative/python/megengine/utils/max_recursion_limit.py @@ -0,0 +1,60 @@ +# -*- 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 resource +import sys +import threading + + +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() + ( + self.orig_rlim_stack_soft, + self.orig_rlim_stack_hard, + ) = resource.getrlimit(resource.RLIMIT_STACK) + resource.setrlimit( + resource.RLIMIT_STACK, + (self.orig_rlim_stack_hard, self.orig_rlim_stack_hard), + ) + # 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) + resource.setrlimit( + resource.RLIMIT_STACK, + (self.orig_rlim_stack_soft, self.orig_rlim_stack_hard), + ) + + +_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/imperative/python/megengine/utils/net_stats.py b/imperative/python/megengine/utils/net_stats.py new file mode 100644 index 00000000..c8a81d99 --- /dev/null +++ b/imperative/python/megengine/utils/net_stats.py @@ -0,0 +1,280 @@ +# 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.core.tensor.dtype as dtype +import megengine.module as m +import megengine.module.qat as qatm +import megengine.module.quantized as qm +from megengine.functional.tensor import zeros + +try: + mge.logger.MegEngineLogFormatter.max_lines = float("inf") +except AttributeError as e: + raise ValueError("set logger max lines failed") + +logger = mge.get_logger(__name__) +logger.setLevel("INFO") + + +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): + if dtype.is_quantize(tensor.dtype): + return 1 + # elif dtype.is_bfloat16(tensor.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 = [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/imperative/python/megengine/utils/profile_analyze.py b/imperative/python/megengine/utils/profile_analyze.py new file mode 100755 index 00000000..8041c0d8 --- /dev/null +++ b/imperative/python/megengine/utils/profile_analyze.py @@ -0,0 +1,424 @@ +# -*- 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/imperative/python/megengine/utils/profile_analyzer.py b/imperative/python/megengine/utils/profile_analyzer.py new file mode 100644 index 00000000..75cc0c0c --- /dev/null +++ b/imperative/python/megengine/utils/profile_analyzer.py @@ -0,0 +1,401 @@ +# -*- 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/imperative/python/megengine/utils/profiler.py b/imperative/python/megengine/utils/profiler.py new file mode 100644 index 00000000..12dae2d2 --- /dev/null +++ b/imperative/python/megengine/utils/profiler.py @@ -0,0 +1,29 @@ +# -*- 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 + +from ..core._imperative_rt import ProfilerImpl +from ..core._imperative_rt.imperative import sync + + +class Profiler: + def __init__(self, path: Optional[str] = None): + self.impl = ProfilerImpl(path) + + def __enter__(self): + sync() + self.impl.enable() + return self + + def __exit__(self, val, type, trace): + sync() + self.impl.disable() + + def dump(self, path: Optional[str] = None): + self.impl.dump(path) diff --git a/imperative/python/megengine/utils/types.py b/imperative/python/megengine/utils/types.py new file mode 100644 index 00000000..465ca03c --- /dev/null +++ b/imperative/python/megengine/utils/types.py @@ -0,0 +1,37 @@ +# -*- 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/imperative/python/megengine/version.py b/imperative/python/megengine/version.py new file mode 100644 index 00000000..e4ce488f --- /dev/null +++ b/imperative/python/megengine/version.py @@ -0,0 +1,10 @@ +# -*- 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__ = "0.8.0" + diff --git a/imperative/python/requires-style.txt b/imperative/python/requires-style.txt new file mode 100644 index 00000000..899aac52 --- /dev/null +++ b/imperative/python/requires-style.txt @@ -0,0 +1,4 @@ +black==19.10b0 +isort==4.3.21 +pylint==2.4.3 +mypy==0.750 diff --git a/imperative/python/requires-test.txt b/imperative/python/requires-test.txt new file mode 100644 index 00000000..545de8af --- /dev/null +++ b/imperative/python/requires-test.txt @@ -0,0 +1 @@ +pytest==5.3.0 diff --git a/imperative/python/requires.txt b/imperative/python/requires.txt new file mode 100644 index 00000000..a2d8a55d --- /dev/null +++ b/imperative/python/requires.txt @@ -0,0 +1,8 @@ +numpy>=1.18 +multipledispatch==0.6.0 +opencv-python +pyarrow +requests +tabulate +tqdm +redispy diff --git a/imperative/python/setup.py b/imperative/python/setup.py new file mode 100644 index 00000000..e583cce4 --- /dev/null +++ b/imperative/python/setup.py @@ -0,0 +1,103 @@ +# -*- 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 pathlib +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('.') + 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']) + +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, + ext_modules=[PrecompiledExtesion('megengine.core._imperative_rt')], + 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/imperative/python/src/common.cpp b/imperative/python/src/common.cpp new file mode 100644 index 00000000..047a0f80 --- /dev/null +++ b/imperative/python/src/common.cpp @@ -0,0 +1,117 @@ +#include "./common.h" + +#include + +#include "megbrain/comp_node.h" +#include "megbrain/graph.h" +#include "megbrain/imperative/physical_tensor.h" +#include "./numpy_dtypes.h" +#include "./helper.h" + +namespace py = pybind11; +using namespace mgb; +using namespace imperative; + +void init_common(py::module m) { + py::class_(m, "CompNode") + .def(py::init()) + .def(py::init(py::overload_cast(&CompNode::load))) + .def("__str__", &CompNode::to_string) + .def_static("_sync_all", &CompNode::sync_all) + .def(py::self == py::self) + .def_static("_get_device_count", &CompNode::get_device_count, + "Get total number of specific devices on this system") + .def(py::pickle( + [](const CompNode& cn) { + return py::str(cn.to_string_logical()); + }, + [](py::str cn) { + return CompNode::load(cn); + })); + + py::implicitly_convertible(); + + py::class_(m, "DeviceTensorND") + .def(py::init()) + .def_property_readonly("shape", py::overload_cast<>(&DeviceTensorND::shape, py::const_)) + .def_property_readonly("dtype", py::overload_cast<>(&DeviceTensorND::dtype, py::const_)) + .def_property_readonly("comp_node", py::overload_cast<>(&DeviceTensorND::comp_node, py::const_)) + .def("numpy", [](const DeviceTensorND& self) { + HostTensorND hv; + hv.copy_from(self).sync(); + return py::handle(npy::ndarray_from_tensor(hv, npy::ShareType::TRY_SHARE)); + }); + + py::class_(m, "OperatorNodeConfig") + .def(py::init()) + .def_property("name", + [](const OperatorNodeConfig& config) -> py::object { + auto name = config.name(); + if (name.valid()) { + return py::str(name.val()); + } else { + return py::none(); + } + }, + [](OperatorNodeConfig& config, std::string name){ + config.name(std::move(name)); + }) + .def_property("dtype", + [](const OperatorNodeConfig& config) { + return config.output_dtype(); + }, + [](OperatorNodeConfig& config, DType dtype) { + config.output_dtype(dtype); + }) + .def_property("comp_node_arr", + [](const OperatorNodeConfig& config) -> py::tuple { + auto arr = config.comp_node(); + std::vector tmp(arr.begin(), arr.end()); + return py::cast(tmp); + }, + [](OperatorNodeConfig& config, std::vector cns) { + config.comp_node_arr({cns.begin(), cns.end()}); + }) + .def_property("comp_node", + [](const OperatorNodeConfig& config) { + auto arr = config.comp_node(); + if (arr.size() != 1) { + throw py::value_error("invalid number of comp_node"); + } + return arr[0]; + }, + [](OperatorNodeConfig& config, CompNode cn) { + OperatorNodeConfig::CompNodeArray arr{cn}; + config.comp_node_arr(arr); + }); + + py::class_(m, "TensorAttr") + .def(py::init()) + .def(py::init([](const TensorShape& shape, const DType& dtype, const CompNode& comp_node){ + return LogicalTensorDesc{TensorLayout{shape, dtype}, comp_node}; + })) + .def_property("shape", + [](const LogicalTensorDesc& desc) { + return static_cast(desc.layout); + }, + [](LogicalTensorDesc& desc, TensorShape shape) { + }) + .def_property("dtype", + [](const LogicalTensorDesc& desc) { + return desc.layout.dtype; + }, + [](LogicalTensorDesc& desc, DType dtype) { + desc.layout.dtype = dtype; + }) + .def_readwrite("comp_node", &LogicalTensorDesc::comp_node); + + py::enum_(m, "DeviceType") + .value("UNSPEC", CompNode::DeviceType::UNSPEC) + .value("CUDA", CompNode::DeviceType::CUDA) + .value("CPU", CompNode::DeviceType::CPU) + .value("MULTITHREAD", CompNode::DeviceType::MULTITHREAD) + .value("MAX_DEVICE_ID", CompNode::DeviceType::MAX_DEVICE_ID); + + init_npy_num_bfloat16(m); + init_npy_num_intbx(m); +} diff --git a/imperative/python/src/common.h b/imperative/python/src/common.h new file mode 100644 index 00000000..582019b8 --- /dev/null +++ b/imperative/python/src/common.h @@ -0,0 +1,5 @@ +#pragma once + +#include "./helper.h" + +void init_common(pybind11::module m); diff --git a/imperative/python/src/graph_rt.cpp b/imperative/python/src/graph_rt.cpp new file mode 100644 index 00000000..022bbf8c --- /dev/null +++ b/imperative/python/src/graph_rt.cpp @@ -0,0 +1,191 @@ +#include "./graph_rt.h" + +#include "megbrain/imperative/opr_utility.h" +#include "megbrain/opr/basic_arith.h" +#include "megbrain/imperative.h" +#include "./helper.h" + +namespace py = pybind11; + +using namespace mgb; +using namespace imperative; + +#define DEF_READWRITE(name) .def_readwrite(#name, &CURRENT_CLASS::name) + +template +auto def_rendezvous(py::object m, const char* name) { + return py::class_, std::shared_ptr>>(m, name) + .def(py::init([](){return std::make_shared>();})) + .def("set", [](Rendezvous& r, T v) {r.set(std::move(v));}) + .def("get", [](Rendezvous& r) {return r.get();}, py::call_guard()) + .def("reset", &Rendezvous::reset); +} + +using TensorAttr = LogicalTensorDesc; + +void init_graph_rt(py::module m) { + def_rendezvous(m, "DeviceTensorNDRendezvous"); + + def_rendezvous(m, "TensorAttrRendezvous"); + + py::class_>(m, "VarNode") + .def_property_readonly("owner", [](cg::VarNode* v) {return v->owner_opr();}) + .def_property_readonly("graph", [](cg::VarNode* v) {return v->owner_graph();}) + .def_property_readonly("dtype", [](cg::VarNode* v) {return v->dtype();}) + .def_property_readonly("comp_node", [](cg::VarNode* v) {return v->comp_node();}); + + py::class_>(m, "OperatorNode") + .def_property_readonly("graph", [](cg::OperatorNodeBase* opr) {return opr->owner_graph();}) + .def_property_readonly("inputs", [](cg::OperatorNodeBase* opr) { + return to_tuple(opr->input()); + }) + .def_property_readonly("outputs", [](cg::OperatorNodeBase* opr) { + return to_tuple(opr->output()); + }); + + py::class_(m, "AsyncExecutable") + .def("execute", &cg::AsyncExecutable::execute, py::call_guard()) + .def("wait", &cg::AsyncExecutable::wait, py::call_guard()); + + auto PyComputingGraph = py::class_>(m, "ComputingGraph") + .def(py::init(py::overload_cast<>(&cg::ComputingGraph::make))) + .def("compile", [](cg::ComputingGraph& graph, const std::vector& dest_vars) { + mgb_assert(!dest_vars.empty()); + cg::ComputingGraph::OutputSpec spec; + for (auto v : dest_vars) { + spec.emplace_back(v, nullptr); + } + return graph.compile(spec); + }) + .def_property_readonly("options", py::overload_cast<>(&cg::ComputingGraph::options)); + +#define CURRENT_CLASS cg::ComputingGraph::Options + + auto PyComputingGraphOptions = py::class_(PyComputingGraph, "Options") + // DEF_READWRITE(opr_attribute) + DEF_READWRITE(seq_opt) + DEF_READWRITE(graph_opt) + DEF_READWRITE(graph_opt_level) + DEF_READWRITE(log_level) + DEF_READWRITE(async_exec_level) + DEF_READWRITE(force_dynamic_alloc) + DEF_READWRITE(var_sanity_check_first_run) + DEF_READWRITE(allocate_static_mem_after_graph_compile) + DEF_READWRITE(fake_next_exec) + DEF_READWRITE(enable_sublinear_memory_opt) + DEF_READWRITE(no_profiling_on_shape_change) + DEF_READWRITE(enable_var_mem_defragment) + DEF_READWRITE(enable_grad_var_static_reshape) + DEF_READWRITE(enable_memory_swap) + DEF_READWRITE(comp_node_seq_record_level) + // DEF_READWRITE(eager_evaluation) + // DEF_READWRITE(imperative_proxy_graph) + // DEF_READWRITE(extra_vardeps) + // DEF_READWRITE(user_data) + ; + +#undef CURRENT_CLASS +#define CURRENT_CLASS cg::ComputingGraph::Options::SeqOpt + + py::class_(PyComputingGraphOptions, "SeqOpt") + DEF_READWRITE(enable_mem_plan_opt) + DEF_READWRITE(enable_mem_reuse_alloc) + DEF_READWRITE(enable_seq_comp_node_opt); + +#undef CURRENT_CLASS +#define CURRENT_CLASS cg::ComputingGraph::Options::GraphOpt + + py::class_(PyComputingGraphOptions, "GraphOpt") + DEF_READWRITE(jit) + DEF_READWRITE(tensorrt); + +#undef CURRENT_CLASS + + auto common = rel_import("common", m, 1); + + common.def("invoke_op", [](const OpDef& def, const std::vector inputs, cg::ComputingGraph* graph) { + cg::VarNodeArray vinputs(inputs.begin(), inputs.end()); + auto opr = OpDef::apply_on_var_node(def, vinputs); + auto outputs = opr->output(); + return to_tuple(outputs); + }, + py::arg(), py::arg(), py::arg("graph") = py::none()); + + auto input_callback = [](auto callback, + const CompNode& comp_node, + const DType& dtype, + const std::vector& inputs, + cg::ComputingGraph* graph) { + if (!graph) { + graph = inputs[0]->owner_graph(); + } + SymbolVarArray sinputs; + for (auto i : inputs) { + sinputs.emplace_back(i); + } + static_assert(!std::is_reference::value); + auto soutputs = opr::InputCallback::make(*graph, std::move(callback), comp_node, dtype, sinputs); + std::vector outputs; + outputs.reserve(soutputs.size()); + for (auto i : soutputs) { + outputs.push_back(i.node()); + } + return outputs; + }; + + m.def("input_callback", [input_callback](std::function callback, + const CompNode& comp_node, + const DType& dtype, + const std::vector& inputs, + cg::ComputingGraph* graph) { + return input_callback([f=std::move(callback)](){py::gil_scoped_acquire _; return f();}, comp_node, dtype, inputs, graph); + }, + py::arg(), py::arg(), py::arg(), py::arg() = py::tuple(), py::arg("graph") = py::none()); + + m.def("input_callback", [input_callback](std::shared_ptr> p, + const CompNode& comp_node, + const DType& dtype, + const std::vector& inputs, + cg::ComputingGraph* graph) { + auto f = [p]() -> DeviceTensorND { + return p->get(); + }; + return input_callback(std::move(f), comp_node, dtype, inputs, graph); + }, + py::arg(), py::arg(), py::arg(), py::arg() = py::tuple(), py::arg("graph") = py::none()); + + auto output_callback = [](auto callback, const std::vector& inputs, bool borrow = false) { + SymbolVarArray sinputs; + for (auto i : inputs) { + sinputs.emplace_back(i); + } + static_assert(!std::is_reference::value); + opr::OutputCallback::Param param{std::move(callback), borrow}; + auto output = opr::OutputCallback::make(std::move(param), sinputs); + return output.node(); + }; + + m.def("output_callback", [output_callback](std::function callback, std::vector inputs) { + auto f = [f=std::move(callback)](DeviceTensorND dv) { + auto task = [f=std::move(f), dv=std::move(dv)]() { + f(dv); + }; + py_task_q.add_task(std::move(task)); + }; + return output_callback(std::move(f), std::move(inputs)); + }); + + m.def("output_callback", [output_callback](std::shared_ptr> p, std::vector inputs) { + auto f = [p](DeviceTensorND dv) { + p->set(std::move(dv)); + }; + return output_callback(std::move(f), std::move(inputs)); + }); + + m.def("attr_output_callback", [output_callback](std::shared_ptr> p, std::vector inputs) { + auto f = [p](DeviceTensorND dv) { + p->set(TensorAttr{TensorLayout{dv.shape(), dv.dtype()}, dv.comp_node()}); + }; + return output_callback(std::move(f), std::move(inputs), true); + }); +} diff --git a/imperative/python/src/graph_rt.h b/imperative/python/src/graph_rt.h new file mode 100644 index 00000000..fbc127c4 --- /dev/null +++ b/imperative/python/src/graph_rt.h @@ -0,0 +1,78 @@ +#pragma once + +#include "./helper.h" + +#include +#include +#include + +#include "megbrain/graph.h" + +template +class GraphNodePtr { + std::shared_ptr m_graph; + T* m_node; +public: + GraphNodePtr(T* node) : + m_graph(node ? nullptr : node->owner_graph()->shared_from_this()), + m_node(node) {} + T* operator->() {return m_node;} + T& operator*() {return *m_node;} + operator bool() {return m_node;} + T* get() {return m_node;} +}; + +PYBIND11_DECLARE_HOLDER_TYPE(T, GraphNodePtr, true); + +template +class Rendezvous { + std::mutex m_lock; + int m_read_ahead = 0; + std::promise m_promise; +public: + Rendezvous() = default; + Rendezvous(const Rendezvous& rhs) = delete; + Rendezvous(Rendezvous&& rhs) = default; + Rendezvous& operator=(const Rendezvous& rhs) = delete; + Rendezvous& operator=(Rendezvous&& rhs) { + MGB_LOCK_GUARD(m_lock); + m_read_ahead = rhs.m_read_ahead; + m_promise = std::move(rhs.m_promise); + return *this; + } + + R get() { + std::future f; + { + MGB_LOCK_GUARD(m_lock); + mgb_assert(m_read_ahead <= 0); + mgb_assert(m_read_ahead >= -1); + f = m_promise.get_future(); + if (m_read_ahead == -1) { + m_promise = {}; + } + ++m_read_ahead; + } + return f.get(); + } + + template + void set(T&& value) { + MGB_LOCK_GUARD(m_lock); + mgb_assert(m_read_ahead >= 0); + mgb_assert(m_read_ahead <= 1); + m_promise.set_value(std::forward(value)); + if (m_read_ahead == 1) { + m_promise = {}; + } + --m_read_ahead; + } + + void reset() { + MGB_LOCK_GUARD(m_lock); + m_promise = {}; + m_read_ahead = 0; + } +}; + +void init_graph_rt(pybind11::module m); diff --git a/imperative/python/src/helper.cpp b/imperative/python/src/helper.cpp new file mode 100644 index 00000000..a1b8b277 --- /dev/null +++ b/imperative/python/src/helper.cpp @@ -0,0 +1,705 @@ +#include "./helper.h" + +#include + +#include "megbrain/graph/exc_extra_info.h" +#include "megbrain/graph/event.h" +#include "megbrain/graph/cg.h" +#include "megbrain/tensor.h" +#include "megbrain/utils/mempool.h" +#include "./numpy_dtypes.h" + +/* + * demangle typeid, see + * http://stackoverflow.com/questions/281818/unmangling-the-result-of-stdtype-infoname + */ +#ifdef __GNUG__ +#include +#include +#include + +namespace py = pybind11; + +PyTaskDipatcher py_task_q = {}; + +py::module submodule(py::module parent, const char* name, const char* doc) { + auto m = parent.def_submodule(name, doc); + m.attr("__package__") = parent.attr("__name__"); + m.attr("__builtins__") = py::module::import("builtins"); + return m; +} + +py::module rel_import(py::str name, py::module m, int level) { + py::object import = py::module::import("builtins").attr("__import__"); + return import(name, m.attr("__dict__"), py::arg("level")=level); +} + +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; + +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 + +/* ============== 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) \ + cb(Bool, NPY_BOOL) + +#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::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::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::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, const npy::Meth& meth, DType dtype) { + auto dest_cn = meth.dest_cn_; + 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 may be stolen + auto make_from_arr = [&](PyArrayObject *input, bool allow_borrow) { + + 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); + if (meth.dest_tensor_) { + meth.dest_tensor_->copy_from(ret); + ret = *meth.dest_tensor_; + } + 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()); + } + + if (!meth.dest_tensor_ && allow_borrow) { + Py_INCREF(input); + PyObjRefKeeper ref_obj_cvt{reinterpret_cast(input)}; + 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, true); + } else { + auto storage = HostTensorStorage(dest_cn); + storage.ensure_size(layout.span().dist_byte()); + memcpy(storage.ptr(), data, layout.span().dist_byte()); + HostTensorND ret{dest_cn, layout.dtype}; + if (meth.dest_tensor_) { + meth.dest_tensor_->reset(storage, layout); + return std::make_pair(*meth.dest_tensor_, false); + } else { + HostTensorND ret; + ret.reset(storage, layout); + return std::make_pair(ret, false); + } + } + }; + + 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)) { + 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())); + } + + auto ret = make_from_arr(reinterpret_cast(obj_cvt), false); + Py_DECREF(obj_cvt); + return ret; +} + +//! 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, dtype); + 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; +} diff --git a/imperative/python/src/helper.h b/imperative/python/src/helper.h new file mode 100644 index 00000000..f97b6fd0 --- /dev/null +++ b/imperative/python/src/helper.h @@ -0,0 +1,320 @@ +#pragma once + +#include "megbrain/graph.h" + +#include +#include +#include +#if __cplusplus > 201703L +#include +#endif +#include +#include +#include +#include + +pybind11::module submodule(pybind11::module parent, const char* name, const char* doc = nullptr); + +pybind11::module rel_import(pybind11::str name, pybind11::module m, int level); + +#if __cplusplus > 201703L +using std::ranges::range_value_t; +#else +template +using range_value_t = std::remove_cv_t().begin())>>; +#endif + +template +auto to_list(const T& x) { + using elem_t = range_value_t; + std::vector ret(x.begin(), x.end()); + return pybind11::cast(ret); +} + +template +auto to_tuple(const T& x, pybind11::return_value_policy policy = pybind11::return_value_policy::automatic) { + auto ret = pybind11::tuple(x.size()); + for (size_t i = 0; i < x.size(); ++i) { + ret[i] = pybind11::cast(x[i], policy); + } + return ret; +} + +template +auto to_tuple(T begin, T end, pybind11::return_value_policy policy = pybind11::return_value_policy::automatic) { + auto ret = pybind11::tuple(end - begin); + for (size_t i = 0; begin < end; ++begin, ++i) { + ret[i] = pybind11::cast(*begin, policy); + } + return ret; +} + +class PyTaskDipatcher { + struct Queue : mgb::AsyncQueueSC, Queue> { + using Task = std::function; + void process_one_task(Task& f) { + if (!Py_IsInitialized()) return; + pybind11::gil_scoped_acquire _; + f(); + } + }; + Queue queue; + bool finalized = false; +public: + template + void add_task(T&& task) { + // CPython never dlclose an extension so + // finalized means the interpreter has been shutdown + if (!finalized) { + queue.add_task(std::forward(task)); + } + } + void wait_all_task_finish() { + queue.wait_all_task_finish(); + } + ~PyTaskDipatcher() { + finalized = true; + queue.wait_all_task_finish(); + } +}; + +extern PyTaskDipatcher py_task_q; + +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) { + py_task_q.add_task([p](){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}; + } +}; + +//! 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(); } +}; + +//! 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); +} + +// Note: following macro was copied from pybind11/detail/common.h +// Robust support for some features and loading modules compiled against different pybind versions +// requires forcing hidden visibility on pybind code, so we enforce this by setting the attribute on +// the main `pybind11` namespace. +#if !defined(PYBIND11_NAMESPACE) +# ifdef __GNUG__ +# define PYBIND11_NAMESPACE pybind11 __attribute__((visibility("hidden"))) +# else +# define PYBIND11_NAMESPACE pybind11 +# endif +#endif + +namespace PYBIND11_NAMESPACE { +namespace detail { + + template struct type_caster> + : list_caster, T> {}; + + template <> struct type_caster { + PYBIND11_TYPE_CASTER(mgb::DType, _("DType")); + public: + bool load(handle src, bool convert) { + auto obj = reinterpret_borrow(src); + if (!convert && !isinstance(obj)) { + return false; + } + if (obj.is_none()) { + return true; + } + try { + obj = pybind11::dtype::from_args(obj); + } catch (pybind11::error_already_set&) { + return false; + } + try { + value = npy::dtype_np2mgb(obj.ptr()); + } catch (...) { + return false; + } + return true; + } + + static handle cast(mgb::DType dt, return_value_policy /* policy */, handle /* parent */) { + // ignore policy and parent because we always return a pure python object + return npy::dtype_mgb2np(std::move(dt)); + } + }; + + template <> struct type_caster { + PYBIND11_TYPE_CASTER(mgb::TensorShape, _("TensorShape")); + public: + bool load(handle src, bool convert) { + auto obj = reinterpret_steal(src); + if (!isinstance(obj)) { + return false; + } + value.ndim = len(obj); + mgb_assert(value.ndim <= mgb::TensorShape::MAX_NDIM); + size_t i = 0; + for (auto v : obj) { + mgb_assert(i < value.ndim); + value.shape[i] = reinterpret_borrow(v).cast(); + ++i; + } + return true; + } + + static handle cast(mgb::TensorShape shape, return_value_policy /* policy */, handle /* parent */) { + // ignore policy and parent because we always return a pure python object + return to_tuple(shape.shape, shape.shape + shape.ndim).release(); + } + }; + + // hack to make custom object implicitly convertible from None + template struct from_none_caster : public type_caster_base { + using base = type_caster_base; + bool load(handle src, bool convert) { + if (!convert || !src.is_none()) { + return base::load(src, convert); + } + // adapted from pybind11::implicitly_convertible + auto temp = reinterpret_steal(PyObject_Call( + (PyObject*) this->typeinfo->type, tuple().ptr(), nullptr)); + if (!temp) { + PyErr_Clear(); + return false; + } + // adapted from pybind11::detail::type_caster_generic + if (base::load(temp, false)) { + loader_life_support::add_patient(temp); + return true; + } + return false; + } + }; + + template<> struct type_caster : public from_none_caster {}; + +} // detail +} // PYBIND11_NAMESPACE + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/python/src/imperative_rt.cpp b/imperative/python/src/imperative_rt.cpp new file mode 100644 index 00000000..6e33832a --- /dev/null +++ b/imperative/python/src/imperative_rt.cpp @@ -0,0 +1,94 @@ +#include "./imperative_rt.h" + +#include +#include +#include +#include +#include + +#include "megbrain/imperative.h" +#include "megbrain/imperative/interpreter.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "./helper.h" + +namespace py = pybind11; + +using namespace mgb; +using namespace imperative; +using namespace interpreter; + + +namespace { + +std::optional, std::vector, std::vector>> +make_backward_graph( + const OpDef& opdef, std::vector inputs, + std::vector input_requires_grad, + std::vector output_has_grad) { + auto res = OpDef::make_backward_graph(opdef, + SmallVector(inputs.begin(), inputs.end()), + SmallVector(input_requires_grad.begin(), input_requires_grad.end()), + SmallVector(output_has_grad.begin(), output_has_grad.end())); + if (res.backward) { + return std::optional, std::vector, std::vector>>{ + std::in_place, res.backward, res.save_for_backward, res.input_has_grad}; + } else { + return {}; + } +} +} // namespace + +void init_imperative_rt(py::module m) { + py::class_(m, "Interpreter") + .def("put", [](Interpreter::Channel& self, py::array data, DType dtype, CompNode cn) { + if (!cn.valid()) { + cn = CompNode::load("xpux"); + } + constexpr int size_threshhold = TensorShape::MAX_NDIM; + if (data.size() > size_threshhold) { + return self.put(npy::np2tensor(data.ptr(), npy::Meth::borrow(cn), dtype)); + } else { + HostTensorND ret(cn); + return self.put(npy::np2tensor(data.ptr(), npy::Meth::copy_into(&ret), dtype)); + } + }, py::arg(), py::arg("dtype") = py::none(), py::arg("device") = py::none()) + .def("delete", [](Interpreter::Channel& self, Interpreter::Handle handle) { + return self.del(handle); + }) + .def("get_value", [](Interpreter::Channel& self, Interpreter::Handle handle) { + PyObject* optr = npy::ndarray_from_tensor(self.get_value(handle), npy::ShareType::TRY_SHARE); + return py::reinterpret_steal(optr); + }) + .def("get_dtype", &Interpreter::Channel::get_dtype) + .def("get_device", &Interpreter::Channel::get_device) + .def("get_shape", &Interpreter::Channel::get_shape) + .def("_get_dev_tensor", &Interpreter::Channel::get_dev_tensor) + .def("apply_op", &Interpreter::Channel::apply_op) + .def("sync", &Interpreter::Channel::sync); + + std::unique_ptr ch = Interpreter::inst().create_channel(); + m.attr("interpreter") = py::detail::make_caster::cast( + std::move(ch), py::return_value_policy::move, {}); + for (auto name : {"put", "delete", "get_value", "get_dtype", "get_device", "get_shape", "_get_dev_tensor", "apply_op"}) { + m.attr(name) = m.attr("interpreter").attr(name); + } + + m.def("sync", [m]() { + m.attr("interpreter").attr("sync")(); + py_task_q.wait_all_task_finish(); + }); + + m.def("make_backward_graph", &make_backward_graph); + + py::class_>(m, "OpDef") + .def("ctype", [](const OpDef& opdef) { + if (auto attr = opdef.try_cast_final()) { + return attr->type.c_str(); + } + return opdef.dyn_typeinfo()->name; + }) + .def("__eq__", [](const OpDef& lhs, const OpDef& rhs) { + return lhs.is_same(rhs); + }) + .def("__hash__", &OpDef::hash); +} diff --git a/imperative/python/src/imperative_rt.h b/imperative/python/src/imperative_rt.h new file mode 100644 index 00000000..2194bdb4 --- /dev/null +++ b/imperative/python/src/imperative_rt.h @@ -0,0 +1,7 @@ +#pragma once + +#include "./helper.h" + +#include "megbrain/imperative.h" + +void init_imperative_rt(pybind11::module m); diff --git a/imperative/python/src/module.cpp b/imperative/python/src/module.cpp new file mode 100644 index 00000000..309a0220 --- /dev/null +++ b/imperative/python/src/module.cpp @@ -0,0 +1,55 @@ +#include + +#define DO_IMPORT_ARRAY +#include "./numpy_dtypes.h" +#include "./helper.h" + +#include "./common.h" +#include "./utils.h" +#include "./imperative_rt.h" +#include "./graph_rt.h" +#include "./ops.h" + +namespace py = pybind11; + +#ifndef MODULE_NAME +#define MODULE_NAME imperative_rt +#endif + +PYBIND11_MODULE(MODULE_NAME, m) { + // initialize numpy + if ([]() {import_array1(1); return 0;}()) { + throw py::error_already_set(); + } + + py::module::import("sys").attr("modules")[m.attr("__name__")] = m; + + m.attr("__package__") = m.attr("__name__"); + m.attr("__builtins__") = py::module::import("builtins"); + + auto atexit = py::module::import("atexit"); + atexit.attr("register")(py::cpp_function([]() { + py::gil_scoped_release _; + py_task_q.wait_all_task_finish(); + })); + + auto common = submodule(m, "common"); + auto utils = submodule(m, "utils"); + auto imperative = submodule(m, "imperative"); + auto graph = submodule(m, "graph"); + auto ops = submodule(m, "ops"); + + init_common(common); + init_utils(utils); + init_imperative_rt(imperative); + init_graph_rt(graph); + init_ops(ops); + + py::exec(R"( + from .common import * + from .utils import * + from .imperative import * + from .graph import * + )", + py::getattr(m, "__dict__")); +} diff --git a/imperative/python/src/numpy_dtypes.h b/imperative/python/src/numpy_dtypes.h new file mode 100644 index 00000000..d13780d5 --- /dev/null +++ b/imperative/python/src/numpy_dtypes.h @@ -0,0 +1,45 @@ +/** + * \file imperative/python/src/numpy_dtypes.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-2019 Megvii Inc. All rights reserved. + * + */ +#pragma once + +#ifndef DO_IMPORT_ARRAY +#define NO_IMPORT_ARRAY +#endif +#define PY_ARRAY_UNIQUE_SYMBOL mgb_numpy_array_api +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#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 intb1/2/4 type +#define DEFINE_NPY_INTBX(n) \ + int npy_num_intb##n(); +FOREACH_MGB_LOW_BIT(DEFINE_NPY_INTBX) +#undef DEFINE_NPY_INTBX + void init_npy_num_intbx(pybind11::module m); + + //! numpy type num for bfloat16 type + int npy_num_bfloat16(); + void init_npy_num_bfloat16(pybind11::module m); +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/python/src/numpy_dtypes_bfloat16.cpp b/imperative/python/src/numpy_dtypes_bfloat16.cpp new file mode 100644 index 00000000..52d122aa --- /dev/null +++ b/imperative/python/src/numpy_dtypes_bfloat16.cpp @@ -0,0 +1,275 @@ +/** + * \file imperative/python/src/numpy_dtypes_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 "./numpy_dtypes.h" + +#include +#include +#include + +#include "megbrain/common.h" +#include "megbrain/dtype.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 + +// define a new python type: pybfloat16 +bool init_pytype_bfloat16() { + auto& py_type = BFloat16Type::PyObj::py_type; + py_type = {PyVarObject_HEAD_INIT(NULL, 0)}; + py_type.tp_name = "megengine.core._imperative_rt.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; +} + +int mgb::npy_num_bfloat16() { + return BFloat16Type::npy_typenum; +} + +namespace py = pybind11; + +void mgb::init_npy_num_bfloat16(py::module m) { + mgb_assert(init_pytype_bfloat16()); + mgb_assert(BFloat16Type::NpyType::init()); + m.add_object("pybfloat16", reinterpret_cast( + &BFloat16Type::PyObj::py_type)); + m.add_object("bfloat16", reinterpret_cast( + PyArray_DescrFromType(npy_num_bfloat16()))); +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/python/src/numpy_dtypes_intbx.cpp b/imperative/python/src/numpy_dtypes_intbx.cpp new file mode 100644 index 00000000..d6d231cf --- /dev/null +++ b/imperative/python/src/numpy_dtypes_intbx.cpp @@ -0,0 +1,333 @@ +/** + * \file imperative/python/src/numpy_dtypes_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-2019 Megvii Inc. All rights reserved. + * + */ +#include "./numpy_dtypes.h" + +#include +#include + +#include "megbrain/common.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 a new python type: pyintb1/2/4 +#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 = "megengine.core._imperative_rt.pyintb" #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_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 + +namespace py = pybind11; + +void mgb::init_npy_num_intbx(py::module m) { +#define ADD_OBJ_INTBX(n) \ + mgb_assert(init_pytype_intb##n()); \ + mgb_assert(IntB##n::NpyType::init()); \ + m.add_object("pyintb" #n, reinterpret_cast( \ + &IntB##n::PyObj::py_type)); \ + m.add_object("intb" #n, reinterpret_cast( \ + PyArray_DescrFromType(npy_num_intb##n()))); + FOREACH_MGB_LOW_BIT(ADD_OBJ_INTBX) +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/python/src/ops.cpp b/imperative/python/src/ops.cpp new file mode 100644 index 00000000..2e244253 --- /dev/null +++ b/imperative/python/src/ops.cpp @@ -0,0 +1,83 @@ +#include "./ops.h" + +#include "megbrain/imperative.h" +#include "megbrain/imperative/ops/backward_graph.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/imperative/ops/tensor_manip.h" +#include "megbrain/imperative/ops/collective_comm.h" +#include "megbrain/imperative/ops/io_remote.h" +#include "megbrain/imperative/ops/cond_take.h" +#include "megbrain/imperative/ops/nms.h" + +namespace py = pybind11; + +void init_ops(py::module m) { + #include "opdef.inl" + + py::class_, OpDef>(m, "OprAttr") + .def(py::init<>()) + .def_readwrite("type", &OprAttr::type) + .def_readwrite("param", &OprAttr::param) + .def_readwrite("config", &OprAttr::config) + .def_property("param", + [](const OprAttr& attr) -> py::bytes { + return std::string(attr.param.begin(), attr.param.end()); + }, + [] (OprAttr& attr, py::bytes data) { + auto s = py::cast(data); + attr.param.clear(); + attr.param.insert(attr.param.end(), s.begin(), s.end()); + }); + + py::class_, OpDef>(m, "GetVarShape") + .def(py::init()); + + py::class_, OpDef>(m, "CollectiveComm") + .def(py::init<>()) + .def_readwrite("key", &CollectiveComm::key) + .def_readwrite("nr_devices", &CollectiveComm::nr_devices) + .def_readwrite("rank", &CollectiveComm::rank) + .def_readwrite("is_root", &CollectiveComm::is_root) + .def_readwrite("local_grad", &CollectiveComm::local_grad) + .def_readwrite("addr", &CollectiveComm::addr) + .def_readwrite("port", &CollectiveComm::port) + .def_readwrite("mode", &CollectiveComm::mode) + .def_readwrite("dtype", &CollectiveComm::dtype) + .def_readwrite("backend", &CollectiveComm::backend) + .def_readwrite("comp_node", &CollectiveComm::comp_node); + + py::class_, OpDef>(m, "RemoteSend") + .def(py::init<>()) + .def_readwrite("key", &RemoteSend::key) + .def_readwrite("addr", &RemoteSend::addr) + .def_readwrite("port", &RemoteSend::port) + .def_readwrite("rank_to", &RemoteSend::rank_to); + + py::class_, OpDef>(m, "RemoteRecv") + .def(py::init<>()) + .def_readwrite("key", &RemoteRecv::key) + .def_readwrite("addr", &RemoteRecv::addr) + .def_readwrite("port", &RemoteRecv::port) + .def_readwrite("rank_from", &RemoteRecv::rank_from) + .def_readwrite("shape", &RemoteRecv::shape) + .def_readwrite("cn", &RemoteRecv::cn) + .def_readwrite("dtype", &RemoteRecv::dtype); + + py::class_, OpDef>(m, "ParamPackSplit") + .def(py::init<>()) + .def_readwrite("offsets", &ParamPackSplit::offsets) + .def_readwrite("shapes", &ParamPackSplit::shapes); + + py::class_, OpDef>(m, "ParamPackConcat") + .def(py::init<>()) + .def_readwrite("offsets", &ParamPackConcat::offsets); + + py::class_, OpDef>(m, "BackwardGraph"); + py::class_, OpDef>(m, "CondTake") + .def(py::init<>()); + + py::class_, OpDef>(m, "NMSKeep") + .def(py::init()) + .def_readwrite("iou_thresh", &NMSKeep::iou_thresh) + .def_readwrite("max_output", &NMSKeep::max_output); +} diff --git a/imperative/python/src/ops.h b/imperative/python/src/ops.h new file mode 100644 index 00000000..900b89e1 --- /dev/null +++ b/imperative/python/src/ops.h @@ -0,0 +1,5 @@ +#pragma once + +#include "./helper.h" + +void init_ops(pybind11::module m); diff --git a/imperative/python/src/utils.cpp b/imperative/python/src/utils.cpp new file mode 100644 index 00000000..b0e615a4 --- /dev/null +++ b/imperative/python/src/utils.cpp @@ -0,0 +1,236 @@ +#include "utils.h" + +#include +#include +#include +#include "./imperative_rt.h" +#include "megbrain/common.h" +#include "megbrain/comp_node.h" +#include "megbrain/imperative/blob_manager.h" +#include "megbrain/imperative/profiler.h" +#include "megbrain/serialization/helper.h" + +#if MGB_ENABLE_OPR_MM +#include "megbrain/opr/mm_handler.h" +#endif + +namespace py = pybind11; + +namespace { + +bool g_global_finalized = false; + +class LoggerWrapper { +public: + using LogLevel = mgb::LogLevel; + using LogHandler = mgb::LogHandler; + static void set_log_handler(py::object logger_p) { + logger = logger_p; + mgb::set_log_handler(py_log_handler); + } + static LogLevel set_log_level(LogLevel log_level) { + return mgb::set_log_level(log_level); + } + +private: + static py::object logger; + static void py_log_handler(mgb::LogLevel level, const char* file, + const char* func, int line, const char* fmt, + va_list ap) { + using mgb::LogLevel; + + MGB_MARK_USED_VAR(file); + MGB_MARK_USED_VAR(func); + MGB_MARK_USED_VAR(line); + + if (g_global_finalized) + return; + + 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); + auto do_log = [msg = msg, py_type]() { + if (logger.is_none()) + return; + py::object _call = logger.attr(py_type); + _call(py::str(msg)); + }; + if (PyGILState_Check()) { + do_log(); + } else { + py_task_q.add_task(do_log); + } + } +}; +py::object LoggerWrapper::logger = py::none{}; + +uint32_t _get_dtype_num(py::object dtype) { + return static_cast(npy::dtype_np2mgb(dtype.ptr()).enumv()); +} + +py::bytes _get_serialized_dtype(py::object dtype) { + 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.ptr()), write); + return py::bytes(sdtype.data(), sdtype.size()); +} + +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 +} + +} // namespace + +void init_utils(py::module m) { + auto atexit = py::module::import("atexit"); + atexit.attr("register")(py::cpp_function([]() { + g_global_finalized = true; + })); + + py::class_>(m, "AtomicUint64") + .def(py::init<>()) + .def(py::init()) + .def("load", + [](const std::atomic& self) { return self.load(); }) + .def("store", [](std::atomic& self, + uint64_t value) { return self.store(value); }) + .def("fetch_add", + [](std::atomic& self, uint64_t value) { + return self.fetch_add(value); + }) + .def("fetch_sub", + [](std::atomic& self, uint64_t value) { + return self.fetch_sub(value); + }) + .def(py::self += uint64_t()) + .def(py::self -= uint64_t()); + + // FIXME!!! Should add a submodule instead of using a class for logger + py::class_ logger(m, "Logger"); + logger.def(py::init<>()) + .def_static("set_log_level", &LoggerWrapper::set_log_level) + .def_static("set_log_handler", &LoggerWrapper::set_log_handler); + + py::enum_(logger, "LogLevel") + .value("Debug", LoggerWrapper::LogLevel::DEBUG) + .value("Info", LoggerWrapper::LogLevel::INFO) + .value("Warn", LoggerWrapper::LogLevel::WARN) + .value("Error", LoggerWrapper::LogLevel::ERROR); + + m.def("_get_dtype_num", &_get_dtype_num, + "Convert numpy dtype to internal dtype"); + + m.def("_get_serialized_dtype", &_get_serialized_dtype, + "Convert numpy dtype to internal dtype for serialization"); + + m.def("_get_device_count", &mgb::CompNode::get_device_count, + "Get total number of specific devices on this system"); + + using mgb::imperative::Profiler; + + py::class_(m, "ProfilerImpl") + .def(py::init<>()) + .def(py::init()) + .def("enable", + [](Profiler& profiler) -> Profiler& { + profiler.enable(); + return profiler; + }) + .def("disable", + [](Profiler& profiler) { + if (profiler.get_dump_count() == 0) { + profiler.dump(); + } + profiler.disable(); + }) + .def("dump", + [](Profiler& profiler, std::optional path) { + if (path.has_value()) { + profiler.dump(path.value()); + } else { + profiler.dump(); + } + }, + py::arg("path") = std::optional()); + +#if MGB_ENABLE_OPR_MM + m.def("create_mm_server", &create_zmqrpc_server, py::arg("addr"), + py::arg("port") = 0); +#else + m.def("create_mm_server", []() {}); +#endif + + // Debug code, internal only + m.def("_set_defrag", [](bool enable) { + mgb::imperative::BlobManager::inst()->set_enable(enable); + }); + m.def("_defrag", [](const mgb::CompNode& cn) { + mgb::imperative::BlobManager::inst()->defrag(cn); + }); + m.def("_set_fork_exec_path_for_timed_func", [](const std::string& arg0, + const ::std::string 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)); + }); + m.def("_timed_func_exec_cb", [](const std::string& user_data){ + mgb::sys::TimedFuncInvoker::ins().fork_exec_impl_mainloop(user_data.c_str()); + }); +} diff --git a/imperative/python/src/utils.h b/imperative/python/src/utils.h new file mode 100644 index 00000000..0a4d69e5 --- /dev/null +++ b/imperative/python/src/utils.h @@ -0,0 +1,5 @@ +#pragma once + +#include "./helper.h" + +void init_utils(pybind11::module m); diff --git a/imperative/python/test/integration/mnist_model_with_test.mge b/imperative/python/test/integration/mnist_model_with_test.mge new file mode 100644 index 0000000000000000000000000000000000000000..126837d41f24151b9bad560e0b496908e1e5e9af GIT binary patch literal 1568739 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

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

-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 uasZCwwUTX^f+HT zh|QqAC`5ETUF-0>eB#(WCM` zRWUid=(h~L`lYJ8__&6>LjME4PcMDFfP9F(>}iEP^0Q%3GCo;6cbT+2hZ70BB@WTNikLvXTkAnR3LzXlX9@wmv#2S(?YnF}{$~h1 zXcw?N9ge0uLCuK0rGGQMVsD{60jUf<#e*t6Vx)1sUjL1~*hIj)YYEi6FAu}JM-d~v zIsRO|+02i<*)TG_Bf7%92SHc6Q8_5P3oBE*KdYrYEhCw{810@sP7B?=YpB#ccbnw8 zyX(h2CJvpv35=3FH&92t4;o6nLrjdjMOuivRzm(gGmZT`Xw-_ms@ros4C^^N+>s}| z#Pg;-u;ht7FHp2Qv@x8$=-l%>WpanT;|1Bg7}Whebz)UGn@GJpl=3>gc0!=MxoeBP zPxHq;5Mrl1KutG2Wl!Bb?dcmmE7`)mtTO++kovVekc8m9p}(iQIp9=0m<}^NxHTHR z0_85eaH=sqiSGHk8}vCnU3yqNz*itV$UqW3iYPxl5}?1m&@~vna$w56imMhpOQA_T zpoR84fEQXl?=NCK-@KeX7m#SOu|Fq4NpT6~kev;>d4Hd8@8 zhlk5O0xb_cnC3FQ#cOyySE3-j=uN)7FLmxbe5n#VAELfHj8Ln&onwu>p)#R8b@iV; zW?EG}Whj=tB5|8Mb-GSHUr*q>FKu4EI#V}2Nse@7LK$(rHe)2cH#Dlez_(kyv{jqEH$iN@;KB&Kek=h!;1>bCmtotzS{rJ- zxsJ2F4z?h@gKvwx&#sI+esje<(6Veitr+CI9;I?Uy|ZJzd`O79R4U9oY>=D0w$WZa zn+jt+;%>(~ek(jZTXZ`;sR@!jl`K0v7gZ>{Y?iP+nm_?Q8~u4bplgafMT3XEw+9}* zevGob%fv@Lcb2ogp3zA>m);`0iH9RS(F7(t^pdQ-g-ZiG2Kk3P)o{kWgiho=Qz(AD zhK#ViM^Y9&8@O?bCG z*dMDrf`$4#l137|x9Y?_8NeI8tyh1&W?!Yf=8Q1C9ffMW{&0@Hg711gGd0USq~!p; zFgCqCMVY<4=gFHpiY=2p7fKU7bgE>$=K~47GooX?eHDYeC4y@^dg?;Fp-Lvat^oGE zd@;hkEXOZB?3p<|1JF-BXC@-OYJ$?e!u=?`yyTZWe8>&Gt!J6NJ;sW?{7-DXCP`_$ zrtKU(aaT({9TeL_>hLYz~sBVAU3Hx3Z7lPkO4EjQW`Nl{j&x=O$PEj8$T#L z@N!)|4>Z5L{jcu4IWLX7U?*w4Y84~B$%VYVY%~+SYsry3v7`$U%)`AQ^a{86LfH0Ok;_KJE*QNYBWBLibpj`w#6Mh># zE7WN{m8ieF6VL)YgHM+_n$dy0Qc2P}C;gtilU!##@5>fFO`_R6ut<9v9g4BMzm40wgSXr~ z*Sv*2jIw~d*a#rKl?!dXbFxys@zeV}hdlDTl%wUmUD}|%>~X|AUbK!qt6IrDlh%E` zl^K`4|A-5_6Jt)jFEt;%qQsHBy96*{pkeZRZGTMhbt~R4Q zrjYo&cjb9K_dE-|YMaMA82$*nA_SE^+&S>Ok?y{|%(YCs0(+i3+t<52Upl0{U^0ii zMof^quU_Ch^RE*ORCbQNpk>6p#75yf$_^bnQ>O8~CEGW>zs1|V=>p!4`++L55q>ib_M{w6BX}0 z{pUD5AFx%u_>tl~v|ZjkQG6aeEjCX*Hg&{2d`pJCDV5bdNacz>sX&dr^Gj|#Dv|TN zY+Td3t{J+#Dt!$++=vCe{WHls?|N4~f1$`ci+VmhIS7KhPi(0?5BW8`GL)b^GupmA z?^|m;-w_*vwErhZjD-@2GQI=OMZDZGz8 zOnnDEyKaO%r`}LJWJV!9eWF*rbQLVTdiUAAidrf?W@bRW@eMh>F@ozo{9li~nQRF1NE#qdrN&N)9+R6RBeb+ua9_I_b0|b~o&JW|f__STU zKV!o^{%OU$ADS(_Kc*bL-<_ko0#_rw?1+Rtt{Kie{d^<52If9JVheRWm^9Elwj?$@ z>!o(Qqn``Cpv)7!&}CG;?^*>r$#9jtlIhXCm6ixSitjAF-tz#x$^k(1pXjAVsDTTezkDJ>E`oZ(o#K(EHVb=4ld)5P_>BCxZ)<>RhBIhp-D!*`3k>#jJxsqzLr z;p-*4j&Pzpg6UVi?(`wNv9^Z1ApI)6EY2c5awVm`%wA1AY@-6b1=AQkVDc9|TBKM# z(HMrktLy|msAF3^;Y^Y|d_{V_>P}p{SguLF@;YKYmIOjPkCB1BgzIFyA=2=?E{>AC zO!tVq5Di$p_b-LLZsv?U?<-C{fq}`p#)=F+6BpLJ?KG^tD~N@>Mux$>=3v%67IuI< zu%sxwheTvO=pbA@z=)Q;z<%VsZ1!b6XCnbUdd)Jt;SJxs{qQ(Fw8WacPqn|hM3Ygy zod3GL*AnGCWhs=sCLn=5z=DiDAfhO}jw;1HdCwocTL|;KXxyBd1h*wVkFtN3i0(7R|l9@=wvc z$GOiu<;tVH&9@xAv*$9sOe-urN88yvOHsrjQd1GUU;~W2 z@{QuVAsdN3uN;=W>Hq;fmMMolqRfUoV~QKS6A?{4q-;Vw974If=k$|2?~M&U>@vAK zwE+k|QEU7>VR^Z|PB_55HMM`cR4iaTDrP7==(1G3s-ZW%2#!NN9NDlua_n9`mV-sT zx}khLbouDKH8U8zFDn*3uE*~@l>&mitrI&vQCPM-m#R>_G%5wY($HqTfZ4x0p^P0p zu0oAHIv!lTm!v4YQ`3sQ54=3Rko@-KvhtER2SnB4wOz*-y)Uuns@_|`BK0^z= z@vUjS=Oc+dNBgfm$9BZM12q>tAoZlZ5;I)Aj>#asoXkx<{QK~{*}4wB$F>YR6@~dc zRhC0MvQaiY1!LyDrrjnzn*EQwHnS(aI4*v?*M!78zMinX|2Ay9V2Hy!Ek!{+o-L3( z!uCQvcXv@e`g(QILMYHuh>3%4^vNQfXtBIFAdb(;oTVc38Var&( zYoew-VT3L{mwDy9B#o50LpM{sA#0VrHwh0tn213=C>yW4oGPNbYzIxfwo~K0p6p}2 z?O>k0l)n}|?=b>C)(H_kSFnOS-dwso&|oLMKCYI%>T-%brqiE19s^yyFd7^^kv~Q~ zGxUYKJKJ-*2t|~x3R%fg`LrieIZm?QBg_dl*d|(W{%zp;GvwwR%st5o*Zv=!r=MD+Im8ZQt zbUyjKS>CujCut2l?|g?m5WpzBqB*`ijYeO+pU4foslz9|`O`zaP%E#!jJiv{yZe?s z0DsfHr4^dJXT=0P<;8QnRG~q=DK^!;Odd?UR6e`Azl*KCtL~G#+43s90I7*Q4&isb zFstOepv8>5J=X}n$2*=q3RM_A-%{7SZpgGfn@O=eP~J*Crny=@g!;EUe&xH3hBu_j-G|RcijIy+^r0~=^nE;F5#9xlWV3kWk({7;v*aF=vvz0QFxz z@SBA_m2ZbVT7r(eS>L5Rw}5m#@M6I{%JY-EvjMU_Fx>Dv)Q|E!E&Z~+iIb2#6^|%A zu#cfV!bk?a^eQzy&4~lN?0V(9{=4%oq;7 zjTneM*8c@PH8#{cad)`A#v;MJSLepO$JBtm^mnm5@)7R5=>-?PPKbRy%CNgV5jdMY zY=YoCtPz{Ma}!;>^eQwxT$Hjs{wjSv3GRQqBFvaQN6S^a(RbTCx=iN0Rk8Cu?HkoR za|U%h!DIP6inRbfSxT$C?gzWO0J)L9d9r;x34A8Ky-%Gzp7pT2C^}F(v{WU$M69?y zDCgEZ5SEQS>2V>wf-~bgQqBfEvGszz{rvVjcA1a8&@Q??9I!vUe9{)ZGi;2#KreYb ze?1+&&udk^6VhjvE zNRmuF(`Qn%kHkK`AX=xqJ<%RLpeeDuQ^jYz zrAdW7sjiGYip8rvnX8LCaMeaV^#}GmF~I*k7Rche3Z)V~um7q%+D9S0i|MsJJ~0A4 zXXdayZZ8eJuSTZ4O?b9F7iTWLE>VX(RB-D(DI_1gkd>G^sk(r>u9Ay9pm?7#k7~X=he3C}KWyziIi#q)pfVu5#@Q6T zbfz^sfsF(`>(rCIbB(&ZI@}JuT+O9CE~N@RVX{I!5<5CQ%3#(!-~_@v>|)wIlp)zY z@t0dYxY!;(q)VYZ!V^S2;d$;oK^n=u&)&N{Siq`1DjGUHYw7zv)KP*t?c|ft&z7p$xD{K*ZtAGm&;W>eK?uD>+PaE4%h3udtoU&us}V%lxQKny?;wQ znlphtl}C_08P6iUSFHfN$TVBMk;)=HF@9q_Zm8QjERmNyrpk@ICfv`wqPUK|HNuO% z0)L*pF^Nt+3r=V~_8A{L9vGy&BD|kHK?NB-8kVa)hyOD@G-P2tg=|m7sdW4R>%puRcqARMrbmxh^rAUChRv&Q+$wEhvjWS+ddjrFEH;``q`?ocni z%%0{wWv`08c^tqx0K=(0_EXfncA$*B+ST>FVSYk~iGD3q)@{ zdcfa2_w2ho49D`ldU{yA572bHRgcO&C_qU)rDo;4`P3afvVsb|3^!)I$h<|pFPhIh zP!Fg)(>&)rvj-l%8C{^e;?1YMHWtD>CR~s`GH!}JmDVji1&|j#;SMjoO5qPZc}L~D zc_RHh-pV<=?UGi!ict+caMc++EN$UCk7=yEOt8SZc}aOaYBwi6i_RdugVDadvpbTz zXFvQsN%J{6SCu9`s_a6%PAY=Eh^8|=Y7(Zrd`N~ncv0fL2(1h{tc5qdXLS9$KY-ai z3ZS1o+&~1paVxJqp*IvfsSYJQ-#iGr{+Ri^t%-KM(kcbL(FW2z>*>usqV>MKbnjig zt>{cVHr0wffbWOA`IPTGa{dCm+*fJ6`s9(k{U6ah8&V59>+qkwJ&mQi!!jnmArh>; z+g}E~)ymtvZe~tA5%%#szUL%8BIx!!umV9n-IWl%(Ok~FK1Bt&$5BZAVs9+;!NhMvYdSGxMVSc_sko&$os z*q(Gf#zmsN`#oN|#Mzj=aj2O(Ot#6rq4x+qZChqN!&E7~7UHVCYpRhwqM#2vfvd?p ze!2}kvj)SxDk3c28D_jaLU{K(f^m{Q33I6m3*I`S~b3!0eE{U8b455j>K-t_a?`DE$yT%$PI0&17f2lLENCwdpdw@CqKi zGwgl5k4cg}rjcDcsXJ=DqBTdnO1mCCe+X4Q(C%8iiPeNXdKZqp1?^BhZ4rz-;MKIf zfF>h7=>uOpr2`5*_QayRAqzykTCbkGViG4knOXh3#tLt}zhwnI7=q?JOHN2VJHmOq zk3XrrpYSp~NWQ;2GmketBdm-(6qC$7fGZ%q7we-vsivR3_6+2_uA}?B{NGGGh*(~{ zFAh3AWM<7g?zhgo(906Ni#U|LxAhV|KF9^V`-V?FOR|~0nKf%YQSZ(?YWyj^>6P!i zacjaod>eDUj1Bm^?<}-D15($#Ncobz4bV(IaA*g;9LWm4!lPt6lgvuGaVD+2=1cuO z?)qQ7z7JYGLGlkh`u>+ZE;cAVRW>0#x(>QKeBnmDva@o%m=!|3#wJp|uJ@6=%w-lm zNp?FuP!*oN^jF3``8;<$X(`FP3{q%29lip+p6`P_)dHP8z*ObA4Q|dnfYe+({#J54 zOsyR}5+^0RTa%)_0ONB#B?Uyhd99|rTW9t=PGny^`Y-If41mHrErvwBHEnr3Gr-+F zip^TRO?yhbi~V!GqfAb{?}9A7B`#4s@JkH5fGd=Kc?mO+gyNCh2Isyj1yb7MZ zFfqeBoIwdaK%FH%C7yac!OO5bnEpn+i3(0VoX3ql)-tj@ydYjZ2echMmmUW^(j(No zi>JLke*&~T0YzjzbWl#cd=kDq|8mbeE*n3+ct}&dKktma(hvQ;KC?1Bbx&8l?>lxq zl~+5w*SV#D(y281llpZ}*VA8%g~-5bcM&d*S^&fA^q0@7@YGsAuck#?LXr@Ns_U;Hf@d|b zkj0ujxAG-D*CIN-@*pO>-R-zM>G*X$B^bdyjYg6^n*b9%XDydKbIIU6u_NU?4zc#U zfL3xmyt;8clpZKO9!j6P0rNGzszbRwtey+JZ<&NWBmt|uwVM{ZDJ;r8nQMZ*QKfOc zcp;cP+Af?{_(*1e9qd-s*S3aC)MCXymwHpyVVNaF4G*0}yOQwQ7G)|zr)eeF^$V!g9Pv#~)@*ju2x?3eZ zt`?!YVHZ8URviw!hX}Gf3#5fRm_XAz*us##_D~BwHPl1A3B2q)B-RkT{O1zAz1u}S zE{_^Kp=^%5#(#c29=O4~K+?axGQIFUQ*jo(2=;Hi2-qIH8Gfm~>1)kBxX=~6!3VEB zGNUCu*?sRkizl)>gry0+_A3g!=Wg9RrML6Dh6GkUsqIX?$!od1L|6YisX`LG3VI4X z-J$h3<_$}|`uUnXAMQv!W{Y~gdviuSsOzb^2+)c>X_jU^o@U-X!Q{`}~8so?0C}*#I%Tc9=xG*(>op*=x@|`IEmqV1q8a zT+oX=dZb=GE6u*WP%6m1&RgX@Ss0i-#(o~Wa+e{!eT0ikBRT1x#qX#%G`m{ec8u)TdeAamM0?<~eVbNA@H=QT*Z z9~kR8k_<*Y-0M%fg!>-7(f>w0=G%h3^4|75*m*X+%ezoL>v6h0+~iz5RBszR17#*X z0M&uKaDoRsL^7Xq|3>sDz1sW1SefRz)43vsTvKv?J_bvv^@|&8wR?4G2 zrJxzTd#WKkx$)aOh@P>%>;=rd6U>smv&P>%5#^OV!(n1QL&X`rGJp2G-nXJX7imJh zyd*lk8z{-WIyM8oOuiev?vDh$g8{NV*P4mFu(&Zjo58oew?JY&p#6Hi;G@aB;CqI> zn?2z@CT)ei3YMTftcbb2nh20RV@Q%c;wzgx4>lP*@!5<#NfxKDRnBnaIc`fYQUGH!Lg4#H%19NwY^rno?&~un{b>x;dv>% zt^b`p3Gli-rfHwO7skE4U36VLa}0UA{_vH(-DbzVU5uAJ?1|O918%Rq>)heIEuNS> z(3|kQuDX`Ir^QRXAzfp=Qywn7Re_Vc2LYEo$-5st9dxQaoU6e-lz?141`z?h3gCpi z)a2B>r*w=wQ?XvWZAEIlaMD7?j!AaC0zGOx3h=nS zU8JczQA%yQ)VGt(ZzK=G@>>x+IoyFXdId##2%(wQ|q>5B-ya{DX2M~x@Fa9s&I{3=4d zpiTk3At5(CyvCBfav}x3su35xzubtu^;oaHM@d?6x%Po2f_zEMQx5fWs`9|qX8g2?m^AE*f%J> zibHWdd>yqtKA4KUauYs1SG;z;%#@|Q1xdj?y6`=``MH5S;lm?5IJ=!YM_b`M4U=X( z)oB$yJfo;Qd^$=zi=}+Mx`Q6QCl{`~xWN&%aqeS$4A3F>Qxy%uHBfu3d=9N_=lCeCc$^T{@9bf(WmRYD^Te?4Lij> zs(w(re*LOEoFaKV4#Ivt;*O9!(5H&Mxs)rt$dUoQ`;yo@ZE+1eNZ{wZ4bKX^PS=>c54J%)&M(7+wtGOm6&|_0Wpxd^p&q-vT>c=v9Y6m&dIBuH z2~~x?I9TU9ceKnroAz-%{+FjbLu)EMaLgaQ@5XmLtqhR8mMGPZ6`>jH~4?lW6Yk`%$+dL#aIZdOy(z=d3+{%_cnFaK_L}(B_ zIXYlHQ6xV*2aH!cNQO1NLCL>7qb9{XaLA`U)gVPY2@)l}bRYk`S1VXO_P_-_Drf+` zKpS|wM^vdjTa?JU8T_z3f1Z@Rg;3AD;`nntqvSrkZPBhf#100%1_Js#(`Y|EW||Z{ zRIs+Zg_sk)QSi&X5Zx<1hTYJ-cv+3Q{Y*eTl+yjY$9G!1c&Nra%)(*2ZbG~}0X&Mm z_*+{&x@e2MvajmAu?p5aMwf~^cx;?KBb#Tv5^jb(`|SojWR%0bQj;0E?Yl-jbab)0 zq+vumJ_paepW?hc@$JgJ&LO@$QYxN3|6c7pZ}76cCJa8j)nQh=%rQhflJ*(AkUi}@ z%C};@k;<$+4J@EMFlhL_Y>9w9zsA@++l5QKlX=rT2(4MWXz!rCn@x1Po{OnFYEGp+ z5mdcA@$FMRe?%-jZIRu)dqCd2p$AsIY$cMs;$R6Bgrj2SlPn7=L@Ypr-Rfxb#iCCakR?1Y z`-7c4=u8E^f<@Lml^1S3V+&=vkn@`Cn=2Q+EiqTT zcOY6k(vdSesey;P$v{#)bvH0Q=k{{ELc3l)1nIy$F}3TwpS^XwSpStg00XtXEmO@r zb?p#6TAHH0JMIlVr zx%q!R<;>T-PBn2mP~~|%5iZreF4Dn0J7^j_ZL8S4@$HekdX|(tdgsu*peO=8`YeaN z95P`&b|YB5000#|i@p!Oljg|1Kj*c)_z;0Qlqrb4B{Pz}c8`j^w|OHx^*&d<(_!ts zwzFWpMiU-AXh{sck2@tj1xcK|KKEa{LMFjH#uSRYasYlj8-;GYu(*P~u`hu=T_C2t z^s%@*?G8UZE-YoecGQQxaO5AndrlR-o}ni@Qxd@;V$lq2X6Oj(3K=q=D%@AwsD=@=s>HTtm=2DkO}(_bju# zaq-qW`@7h^DUMRRd=t#PTRlCyajd600IKIbd&;)Gb-fik@>earEvgqi`GMCxU+LIA znHw3s8jn1@dnQ#qaFXr3^snzcjEsCe%Fgq=6UzL&iQzuHG#9!(WL$&2tnER&m54w* z1LsJ*UduH-H~@gXvNyy%TZNN7Z)o*Au_%Q-zAM(fO$Nz4xvl0sg(d{O$r~y?jQ{yO z2_E*m#(`G7JE|KzPXFh;D5T>%)On4)%jJVT?FI!sRb8sQ8s=m?Wsse_qnwgG68Ou! zFuk=s`AdF0;sUlje5=m7f~J5y>^`Wy>Nu=C^F_hE`S$}o+nTPu_ zMM@>TNKQb#r%0qa1N^)@J`I>X>3RCRklKsA4}u)MtyX$HA&#g$(@)pD{2qoqv!?{R z3;wn}^oW8zna_(u_%MR;$`l4@|^6KKtFgaELiQCaku+Lh9(e>HGyf$p3`BQ(WXd z;!?!BBc!f9>0_Zi702W{PSNK*4adVhC|)Q%GrHhCnFAa>Q_qRLdE?1Fd;HNnsZ#8` z4<^gJs_(NrJ>$YWuDsMeF2l6F202B$UD-E12EVF2FXth>s$j~zkmQNIObl(k|C}Ve znsa%*=f&>4J+Q95OT}3|;J9WzdIDlSewrt|ofQE+!Ug@jS8V~k8pZ!SEk{*6`P8C3 zTDAf`OIZv(_txyZ+Cxyi?T3#&Q0#d-Z%a$PqU%099zW4M%KF>9-{>>FKkd-HYVU|V z+)5@ry~eIR;*3ST4S9sTlsafU=VT1Mq@8I!uOI=wO_MD>OeIvj@YQC$_F5pl14RP8 zhR>(G48Iq>%V$tL98SHxFbW|(sI?Eh;J_TcQ(wqE)ZfCq&^u$iVKX*8sdOZ~1xA)V z-t!E)O1{rL#Q|zPNf#%*3@nkoa6+^@730dh>(>iBQi`iRa{&%KK@!QmXi?EU%}e|| z8DEvXWtkei&E7@4A*&%hX6`P#yA9Mm)O>9`uBC@P4E@_ZYcwCdWM08Ne(^v(%VWho z%T|Rw>z^*YULU2p<1S@AJiMs91)ZS0T(!JCC(gRP-I4FSb>IO$<3htd(-}oQ0*sfv z-nERq_OhToY#0T-M%7BaAd1I4><#n1a?X;weiu`{VTDpW5f%`=m$W;*>V8Z;3K)33 zLKlO*7L5_TB@Vm2)G4UFHPS9U4Sonci{1%6q@IPn3#r;WQ}w~U&G(SKKK@s{aPe(C zVjteTu)dr;ieuEg9AjfWP3O41?_#^XlKoIUkSsU8uxngBw#SG)ZSCZ|@tO0wR>SVQ zzfBFj`(Z~tDFL-SeM??F>W6?Y^J7U%;z8niZYA0&CSgQ{@=F z5Rf-LS%X5o>>YPKOO3a@WHqV1Oo-*YTV7v1uR=P!N*5$O1~SULix^|PWG}ZojAQY< z%Xh}S4Ibvac7u~V7AC+u63m}HMOY&}))I%jHmC?Z74Zc=G+%?gZ-2#qQ{xzZy%?~6mcQ*O^ZT~g6JzY&Q&9qLUz!*=96EkX0V zQfGiXY~E45*|221C3F5fJ(h|);w*l=$QT8^Fl)y=ET*143+M1X>#2}DUlzeVHA{BA zAfyDncs?S%!Tj$#B`q_(t>!YlJMlohf-wrd#o9Z(cuWX9kKr^uBl?-W^1f5Mx)nIQ z{$&R}{Wz&T7qTur2b%=F`}O5Khz>%$tWb|VeBKMbaa20Jq3Vx4gby6ND)^5)uJ+12 zwttB|u;jHoJyrX>HVE9k6(&2qdP?0q?*cWwoO%JhQ(}$1Owi&yN`KJ3{L<P+Fhu{2>lx7t;`dDpZ( z9JW-vS9c=1;gpoTsm0>FGv13mO%#4SA)|slwLSH_DOrBKgV{X2Rp3j#=UMo@;$$bi zN9;7cv7DehM~E;z1RTpfx37`Czt$x^8+U{}=DAEf{tkA%ufl)az5PM{3EjoiUK+)~HAHxwwn%bFU#@BvIc zFn`Xx2uCbEndyH$2Syk?e-CldWoG1ppQ)p;A@lhK+PRQyRjxRVJzzP08#I2k#;eVkZ5A}J0#0DT@kplshf+ZA*@$wF_vMpSz| zQ}eYv82sP7p9=^(O@IwNB?E`Oj{YLO9P08sUdf3)KZ4u6CZ+GZVOra~#QSSJIg3U- z%&s##`_Q4hbCU)=F4bK?kfgEVmoI4g4m(<0tRE)>x~&m$TqKzyG(q zL1TM8j6K)9n7kT26&4RYTTwzh-H{(Vumn{-t)`1SD|co+mBA}L4m<@rEUH^O0l_l8 z%o#>K79b)$+c0fCJ>F@&t|W##mG!1PNS8IeLnDp6eN-yEqEg8`9HG~|;z5%=#G)C! zF*N_Yu`q}|fvcUnd(R2Hrl_>Nx1uDynZ@oq8ZUr7M3{^`h=BLJK_s-i>4lcOe4}+d z;-?+FE^oX%YqMdz=8xn(96yac0(?Qe809}bigHc7vD&OXbk3JLy7u6^VK+HE@5v54 z(?+;G)AQK8jkX895x}fGq!qoq=0WJXE}H{9c-WM^TZ?(U^c`tEFHMKNqA5B(aDQbz zOvgsOWtmz%JOrpaigU5LO`K{wtLczDvF230vEf!dLaGV9%G2t*H%ckI`esi(-39kL zQ0JaKNb5yCCHeEbtY3<~X!yQ8`B(@&bSDhGP;ePL@JDXE%7K$TX`)ZOt;_|zzG=Qa z{f@i6clX^qAQa8Je^dj#P3N&av2eJ&`$(2OoEWA(xK~oW6jiW1xHafJuD}Pq!RB2( zflLHDF=Dj6r*FZ$YB?7?&x3(I3MPR(C}^iVsVEG**e061U`IB+1I;u$ks|%QPI)7} zzA@1}p-LUTRSPh^6L#S}x!_7XX6x!ZH84~>U(vigY7vnMh6_cr(SzKalbr0y>Sq|a-J7H&Io2bJ3OttII(5DiesO=pZG^S@okU2 z2D;C?X+TRn8o^XO6PPbOq#FOc4D-RgwVMk(*E?uEqxZADhHj+1WYoU9|I=x`*}dYu zNq`@`{U>6*N!q?Tz7)YdH4>%0`2ry_^$Ab9?-_l(bQg;~?Bo+Yj8R*? zktFcEflm>=rL1MWg1MVI`C}`+5HqDaYd(RzNwQWtKFvlvL(;OnQ*;2mP|*v$u6;_o zkRjc?4dzt6*s7jAJIA~|9Q9f~HPXC10txLq_D&rWFA31KFKA#e|XzH3yP>cvqdz$S0OY#WLJ&5?4N8s3&=`6 zgFe)~RNN}PuAm1z9I@!VH=OP~k=Z4^@3Nh}>(i9I1&xWl-D}~!cLplEBy;4vr&yUi zd1A=D9e&=s=Uaw7Ihl?;NDhm;YIIG#L!P2NNUXuS!Pe+J^`?Nm?rdQ_DKn|PiJa6u zWNg~Jn0(DVrfh3HrL?3xIS!P%oApM$w_RU7*i98ZCSm5g%-T`Clc$-z2c$E+^tJ;% zixU;RW-pSw4isj*XQi(_2BoRIYz1k(tkjh~`D}!}V}{zi6p63A@}uNEQK)Ub3X?Ft zbNvQAe%&Ctya;%`j#QXEnmlT~+=>`IrCJ_5 zqf$M*MYp3oa}5@~(bB>^gdQxt! z5bFOsEC?69Xh*L+Hr>HJ6|+;jEgE*c1s=0Jj_{B@u|1T$X^SsB8^CZq7t6=I#K7FV zy8UE4*pH;W_RO_CAO{4zO~xlXC%9U@R*aoJ>g2~gO3I%-ojjhspNjUpV|I7CZm0je z@yYwVe&&chaanCW0KA~Ra1i%Bbqn}BEm%iA?2%Qy*O@E5^|OjShDfr#*l>isYu;nM zBDV=WEVJ3XAFf=zW3fIvy`#N7W!ieYq{z)Z4rGbFCEZ25abFR=iZYMASVC#NxC}o% z11`wC%Ksa^3;)eL7rcKxd9;WERP$#ZLAEv;-euu=%9_fwM>q^ z@DZuK36x;HIT7?dSt}Yn9x0-|GT?|k_Dhq!kxLuBLiSrdUvc_8DoWHm`8E5zru3#g zL$ygg)OX3e3f53P&N^zm`q96?R~u~{`eWFf4*X(u{88Ud2M z0aIta^BL*5{M`{g5*AxMBQGVrKf~rdh2g-vIV_7kK7ppaX-OVDrpr)09!x1a;iwor zoQpK)I6-aiKa+BpCp>SXxy#5Yct2a72+g4Az7n5Vj#P{B+;=w*!!+MaQv6NF}pCm zY{ulgzl{gIJ|n3-{?mB8a-ont!2iTOXq%Kh^&1F2uTDohhW-aUXK{-?OL6%{y_!T^Q4f0a)?^G<-fzN>b5^(o1hiEdY+;@FVl=WLZnr_@y-`Ly_yBSa=&@Jj{`Bhp;(DM$sjU4hHT%ud{3Oc zy&3a8O;D@7d3I^M10S2cg^j*E40=>Oy~jzsaK1M^x(Sy(9fhX7e_j*3MLkQsj;V@0 z(i0LrfyQmT$3c<2O@ZyZjFZzl;yztH>I@pa(ofpFdf~G?iNFIsN1TE@er)YMnS0Va zmEC_lx|Hs`#3pGypsJWWDrl*_uQ2Dl(n__wy4G&J#6$i)v}{qm@>4jyiLD&HI1{No zQB8BbqX8#8Wj13ynkl$F1<8lJ&Har$d^XWM!*r!QJ=l4@5G=#I#`!?IF(jfq^5RN8 zWKE8}Ej6;dJIOmewOpn=kOj;;NbKu6jQK1*JU$XUFNY32$#lfKR%%?mB3I|V@m>JF zDuQu6`7ahdfqo)A3^jqhrk(G-u@3XR)yT2Eb!p$dNJL`2PNH(X4thVm>P-c{qdHkU z$+rhR3(-uyPO%0%JFN&ib3|*sX!;7i@S&DG`h>hZD23cS7&Dwa+!(k#S9OKEuVj+D zU2zh<(jY6n`@bVRXdsh3P9Gt?R>-qG%LKB#{GtlI)1=QltM$e`i7d}N{F6Do9Jz@+ zIu)fn56Ip;kvm?zf^g=%d{Yd)bcM{kAd?Kc7sEBZvk*N!!LPQwqXnZn${zQ<_zp!q zfG(=Nz(fMRhszH<&pIu=yD|bjGMT469jpz#S&It2F2Qj<{U{5(1bQ1idV#*XIGM>k z^RBf$zZrwP_j`oAS`u%(L|R2XDy3n)G6pz2v~rd`l&X0=-67>YK4S7cM`?__Lo)I> zBl9Uef%Zqdf2@7HzGZ~Hx(Xt_+JhE7profeCL*M~33g+>6vM$iN{*_%jgqW8kH?Wc zvKb=1O4I~vWrWiUFtim$jmqJT)fRj}AS zQ059f7(!yb)@cvE7I~{ZTd&7Ghb>6G-Z*+a)s`B(4;b9MK2<)w2!YVM>s}kZD$7$n zZA}n8%2Hpw)Yl$8Ln;V8zRLi-Ss#r&lFLs$CE)(M^}mrlzDkn3WZM*0d>xHB}Wll&v1o)9X{sw0}RS!75uXx=&0ML!S z@NFrv#nbB74N*-@Q5*#oS-m#<4bA>aW$^%kqW`|Be-4V;oaQ@V@2Fs_+B zM9r|gW@6~PzrpT34>LPG^M)_IcA#xNNam}(KMoVT3$O`3k2!|D>>yaZS5*@|f5uh4 z{jk|Q(_>P+{pe=BDIk2i4km=Vk_|IGwv$0UNBK%U(*GPik*q_#F&RNU`WY*|L^}|> zyjF6(>vUH=V38)hd0~va7=)$0n>dC%uji_~98tQv=SFWmAd-np#Sv{iN7HA$nSmX>8lS(s zoBFXmI$5>7$@w!qyXxR~-hFBl)as3QkFY+DmOPM@{C&;h7DCEOG}cna0KJoLLf zayo@Pz1Nq$BjxeD)%!XxL7(FRLUzGo}l@@16}kifm0i_h$;dZF-x#E?#oG zYa1fH*vE;z0R$hse;#$cN3Tr1Wm6}-TbyP+3{?R{%U@m+vCnfGblyt6V@mi>tA{hV<3Fhc}44 zgOm}y0Mw*B9$$MrM95UUDfqQKY$YH)_quhxP%e@^hgsXY>F)*0M{z zB*MZy*ZAJL?n&^xjz1i|Q6Lb#t~ZCg)*vN47$xVs4R!LoaMV9L2y<$@xSy81QUAF; z3geQ!*JubmYIBo4nxm+^=xBpIrLv{Gc`aqRuFyL@S^Pk~Jya*WoobXkFQS}1=__%) zseX|?9k7ADpU|H?XJ@@T?7+OdHo_>qW3mT5Ap`ZiX))?MfIAgE1mp5NK;L7%Ir%8P z_c^pZfxdR9z3DEJ|F!&Ai`ce5H?@E?QOO^yv}*M zp2Yt0cGk=21c%0A?~SP;fM`COB|pOP58b7_Y>TFxoGYg^Af>$TiG$P5m>x=S-X zF4W6C9n#x9pz{qq_E!+S)q1r&<|}f%7i@I9c5@89{^CqM&)-Eov9M7*dI~Q+C2e25 zcUEycX(ZjfsgM6W*^0)z!v^}jfRu1OzD8#~k`{tJe7>JNV>fZVGSJMtG7_vin*z$b zJ%z42KLtR$sM!HMt&@X1u3${PrWKOAnn?A!a_(e3P=({X`iwz6cn~+eAAsV!6&maDqF z1Z6HfhXOl1HyBPm$H!m2JblH!d#+Agg<66BOT^OR7$d((wHM7;^UblzaRTLn!# ziiwLo_4;x>ZFsJ{F*}02u}vJjkfzDJbO#MQJqpOZgrwTL{%452>lK(i0?@;}hm62I z7aNSbq+eb=?D~tn-sM(3e9WLcIx9FiD@jAVaAlo62;Iy%>|6SMk_+S z%LT1HN!eaJ;GPJ*-vO|_t^i!U6IRE)5Na>HldWz&5_A&1FoTvnXgpXwoZuk6d;z?> z)io2l#$E)y&R(WG>ayNEhAO7G%K10FKm$g-AEbFb@jcx-!vFa?^)83JU}%WEOt2U} zeyyOr%Gxiz$x-0Fb3UIvkXrG)=6o7HRwatN5*7lzbofMBetVNZ*kcKh6 zx<1Q0P4K?Gumv%_L6#6an5Uz>-K?3ti+^%GNzU~;RUb~hEu^|Gk(!_GX5?%N&EfE81PX|C94Pd&jxFr$-RH3v7}-Mk@O}D};bMBNDeg zI3-@aZ0hX1<;YV#@SWwn24#&sv%pWiv57i8lgfd;@M)7gmu|B?GT90|yWhsVEa}X= z!(4AYe=LhV>7Z=Axc`|wrE%3fkGF|EP;9Tfx6)ia)Z@au2uF}S5?ai>+prqDa3VCl zX5mG=ZcnMag(yutid%O*)V#sHQ_xj9xT*`hFe9BigQ5(*P*iEX3b%_rL?x3v!^yF` z=(UbK5<{80>CdS>UqM7XP*vEx#P8BPeJGth^I(O%3pgRX_VaeV9CE$9eW}d6>`{k3 zI**>bb|5u9kh?iOwg#d-UYVP`YvB#Oxa74x0ERidfjr?o#bdL*B_}n#GO203MQyvh z*823kRSc87nAli6VF~QKjdXpybeRIYor6)mQ)`{Q9AD}@6;=$rbJNMZlAjwrn$TfA zdHD}LQ#;f>X{ts&l5~PRH0(A#IYFqr-%dq5V&CXxAsbp$=g@(aAYIp?FihoaEHJQ{U>mH*nRw-4?;U z%8YP5GSk34-qS6;{TM{OTPyK9D#XmYXyu{3OjR&Fl3;s0I!He~(}$xyuBendI*+iu zPF?c7gHzrYMX&O8cL>mX<%gj(B0c5dtYalW3p3TZ_ZI2qBrgA8Cd?CY4jYv@nT0G;0IB zX(eF29ww{36J1WcD5!N27ks$9xiGW63A9T+kGk!=$s$WVrf~qhd&zx0 zG!_ZH6+QU8=?zi64-Blmg*T|Y$4j0)FB*fr(DpbzgnV?pE(z~Ev%w=hy5#J;;!5m1 z1!&JazOaP7eZzx2{7WLdqFf?9m&K<%a~GOD`iW~h=oRJva6LlSP}?4+n=1gAgu;H@=hVW1~ZyG-pr!C z_L`T@X>a?bN3oOu@)eaH+^iG5Lbz5uDBZ8Tlv>EW-{V2O*p1vgyyF%;_ldwfsXClJ zK_^DKvrv#bhsi}fWFEadlsh^-gN=D3Bu%k@J% zC%QMe1dOk}CV`H;X1$BNKy0Qw?ihVN#A=Vd;=hu;zs^oQc~b_yT1Qd6ME{Y!p)K;f zKqJgNaD6Ae?Ni~skVJUBPz}^PikE4{V|xaD@eB-L{~Qm)**%|4R65}FIW zD9@ukJP~U>Hd9bNLKYf5zlLwUT$_+Q$hgtGT;}_{>p_{lL4zo~O8bz#Q8Z<|`?#9D zc8{XHFM?paU4e)_oBdTe;sjN_)I#LDI`+G~@ma#UR$>`Fz+(L(UyN z8;?6Y{3qPJRvDVSFqKTZGk#1xj^!vm2N%n`t*N^`xfMjbicNyO^_6YCa?3is5ZJiA zAL2Z{SlB~7zwcf>)J7gXp#7;j6m2a%-ujC@T7PXl9|MIw$aWaL`kY2Qxr?B^Jk9aE z`+uFi!j>q#Fvx7XhRs$yE?1L1CWD8(GqvbELJ!Kk!lZ+}KQlTw(#_O%3n0SF?atw^&OSH z`dsw876{V37o0=A#`q$=Zif#&<*I-^3~+ZnU>v%=zQHWJVk~^U-3Us&)%uaV8Ycuj zR~?3za23R5eOGS~#RUlQGr3?WCK%$zD>uLtCS~!2F~<8_r_A1F)fTeRS%s#@aVxkFs&!NBQ~Nt zC8dYGpuD_1zL9l31hr{AOZBis3W1v^7K6~=5lW7F%r z(CHIB6Irx9N@fB*%X}EU&HBi@QHY4V`ZXTCGOQ82Nbklxd)P|7>sv>?Bw7c&Ky2zf z*2W$@&-56*A6tjJ6hkmQlH8a*<2-;p?hYTldyQPYkwG;*5;K-Pq-pxRK(?s8(zU%i zPLygr|2qV|FFc*Sli(9RcSNo|1LA}|Y#qM4nD_!cps5u-{Ms8kBb13foW1!xrS1N^ zA(phelbdC|&}39S=oThBlV2)4^9JiYGoMR5KoG~hmSEpXl;bMD;HBe!|OdgMUWA_J5(0E5B@*BdK-K@ zG1AYxp9rkIEqGcz8vU$2VbHZaTH_$T<0u`zI*|*!Nu8p-SUUQ=;9iQlQnLa*V~ujW z8|(u;l`9XtGV_4E4o3IA4M4m-LC2Rp{ij^IbyI{rjK7sVwLfh<)IK&n-H}5)XPWlB zzVlQ)K-k~BZPundhL113yb+bXQaKJi2-iA1`qzLxqFE5V(gr0xxkIWv3~YowcoVt2 zw!m6F*9fCM=wxO+4oZN$@DdQd>ju-jfw{Q5u15I08Q%IlzeT6Kl+Xn|Z!&+pg}X96 z66}#Z29Xs#-=-`*i{YQW=9Q~Gxj+283QZ|J{q54cVy&n=$b@4%uHQPn%E%WzdV7UC zgIq;Df*Ywlg*3Rm@xmD&DH654a;$;9Q+ujA)m(2q^BP3Hqm&fA3^bZNK;H1Mzt)?)BJfx}5Hb?Ih+Ln%tEf-Ce>#V}vULl+jDh7n;;Ih4 z2+`8Kiznv2C78avIh4RW*un3-(biYJg~!G`F1V(?Ruc<7 z?ljK48UPeMDTy1seC7MQ4erXk=atPpkoIIf3C)MR@P*(zOPv+HN!S>?7tjYjzKZia z$EriU=>~(nkp-x|>SXjhS5*-`^?$fM5&k>9XfwCGA@;(&t^lMw6H$P?)k?ZO*8B23 zSB*|RK1dC{Dw&J92~Y<;+o!=i2o2{uvh86#O{%B8UHE#uW@aC~XAu%TNkghV2Xe1H zj8?Bb=FA4YqoAieIG+^!lt97E~L#cOIp@kAT2E;uEF49rfcp&E^TcOgE*y z^|V{OrU;)rIIg+9PH)RRz6EAH^3XgzQpq>H%v+~DOUa78UkFG&QfAFC@)8g*h9&2uyIj zw>^73R(J!w&=VEC;|svNNJQ5OR0k!(P%ESjfxc{TQBteM1xC_O-4@rN# zgw$y~!{Mtva2fMFX5N>(JRm*2KWi(!97(M_ovoj|Ozj3eP7UWgFwki|UhA7Z1ynG- z-_TaQ#Ld~f#s|thTG+su%8#bXC5v+Upd&jV09b4D?(;G<_V`f zWert5+{pvI>NTW1Z*%EA&y#n%DwY(wS&JDw9TN0AlHv0_P0Ob|hiy_jdK>V)ik^@> zOeb$VrEAx`ZvVeJ6HOyL1Nj5vWkm2!W*eMlQSTtMJF`~z@39F7t_xNK*=9V&u6@d=^41*!JBwNzg{o9|LR zv&i_ozq38PI@DV`e@n2u%RiyLyN8cF70|!D3!SMw)r!Hr77)TcFA1H!*9+ggAeY}e z;Xnhu7Q7t2aZ`9b!@;k;__^%7rHo3wbDcT7wt9;?vvZ`piW&5}JcO>iu{{;MDk2#@ zTFSjTn))2P&W}pF{dYk;dLa$IIo(mcB7}%LO}@1}5f%uWz|v2`pyW_5}^S&IO@ zNB#i3BkYtt{;&?bv|DAo+>4UC)9UygAo%u=-PNa z_ljsdg6RysSO~N|C|Iz(gJ*%gr@b0IK*Xp$tGEL_Grk}_z`iHEZp=M9Y(08C`B1sM zP>>eAg`l22ks$xOOg4u-$cjt7_JT7#IplJ^Qo)Kn{-Q>`E>lcBsWmUW=IRl=c+Nk) zndvUQ48o&58cJuqCW8^Zv_8c=W7H_S70*|_979DtL<}Ik^+r8CgR*`-<2SQBQ+WTp zW#nN!FNXL$Faj$*<4qww92KLzt-&C@U-W@JW54OVOkzSkBbw1XcXm5HicF_H^j-Qq z*M+k@HdF9C7`P|A$6ScKtlcU+*>UteE&(dMxrq)w?)X2wYfBP6%I}0d@1c-9gMmFf z-8K$BgwJNXz_o%si4lCgOL%ZQh;FLAd%=D^Ua)7qkqp7S`NknV*DLZo89jnKOvSpr zBJ~TrourLB2`sBUM`8)Rss;kSvB0oBcnQ(G?+FRLglgBk$)<3$e0-{(NRFqnoqb#dOimxE+Hod>Es z1YZ?AApoH~XY*(}l_`O}GBX=J>wHN)KPIR>RM)M%K&+NM+IYV=OM+YN@j*3aF%o9$aYe)VTP+~hqxWxJrdBa5gz_v<}9^wcCh7K*7o z?h=%|79Zuiw?=HdGsdF4a}6UsHOwTv#EE&laGjOBn$(NE;iH4Q7V)dSwg5`K5P5IC zWN{Wf(DsEqc*|?O9xM;Nph<2$hApkVT^l+*BvUZG^mC5A5v!-XykX9~d&-o&O24tZ z_3Z0C?JeUx7?qhlw3Q~k@I8S&u>}6S3Z3%2VqXWo3tFE%v4A7J84oYLwEL<(;Q;Wx zIJp_UG>H|x;}JMLSj*=J+{_HeK*MpnM=a$yJ;^IS9$UlS){f#hD5_RuAjE4=zPLm9YD}d%V}Y%Xt94DhGhQyHBY- zsc}BNU^B10ntBO6kw*!=&jA*_5|@I#fnlLLsGp*|l^Q_3toFV=19%WU3+BT;w%CNd zm!c(-MtjLUV|*+;q7Wif2M6eA+M#7|N^3|vt? z6VIhQP>{2|_2>@0i~qAd_Gp>B)p4#p?gYO)Y}Z;n4Bqy-PH2Zc&fhA%_pk=N-Y@Gs zVNX0g>PK(AoL`o`lNsQ>Y%oYXE3UM?4%#_A`_r2|DDM6|%`0NO^BRY|#T-VxX7IB- z8gKwTti>q3c$iGQWWL`#)&H%$muYvsO114gN07q1t~XsgST0q)=N39WFI&_+pPeH; zxOLsUWy&@^ev;t4_BlMgWUu!;tyWIEG25&?Ynp;PVz{imqH2#lbTT}>yM6RMP~Szp ze;LNSrwS}R0JhXU{-IOuCq_bN*{0%NSY1xUrKjXDMOwdIal~opfdoyp(rlB*@P`SiWW${wD@klfVHYT$9ywA!^~hkG1qK8`{y3L*O-F50oWir z*GBC<=Ou|fKdt+_RumpPq#?pPH1JKmL;@;3opcsG(iEvYXm|!ak=F-3+-R!3@zR*R zAm0x@A&F7FTfOr=i5OSBL*WFxm=MCdt)Esq5m?PTbFI}pH+3PsY10Y41zJqK5vw)5 zOMY@ae`ue*)eWAC(|fADRj3y zveT};;2%aklK_#us6D>D$8l3VVptVDKfxfqimx2KA~<6`*95P-Ctc?}4Pq5L%>ke~ z=5{W<$1n;#ebHS#?s+dg8As8)tY_`Kb2@ptoRqx0h@OQz7x=}!=z3Sae|w$1;h`?Q z2~&kUCO~Js={?vyp>s~W>Qi++>efR&RY~YP9_b0ZmLUE+4f6-Si>QY@aDP3$){cTa z`NGdV0EQnuY{-qfD9(_&=v{xk$yg^lPjMc-lEf*zs_dn`{KcQUM45Iys*3}?VQ&;Z z%|=c;xar%kd3%CAm$b<{smC?DzV8{mi#icLc6OS)bM{R=kdUxFC#SwU@DjE? zUOtyR&bo-bpF!(6VV@?wy}hJ8=>537ybB>cGe0;zjM@CWKd^m0A0UH07^5jY>6=-+ zi>?tpE(a$*nrk;aDF@6w1A>jb)Y6(gm40u%_pBPd`I-H^prxO?#R<5)Sl947z{C{2 zgbdz1NUMK6lt)@U*0GztLfOE){n-gT2|g6Pm5GfzCEaJeOgff5ZO_lVeDXj&`)p#p zxo0XpLzsoV2l5v@r8y}*FKU=Qtmu%vRRJtF6WfJ$%UXjr^~IqwtXtS z2=Jvm+?v8Yv{_s|ffDh%`X|3UZGCaP`PFPa^?s&3b$S-PSM-%TU2%#$4N|AP?WfJX zW#K`+P_Z372uK$^R;g}104uT{+zPg?~EgUPpiTu*MwoTDIG%o7A@&7J8?7SSk z?!=|M{DVC`l7h!PO5(meBI@8gc)i>?yKR~{U?LU0t+lDUa`Sb(xk@)ZW`Tk|Y^AWh z+z4mA$zXduP3sjsuN6={=vlhG@M|)>?U=c}zO~Rjxp)A+6>C#H7eceWKdRO|rY4R( z?)Gy%Lwl{dJAik+?P54RnA)E`*gP{m#GI!)v_LIAy{hj@1c0gSdaaUB^m2 zK+~JMPTB=No}`;R$jvdmLnLNB&gI;^XYNEjSRpXHtu7S31wK8!IplLZgWZ0-?#)^~ zpJ8Xc_+|Y(xxB_bO?ZSo_^Poz_tEpc2ucjSQQASgb+Es^fUJf*KO<8;%uE}-{iBV% ztX04~$=&!oChpNZ*Y@f>YpH@gIg>FxhnvVfUu0E0Or7Ap1S(m*sZssASeLjvTQGq= z``k6WG&-cc zKTmx)3mZ^9;!AbCA$RLMG)%BMK##&YFk^we?Ljv^p`G!(x~Q|fArw))<^qDf1B{Wq zuC<)^t`V; zw;m5XvGm=%Y9P40eiPw5wMW0ZVg^LLe0+R8h;9x$sRhEj8g$h>`u~$WT}t>pS|pjh zE(Gkn{lDhC$4S<_RNH4g;hNIDXlm^|R{6a=j%#$g_0_69z5kFs7;rs3X)kuYWUIhE zk^dn)f>G@}4|3%^3z1_yS$_aM_+OYh7E%K}yEBPBh9THH7p;~(Pm+Q?J4=AQ9g>qh zdz}!x4w)mp;R+7Dutp3$-Z_&!D>sEb!>n38larM=%Z@NTwia%^%RWgx&Qol>gXX5a zLdW?$%`$|&T$uMgI!?;HE(abw+Lk@N3qVr6tM2GLe2jd%dCy$E3FY!U8^eD+6<5wY zc0CBaBO}ASU{8v?s7MXHxAw9<{%vGEf3k@^o}^PfDj*8IaD&D@RE8Bj9jH}3`18%Z zeTLUNc!z$y+4zmU8RJ$x;bSpz;7d!Kkb}4kord&{03VIM0Q- zIvozYB!g`|QoR8^8!h*|>TsAnbJa<`p0=O7o1=xj8lWpYTjVvpvoD^!8fL^jGPY+u zW9r;JN4`KkJT}KYVi38#JHhk4)Zo#*iw)Ggl}(tu@MN{T%58f*-ze+6`fGSS-zCI6 zB)}@Y*zD3g08_TN6OM;E6b4{C7!!WWmkLbFgjD4@c;<@F0amGEOdF};&K zr9hp$7}I1uzU_rQ%~q&A@ZPGuXyd^>_d(G;$o?)oI?HQ41LOrh{M8n{-n|FCEj{AB z0^o@~R>qV&4S^~=7PqRsypAzG$#AAT6xi`P4VuWjM7+~H*}@gQc~#0pkDnOONelZ(_nJ;Yx<$WGloV%v&5KxPrP z=WU%leEZu%6IHKY%{TP#&P#7_ykf=8Y`0@trSsv%Q6I1vZE`jy8$i{!gI^xP-C z72#St$#TEDy0Rj@0#|~(;A(|EABCR0{z9d^z#|vE3f8r}!4NULqi5ngVZW3-E(u6I z$JG}+Ahw-7ed3HeVH|lp##Pk3o?Bo&-SC_}DG>*~o6&&0-PSq1cJ*exLaKW^oVy}D zuAlk5xN!KrinYExLOlLF=?AwwQEah1&s2}R2Ui0;{Sx500-bTa*9E#g<)j5YS!cgI z@TnO)nMQ{_t;Os-p|U`|j$9y~j}jFlt2kCEFvfuv%+tg)p$_zXHdLy|f?szOe^n72Yb_!*5oEDO***1vl^ z1%A^#Q7jHV_n{I#o1VZu%R0EdEE1!<7J$yZXz)Bd)r&toa{3m$bX+t~O#hDOvp)T3HEaykIMnP5XbK+%Xi^UDss zj;!xITo|#uL|R_GPXZskId4Thc1lyds~f+)HV8hw4x78Y_V;odg zAnPx^8Am3){2`n>vE0MG2(rPwoSy(Z95wyD)+MSu-$>BBCi=2HbE6}@LN`6Vd1Gxo z`6V$u5T-7@VzSXaHWtynGP2h_hue$2g(`AAm)JeM-{bf@_t?Qaod`-jpsK>V-s!Zw z^7c|ZgGw$uBfz%3wOdF$4fU8iX+EGliw+AteR&wW_{KUsO=xVqr!yM8N&BHa9rFY| zedQTFc*KD{Z7N$mh~HE_Z->&oRG)&q!qB(9Y^Ux!>aVuF=ZdmDwuo!I$G(@nro1n` z{7s#`#=N0Cg&)hk%v4uAn8i>%Z1oeoPcW~&XP=e5A}pvpt9M4d)nItL+MwFILyA(p zgL-*8YZ~>v`OW4%m2ZN*W!8|rGg>jd_TSdLGCU2vOW9LB{~I$sg}{eAu;Qyb$5(hg z^#A5Peu)J<#QYGw!t+DDWj^3NyAA}rjb$@Exx+%dv#V;nn&1LH*8E{T49HDAV6uum z64R_Y^VW2|&?cEZv!BH~BN3szeoa+9DB-KT1~GcPla7hJ3Fy;234OUe;%OJX<9s{3 z^KB%(w4$CnextL!QF6__cK`3ZhsN(brjqYGxUUjD6C{g0itwttG86DUQ{9I>yTr9T z6qd%l*x-jf_SRlKG6nfO89Wy~eyEQai<_H0zkt`gy?5KZ3%rUw4T+aLxtMu9{N$0n0{7ZG$${ZIqc*oZF?@NupW;ou z4=U-rx`DJk3x-v_ztvhjtYyGF9WW(5L9z!ul58ry7za;=*h_ zMp!ewfrX5_V_M@ohD3$D9m*BGiY7=rRU584WoLjrHkZRa|5Nijo0LgCl=?V5VQ3h; z!%0Lu7by@upT*w1$3CDuPe&NNFTiPB4r;;OIfT#+d3A3e9aL#8&pSN>nSCPuzJhv~{Zc+wiZ`qenS1(-3txiIfNy(ct1+uhAPn@9xA0e?a0_WeV7`(Lw+p0o_|6B0D%90J$C50y;*m^J$Q8{Jn&wGJpwoJdGQ$J+-o@Jy~Y8= zz1g~TywCS}y#a&qJN4rDJc4b%y$9rMya$IZz0|7EJg3gAI#0Dhy~RY(y@QN{JSJz5 zy>*W-J#AX5y#stUIvB{-JdF29J-78fJ$EYQyzPO^y&g=!ynI=IJXG3RJ^hU@y@K}8 zy*St6JR6boJeWE2Jn*o)Jb|j1Js(byJ>3@VIuw4ZJr*RCy7`fiJz8jNy-uu)JJEYd zJ+_dYJ(nz$I;g8JJ?KQEyFr*AygA{Xy`7(wy{+hFyu#7*JPU!NJ+yzqJq!<|ykWv+ zJ%b>iy%$JiJp#3fy`xx?yk9mTy=ahzz27;6y`Wbtyg3_cyu@Mcy?TW#J(1@8JO&w~JhZ`1y*VJAJ?(CKy&i);ypEVSy_@;Vy||SOy(&qYJ--A`JAOw9J=oi$ zJhIEsJcE3Gy?rl{yhc(>`J^uHDy$j=fy+SaAz4DXTyupw_JqP~Rymty^JRgLQI^>%*J&fywyXWsJJ-w!9 zJf%dJJ@0I_yi?pxy&)S&J#8VUJ!?pqy(D-@JxK;iz4Z*aJ?xi9yzYmlyI3UXJT#Ao zyj{elJPT3wyRSqKzUx^mJvGu4J#kQ#JxpOmJcaV0J*b$;J+Y*bymlg_y)L3+y-rA% zy}3X(ya|v%J)-%2yPo9gz5CEpyrXJ*VKfy19O#J+|E=JqJ_TJF?sDy}wq`Jr)v9Jx{y>y#+>o zz3PXBy<~A^J*(c4JzDkaJq8YIz4#p7yqKw%y&4RkJtC?QIgI>=J@W@hz4sNOJh610 zJ%l>jy&&w1yhHpTz1(@uJF@T6y~6yYJMISpJ!N}VJ%KeEy+-s?yw_<3JsF|rJOvbZ zJvc6aJpo(!x{d^}JT7QUJAiIEz3-AoJ&*6U zJzz}qJpEnyysU(mJS`fjJaE*kypa<$Jpg+(y@Z%dJwiQgJcWiIz4FRKJ)#g~yvSj> zyfIBgy+B#iJ-SB~yuuB7y|Z~0JpiqgyuM8+z5ZTMy)kW$JyESwJisT?Jmg{ly%}w< zy;|>@ybr9oyavQBJwFHZJTg|(Jm)CNJVy%^y^DN^x@aIFy~4%uIb4UhJ?I;xJ+p{9 zyqJTfy(sU@yqcU2y$yyAy-n<{yqBW9J&;C|y~j&Wy%*DDJS%QIJwqfYzU_OQJ&rgf zJinzCy&V;@y=NbYy{$kTynXq3Js0VhJ&M2Eyiv!qJl(rPy@TV7yzhogJw9K7Jv)M7 zy|klTyhQC~J(C-bJuf$sz1}tLJA1n%y!{$RJW8W0Jz&bXJ-i%|z4{c{JVEG=y)21x zy~Tz+JB-V3JuWGwyiRMkJ+}key-V61y>nc0y{jDNy~yZNy@dx~JZ$?{iGJpgq8Ju;+YJr44pJxNp*JvXh#J&R1GJoj?Ly$;$$ zJ+du$y%z>^J$|noJ%i4bye#ify$K` zJKb&!yNLb4J-OiozNu4gy!zS6y^MW^ypsgdJp0BCJG(lOJ)7OaJ<~TSJy`r$y!<&5 zy$e^3ym4)SyuBh8J$F@By^*GvJDFFvJxni}y#0-#y|ufpyf3SRyrG9+y-)rjy$zoF zJVik`y%Hg?Jvky-$)q zy?|oYy*SkAJwY!6ymTiTy(g|~J25&+ypyO&z4kG|Jt`0eJLo<4y|YG?Jhcg-ymn66 zJ?U?UJc;gsJ&emn27Jvj#FJhNjrJ=^Qey9L=QJCZj~J)&cay|Pw?y*dIkyo|<2 zJz&`ryr-@Ny(Uz2y%BS2Js2T-ylsilI}=%(yoTzuy-|WwJB(e8yaxowyt-onJzG{t zz4w{4yiopRJvJ{=J#28Yz2{6kywy8&y&)>VJGi}sJto$)yn&<-J%45dJ-|=NJ@ZrT zJcrAny~iR0JyOuJy{hV$I?H>?I~Qz%JzG`+yt&>vJs#=IyIwj)z4$vvyYh~MJ$xyS zyx@hyyat3rKEly#JT-(Az4xdWy}Oy3z2w4ty}j(5z2uWbz17H0y+L%DI|h|8yr>Gz zJJDw)y>=>ly);Y8yA&25yAPwIy-~P zydY(ky<4z6y@uJxJn784J%VqNx?^#ox^dfqy~y!-y!_MhyoZenJsXR$J#d*-y@*(v zJp2_Zys60DyUf9kJ)Rs5JJuDe>J@B`iJs$g|yoo?8 zJ=PI3J*u-$J#&gMy%V)*yujJRyoT){yxiE9Jb8H#z4KQuJ+9$XJxGLby`Zrgy@4ss zJ=iJAy{PDwz0`)?ybI`gy9c=Py>!2HJ@M3Hxx0YTx_xLwy-j9Sy~%t+J>teEy=)Mf zJS_+Fy^%NyJbf$yy{B0(y$eAHzMIdMJvO2+z4hD9JF7oRy>-MLy+8L4y^5{3Js30_ zzLEy0y?=}kJw5|^J?n^tyfx>mJT%dNJ1k&WJv&fJ*kjdy)&3X zJ--8&JU5T*JvGY=zSKL3J^sMsynFjgyF1zvJ>jkmJn4oPyhIX=J-d#iyj@AMyz#YU zyioyFyj&dWJzy0_y{~=!ynqkcJai7OJlWZ)y~*z{y&||{JT)F_y_0afyCxcZJOg#q zyv*4&yDJJ(8pgJ->!QJ(S;qJw|$%JuA=tJUtPNJ)i59ynhOgJcM}AJY{a#yyYZ@J%xL% zJzMBay+R&&Jj$w*y^TEOyg)k#Iy7p8ez112Sy-s2R zz4%)#JaUA3J=2oPy;X0OJt=V}J#tOaJtsiJy^Muoy%9f3y?JA3AGIzCHR zJouWwy+(0gy+Fg^y`rcTJ-cS7JWb1wy^XfTyHuBfJy|voy;-hKJqr`U zKJP>nzA7vYJaBd&JtK&1J>}JvJPMqGJfkwRJqBK)yb$v$J2=~xJQtvlJo>7?JtTrf zy)aVmJiP{3y)IOty{+v>y*t{8J(OW>y}VGuy^jUHJ5)4(J+1F&J@?H=yqfGGJo_37 zy<|u4y@19YJ@8fozFQ`_ybk`wJ-+*dJusz}JWP3sy~m+3y+D?>J;pNzJ<5nWy~5Ca zJ$v{mJt5R2y+RFiJ)J$DI|%Y*J*`nIy`Up1J=uqnyh*PEy^=lQy}pxsy*w|=ygHmA zJ!Y#@J!tl@z2cagJqk0@JSS_AIvuHJs;JCJbVo}J^hX}JJ3(BJO^gdyk-X7y$xW0J#mu*z5GW} zJ(gD-z1JV@l=JYagAy|w&ixlMtNya-d!y@nLvyaf;&z1WlXy?`@} zy@D3sJRbIfy@L)-J*fQwy=8LJ*(;IJRz@Kylc4zJP5~Dz4N#BymJ%XBRy?bW1z1=JxJ=bCnJq1nzy}eBiJ^1z6JkwxpJiV~|JslfY zz5F7MJwBD!yO+C8y^$Spz0(t}y*F^1y|%@hyB`ZAyhh&5JVx8Ryj&A;y=X>YJ)pQ+ zJd|?#yabagJqslhJ&|Z4Jz87ky~j@=J$Y-}ylhT+y?8v&y?~^=z1L%TJa(Q0Jv>G` zy^~;eJsR`XJd$Bhy@ls$y?;d8ymhj?JYz@HJf2YsJ!3|gJN^D#JsI@|J^f~iJM%Bs zyhqigy+twMyhOH7Jm$X7JfrU=Jc5|Vycx0FJvv)qx+0eIJ4|dDJ=|rlJ^xFmz1hlS zy(Ts8Jo+ZEJtRC>J(7hpyn{AfJfy^uY(yeyk!JTLWzJt4fF zJ2VKBJ;j>eyqGyJy=1c7Jhuq5JV!qmy&@0Jrl`Eyu&IaJwIANx|>EFyhWQ9y_DVBJ422uy-bFXyd9ogJ(p}JJ+0D@ zJgILOJ$D|jJ$fIzyj=rsz3Z@YJvXOyy_6b-y}QBHy+6%~y(V~~y-&4lJQvRvJ;r1U zJVg;?y^quOycKn_yPhsNy@>BWJyk|fJ^b3sJ=xrSy?8Q0z3Sycy$suey&>BIJSogo zJW+(3y_5lfJ@hL(y&AHbJ+50Qy`5J=y&>fCyMUm9y{}Y{JI7y>Je8u4y@0Uky|IlZ zyoX9>JoMaIJ#t7oz4DVLJ+-8>J;@iOJ=q9Bz1OEuBgyVlJ(16myg-cq zJm=u6y|aNVJ^qO^Js${pJuhXoJvpXnz3&c+J<%;OJp0X$yoFP7Jp=Zuy&d-NJA?R%J-`VK zy-bQ_Jl~=keJR=|OyxuFsJQ?r4y=fy~y{^)}I>OWkKA*5QJydtWJVLn~z1P0CJnOQv zyqHdzyn6$5Jy=mRJx$~Sy~Lxty!?BOJvNt?yb1;az1h+3y-qQqyQ%9ry{WK}y{yo- zJWrTHy?3@(J^dq0y?dihy%-M%JaC8&y+)K2yeS!Yz2&(?y%kRmz2criy^M#bJ8;-^ zyyLwTJ^vUjIYM zJZ|hNJjI%;JeDCGyIZ=GJ<;TeJTP0OJ*P`#y*PP@ya;B7y+5B;y*wMwJ<|E7Jrujt zysyy8y`xPzz51u6J^pCMJlYs>yGKwDyz?OvJ*ln8JJ9f~J5N82J#6gJz0okAJoT~! zJzZ@KJt^B;J@>!rI#dOhy*ehry+X{TyrzbIJuEk!y;V&-y-(l>y|k()JqS5ByaLcd zz43IhxvaZ(yM*&RyVM_Ay-C|vy#0m+y_>)VKCK5?y;(4DyhKAfy|F`cJ^M5qz2d{& zJ6*h-yfpp+Jnvtpy8ta^JV>~-Jf^&fy%5M5JY`ldJ+RFEJ3IlUJZ%a1yzBK8y=ogz zJsC=HJrc;Oy(~UXymzIGJqzNby;vTOyx{FJ;Fe_yz0-yJoU$^JyV+JJ5jZAy}n|9J%Nk5n zJ&@ayf+z`JaOAMJUijkJz$-1y9mBEybn}J zJr;Z&y^A~Py?cUwJq1FXJ*}7nyn1zqJ135cJ#wEqz4!p9J;?-*ydVb%Jsixar{y*!9y>>AVJtMc!yiN(1yBbn?y;!CrJ!fbJJw2KsyfCLRy#|v- zJ)*9|yry@xya8;AJ)@bMyhc#Py*EakJy%ouuy=J&yJ>sNvJV0x(J!Vn~JmWUSy|DeNJ)mgIy*(BoydoC} zy$r0-J@zZ&JO#HQy?5vFyKd+?J-Ho~yv>UfJw4pFJ#K{qJY=2Pyd#Jqz20-vJXI#L zJot%-I#b>ZJ&13XJZ6B{JgHA(y+l$nz2Q=Yy}npYI|Jt6y{jM{J?)EEy=*C#yUlsK zJaMmuy&B3hJo?f#JsPOIyj^*Ty`Y<}yuM*Wy=b+uz0HPnJ#sk-z3=WbJ@y__y6Sr) zy*yFay+%{QJmlCLywkUOJ+TqQyL1TFJHg1Gy?ZbUJnWYiz2e~9yxK&lJ!V=ZJfgH% zy=oMLz3m^cy`-2CyV3g7JPR>bJxiWLJ8(CbJrt+BJp4-}J>D(oyZ%SIJ@ymMy`s=g zy}3!#JuddLJXqmTz4RXgy;6_)Jnt|;y+bHmyr29~y+~i^y@~pmyUXucJ$tiBz2T{3 zy_p@^JrIMuJv5`iJ)mecy`>xyz1TFKJt)dZynlNHy|E~EJv;OxJl_L$JuP79JxFjs zJl}qVJMfU9J$=fRJ;OJLJj(nWJrfuWJ!5~TygvXMJ#G}TJfz57Js+)EJ=w?XIkMX2 zJi1tnyza!6Jl6v7Jph^qJ#E*}yQ>A(Ja_dUzV%DSJCRuty)%i;ypz@DJtVm;J%8wY zJhzb`y`?RWy;WWzJ+|hdyFn#`JaScDJ(d3oJ<#$6J%b#jJ@ai0J1v#pyk|$CJhu0Py#&&by}46Jh%YHJk(iXy~`dOKApLlJeCeRJO&>CyS%MT zy^nbuJb$9QyfYqiy}S*;ypG2}yu3Roxv{wyJtuNyy$X%cxt?-EJ^FKly;eb~z05)N zJ#G4Iyk4`IJ@sT+yfOGeZMJ%O{Ny*Wyryr>ExJrMGJx)p)9yq+1WJP{ad zJw$9xJEX!7yt$c;JrE5WzDA;my)BosJd&Gyx(LUkJh}vKyc_KRy+wH6Jr*~Iz3{*y zJ-GgYJ*RD1J&C4?JQTu&JRBQPyy~UVJfR6hy`rNRylD0pJ;Cr_y+;1)I=shby$W5B zJx(nry}yq{yEcuzyjl4PJ$IZ$JWm~uJ=7C_ye3g{x)SCLJw*kjJ?946yr0~J zy~iQ@J@gw0yveO-y+2HRJq>ClJ&0M(yQIohy?vyiJO;I`JnH4Xy?M$4y}EgdJ>q-- zJ?48PJ+C09yyh1CJi_F9J-QK%yph+Uy{Achz18kLJylJUJ$ARWy!*rzyN2yEJ)z=_ zJ+iJPy)G6Wy#6$6yr2d?y?^gHJ(JdvJkge5y$hm|J*n>~yllvXybc|8JzAvxJPo5B zzSwlTy~UZ}ynzmdyt0RDyOHu`JP*!BJsvDgJPg8Myr^KnJn~#ny&(w|ycxL;Jxy9P zy_kdaJQm9WJ%&K(JV7mmylJC{y?lejy=Y4cy)Xw{J66Dwy^7tay=J&@-SJr1kAy>+6y}f!EyG53jy@kd&x6oOy@p4Ay#&D1JU5s-z5EAXJ&w@Xy~KZwy*{XJJi_qoyr2$iy~&59Jf$I}JVe5iycA1_J$XnQym+y%7_5y|l_!JQmO7x<>_2y%)TP zJnCYfyh`tEy^|0&y_T?-Jl5foyh5nRJoah{y#i8pJuI{Xz0;wXz37aJyt{3hz1v@a zyh3YMJYls1zOW2@Jwfe&yya@8yUOBLyXBKjJwcCgJYY#3y^qY7J!uS#JvC;3 zy_9D8#JR(z4k%DypWbOJX^Tby==sSy?~Vfyg!{tIv|ugz2sg4KJjyzJtnjtJOfOh zJ+@>Lywy$iyibQ#z0L0EyHB+XJq}%Bya1eLy*0D-y*OSKy#1&N zy(~xJz44(Zy=ET>z3_aaJ?NZqJS;4?y%!0>Jg}nyJ=LJiz0Va{yfAmSy%$P}yz>p= zJ*j2kJjqP(JX?4hJFEQyz9PW{J#!+5y~9aFJq%)(J!Z_fJnZ_+ym37&y=^$Zy~NBS zy(!GYJg9gYJrEbEJfV2Qyb;gkJ^VqdJxp{QJxD|GyrxO{yf0i0yniSiyt{QfJ-mO) zJnZ*qyxmPoJxXAHyEo%VygksVyy5=wJ&=zgz3SSYJa1srJcZAhy(~w=Iqo_Oy&l6T zJSP1FJr2+WK1)%BJxocBJ+C0kyU^xJy&EszJ%$RrJt+_}y;k-Oy^`PWJCM9=JyBa1 zz3Ge&Ja$|%y>cHhy-#Q!ywjMxy(c&UJSeHbyp}8Jy~xTKJt*D+JZ!dGz4>Toy)ifC zyCYW&JxN;{zOC6LJww*iJ@>(NJ#o(qJytM=ydH5jJ&Wahz4V^Zyw#^HJg7hfJJsj=qJ>n&fy$0^ey$VW_z41P( zJZHs!JQ53!JjSYxy_`-Az0NrV zy$G%fJ?4Nsy*7Zvy~Gj!JMGAxJ>+t2JEH3k zJ#+%xJy6qFz2Ss$y~q@5J)5+sykG2bJTH%xJlp=4yhLNhyxP1ay%=rPyn{K4J&+K# zJ3|U$y={!uy;9v7JvqKjJ?1CMyQ}BJIqGt`z5S1uJj1?xJxco^yhX?-ytl*%z3vhi zJwFN`y;lK?z1HoCy#Zfdy!=!&JuJ_tJtMk-Jg_Lfyv>|XJ>Koy{II& zIUQW`JHJ~{ypE)kJQ1huyp?vRywSheJ4gX4Jv;gNJOEI)yGttUJ&6*ZJ>JhHHzqx? zJQuxLJ@wniJTU06yv}`xy*-Vz4&Ozz3wF3 zy9M;by!guyyl0YQym+$Jx@xN?JiM42y%b%5Jx%#f%JO%eBJwe-=y)ijZy^(H;I!r6@yf8Y^yy7Emy)BGey;cwcy#+Cn zyta+Cy5Fl`J=ElJ;e;JJruvAJpRR|Jav&|y~awaJn1&VJb#z*yxDuO zJOh^zygK87yuphyJj=q9JAS1Ez4G?Eya$s4y{ff~JsiR(Jp7%tx$O))J;PvsJu(NK zya;+Ny+b6DJR@@NJR;s)JaTUwJvp+cJS_bvyrK@8J^vu$yyQNPyD1TyysLhIy#^}` zJy^nJyqFu`yeavIJ+@AQyda}iJx@^}y?jKSyo*iCJwrfqJSv6uJ?m`Py}CKSyiL)& zy0A!(yk&m5JaAPvz3t+Lyi>BFJP;C}Ju|lzJ)1sSyqC?wyh1LqJWuSKJu289IvR}< zy^ABNz0JY`z37%zy@%=^JpeJJJ7Ei>y$^QbJU=~BJRw~9yLXRoy@CwRIJwboJZ3jv zyk27;Jk$WjJ-Da8JOv?Ayl!@kJbP#YJ*gm*y+*~Hy=LsVJ+(qNz0VauJ%VyFy+fgC zJyBzEy*q*oJOVb>IXZloJM%}^yrS-{JFlrOy-<~fytgh%y(-SzJfpN4J@N0yJAaX4 zJu=^Fy~?KwysyYNJ=)kUyFFyh&%MJC(8_yoK5{J@@55yc5$JyN1CkJlIwVy=i}* zy(vHfJtD$|JW@XsJ(DTEJ?U|yyaJ~~JantDyalz*yvTtsy*2>dJrTN#JxXy>JeX$^ zy__vAy~Y|AJrkasyv61*JoR!Qy@m53J-Y=WJcEo4KJvoUJQ)K)y=A-Eyz3P{y>K#P zy^AKAy{EAJymId!y=dxEym|_vJgW^My&m=Zyw!dTJqCo|yh|dYy=3*zJs&6Ry~TLA zJUw;bJ#UM$ySeDHyJ;HF*y}2cjJ&H~sJeif|JP~IUyyy1Ny(0!Lz2Gwp zyhr&$y>_$JJw$(#y%2W)ylb2+Jn>0{yVf1=yn`z)Js$(QJwuViJjWf5y{U0kJc7m? zy@no%yjvWNJ?|64yu0VGyyY;aJdDB8J^sBhJuS)9y<^(>y*SE`JzNbfyuVleye*lIJ)-G6 zJz1gcyf<3`JS1PTyc64BJv2;cJ-<%^K0y(1y%`PwJ&wFXI|)DVJT1+(yrulUJby@P zy-wF?ypP@@yxuGrykvODy~nk5J+r2vJnfetyk5XPy?%oTyi>tHKIz^+Jft}dy)*j| zy~$?(I}fC5J(hcyJ@_-my=*;aJvE6jJ|GY4ydQfEJ=H@EJ)>t9J>JpqI+As?y|0XX zz56;9Izq@%yvzncJ!wUcydD~PJY~hKIzrYMJ65u@y`k#CJ&3aDJ%p=DJv7btJX#mq zz5a6wzN3}By>n?vJrLH5y$ueqy#(#2ye4p}z5mq&Jc>c@ynctaJ{z4=iGyydD7Jza4% zKCKLJJr1UpJ@T+xJwW!sJ@UKCJ*aM;Jr35yJj`ENJ!>VnyJ_}ry{EpcJwgz*yo*QS zy#>qtyx=J_J@_ivyo9$%ygIh4y}E-uJOk(DyMjv$ zy{0Rmy^y9Vy^^7CJ%=oVyfon@y>FkUym%rAJY-DDJygQ3yiKhbJyfX_J=Ssry`8Lu zyz;<&y&SW^y+lkNJjQOyyx59MJeIBGJl!(PJNWDy8Qn1yqyfl;My%0>IJ(@49z3vNLJiSQw zJm8y$xdn_4y|27Iy?W=YJ+Y9_yjwerycu|Vy9+FZyeVG_yfKOiJ*>r#Jv)HHJUzc0 zJzWb1KA=o>z1~f&xOJodJh+y3yqK)By+NU>yoh0*Jatk3JbG-sJRzPXJ(g9>yFMGN zJ<}zHyk3PHz1tB`J!5e|yhj2qypb}ly*1hGJffqgyk-B;Jpzn6yujv+JUa=^yr=fG zJgR3yy%$N3J0*`)Jq(M~JY2sNJzsFzy{>Fqy?Dc~yW}LSJfN#AJzLoMJJyO%yu|qS zJdn0DJ@=h`JsX<|y|12{yfq6My_Pv zy-d|Py|uRxy=NGZJNfccJT^=)y~$1fybN_QJ>mzcz2`tiJY66NJ!PYDJwTVEyxH0$ zy(iwZJpd|(y#YNCy@=tFJrF$uyi~^!J@33&Jc{h)yqGufJCWtLJy!MqJVVzmDy_NDlyar87y;lKXJFvAQ zJc#?>y+aO_J*y?Zy^UoMJtn@sy+*@8y~ab4J)n?OyNGhSyc-)EysucdJi5L|J*1fl zKH)-zJm-ZXJ(v2$z3&%5JR|wLJ+P&-y#AN*Jjo4&y&yrxy<1hpytg#9ym%(_yF^c# zJcIoTy^L;{Jq3Hoy&_aCJRR=?KEU5#Jrk!_JN;7@Jkn6*yq=PwyRJA}Jpp4Dyn2(U zy+Xa$ywke5x$4Jgy^UQ*y~2sRJSqWlxobb3ytqs^yr<+2y*$Bkz1D44JZbBvJYhr*y?Vx9Je_<;Jss+fJ&S6pyua|SywA2fJ+7k(Jf)kwyqyEBJvncqyt|S=y`zP5 zIDY#+y>oqBJh?E^z2S;cycP9uy$A2_yj+Zty?S4*z1X?wJbA1eJu3LQJf^^9Jeosy zI_1k+JoYOpy_W#*J!1pbJZLe0I^Z3ZynM?>J=nVYx?AHMJn$mJywLL(J$Kq&Jp%ch zJu@*7J3Tliye8^bJv^N_z4JxRygLHNJTuuLy|a$|y!_v*y`W#0y(70-Jva_?y;yAF zy`^3-J&y`ryJPyss`JK0CTty@5G|y$5ZRJ?S|l zKG({MJq6VhKB$Qzy$il?z3_fXy)-UpJr$dv-qy^ORNydAL$y|lAAyc1-jy|tEPy^!(=JNLf|yMqT)J)IV+J65A= zy-AXLyx8`EJ;K?Qy?hE$Jr6-2J@ApV zJfK3yJOaPy)Sd+IQC2jyXyR{I+^m*yn2>my|3@{JZ)RKJjjIr zz4^lFz5Z+wy^`Obyc1stJ&gFnJEw8ryXib8yx~r~kJXl{hJy&4+J7B@%Jl;@AJ->PWyy*mEJNE&iynL@hyxqxyy!JgmJnD5eJcE$M zJ;;n0Je1R)y~+b7Jo-F3ydPI*Jzyx7J^Hdky~WU|J;8u!J$&9zy$r#KJN$7-JZi9H zyjERBykq&2Ju%~fJm|0SypQyyMdtQJTvvy zJWuKcJw1TXJ;(hsy^PX}z1h&2z1*XSJcw}}y`gb;JrIdNJRCPDJv9}_yCEXqJ?Ic2 zy=}=hyq{T-z0Q){JxM9Iz4)?jy!lO~y_t$Py)kN$ynU#jywySNyOoOFy@hF4y|*m@ zKB_E;Jy*khUK4hu>x!nY-y(z*@y?rwI=Bz0c~!JsTJ2yxC)by`vfzzOEaXIxK$&y$0%Pydx0TJj89wyo8JgysnX>Ju@A# zy}zd^JyXmWz3d;`J@o4}y`o{TJgKI!JUN<-yUzmwzUpR{y*C@cJLR&KJS7_1JWGx- zym>DJK5lK2ykL95JxTTcJix(}J#Y!8JLnJ9y*gy5y)YuZJX5#sJi#r4Jmel$J&a@_ zJzwDJx^?`ywOF3J$O?&yfZ!YJYTkNJ36TxJyZ-eyz7dhx?o#o zJ$a~-y__38J;Y)Uy#bs!yffd1ynG*wJS$M4Jz?~jy=!Byyx_@)JbybBJi~F4JyzHP zyhBw+J=sI8ybZ{>z10g4y?tT-yaxmcJt;qtJHHzjJ%T&wyYUSKz9KJEy(wnTJYsxw zy@DqAypc=LJ?y_cJj{cbJ$G2CI~Lw|Jwf=1ymTs(z2wYpJ++ZTJ!8I{JxwuCJ*`;7 zJo3B%y#}5OJz_}>z8>+mI&e8Zy=B`uI|6x3y;G1ZyaNKRyZWZ|It9O7yc(-mJc81s zJP@8oJpALFy`8e@JbA>2yP^ZMy@udsz02?Uy&$1Gy?Mrgy<%oqJ#z6{y#B>vy)V6+ zJwVJSyrP+xy-Kv8yg~-Vx{-q!Jx!6{Jo(j%Jl%g*JzhzOJty^Uy(Noiye-Z2y?CnEJv#fNyPOJ%ydFGQylzkbyb=m~y;l?JJJ%2Hyp1Q3J>*$3JnX!EJ;!K@ zyy{tzLyjn-IylwMGy#yhvJ>2E8J1sdwyl~VN zJ;2XAJz&C9Jh#y8JNKGyy$d*7JS=lQJf7>4ylKy_y`vlIyWud2y~aTbyms#Kysgfm zJX0adJ(??gylr?AywYGryaw@KJz`Fcy$Yd$JWK>vJ%mXOyn@|My);|yyom~JJrYK8 zJ1~20JDZ6@y~#QDyKO#jy~>+)x^s4uJ*};|JqjrWypEi!J-R!{ywjRiyo;BFJkp=I zJw9uuJ)++NJ*GlNytYyRJvYm1JdZS4J>iqtyp^j?J%pj@yj4W%Jh+)9y#+z}yD1l8 zJ?*+iJ05%rzDNJ9JjbpQJ={44z1XeYJQ!!RJ$V_2y{p$^Jz$8uyrCUVJtg_nJ?&bu zJg|?|JM9j9y`40hyx-zjJy`6YJ!~)6yQ?C!JTpw4I&1%ay%_hgJd@Nry|`+=y~2Os zyk`(Ly*z!IyPjQBJE+((ye5Z;y||anJ)y6*Jn+KZyxhyeJ#y2+yBGmay+3FWyMhr$y^S@?J@?95z1NI? zyIIbByf;+NypV|{y(@f~J&LY!y@C_lypK%vywOPOJa`&ny;jSlz30h(J+A^MJV0g1 zJ)pQ)JgN^{ymKIBy(oY7yhz*RysD0})lJuoblykGJ3y?m(UJ5*ynz1kNXJx9_xyii-~JneWoy(g8xJQUNiJY8a^JE4mM zJ%RaYy_}F3ys#h)zAc0$JOEx8J-#9YJ+^3*Jdno!JRaG^JYNM1y;(Rjyf(;&JV@lZ zy=iufyz|qNJg|hXy|zZBJ51hZJcomzJtm5JJYwGry)KT9J)EdYJRSHEy@DbaJnh>i zy-5y-g5ty}4uTyoMkuI|rINJ&9DTJX3gdz5F(fy<%teyQ|f)JZZXK zJIWYfJ!%*mz4i?LJJgkfJ$+0Ay+ft5JT`uFJ)$53JxbekypFpJwS1=JW<9Qyc7nW zJ!Se?y(+r9JfVJRI|<#2yaZ_?Jh`?zy$2Pfygx$5ye|+my;K}fJ)?`qyd`QLycIo` zJzwuLI`OaqJZlM-JTNrzyiFRCJYvDOJ*N&0JU*W*z2%hhyHJK+_*x|k1?ySRcoy)y$8z4FZzzCz4?JUwTOJZ*L^JZhwf zJs82Zy_vX{y{l4syDqchy^U*Xy^0kjJ(V?!z3ug@J$)Ivy?LUeyak&TKKXY5KAt9o zy)TfPIM-*qy!bjBJtc(0Jrly(y>45WycdZhJ#{Bhyr~JLJ-&W5J&u*bJYH!CJv{=* zya2?Oy^HdVJ?QM-ygJ61y|joTz0(bMJ$`7qJxjoMJ+Za2y=I?IJ%kP4JgqJKI|m1e zy@}j_J71N|Jv4R`JrR+az4e|NJ%F(WJCJ@Qv{yqPPAJVF%CJZ>(YJgGNMJ+2N`J#Wi$JhxDQ zy}`nYy!Wgmx~80}J!e<)y!MouJQ1eSI?S6;y!dqhyr_w^y;r;0ykxM7y(lYcyh27i zy+MGxJr_X;J^P@mJh2J;^sty|&Ko zJ4UABJkEk7Jolo*JZ2diz9X3HyhOT2y~0|eywM`CyrYvLy_IG}Je_o=yp%S2y;KSn zJ=8=QJu~yPy;u(ayA%jlJ;$l@J++^jJq<{Sy`v9$yneQSJnpVbI!wzTyjA_TJT9Md zy|R@vy`A=Yz2i7Wy;jV4yt;=4J`34;J-!zZJ<@gzJrT+|y%V#cy=G+tz14~@Jz6sW zye94Nyt9G;J@nQ+y-cQ#J>QsIJcSokWLy)B8rybE>=y*2#QybJ%ayk_vKyuQ=dJgNmyyqZsKyb==(K1-wDJR`e{y%nEZyr#~vJQkQOy)3IQ zJv5FCJ)2aiJ?7~`Jk1$}y-e_my$$9By`^HGJ=uM=JUBJXy*{j=Jx6o{y~$n)J?eIY zJwA^MJw)p9ynuLTy<6OLy$7A$y;K=_IxgQ2JwBr>JtU_HJ;tzeJLqVRyXya4y(XUc zymv3Jyw`n$y~lgsyrBduy_g~dy~V7uJTzS6J+r~uz2>#myrUVjJyF(eJi3opJp!ge zJqD10FJ0H$}Jw%L>y~^HVy<5@3ITcHQ zy&>rpy}0g$Je}mayd!grJudrfy&+ZAy60;rJy0rZJtCBZJxTJWy?MrMz4xyfJy@0d zyFKxcJe;{oy?;oMy|f>|y)R(yyqL(Fy*3{3yxGw;JdwzvyJu|+z1U;wJxWZ3Jn(-` zJ)r?QJs+ysJR7~FyK+s4J^V9Uy@nNly-Vqay-#P`J%pu>Jt=-EJQpW&J&HjMJ(cTe zJeOmWJqX*Sy=p9!x)=|JiSSDJx{;yyOK`aytFwIJ)-C1y#xX>JZJG+yoYt$ zz5Q$-zGAKgJ#&^RJuRw-Ji~ohJWG*3J^Q4vJc2|EJ@BwUy*`klyV$9+J=X&uz2&hs zy_;9FJlDV2ywJ;3yI9#HJ@A(Wy(e|Ny~H1*y~mwVJt0a#J(O5|yiYM|Jt+&YJfmZ9 zJa1$9yI4_Hy^)g9JiRrxJ-x!Xz0VW+yV69#yxYDmJ)K--J&)l=J>5L7Jq|;Ey+R3G zy*<;Ry(cq-J*m+Ky#aFaH!Olwy*`wFy;qf?y)m(IJeO;hz0pmDypfrVJSA_-ySTJ< zJe%-3y^e2?z31Xoyo4%vJ=#>>ypm~BJK*L$y`Ksbyo@u0z5mG~y^iS5JwA()JR++@ zy=P;nJD}MvyvlK2z2Q26ys-Zaz1QMUyH26bJW$#Hy@g+|Jf732y>-wNyi;=*Jw2ot zJxbaqJ@`JQJ>shDyB`b`JxwW6z31hbJ+98cy@v9OJa)E%JY(3Rz4ve*y$b1|z2Q%q zJfw{$yJ-wK{JdT@4y<2styroRFy$*d% zy-eUFyJ?i@y@ZqMJdR8nJP4%y+ruwyJNKpJsG;{ zI+&t~J@L9uy|jP1J*qni*yVivTy*{HFy2+joz2a1Dyfgs4J)bE!y}wb8yw#HlJz-0qy}aKj zJwv?DJOQs_yzYalJa%KpJ$lBMJvqIoy^C*cJ+^X}y}Cy|J(Ps{Jhlb~Jnig#JV(Pi zJ!j~iy*zi&J@BF&yf&0>JP=zQy}@7_y;}^6y%OxEI>hv2y&~QGyq6lOylE$8J#JZ+gHy{KF!yI=;hJT|)s zKCYyKy$%1IJ?9o8JDV{!z4t=&Jh>u^y+?!Eyd`Luy~%)gy|PxNJInswyNQMby+jNx zy{$Y6J#`ldJ;*C&Jt5Pmy#ioGyd!crJzH--z2dQ%ly%Lk?yc%h*z2GT7JW-AEyDa;-J&*w} zy)67oJ%9xUJr&Zsz4XMyyn#lhJkjNcy%UR1Jy7fey+H6aJb|JSy(1_$J^Ybeyn=I% zy=uLIJ?=UrJ#&Ciym^2>J!BShJ;obiyh$#sJcrk(JUt5ry;q+&y?N+?x|N(sJoCAs zy%!}IJ@XoFJQ3Hdy~p>&z03|;z0haby_x*$yzx%fJkq@XJdn+SykK}GJ!7*Iy~Kr# zyeg~@JwjxZJFyV*6y~|osz2kmMJ+b6$I}`2=3cJu+lny&ei-z4~PByck_my%!Q{Jx@NYy%RSM zK5;`Ny`pT6y@M%!J=#PEz1m=TJ*X(+y-L+zysTrlyph_iJk_&ey@$$%JrrL`y}88p zy`m)NyvB&Qz4=Ghyj{y*J;%;fJb`hRy`wGNydXs~J$VzMJ@o=KJ&m`My$DOFytEB6 zJ?=u0Jq&;Oyr=S#y^|y~y`-B+J&Gs#JRM}byfH+Yy+c~Ryz2#?yg=>1JuDf7y-x%e zJWoCXyq!^1y|31oy(s~jJ@ZaxJqteMJb5AKJ$c`vyqNSmy$rX4J>)3%yWKEgz0QC< zJ#eyvysMn1JbAsZydWg^I?5_dJty2JJQ$2*y=Yy%yq>)nz4I=fymh)Hz4k=gJaR0KJyq}u zJ;L)$J=O-yJs9;FJ#mDBz3}Q4y_=LJy&?%kJ;Q?#y}PaayqKRNJ!iD&ywvGVy{B*u zy$pg5Jn&^BJ$)ofyihhXy-)_iI^@D=y_&$WJVuakyPPNey*|6Gz2YjQy!6zhy!R?| zJyi?dJhG30J23IAJ>slCJv@i}J!9L%yxK4hI^>jwJWOkpI{tfsJQ>QfJw;-0J>1bp zy&y**JWzjAJ+BGBJ@(;;y_oThy}|u1yZ`%|JKx8Iy`a9}y*yRBJ!dp>yoy$(?wyu{ZkJwLJ-yp!tqybDR~y&-!Nya@@qJlFs2JdM0JJszuz zybKnxJx|-Ky{cr8y|kl2yujAJJoByNNggJv)jWy&YOayVs~$J#dK}y?1#(y?;KdJo>P6JY4_` zJ}kKnzWPBEJT=Bxz2yBSz724Ty;h5Zy;E-TJm9L|y%p>HJT_N?Ja!Sxypq9oy?YbP zJt8ASy)?I-JwB4SJ;5@$J=kE+y#*Gwy(=XMzGh}fy!WT0y_Ry!JtAtCJvBeOy?$dT zI~idGy|UemI|zNRJcm?Ey_*K8y7Z9)ynnDzJ)CKgJP|eoJZ%T%JB(UEJ>5mvyuEPL zJwaZEz1o~eyQQlvz1@KTzM4CNJ^cbhz5G78JZk^dyj{|+y!;JS;C- zJ-|nwJ)%4VJ(&=^Jz=V^Ji~BAJ%#`0y*Jw%+Ty`|RGJtBZoysjRa zy%$GfJi<~Ey>Li~Jh`Cpyw{g_JtVMAz0F^8yiSB)KH7TkyhUv8yd^3FJmm%aJD^{< zy>3Nby=rJIy%44*J4BY5J?&bNy|9(%JZfK2Jr8G#yUAlmJ%4PpJV;>RymoyeJ&RYB zJxlqcykeHFy{V|Jy-FE5zT0xQx`c_hyr88&J?6ycya6uJi*(9JU>;hJTIUs zy;&m%y+;WWJ+VLoJ*0SjJqUcUJdoTvy*T@&Jd)9GJp!7Tyq0#TJ#f7IJc)TLy=%wL zy?IAQJ+LJ{y}-6XJf-KiJ-aI`J=#tlyyuP$Jn?xdysomUyyF)ly!m#cJ*o&pJuP)K zJI|pYy$4{BJVA6iJ%5z4J^!R5y=ruUJ=RCaz3R=2JWd9kJo;P}J;Tc{Jw9wSJ&o}j zK9eW5yhYv^Jf9LQJkHQ8J)}JLyv_tyy}vNgJqZq{x<`?3JhG&VJwbJYyh2k#JO`9F zy+m@aJV#8TJt2EYJW}U{Jt=yRJAi;7J*D%Uz3u2gy_z*cJ-5pry-=F&yzS*3y}!JvO>TJnt*LJg?{^J(6J4JZ;J>y(+jEJ;oYyJt?u9J(&pYJ)PyCy$v)qyb#b$ zytD}%J*qH=yan?`yv=tuJz8ypJd1Tcy`#9)JPrUQJZHlTJ?kI@y)6!&J<^ezJYKxJ zyuX~Lz3~NFy|GKuJuiA9J>B3IJs4-ExMm#~JOPcUJ&^L4JeHkCye}6oKH4XOy@3KF zJspJ7JOs#oyybuy_5jg zyLv~aJPb$zz3qoXJuQ{BJdwNsyhNgyy^M^Ny@qp)J>lkdy@AS=y($%vz0z^Fyq?F7 zy){vUyxz{eJ>EPTzF_}Ny`3~vJctN3J=&!6x{K(>JhIFMy~GByy{Q@%z6HgrJp1X5 zJmgvCIuaxGz38wCzBmv9y&;TFJ-7gtJpEvbJtU7&z3X`~JYFOKy~Ab!Jr&T1yx@q; zyLFYpJs!3)J!$B2J>ZUpJ*|Znz3Ofry=A%4JJtK3yyc&?Jcv~zz0ux?ys&+cy-@CU zy^O$tz0`XGzUx~Ey~j+Kz0a&Wz1d0Ky)g4OJ!F>HyxqnKKJyIayyAUpJ-+W3J<^QO zz4$i?Jw#WFJ#IZ;z1%qTJfJP=yeRkuy9I%@Jd(mbyq@aeJ*QDYJ)xQ0yt46PyJ2;J-JfNHaJ)hBJJ3f@PJ-c>IJ<#C?y{_6DyOWfhJ%MeyJkF|-JrULpJt9lB zy*C=6x;ec8y}N`tJqUlcJ;4$tJ(E^Jp7s|Jwi{BJ=Jb_JYk3FI|nT?y?(p$ zyT*Pty)&vIJv+ZBy^C3Dy<%UEyWizbz2X!XJ<`zmJQB@2J*pViybXW?Js3<`y@ch( zypdYcJRmXQy=>l%JM&3&y$Gttyji%!y+I=kJ#`%Oy&hqxJdUG_JUq@lJ@WMPyn^9r zy*U$=JUem)J$p&?ykdHF$iJ)%D!J>sXmJ$?<5y~#dS zz3n2XJ+NWGJj8wMyf-0my~L%Jy{IqWJ*r)@yL{!JJObsXy=Y~yJE|27zL5`Py&Z?V zJ*`>`yI1SzyQspQyxWgDy?(#*yG~3+z4SJayWAnpx@?CAy<+G1yTOQuz3wE=yoE2G zz4p~Zy;l=dy=8iiy{BOpy>x2rx|>AJyHy2y~OppyWZ3;y(T&UJYBI-y~RS6y^J8Yy|g>1JOBk2J)jGuyw3=fyrG|6 zJO~BdJp*adJwQ>^JQz(Ky(|2aJNulay;;We;VJr|UGJXhRhJzohOy(oi0J-&qjJfYV)JVR}# zJu;~9JWehyr|UQ zy}i|dy&kaJy!~v~J?m6my&5%xz0!)2Jbi;XymK&+J*DUjy($dwy&*5vJGWsLyH&+Y zJ+P>7J!e$Oy?n2^J5gJlJ#h%Cy#J|aJ)-doJVD?(yd-kUJ(DyIJvdt$J%*RMz3=#` zJTT`=J@@_8y?zb zz0}7mK7KV=y}v!3Jw-$=y9}QOKBoETJb!~1y-I5cJg@8mJuGP%yF$edJxK5^J^jwn zJUQN!yjvrfyfZQUJY_rWJh1cRJkvFlyAPC$JsI~ktUz5AsaJ>Oba zyyhvmf zy(*ntJ^WnEJRI(qJ)HcjJXim*ye^r_x(up^y^L**JtVeqJoDHJJwSm~JJn5^yp??c zJ>e_VI{~#)yh6}wJ<1^ny&r-dJ&@DeJmc$zJ=3HYJXta6JRNc%JOLsLy$mG_y)G9r zJxg-EJF~I!Jh1`0J^KL~yxh$yyhR33z3=atz0qPJy+i0KJr3TVym9Rgy&r39J+!(w zy~f4)JD1T8zLD6Jy$eo$yxNVxJ5z&iJWB*qJs^6_JnpC*Jw0`&ynNQ1Jwqcxz2Srj zJrH{IJG^QiJ@7~DJZ;HWy~g(dJS|wZy$fc0Jt!4Ty{`C!J^6z*yo(Wzy^>JBJeUq| zJONu-yc(8+y{2%1x=Bkly*>B+y{DHGycUhQyGU_l zyODMZy`Xv6yvdmMJ^hYmy}LwMJ#bx}yurr{JtvR=J&B4fy`?COJ!UlQJz?3AJbyWs zyvjRlyuw!qJ?8;VJWcj5J*|G5yb!&VJWw=`y(h*Ky&kkpz4R#xJ?iIyy9`KwJP>eg zJj9blJT$|zJ8P{LyyU=3y#)Ody@RX*z0+n7z58K|JdH*Ky=t6fy?;}uJ%;M$JlqV0 zyq_|OI@0@uy%gKHyeX3VJ-=neJOJipo+zP-~&y_?EVz4ZdhJ>>&zJ+sf& zJk2NMySrUDJd2oHJP%J=p~Qyuc@nJu)snJ%F!-y~ktnJBU$4J)cD-ygwJ?J+(km zyow#EyaI`aI-~w^J=eMtzQ6qdJhpFTJJaSuWyuiZIyTJE(z0CYRJ-T;jydtay zJ-INLx(d*+Jkc4GJ^phbJP0_Kyh)^{J%%Fzx&#PSz0Q}*yk9J#z5N)kypWiVJ<0Jy zJHN@3JmiaWy?h9Qy!>mWJ*t^iI_*W=ypRl)y}M7fy!8eZzT=^Zy=9%gyr4(vyloO& zJT&Mpy`4~$JrDeiyq6Fvy?y7Fy|jAlJebVDJ#JZ?yzm0mJPs?2y(Vpcy>2NPzOMb? zyQG{1zCKJ{JqtyIJW4cy?ph`JKvX) zy+auVy{&yfJ(+*)y>{x5JodjTK8~m;y^h_MJ8tCUyqV7eyid~zyq*g(z4kD$ypsbi zz1D>YJp=lpJ@gO7y|+l3JS815JqotByF!#JJ#&LrJ;0*Ux}AxZy*feIyn{K-J;62{ zz06J~J!5Goy*1~+Jm_VgJ@U>MJv!?CyfND>y+q?qy;c-$y!#QQy@!fQJPKwJy_A6G zyf1qpJvlSsym%`3J8j$vJX33tyDr#8yk`V7y?!{hz34*Fyw*XWJj>YXyD+n{JuBd- zJ^16HyvVCaJd@`>z0gCTz0&4@y{I|4J(Y4Qy{>u|y&G*kJ+!8zJge0lJ@_k(y|=fa zyq*}4JSBbry)U$3z2?;$zWV=RJHPEjJ^1mhJ-+Ryy$oUcJT4d)J!p1Cy-d2Gy?hFV zyqC8XJ(n9Vy^;loy)qfXJ@o|!y__D0y;6QLJ;?n*z0P(%yxNwJJ@uU)J(6$^zR;A? zJWqKry{Z@1y)l`dJ-n`~Jc2w#J$N`7J-x{)y&(1 zx|Op}J^#d}J<02^z07IIJ*Nw3J@>}My$!{zy(r|Ly>t`0z0C@qJ*1S_y|H1CJ9^s* zy-&J4JtNe;J?J?uJ&1Zfyp!$pJcI(4y|o$~JzTt(J<#&NJZApiyf)T5JVdE^J0df= zJtCxrJpy5FJ+E2_ypM3KylMWJyClqsz19V*Jv#NxyTy(EyNMGEy@GJoybe_hJm!0I zy-6*lJ^04;yu8NtJSCD#Jvy(4Jzy_EJ^T5SJ@R49y#}>#yObPUJz5)5Jn=UszB#pk zJHOV*J!oqLy>~m5J?c?Hx%pUyz52$Tyv5)Pz0xcpJ=Z{VyzOX;y#iUQy(KQ&ylIvL zzF2I1JYEnsJpi+9yyd(*yM!N`J@4CKy=w^Zypk#fyu+q3Ju7#cy~4RUJst46ys$hL zJ*d_sJ8f30yLZ%7JyWjzI>bo@z3Dxuy?0OJIzxTEyWfc zJsg5~Jd_i|yzVrBJ#QUaycqiZysnepJ^5u(z3j#iJ{LYhJu2|myv*8(ydn9Iz3)Kk zy)(cOy@-HzJ$YWay+!{SJoaFCyLH{cJ=^@@yoZ|dJPw(JJnsL1ya^;hJrXeRIzKr~ zJoN29yw?&NJVoDtJ#_Vty?;akJ*0U!J>JFdJHxQHytI^iyVA3cy#j}TyUxzqJw$uP zy?9LGJGFn8JLLt!JaUshyj;iEJZe>%y?<9ty*R^yyvgLPyD!*Ny?RfsJ?PwfJO|{N zJbnPFJQmKTysDbgJyhnNyf|huy|{^ly)c^E zJe>UUJ^RM~JwwD+J@ZHdJB6(xI|tD-yi(iZJZ0R;JR!TAJ=9ydyQZPayulY8JX0b5 zy&2V3z2BzlJoCQ;J@Z`=y`#IKy>SX`yug~SJ*sLpz3Yu1JqQ(Gyz`&Fx+G#GJf&f( zI~ebdJW-tSyi80dy5b1Jr7usJTIp{JN)L4yET`Hz1(WhJ$q${J%NkZIRs&) zIw0byyc_rsy|BSNya)bWy=CG6zI?dTJ0_j{yxWvuJoUP^yk3H1J?{gPx=dWTJ)SiK zKJd$)JidaEJ3!e4ZJ?P`ZyS1ApzL4f-xoM@?yy?YUy&*peJlvz< zynnPSye^_hJ%7(7y$S`KyJLw3xxJViVmJ;J~GFky@kK5y$AC!JVH)hyvR#+y;Fv8Jd8XuJsxJCJUEA#JyLB6yfuJZ zy=Ze1y_|qKy+zJ(JEy$(otz2c$_y<&IBJyuABJi#G2JOT>& zyPALHy&teEy-|D@J*MC;y;>g5JFtF1y%3BMyv!#jy?+4oy_q7PyfWKfJ%4nSJ&rff zyqb86IYI%rJ#C{syj@WSJW&wpy&lMfy$@CgJaey_et(Jv5#vy}Y@dx;?OMJ)HO=JhB^~Jkia8 zJYiJcJh6=gy}a-AI`y;@JWy}VyL0#2Iz0=mJ(8unyrd!(J;F}eJb(fwJOKzJywgKG zy|5p_z4T0lys;F?y-O0-y(t#0y$=v7z35Dx|J@gFS zJPA3ay;j>LJy3bCIUT34y;~NYyd-?@J5Hl8^>J?DVeySpT(JSLQ-y~RBpy^Hk4y$UmLysJA{yt=ASy;BI7y(%x8Jv;Ds zy-PM-Jw&&^y+}KZyqjQrz1&s@Jp@W|y;LtEz10g6yHjgy+9*ty$=7RJo`$7J!Q#>Jw^T~y*c*3yEEDaJ*DL(yT7KyJ*mHeyBfVN zJ&4o5JOgD&z3Wf_Jty_5^gyx_5AJ%ms0Jhaymy`>qYJ;1VlyoUNW zJv)a>zHXeAJ;lE^y*XBrJVThsJ1>syJ&+-Xy=Cu>Jjr{qy<-{zy>jTNJdQ0vyrK%P zy(M6ty&g$#J);f9Jf87!JTcOWz5hfsz2m3ZJ!}iAy?s`HJE|8ty>Jq$J>JdeJrbSp zx&(FzJ&Ld8x|1n*Jir3!yb=*{JOTt9y*h5Je{m#JiHu=x;I=~ zJ)#;Zy+0BVy}opxy$JGrzRJ-xd(y~S=SJuQftyh!kdy>MPrykZavJ$0T8z2Q4yJVP*Cyw3^x zJNh+NJ;+6=y=s7vJ$JopJuO)Py+{!W zJWHCOz3nndy^!`WJV$-_JPY5qy+3h{I})mLz4{N&Jk7UGJ-ZIEysr%{JY^aqygI7Y zJPCeDJ>~%_xlJ1y+qUaJ(kA_K2ODAy@sKaJp--My*TJ7Tb_y%`ytJ690+yz1rVJSwD%yyfsRRy?O3pJ*lv7y;T_>y~n6YJ>13X zyc~<@y|a15ytOZ}y}EYoJa=5rJ?QamJ+GylJX!{sz3;z>yzhXrJ2f;WJ}!P3JsOM} zJ&zYaJtgXhJq>}JJ?5OFJY9hGycWJYy@95_JWX+iy;bIpJPStQJgk2aJ#VrWz3xV$ zy(%U(y@Kqayr6h)JyGMYy!3@MJq8HxJZT>VJ@Ir#J%hZxJgXpdJbkJkJ#%Iay`WZm zJbw;fJ@9AiJdYT}JM=t^JxFNOJW7K4JWp*(JsN72J*R08y@T$iy`zI%J)nz9J>B6a zJ$e=#yE?aYy$Y6Sz5P9iJ!%X9y@e9bJpI@QJ$s_rJbdV+JfQN9y>?G)y&!oQI}k^D zyg}msJrl02yVognymIKxyvM*KJ#n1!Qyn*|cJ>oAMy_5}2yb<8=JI?^0J@W{Uz1=(hJRrbhJ!kf)y_>FNJmNw?yjlYj zJyi!Cy>pDqJm>4uJG%0y|J;3ys&69y`%r=Jje`!Jw_f#J#m!cJPoo0J$zNz zy?LxcJAn`YKA;&zJ&aqPI|a#)yow0Ry*uqXJ~y%03> zJXIUnJYbs{y<=Z$Jw+XmJkNMly~A>vyd`reypmCVyDQ?&I{x$Oyub>^JXl4bJcaS> zJOe-`I|uEeJ=Q#+J--wzJrJQGy@$#6yvKcxJg-{eJwpi;J}wUBJAsx>Jq8b{Jw?u- zyJdwmyb1gUJ_CTayXpOyy*v|Hy%0$)JtQsJJ&-f^y!fRc zy&U8Byx$8!JINAKy|P#cy>@XJoSYKy^|A?JxEB>Jphb*J=+F% zJZR%sy{~Q=Ja483J6SkPy}aNwJ&`bry&d6`J>2)1ydM&dJ7;hZye^XJJ@NxJJnKz{ zyeW$vyfQFjJ&}FXyd>g)Jx=~HJ)5OIy`@s^JMmr-y(II(yr&A_Jem}rJ))8tJj$tt zy;hnxyL}7Hynyuvz3_Z-y|bG^J0-jsJL6qAz4&;#y>0UfJ#40sJ!?UnJ=+hGy}82f zya>N3J#X?Cy}j#WJlOYFJsvE(y-HWfJ72ZoJbCCoJ)$V5J-NlZz0Q5HJZ|6)z02jB zyCoB^JkQ= zJtYL%y(kI|J3DPoy|VrlJVdTMJw^UgJq1{wym0Gky+!=5J?T0wJulW@Jwfq?J$ta4 zy5v3LJ*QMXJ@_?QJjJzT5Xy_eA8JXby2ybQG+IU)Tty^eOTJ>xByJxaC_J<5}3 zymXYkyftJAJ?{;JJv83UJwqxOJ&k)QyzPjNJrEPryu$aVJOO2IuJ?f;aJw(XNy&wssyzaoqy;O=xy|&QSy>-;@JX0A8y-=z< zz3f!Cx+W%|JPr-3J>XDqysNB0y;Mv^JUsnjy_AV(y-Oc~JT!3RJX^#kJ>`j2z2t)& zJ!Fl;J+%%DJz1l?y#i`gz1t-qJ)nT!JASUSyru+-x3y6Pz3h`Iy`xAKJI>SCJWmuN zJTqe4yoG8GJtcetz5(DMy@1#*y=fuJyDuGhy}c^kx=>l>x;8m-Jy^CtJOMLzynawN zJti`_z4(AwJ#BcFJ>HoMygzzayv}{uy~`SzJyon&y}E<|y_@MOJV&zdJRQcGJ*ahx zy{svjyd2u#yux>uypF#QJs|_ty^+!jy?l!sJ=j8BJ=it`yc5S$JrYCgJVxycy>kZU zykQR5y&rdsyxJv=J@CXZJeet?z3lq9Jju}8Jhwn$y&?>dJayk(LJ zzJVSsJ(;3zx&`cjy-`FrJ^y>Iy)p~^yvd$jyFG|Ky-z$2Jx~;_J^pJVJ#6jsyqhG4 zJTxU4yofmjJt>1)yefJby@npII~`?yJs!NxJ%gn$JXAL`y+x#xJryKWy_$e8JraDl zyI$}FJ0w+IK9ATKJuy)EJOI2NJ?!W@Jp0e;ys6M9y-+(zy~u+kJ$72Qyq)vGy^!bE zJRw+~y+;2YyncvEz0@--y9Y&(ya>e(Jt>WFy}+-rJyDQ}y+cy{JctcSy~2U@yQz$> zz0jMNygyLWJ>)ssJ=u~Tz5U6Py(^mny~W%Fz2hi=yk3QJyp{$HJ3SM?z5aB9J(Y+L zJ!v7Ty(1MIJ+tX#J#OGjJ>bg1yf)~Cysn1=yKILNJt$m~J+nm`zVZBtyMdwLJ$O)y zy<&M7J-5|gym`AeJ%f&wJ193uJ-IA?yc*zDJ6xK{JQTkfymW-7IEli8y|z+Zyav#S zyJ(Y@OI_Olg zyB3@qJ!PeUy%vE>JBCJa8;5y@qx!Jo)f-Jg)6xJpM%iJ#O^+y4!OXJt(@qJZ82uJYl2}yt_Y=JZ*Xl zJh+hVJd;69JWI0nymqrzyeAy8yaWcBJvZsGy%-4wK40Mqxyb6f7Ja@-yy$>icJ(L@b zyj^1gJUF4My%UMSJzxNsyBM-jJ)7);y>D+UJu2L$JxI#}y_>5Zy$i&>Jnz%xyxPr7 zygKQUJibBUay`i)2J+dx8JyzCJ&gW8yt74#y)&H2yfM<;JJQqRx;sKDy>v$7JU!*$yb#i4Jy?`+ zJdSQ_J+@a^ya^zDydy_}z4UfgJ+r#!J+=`2Jj)j&y&h03z3=hKJW-8zy)N%qy{rRu zz0ATfJnUC}y^!)Cy)WQRyeffQJj=vly@OIFJtv@XyqP!BJX8y0J%ccsyv%6^JT@7Q zz1tt49JpG#< zJ*b)Ryu#{Gy431ywxfs zyrVL@yNTdry@{>zJdq!&yn-X%Jp5>VyBYKaJ?NZny*WU+ybkoXyR0p%$NJ$1Oh zy;o8yJtbz|ycD!ky;*Y)yM^*GJ%e}#Jl74tJTh{Uyq2{SJzoS(y@QCvyAoK4^yi zJF1mHyekf}y-X9Sz4X>TyYY!vJ-JyoL2JwT`Jyiy+Mz0iUKJrRaqz4pvN zy`irLzG3JQJ;CSQybqS#Jhk@RyOq4Hz2|@OyxjB$KImVVy)h-axgw@MJzn7$Js$-R zJsH%@Jw%s@z4AY2J&j4gyyW`_y>OwwyiuU|JbIIZJj6Bwz5T(9z0ldGy)DLty;Jvj9VJ@YAky+mg;JCi>pyvM?iJl0)FJfu0`Jns$LDz5kj~JsTPhzR;}lyvkQKy^BY% zJ>2hAy@s8fJPzLDy`7@5I@9u1J@;mVJ*Hr1J)4{XJ>N}iyahidy@4)BJ$;84J*82e zx=e7=J@_8UJx3SWJ^l+_yxg*`y&XPjJzfU+JwjOiJp6%#Jv#znJv5P;J;Y@^Js?&S zI|kj4yS(>bJ*f|eym91?y{q(|ylVg6yc3JbyzN^DyzdQ(y&H@YJ;_owy%kAu%y|o^gJ+1Fny_l;#z2B4_J)Cc`Jl3!UJx{tgyeJcyJyDjuyvLNHJ&LjEJhS81 zJ(U`iyBQ|iJqGlsJv1SJJ&W$Iy%`H~y{WO|J>Fk>Jxsy&yI)7?JKj2?J)3{hy`_{6 zJaoLIJ#m*$Jto_{y{A$mJ+?bmz5PWEJcFMMz2u5EJcN14JBdZ)yosejJ?Z>Iy#QKK zy%fF4yx@jpJj9BIJRZ#;JsLNNJ*qYAJksJhy+7T@yyLqAy%-&jy_2wYJhy*r zyRZgZy^K}Jyiy{pJU~6xJRiJgJo39AJ=dnpyf|^!Jr1xCKBq6jJt^{Gy=ibzJp=KY zJn<#5ydgLZy{{Gsy~ zyiG$~y+~XJ(v`HJl5{kJP~vHyvayp62PJxoKGJj%J3yHq<#yn}wNyu_z) zy!b7}Jnu8$yj^IJJmb(}J#vtfJ;P`pJ-EudJ^GGaJtAX?JuHIxyd!|By^c`wJf$>{ zJmr97yoJM$J)b$&y{u=Dy90g>y-#tAyNrQEJt5N{JP)7Dynp@jyrPzWz3*F^JjJQ_LwJQ&W0z0r@Cy_G}?J>8lBJ%mfcJY+-4y_G77yae0~ zy<4G^ys|1Hy{6HOJh8z5y&UTnyyeV}JfhXmI)z>py@}KTy}sbFynV*)yfKxLJ#s+? zJ|r_=y;_ZSJy(!bJnF^TJBgHhy_*@?Jxn8E{6y^nX2y?vkAycFdUJuk}GJ+b_?z0@huyyA=&J>KCYz2!tzJ-0}J zyduw!JXr7~y!Mf)JxtztJ)q||y_u>4J+kQcyz^>2I~%x$004mhe?16)xw-g6guS6d zTs(5Z*gb<_x;;&Fd^{zrl)TnHRK3Oc61~i8M!ml@IK3Oz0KKZvoxNsemp#qh1ihp2 zUp=s`B|TkEk36|5zB>#$KfMkX0KOd{X}t;5E4++u{jPdzp2dc5?1B|X!Xdpd<89K9Mru{<(Fp}jWuJv~I{Ks{s2oV}FrRJ@Oj96WM2 zkiAVLIlZ%tZoDD?I=#3m4ZZM0dAs(i)jNdQGQ33qmAt#cPCRYQ6+H3L96d7roxQUy zMLjdc>OA%#1U)L(t2{b&FFnYdh`mR6**xR0 zn><@Ku|3R}UA)XN^E?Er=)H_w89f*|puI}6fITEr@jb1VDZKM7|Gm6jFFu%O$vpxs zRlWQy$h<|#?7b)_j=h*w1HC{3M?40bLc9wtr#(`rV7-mm=e<8vT|H-~jy%_I;ylW% z3A==5+q^iC9=mcOCcOn9KfSH^+Prm0tGtPLCcS&p zBt0T9qdc;*+PxW(cs+}+F1;*bYCUDi3O%oE{5(-EH$BMq$Tt9)qP?jmxjpf>DZLhM zs6E<}5xs|uy}NZfGCh7Z7Cz%7I6Xf&hCLbzWV{M!;ye+~MZ8xFEWKnM);wcm7`;E1 z2)$!k+P%zNRy`|p5Isr@>pTc=1U-t=4L;Hx_Pnutd^}v5B)i%doV%*xaJ?vYl|5=D zFudXVO1ncRtUW9fEIrBflRZ)Ln!UuDM7!t(%e!#Pg}uo{Ha+YR1-u>cfIT1X2)!%t zKD;*~+`L}q?>$kf4!up(a=n;+4m{vKLOc#ou)N<3ti0zpI=uGYa^S$Hou)W3u)4lMw|2$|F<2!*QsXZVAu)OR=#yzL7H$BMJ$32uqyu9q#n!6(VwBR$Ry2EEmBn!P1IFTH#dwYmXA3cI?1_q;E~K0PZ}iM=&^ zi9Ph8WW8832fV@(ygYNm@;p!R96fo>kG%^yvc2#TlRLS%jlGt^R6IH>z&yj#tUWHw z^}N>$uRYMx2)r{54L!O84ZS|vjl6KNO+1u{jJ+n!Lp%tTHf;|r< zw!Jh=YP>Ll8a#fA^t}(kkv-p$9X%0VLA}C6PCX%QvAYjri9F2(mAj=D*FA>Yq&iv$ z=)E0!%RDbIS3Sc?a=fQzmc5%;cRa7MhP@SZ>$?uoqP_EQr9JLHAwA*N7rhwU6uf*9 zn?0Cu2R+>6_dHqYB0X~wPQ5b_pgs2fPP^d@oxG}P6h6#MPC8#ppuLkDuRO}>X1$#T zAw5@lg*@VNrM+@+;Jw=g_&vSN!#m>co4p5XfjmgUjXf`%mpub+5xsUa+q+uv8NC2` zbUh$b#63&An!UFQMLjoS>%1O9!accegS`!aiM$4LRy@spI=v|yJ-r>61HECJp*(R4 zQ9b-0eLG=XYCY~EnY>k}0KH<0VLkEUW)jht;cf5;O!aJb=I6Z3&iM@HP zcD<7iPCLEiz&ti9fISmhVZEe?F+I`pB)wh;i@bhZ`aHJkjJ*64jl5c6NWI#8eY_4% zRlVW6mp$3$a=a1ALOqfh=DmH@c03w2lshd+dOgOeiA>pXn9X1zqC#k|eelszWEJv}~;lsx=c z+&w2sue?QvFTF$rvpsI@n7sN&OubSA$-HU*UA%Q#20ahxuf3)t z5I#5GvpuLw89g=s+&w#G3_X!8`Mldbkvy7k96e$2E4}S01U-#-`n+>lg}seUZaq;a z*gOg-_C1Xa5WL*|a=qVV-M#k(Xgw5rNxeVyvOFfa*f~?-p6}<_WT0LNj96i(&61^sxU^`!pO}!KwUA_N+gu4e&w!B~(AH5i9 z5x#E7Iz45-@;vfcA3HFSn!H2lX}wdghde`K2Ru6u13j%|Y`oM$a=q@WR=q`nWxGl) z{yRl5TRqk$GyBDwY?uH`n-N3qPz<_J-sU?O+7LaWW7sx8$BtmbUo(BqrHbe z@;!zF`n;Ce4ZXpn@VwX72|L|AX1zF^P`#{>(>tWeLA_&2MLJDwg}V`_tUZ(e=R2^| z_&wWGe?14V1wBV^GCQpL}#Q$1h|0zLC0BE89CSUoS{ zFFGUJ`91Rp9=r+C*1hF0nLL2Sd_A?KtUW|?v^`6A(Y!&C>%6(2LOt{a z%{&k|0KK(Ar#q907Ch`Gay+!dzq}yQuD!f-k-Yt=9=#5amAwEb+dLGJ?z{muguUs> zfW0aAY&%oU=sYS`{5=i3Iy|ywjXkFmrM=LOf4w#h^1Btx`MXW?Ogv@N9X;7w#y!rx zSG*Q?13u%OFFh|jo;;=|Nj!0_<2{eZ1-*fqZoNL86}=hzu)Ocd6+B=Qd_A6`ti6iT zoV|nc0=hCDL`Up?O)CcWqXbv=)H>bsMgwY*m)5It`oJiWC6COxx@raV!u^u0z$MLilJ zXgy>Y=Dg-pi@X`!(7iNKXgz({XCR2HN6rODm~R_jJ&r#p**X$FulHy zjlD~SH@pB8>pYz(u{}v=0KC(ZYCRuz9=tL#C%lH&z&zHgwYGClG`RlV8d z4ZQ5&s=R<8m%VP3o;};^2D{TE3%vxZ&AhJx&pg!?e7%1VraN`zx4f%pM7$?Nbv!(L zh`so^_`6leLA_wxn!IRVFuYB$$Gz4qSv_>y0=>tOI6ck`Z@r7E2fbkx;XNR&k-SNQ zD?J_q*u6Nn!98rdoV~MwBE1bRTs+6E3O(b7FukR|!9CF`gFHfSv%Jt&Ej@@2ianj0 z6gy&Ajqnr#$WC)x0kwus!JE`8;qVoV<2)G`;j#SG^V}p1mot2)!`02RzDR z?K_*Ro;~eFmc5M>96SJO0lg3;g*#xxEIl`!l)ObBvpWD86usMNy}W08sXYTzG(EdC z5xNNic|E{n#J#}e1w4dGhrL!P4m}zu_B}q4YCOzhRy`m7kGm~tH@zi5=DnyeD7_Ok zVK~70bG+Cnpu4Lj%)E=Qb3F}c12~Fszq&(6kiGZq5i#^IlVYI)VqT;UA=l)8oe>-<~l<}0X<51p*?Ck z9=%bXn>}fIwmLj2Wjtl={kzg(jXe``Og#G-ZM!w%O+7Sh@4T5ARk-dT1DZT!+#k$uklsw-$y*%Uf!oAY_Aw8<# zzrB1Oti4Wbvb~jCtGrf@Q#~W389f?BkG%kBy*&Vhw7k?~qP+ijVm(Hy-Mt68CcO^Z zmO93dBE3c=*S&fi>%0}qj=g&V&OC<9R=jOdFT6x_>Am=+{JfJB3OXa^>AX+L&%G6# zvpk9;k3B%49qUc5pKfM6gd%WUVl051Gusqrt zvpd(-X}ki*0>1FUvAt+xTD)uqR=k1kb-nfQBt4pj@I0G+PP}GXf<0CdJUm_OqP^w2 zc00-1ZM^o=;Jo-$FS`~3e!T%0XS|m(Nj<+A*F4!HwLEhbKRqG6YCI-bvi#MLX74-@KezOFa>9_dSsMLp_nd zZoNSA8aD89mDV2fZ8`UA-hrx4Q?r zy*=-GX*^vO2)fjkx6bUfFBU^|lbQ@uY^nmjV6_B|BgJiQkmQ@p~d zw7N5vSv{cc4?Pe1L%qsjqC6ysiaoM%AiWH@lRaSf06rIKb3Kiwmb>=A0=%m*qdj|) zXFad+g1gUTZ@jf&3%xuc!#&CHp1jRC9lb^z2fgmZjlJqt;k-bJ1iiYC<2(z1dpo(B zPd#JC{=5S0i@Yht#=MjaFulyh8@?er@Z_Jvb__-2D|eByFGhs)I6aD&%7F? z)jR@kv%I_nNIf)YDLuoBTs@rEl01^?l|7pA-n~T2mOSc4z`cwuaJ;>`pFO2}^F4U- z96gGd?mXwSl|AO>3O=G+hP{X}EIaQ(LcJW><-F!T9XgL?i9Of@f;~qPpFP8gX}!bB z`aG+o4?cdj#yz0mPdy0-fFn!V+Zzdh`kx4lz4&AiV{%{(sjT|L@uv%LdM;k@_t;yTY4|GYH& z0KC69!aPC$ioLYu9X%fexjlU5ti0lo{=6Z%a64E{Uc62Z$&}S13V*@hCH5tTRi8+96jkxi#^(Z!99r81-^reZoChp zpgi#04Lx-ht~^bgEIlQ&ue+!YVLe=noIJ$qLOZ^Y;ylV{u)VjDlD!4z*geXP=R9c& z(mj+iroH)B4Lzg=+PpdOBRskd(!Ewi5Nc)ec* z0zB86yo;`vDro7(=Dn7?4485LyxjexZ7rg50<-8cGw!Nor zhCJR5`aGkZ8NKeIFukJmTsu~ut3Be#Vm-~oM?D3X=e+KZgFT1X@w%l9sJ%Pa!o4G5 zWIbSnw7i_Jd%ausxjm0E?mY#9WW53*xx6RM96cS57Chj?q`gQ7p*`RCB)y!d&pbSF z2)xt{nmyoU%1PFL_M;&jy<+5Q$5Yvd%dQ&^Ssp5 zF1b#qn(7bu68a`s}N4*$#v^;DYqdYa`DZGd@wY=Mv1UxEFoxRfg z8@@D7~c=7QJ!R^gIS3SUq8) z3cNEZCp$a2Ha$`6T|5HX+C5hrO1&8dF+H_(=Dbe2@4e-ghrDF*sl9trAHC)EN4+4Z z8a*gwAHJsVJH0Z(96iK23q8zZ-MYw5+C1A|u04~5);<5o@w{m$fjn3ybG_dqS3R`~ zdp$TmpS)=2dOgmPn>-iO%e~g~Ha)`bce~oz^SXv~**$v|PCa=Eo;=TgXT13P06lrl z0lf0I0X^ro8NFHQ<2>B|0lgcGt-Yke(Y*Sj!8 zcRfxgV?5Vi6TNKRiM<*tNIWB#3q0FG3p~a3sJw2NnLPC^Y`pe(F}sspXFcWDqdj#r zx4m}Wpgp2PvOTd0sy(S{3%u)o zF}*;TqdV4w-Mq57Wj#H^Z8~?stvyF{CB5q;GrVksNjy^i{JfMg9XvN`f!Q9VnSoIRgqP^YDdcE$uuDwEiti0usi@gPdo4bc8482}L8@u06f=KQ$5Qxq`gITI6ZAo2EGCe89f}5|GLAlhr93k zh&@V=>pO(ZDm^h>Y(4TSpgj3KeLOl~@w;DD^1S}9SH07k*S#gM5j(lK8a>Sb6TALT zyuI}|xxJh}PCY;(p*`t~+&h$#i9JCzv^=!mzC6@P3Osyo13v7CX*|$8nLPDwdAx^{ zLA^rPS3NY#2|e$CCOtf50lqaauRL=@ioM|8T)dPfFg>}q!#!GRV?DS$aXry8Af}&sJzcA2|LzJTD-QJ-MZgVfIaO}l0AF16Fy;TWV{%Vx4h0@q&$2;;=3s|S3Lxz z2D}1dg}s2{-Mtoa9=!R)oV}g2y*-Uht-A31fjbFy_`U6Czr0Lsw!G%uMZNXO#XXK$ zSUgcf4LxwQ-aNOoX*_#ugS`Py3BHp_xIDW*-#o4_dpz-WZoRmgJ-z2V1U)b8wL1^D zxV*q9{X3SFuDvdVX}unlX}$RYUOrW=tUV}Y+C2_s7Ck3o!n`8$)x7GvJiQ_}oIDt? z{JiRvjlF5h&%MCoV!VzVF}$%VD7*2w9X(GIUOWJ2+&d>eqP)LCs=MartGlbo$35LA zpgm|`0X!)-i@Z0!bUnW-d%Xv!tv!KwyuH#NqCC5Gx4R65oxN^mFFji6nmsdF!n`x7 z5xqldw!X*{)e3O;pnOFa{p3O!V> zR=O80oIM{G<2*#8n!Sktn7pq7#6A1_u{_|tyu81UIX$8|i#@cDPCb7Dem!R@HaoGY zm_5x)slD;DK)g!5mA&Q3MLl4cKs-dznmr$?06ad@#=I=$U_HyP>OH91$2`T8HM`_b znLJ$o9zFbAKRq2%8Sn20k+oQ9UW^oo2fcnSmpCA?m%ZQo%DqE{r@XaO zq`cz@!#tvh!92-Vk-b*K05~uj20btM?mJAe@zk-d(;X}yq?6}2XUOlP__&g*-y}dkN0>0&fNj&Rzh&@==Up*1Z z+dR^m{kj+jzdVd!uf2;EroF-?D!kgcd_35Zm^|bP{k%b2S3O|CrMm`0G`%Di$-Q2b z5jyGCqP-$gFg(3ZnZ2$;5#2 znmoZEj`Vi<2-y8iac3- zt3B2yF};lpSv@%!3qA3U3cjHgh&?D0kh_3y2EDGhGQIWk6TMVsiM$IgWj&J@UA(<( zP(2JV&ODo7J-vvC;yezUIK3^={k;5lFTFW1W4&)&UOm8rEj&zEQ@wdI*gTS_+`Ziu zDLqF~M?H+qiM(xI%RD|Q0=|=i0X?JtqrHzzVZE!HPrY0$*u0_;ZoM{4y1Yi1rakDz zCcXIbL_F3UxV?VC8NKP5N;{`;(mlZ^FunP^ojqF-BfWEKgS!^pm%VM#2fQ=?0=^jQ zQ$06loIP#ltUVdq$-UF4hCC#ow>?lWH9a@F%)BM_G(6ks*F3|H6}@;G0zLSX{5!OV zm%E={mAxvLfxRfQQ9S`aFg*~)89h+p!o96;+B^q>a6R{c^*n5-3%$o^kUF>iH@)R7 z-8v^XjJ%JF&AZ2FgFT>rioL~EhrKFcU%eUJBE6@08NJJYYrVeCbUlvV6g{lrnmwOd zcRe}@oV<|XSUsau4?P!;;ybuP|Ge_xTD>UHgglGoqCLOEfV zGCf)6g1wMK@4PvxpS=t7ojuE87`;((#XFqic06hMaJ>XCT0PavK|Hm}y1fPvro8VN zfjq`&(Y(c5P`#WyqdXu;ue}mpIz6D*V%{v=$TRkpPFg*>2 zGd-&_3%rS=Z@iZWZ@sX#*Sxb&3{G(FRXP&{97$~;!#V>~=|1-`J~nLXg(wLMxy7`^8R1icWT8N6O6;dOg(EpyS>Neu|0NJI=$kAwY>(bmppagxV_;xz`eR#u)TT2sy#I! z`aG{4vpYw88N3(b#=RvQ!aTgdO*_KbF};a*y}cB*M7u-5c0EzWFTJmU?K`A6g1z+N zpuKv~9X(ZN1id4Ll)MR$Dn0Wvm^_r6p*^*SiaQ64ZaqhVgFTfHkG-$tth`v+$UQS$ ztGs*620fujH@je4=)KY)M?D-(puLw$e>{#P3A`dLO1(&qKfU3dg*`uBuslM*;k|hV z7QBp2?7Wgh^)+`2|cJdA3eEb{5@#@9=(&52)!Nt{yj!;O}wtaw!M}{T)jQ~ojk#cO*}5`ggiMZ z1w6wO&peAK?Y!Bg>^$qJvpx8Og1gL~YrUnmSG~agBfTaQ$vw3~Grh~#oV+DY{k*yB zAv_xQR6Q6$2fagBEj>ERH$5e|;XOx%wY^^@q&Nmn-8_qXj67%Mkv+b`Fg${t$i3^w zH$1h_zdWl@eLXiuTs?U!hP^t*gghCY8NG#}Hod?kls%Kzg}uiJuRBw&dA*JJT0AR4 z7`rI>f4y9Y>OH_Klf6@C!n$m~ay`?_G(8{lzPwLmT0KJnF1=P$LcK79QoZECj=jc* z#yqBRn!Q>9nLTpr_d7z5i@k`k8NKwBmOL>iL%rm}(mYC!KRue0Z#{kxi@Z7a-nv(% zx4fk-Q9U+(iM(A&p*v#PExx!$m%Taf-aP?{o;?{alRXpP6}^LF#y#RfkGx>LJ3Zck zRlR%g)4ihLJU#yXRz3LtVLiFS{k(@9B0UAJ>OF{?*}J{j>$^Y1oIJmB5WS=}E_sJHBjlCVJ#yzI)wY+xefW40N;ygO0_&ovM zDZS}!@4RR<-n$yWkUjp*PrY+_@;pi7uRNJ?Nj)ML1icsmq`dOI8$BmwV!aykoxB}& zOuV>Vvb|{-Ydt=5{5`@HQ@w4LW4!|7OS(i9B0b3`J3WJjf4r4l%RGY=D!qMj6~1BV z=)Jffw7gk_Ej>^~7QNt5r#!!@MLXE{2s`XFvprI?$~-hvMm?iapqaf;|yhr93oF-@A#=wmk5xfjl$4AUqC6P`wQmWxXc>4!xi9H@%XU za6QCK_q>Wckh{ZJyu0u%+`M*bqddF~Gd*&<;5?FK487@tfjujvoIRcv6+8xI?Y+Wu zPrdzr-8?Xg0=!1h#l3T#2fpBpP9u?LEdTu)Xzv-#mjLLOnELUA^H?iaa$17&(=o zF+74XzdQeE5AY)@COpN1MLjYH89XDHRK3c5;JxR2 z<~%yTXFC)78@!VO#k-W(6g{;aM!k0sp}qFA^gD18PCUdQ#yq!XJ39{t6+N_chrF#& z(LKGlK0O>cAw4OKsJwJ(?>lluVm-()Xgw^b#mdkUc1wD!` z%{(PC%DnVKti8mQ)w|I4UcKe?11Bqr6c3r#$pXcRke-5WS(; z?Y-v@fxKhq=Dm*Zv^_@)EIsu4a6CndO}svRbh`n*CpxisCp_uYrM;mI`#s>5p}i4= ze!D~yguJT2nLRL0uRWaw!962`;yrVnZ9HJ89XkAI7d`C=T)oNqSUo-r^Sn0psJ(y{ zE4+>^oxEChjlDdj0X_ACpFQv6Cp=wd>b%!mUp#)r(mYPiFg*UzYCH3slDv^W4m?dl z13hjbPQ8LNvpcT4!n~Yc!@Y`3_&vd3P(3j^sXRFLalHvKn>@ceKs=Y-ZoL0HaJ_@2 z^gOPB^gMe&-@N*VY&%ubjXc`C&^`HV2|P`O^SoPO$i2InpgsOCKRtF>#J#>nZacoC z)w@~_#644=X}rn=Yr8?VfxUJvuDmix{=A0{n7mE9PQCJLw7u6j1-+6GxxCtLc)jM5 zmc3XU^E~m)Cp`wSGd!FwQ9V4~(miRGggwsExjZc~8a(<%hrKEME571WlD&bv$~>Gq zJv=9-SUslDL_I(bu{>z<4m}xr4Lx}-z&zFk0K8K-4?R3(ay)q{sk}5)lD%xfWIZ<( zuf1SAi9Hd5j68&ag1jS}m_4G_e7&|}ue_>`6uls`B)#?4jXZYvBfHV%k-WTMoxRnB z&^(ZhNIa+=8$4&8QN2ogh`oM%4ZJ+uSUuE{y*&#CvAlu(1iMJFEIhG>c)JkfCOwZA zWIgF;iM-eq4L$I|i9K*EH9g4X6+Or0G(EZk7CcxKlf7Aa);+sS-Mzutz`aTqalAKh zHN1HfF1?AK3O$kEmpwOWmOU$(0ljoRDm;?f3_T+wDm~4Qn!N(F;XK)7x;@j4i}T|Ll%Q@cueslA(g zzP(wJCp{jH*Ss2)n!Q&!Rz2I8A-p=8I6SDdRXwVJL%mF1D?Jk6j=T+|cphCC%vlD)xS{Jg^WXuWBvpr@^xxF1| z2fce8xV%}dI6O%$p*=G2#k@N z{XCNOguRK4xjaG!d_Cn@wLCMLroAWcojtK07(GJj1U=$C=e%xLT|N1`a6J~-2EA?R z4m|r~f<2KJSG`vLCOy(J1U%&Cvps_rh`ZoSiajMF(7fe^O}(p? zjXOWSEwVsWV_)0P(8jUwY*lqxIM#V zmp$~8oV*}(zC1u|YP|_}I=xgpx4lysxjpyAu{=ZBDLv?+553ALKfMN9;Jh=svpq6U zBfVNb1ihib*1S2d%)P*XtiABVfV~y3AU&Q~m%V6MBR#5Ha=crDGQOn@f4%?3hCP9% zYP~gK@4W4owL3T2n>}yq&pd}qxxM0BBfVrN7Cm5U9=p|#9=@`4a=iIXguTA^hrFG0 znmhL1^u2Fq{5;(Rjk~$wTRkA_*1VATZ@tli%{|e_T0BvZAH6uE>$^1{vppwya=kCJ zZatIEMZGK~YdjE5F1&z6b31iew!K5{8NDfhw>?3K>AYp^H$9B7(7bI44LuF9D?M6g zqCM$FzP*u@%)IOr!#%NW&Ai$pnLCQDZoQD^=sf4@zrEH+_&o|kz`RleKfK*NzdXFI z(mb&SQ$6TR3%mc@tG%xo{JdzqqCMl#U_IwSlsp&B&OCBnk375>yS)u5hP@;btG%%% zPCj52AwAt|ki1?(;k(VVKE0|O3QclRY+z9=%#`t2~)C622Xa>AVY9XT8-oF+KK^SG@t$#k~p{z&&RlP(9E3 z>pU~JW<6jD4Lvb}qrLj}3%;Sc&%LX_p}cx`e7$i>(Y&@IuDo2)89uo9x4qLyM?Hva z?meMpa6I}O+C3XthP{N7gF6>c;X8InfV_1nBRwU_h&|1r;k=4z+B^_P={%V3$2>-C zCq6^Lqq_+H483}SEj>9bHoY*ZXS^8$0liKq2)*dDqdn0fP`pDP1iA}p8NDRBmppb= z^1YG^mAy{254}CU)V!R|GCNF+^E*PtNIgvD&AoN)5IrErnLQM1sJmdZGre42Og)2t zWxe;Ku)IrK9K9mZ;kwbjJ-rDj{kv#c#yejc?LCeuu07N~n7tqqm%aWnr9FDI>AdZ! z8@-m=3Ok+qc)XC59K8iH(!8Yd^SlSa$vlu8zdgVXpgfa_G`+#`@;u_A^1a3YS-sT@ zQN800wLF{ug}fuI6g>t&K)q9AV4(@4L`G zNWK5IEWEZIk-Jb11U^aFwY`#iNIg2yu)U{wm%ZR}B|SJaK|LQsI=yxrD7=6Z8@=6q z5Idk<13p$WFFkg^aJyqgD?I|V>O2|KKfMoH>AST{*gHbZmc3Z8^g9FZdpnM0RXwII z!o0%VNIl{QEWA-K4m|2&r#$+6n>`Ke0KKw!@Vvlgr9DM(a6Hj6_q-Ofj67A2R=X&x zdOUYRc0CpZ550S;%DfUa629*`l0BlcFuit5k3Aa`f;^}v3%$gJ`#i@3p1li*x4h9e z^1ZaMVm<$uO}#);Bt3#HZ#{&TMLTQXg*~S9eY~k#SG)kcIlC+Eh&&rtWxe&{*F3Bj zth_^ukGxt2SGyhH`n*OZfV^Q~nLIxcLpvSjn!Jm+{=71!8@_0&aJ>z)@Vsc9FFj-W z_B}eW={)%TXuX&bM!krn7Cq9)***C061*klK0R51u)M;(tvuOGWW7mXlssdZFukas zhdiDeIlVH(w>{9Hk-aV2fV>M4`#gq1ioFjZ>pbD}n!Oa!s=eNZW4*_*COu_vIX$S5 zj=Z_Sf4u|A@&nlszGInL8@jygi}? zdO7M;yS%gG8ok?ir98a>wL09BuRI4Uiam#La=m(k))kGwl> zD!uP7(Y&W{guOB@%sj3*B)xC#Yr9P?O}%>RQaicfHN7AFH@zh896f?!_q?qP#=A*h zR6PLNd^#6m0=%>OW4)Uu$GyDG>AdsaL_Gx)0KJD_em(F48@)!<9Xu2yuRS^xX1#L> zvAsPj7ro@4JiW6sD7|ST(!5>*i#?~BP(4THe>}!qNj;!}ioHU%qdMgtEj)qOmpwI5 zIJ|DLk38@XcRe%P&^%o!i9Kc>Up$R~t~>-|V?9t;yF8gb{=6XflDyp!Rz2|?T z4ZSqNM!iG-G`rr2WIT`cY`sB9D?I&|m_69}h`mq8LcM-eMLh(@);(akjXlWbi8`c< z6g^3;1wQ1w+&wx(Gd+x^iao%vf;|9|kG#w1>%AX46ursAA3dT#!n`pm7QAZ)2t5MU z@I1z#1iV(CKD=2UK0PToQoULz$h_NHxH>+5u)WaM@;i4<<~>WRlD$kAo4dt)<-AQE z!#wt;syq~!E4_DX&pi0Uu)OSdti4Z|2)$zpbiG3}=R10^hCO*&x;)Y<5Iq;Mb-g)B$-AE2ls!IMRlQ8V zHa$`RBfYEn#5~?kZoQvK+&zu!wmeEJsXa)Vfx4R0)Vwz5kv)b@0lt?Yr9DP0DLvOr zB0W;eh`fbApS*u%p}R@Se!YIb!@cuUa6PGBIy;pA?mh0L)4jCa)4PMg#J$<$A-y<6 z?Y(5^S3L}$iM+s%5M)k-gvQhP~&<4m?eZAH6^4pFB4)@H;{@Gdj-|4ZiR$Mms&jzP&Da z`MrfU^gVsSqCLZF1wM??9lg!4i#;WMqP%scVm!#8yuB|QggiP}0=-SuK|L{HB)x#1 z+Pxt1^t_t38UnVZBIO2|XGTjy-yY z;<}+UBs{;QuDZ_n)4g;aF1^nxzdb)33cYMWk3C(VDLo7Rsl0y1#J#82rM+OyQoXoW z%sd>D89gCBGds|T1w6_6F1?u56TC!S^*l>Uq&#^-ExlxFtUXGAlDy00oV^Wc2t7vK zn>@GFti8w|oIShsk3Hoxsl4XUO}wt$ay+|XpSHN9^h3B0#WO}!vXySzucPd)VLUcFQy zv^^{ppS=^+EWK4g5IqRPsXfHCu{~xqDLo<1LOUs!=DYk8g*-7s5S3Px1pZfAdA-4dEIr!V z=e#B154*&!jyrJ(x4m<9Q$3m02ff-{(L8~jXuYl+yF4zk06gO9fxRgSsXR0|ySsT< zu)G61Vm!UC-MpnxrakSTU_G&+D?HX189jd3fV}s#E4_{ym^+nNt-Z+|2fo=~bv^v5 zrM>9v+`Ompp1sOmI6dKkpS!X!i#)U<F`aGTI_Po-< z<2=f)D?Ok%c0E+=yF8E&(LDpcYQ1A7Y`psu3q7^~csVY?(Y>{qNxeD85xx~Gr94Z* zGCh9`s=Oq<*S*->oIUq<{yhtA>^!qE-#nr3M!jS5vArJ%%{;4_LA~T}hP}cG(>xE5 zjy-b3uf4lDw!0=vG(9*4Aia7jQoZeO8$IZR+`N1V3BBhR3qAJL>%2G$pFMQ)FTIb{ zJ-sao5k2h7Z#$#zT|7BLIz9b~);*ik-#qkzuso|rhdnWW?L0dk_`J8JAifVOe!W#l zIz7XdfxS8g3_d+G zJH3cw5IK|I!u2tA8; zHNCydFug4w0=^Pl$i3ieHa!Rp!o5#@m^%?84?aV5^}6GAhdt7&9=+l^%sjo{uf3b<}6kiC_p0zLqkqCD2d554$RnL9qj!#p8+Jw2acE7YK|S@qx4nAceZBAi#5+s` z*}5#H4ZQVxj65n)vOG)cFSv{_iQoXy-m%RvpRK47G zAwBsovAtv~b-iSpQoYkwls(JNMm;DN$GrH!(>yP4`n|XO3B821TRmCp*_Mo`a7yUD?ANBJUy$s%DuF9g*=Chsyr8L8a>O$5x!G5RK0?`roCNf zAw3LLPd=ZY0=&@DySqOvy* zD!i1FslDrM>pWKf4m%-%tvs`}2t5ZhYdt?kCcSJSc)hmaQ$3@SS3QFrEj^TlPCYEp z={(puO}(|(1if^xiWio1?0 zB|U>}Ej^QA9lb7D3B5N|?L9t+SG{v9_q!2F20oCEm^}dwvb#6Tq&%0t*SwcP8@)f> z$~>N;oV{5J4L#cEd%c~w0lj-K#k-lqEn7x~dpFLV!3O)S(lsg@aFug!oLcQY3 zm^~@Q#5^MW8a+Hhjl8dO2HElsp#joxPBI3_b8-#l3AhvAu}m zR=o;ijJ=)|h&|fRRz0u#^t}753_QUQ-M!SBGCk#a8obsJ2tCk}wLR!?0zIEzx;-8u zlea+12t4SuE52^taybYfv^#@P!@XeCOsGZC%W-x3_VhC z0=;h=OS*177d_J|*gXf~3O!F-pF7N_ZarwkhCR_IpgpUMA-jArGQ8&-!aSsF#=GOO zD7|FLfxV<1S-YOHg*vjbkiAR_AH0V$g1vo~6g`nUXT9N#m%WQ;-o2KBjlJ-$sksdC zW4%t6$-GrG+B_!m7QG9xhP|vf$GmcYSG@F)7d`#oRU zG`%LUt369|#l4osrMoM5o;>N)le?rxp1p}#r8;wWEj>0etUU{QF+D`*`@8Lu<-A8X z3qB1DS-nHfBs-j$TsxEa`@N)!)4g|Bfjf{?W4+}p={&uLtvrP=GQDIFoxLNp2|cWi z-aWL>ayxk{roA_F7QAgaw7owL;=Ht%syv;9Lp??rf4u`)9K8y=VLg|vQ@z}94!oWk zoIH@Gx;s#y`#jBsV!Z%Q#ykdP?|2&&Br9J+~a6N8wC_JAxHNA~HQ$50u znY>cV)V+SmUOn6S7(HU;uDrPLcs)}t*1TV)mOWnmxjiQQPCXk-K)sFoe7(dadAu9C ziM=U52tDE@v^^Tp=)ChZg}f(kZoC}Wv^}MEl|9#OJ3Ly7g}i-Y2fc)hO*^6#l|9K# z8a-qtO}kMv?>sMV9X+K1wjJ*RAxIBZp2|d=+z&+gh_dS@j-@9FtkG%bwojhM0CB2-9wY;(n zcRV_0tUa>%O}h%RJUzhxH9WsGq`g3X1U*nbU%U#&Bt3E|cD$F(VZ9v&5Ix!J6Fq;r zpFPr_uDnl(kG+jxc)R<$r@e9?Ts(RtH@h{yH#<*SojW?%h`eMr0KHqq)I2a})IH4c z>O6I2vOEDNOg(%N$UH9;q&+W{j=h&b1HCX)iM#?dm%Jy|bUb&VD!uXpyge)9=R8YM zOgv7kdOTceM7^`OfxU;=ggkep7(F=ZhP>gbCOx4X559G$s5~Dd0KFtLWxVT0&pP-! zdc5gnvb<{uv%5JNragzKm^{S=m^=6Ayu1UZ3_iDQi9I@2j=dcjpSvBNw!JeeZapjl zKRhWAT0KkvzB~jqwY;kgl0A}Ex4ow9W4-8dkUc7H(!CafKR%{S@;oLVEIh?6cf5)_ zh`ooJRJ|RB;=Iz}hP;asl|ADtKs%=yn>!Icf;~+yp1nrxSiR8=lDuOvHoPLZV?E_` zR6O9v6+J1l0ENRIy{hrioHY)5j~Er8oqd1=RMMOQ@tgzlf4la5j|VG zU_13?Z9L3U8@+&G0KDcY+Pt(E9X*P?QapWN-aVy;e?8US$GvSz);&lOlDo^dT{{Kc zF+2+w<2~SG*gD50Ej>&Um%EeGW;}0(KfFjRzq~?fIz2d!Xgp2kHas>g3cdyiMLRpz zqP$lCu)XmjsJcWNls#Jb20flEk-X{@kUapP;5{}~^SqlvbG?d#5IqOrjJyDm!9B%D zh&{q5s5>)7_dB>ew!H{6qPzoq1wE$5g}w5bIlJx3S-s{DMmtSMgT49D);c{F{k$Y5 zGQH}uuRCr4YP?R}+q|!>V7)dH0=_S54?n&cD>s3 zAU*0HMm#=wpgc^B*}P(&V7;AA zZay{a1 zygjxqls%HTFunH9$2@|@5j|lTNj*nA%sPZY3q1*q>N|6R;k^qe61~!Fjy$T^IJ~d1 ziMxUjFTKz1$~@(ay*y<_0ljS>@Vm*jSiSmpY(1rAIXw@;lf5rglsy?+7CqP%?>xAe zF1=$0X}pv)Iz8THF1^K~$~?6WCp_c6Ks}JJpgdw3TfL54=e+fyzCA5!g*;X5sJ(z| zfjpl(!aa`g7Q5<4@jS$09K4zc9X%d7SUt6kSUixMAHDh5c0Dr_T|2O3wYKfGzOg1mdE7d&lcU_GQeojvpf0lvY8JiWW2$vg3Ru{?`_LOe&L$Gttjd%cr8&^)l8-aPR*OFayPXFcU^X*^ph zRy=yI3A=<_6+Pz##y#umTf6~wfjvE5w>*ZEIlV! zk~{&#ZaZAKj=jf;3%r}zBfZOz2|EFU`@C9Xm%6wsqCAL}O1;;mtG!RBbG=7b9K8eq zTs^Br{ylW})4S-~fxI(fj=eS(uDrXtnmvZ=+q_qTpFOSR)4V{-RXt&mQN3dFCA?vx znY|6{)4ZMXbG)|k7(G3n61{cspgeh-IX$KzK|ScI2E71aguRxbNjo<|0z6jtoV^z8 z54^#UO})4WeY+3Nj6HfKkiF2O)Vwoq3%(yd1wDO9M!b-TG(92;BE7ycE<8*$e!bi9 zSiM$$96dmBfV>Ee7Cqnt3AP0ygVJiKs~UD0=yG8fIN(`db?w!tUa^JpG1$oV?xGh&{;HqrLIG&${*4N4+59K|TEQioJ!}GCicE2|ZPr4?PJvj6A@NUcC-H zhrFF0u)Gsaj6LsDy}aXr|2xdUb3IDZ{=ExZ5IzH~3cUjAw>*A1o;-s6^*tUac0C2m z);+ggSG|^t488AITs<4=fIJ$vh`qtx%)Kx)>AM`gw!0fT@w^OThCM0)9zFUZ%RM3s zCOkEf6g((9nLUh5PCMn*iM`^i9=zxvg*`KYm^-Y+guS`G+B`GRwLC{S5Iq}5-8|F9 zW<61qH9Z*^O+3cV96XHfh&}f!)VwJa$h~<{{5+HMwmi4gjXXsSY&{vprabj&cs=SO zy1jpdragtIvps^pkUK1&8a)Z6Dm`316}>}#oV|wDiam|jbi2W`zPw9OhP^%$(Y=ax zCOxe@MY{#v8@wZi!#wY{f;}l^sJoUW@V&Rz!#j`c8a+UC)H_Ta7{1ff+dWrm7d@Hd z2|XAky789XY?i9B?dTDuQGO+82&IlTfrMLeU0ls!22bv$?< znmoIX(Yz1aOuTz&YrW7wd%eX48NHm$pS^dW9KF$c%e?bbxV*8tlDy#pM7=ravb%kV6Fsv=;5}C1qP+*z2)zm+ zn7n&F8NGdMqP!;PQ9Mn8ggq{b zg1l+wqP@uKBfS$ni@PgB$h$RQzr9m0ls(ftq&&zA4Lv+R#=Buoi@mFPLA;bd&b*3v zhrLWvIK3`klRdfgl0BSIH@pM<96hMBn>-wZ+dP(e^*oX5qdn9txjj8cfIU`~s=RSw zB|RJ_uevX_DY?>_mpsM+(7Q?fZoQvtY&(y9MLoN|JiT7TfI4&EpFGgsM!krRMZIQN z9zFLTe7!zH9X&Ozxw~zmfjpX*$~=BH(L8~oI=qr?kvuc&IXxeA zpSrO@jyXi8a)WBK0W77$h^Tld_3+@ z={e;CeLZUB^t_H31H0-N#66(Lo4i9Pyu7>jkvs1JMm>=gmc9Ac1U+U(2|d!0$vh`} zoV`TZg1pU)5+G@p}pcv*u72I-aNq-lsp}p%{=%6 zmOHPw*FCqi**p{ET072ss6C3#Nj&vkaJ_*~fjo#m6g)Eff;}~a(YsEY5x$SABRcfD z6g_jH%sq1E54~qZYdiDhhrJv)D?Rt@g*=R9=R9EZn>>r*I6QQV+C9UHC_R))?z~OQ z2tBC^p1tsbM7=;Ks=bwhj6GmF9z7Fs3%yBp2|cM@o;~}4u06#*I6dSNH9NQ%b-i$y zK{{#+T)m(v5x$}cc0AXV%{=KBL%d47ggkg1i#)r98a=iHioNtSuf13*06m5^9K8_G zI6U3;JwEpOygXZrLcP~lr8+utcs;ly*FCkJt2_$9(z?1l^E|dXRlTMO7CxIEth-_} z9KBBW-@9cEnLM)pUOcWB0J{t&ggeNYiM8olDIL%ot-)I45pt-Kd8TDxGi*FBV~N4A>n!O<_FTF+Sn>^B9mb=%)_Pkbrh&_i`hdrOkg1wSDkG%Awm4!*<8kG=g$V?1rpUc6P$guKAy0X<$H z4?RW|T)K`s20fYagu0l4bUb>qmpn{?G`v_MDLw2ve7&)Cu01`v+`V3}U_DI1O}(uq zkUi@55k0#_$~@>O4!mynl|1@l5WL*{uRU8Ohdn9}3%&e*Mmit+LOd7Sg*~J+x4oe| zpuG4TgFRy|n>_PcAUpXX)jMqmfjssV3qE&F!n^^yyFC6fYCQu606shv^}GqR2Rmfg z={t^~dOV~4#l5UmSiQ3&u04+}a6QGg(Y!ej2|Ro7P(6g7RXQf6$h|T#Jw1v?iM?C@ z1-*>8zdhCNi#-N4oW1r7{k)LvCB0rt=R9Mpmpxrmpgg0zIRrfjflRnY=FQ`n;U|B0Vc# zvAwSOg}l!>iaXD1sJ&gc;XU0@c|A9OR6Uy*zdX&y6S`%Qt-Pr0TRj~pc|AJ0cD*={ zXuS^@y*;5wqdW$9guL|6a6JV0<-7a#l)M(RxV%6{FTG%TfxQ6pH9bUhiM@|SDm@+% zK)q)Bp@jUZG#y#=Jl|5C8W4yCGEk4M6?7M$+alJ}**FDm5dp$wf zWxYBr6upT`cD>{CB0W@uT0Is3bG&w7oxMM^Ful#T z+db&+GrTkmR=i!%Zara)dOI*f0=GJC_St1IK5l4A-yxo zioIra5WRZ8g1sM6)Vkv*iY!Mqnm6}^oCKfH+U z#ynzYqCGYj3_Vr?mO!gAw3U*skWjuY?EIrlmy1mLyH@(8nCq3Mvi#&*jgFT>t9KB-oxH}amZatBnGQH%4JJjl4+T zX}vJ=6uuB!1-{l^&b)5M3_bhuuDuU4%)7fi_dL`G7d~76pF2sJo4pUmnZ3I;W<2`a zo4XjBth^2g4LfHKQ$67Xkv$r296g&WRy{2ALcHjoE4?_31iY?zi9L!A+`G+Ivb!BC z7`=8z8NK4FzdV@^N4)EYI=uN9Lp&d(-#kffz&vdE)jX@lnY`wWTRqXm4m>QDp1J^R zVLd7_(>zA&vAoVN?LCJoq&tPn-Mq|smOcAY5jCA?LG$vdA~cD=PGP`fgSBR#yNfjzE^ zTs;ryfxV~Kzq}Tz-#qNK;=CuRxIFb3w7uH2r#<8jOg*AYw>&&PY&>ut6};XC1iijo zk3HnM(7eT`Z#xp&$URyl8NE78`aF+H5j_=o);(pONxf^}G(BZjy*xyFEIn3O2)zTo zc|85RycvJi2ELg1j`wtGy&LdOahBvOK^R9lrTZA-%|=gS-XpKRmam;=R@1 zn7z(o*F0bJX**pspuKXIGd!UVEW3EE-MkTUioHeB0=|wJExfEX3cb+@)w}(TYCMaE zh`qpJ6}oNrojqT*SG~+~FgvhAojqykwLG7{RJ*;YLA-j1z&&vL^t&S)6FpjT_qlnh z;ys(VGd=NxYCH=R$~^WOr8^b!2R%acdOdAv4L#(9A-%BrFuY1cRlP<2!8`)hYdlb| zV?D}L0KA9aaXl?Z^SOuarM=9V%{>}e6ukzIGCjxxGd*U5zPoV?uf13r@jY++m%Qt3 zjlI&v54@KV6}=gApS`I&(!HIrc03gUcs#s@AH9rY!91?^M?Dyx4?X_fmOU7YoxGrz zLOs~=QM`51r#$VBrMjk@yF9SUi#_Ja-n)`p$-9&P^gN@w*E@uXFFYk3+&pN3C%s7I z(7i@#!aNLwsJukVCB5s6HofPx*F3l{8$1JJ9leosbG>ifioLI{AHBtn4ZVZn3cdfc z13s;`tUcrd3O#t*g}n5LtGt(TioDsr%{<12ioE)8b3D~hiM_s5`#l17bG(;g2))9c z_q==w1U>zyIlbx7r#+OTlRXg8%RS1ckUgoG#XR4zlf1Kh-@U=uHa$xjC_FuUi@c=c$GoazSi9M3fxUB%2tKQPq`e~c`aNB$NxV_h%)C!7U%knu zT)othLOnpcoxIgLEpx;^hEusttYfIUtFn!Ul}sk;9>-aEaNTfHffZ#>{wq`j6l>AgOlw7im0uRI(d zp}g#)nLW+*M!kf6V7pYE-#oamjXX8OBfMWY3cQnhqP$TX_q>JC)IDp=sl1Sg3cY|B z6TL%;_PrKwWIUBd480l*l05r-xIHn89zCgTg1mgVO+8H_**fLVQM z0zO*d^1ZtsGP)3(4n2M1IX#OX5514jkv(m%)4cb@hdiMPpFAy&pSANLYtG&m?tUYFjC%)V{)w>$-;XS7+%f0ISo;_%g z*FD}&m^}uTki0_}0X*;_vb?L*th}#{^F45bDZSM6z`W;^M!k13u|0eRCp`J+8@(^6 zi@c0oM7K|R34w!JnI7QI@I zwmnV_XT3OjdA-a@3O%BhF+G2Xfjt(B2)<=@kvz_|6uiY5>ATXl9=y1q&AjV|MLlth zf<0rXUpz?t^So&J@4aiUlf2(9nZ4`(aJ=4`*u0q@89Y~uBRxeenLXCgKfI~MLOfQy zsXhEkyge^Ke!ViVguLo_eLXHRG`!;4$~ZncD)6Z{ym7W**#UAIXz=r(!9>Ht-aGX+q^2^={(H+ zEj_5{fV@7KiMQkh7d@n>x;%r6dOiE+ zo;=)~n!Rcp2tBGY3_MC>s60_Sr@R0&J3R=kzrF5NCp>p4cD#|F0zTbRC_MXL=sHh) zw>(p*oxK6oF+JmBIX$j!v^`e*n>~XwpS(_fH@uesj=Zt@$2+r1)H@$i;=D&SPrY_~ z&%7a|Ry}q&y}a)P#k|frsXZDq!n_NlXg%{#EIkVnmAtQZT0OcIXFS@@Up)c}ue>AR zD7_{J_&wWFs67<(#684~QoWcZ-8`TyT|Iz@>b;vU{XBt$OuPi196fdc20b@YOgti> zg1rZ69z7Nh)jT`tU_Duz06jETyFC~~rMx(#s=T#b|2$Ev!Mus2)ViCsF1_~)fxJCM zxxB9XygWr)|2>8_#5#|vPd!1%47@FJ_`OP-!8^s(R=gZf6Fn`22tAit&^+>3gggar zjXdOqVm(`-z`Y`Gn7xgMbG`SML%blZqCK&{oxGVZqC6{GM?D03nY=O1ggvY|aJ#3b z4?g`dOT2i@WV;3;oISlY#k_fIG{axV-lu#l7j+mpM)GzCDb9 zs61<90zR*@L_BhVw7576l{*u$f4tfG@x3X~e7&^^p1kf_*S$2_ZM^EpxxFuw#yveJ zqP>Fqr#xb$kh})O7CmIG4?R56i#^m@A3Yhcv^xdU^*z*t>AfHL_&o4Dnmp`! zfV@{;B|UvR|GY@z0zC`Y13d`~l0AU3p}fF_rMr1j9y|v-u)G{@s=WF>k34@lT)hAv zp1kiJT|NC}={#JLsJxj_`8@L8fxQ4ln7l~9mc1Hn)H`sA>^#1>kiA7d>^qOGxV$E@ zJUxs+f4#2G9KF=$hdrMhL%o@Lkv#;CIz7g;7`|P5QN1OXCA}pWc0IWn1U)G1l)N1i zl0BkP5xv#|3p|qqX}lhRQ9TUj#=O}jGCd{;%RJW?zr1;?p1ctA1U*mEoV<`mk~~;? z6}@(ZA3cA62R-1~mAx&ZfxWy1GrU5m%)PEspS`R^2)xZ0Oue&xp}p*3sJ#utLOeMg zsXc1hg+0EMojtP9$h@)J`MvZaalAMh>pb#BQ9Os%6+QXGR6W+G<-F`}sXYnGQ#=>ryS?=jXFYHu-#qklqdidyQN1my{5(NP2E7o{(Y-^%iaISW-@I-Q z=sahkPrcMtx4Rqi!M%&?m%X*%sk)rM!@PYwxIGXUi9KKaEWIzP5RW;`bld%duc+C5ZT0X-ly480_^#ynf8GP@?3PdxxjoISIB zV!Yo*QM*EG9zAbNP(9C=6+Ow{X1o>4Lp+fOIlZLzM7+ukOg#hT!Mz@2{k-mC7rjZ= zLA}@z3%%|N$vlaray@5EguKq806m)_N4*pKhh$vk3eMZH*j zYQ3x{oINV4ue{5SgFWDn@H;{Ol|4(&BE7cev^^^=Ia zoI0#DhCHNJkGw2m*uBBMO}%E=vOE%Yy}IdhNxH=hGC3lKG(Jz*+&iITb-k+5(>==~ zfjvgU0zQ~Xx4a_Fs=T&+!#tgW0lS%hp}p09lf7HzRy{&nAH6@Vzr6h<3cXL$5xb{1 zFTI=~-n`y7DLucZy*=7uH@$bXoxN??`@9t>)I7VslDuJ?*u72K6ujZfcfG%wCA@gc z2E3&f%)NWq+d91q_PldTyS!#4E4`Ip`@H*(AieZmqCMu=2EF~+lRe6!#=MalOFgZu zQaw72wY%ex?DEWHC^s60K&ggrVYm%WcZ0llvJ4ZX%$p*)}W zO*}cn-8?$ZD7|AfjlGw6MLnZwzP;oJ?z|9AwL1%+u)XE+*t{O!s=Oeohdi<4i@nRL z)jf_xF+H1TqP(mhN4@D&SG)UvSiL0Rw7Qf!VLb4)e!XnnhQ0p3Up?{Ci#^|gZN2aa z&pm=cV!@c$C9zCI8v^@hmiaoAngS^FPe!aMz9lig0V7wwRqP%opJ3AYg zR=v6ctGv5Qxjaa*p1bz-nZ1VPuROw{W4fAtnLJDbyuBtl9X?+AqrCa$1-z{BVmmQ@ zB)lD~Mm+<&WW63b4?V0A_`H{HG`pK0X}$SF*E|(Na6E+zF};ccXFUOvyFKt~vpou2 zCOn(O3%q5dlDz8vKs`{g%)E)_V!YiCYP|ysg}faDfIS+rv^)()a=PH=IX$3?jXhm! z=RL7_th^kPemg7)-@UCTD!r2H)V%^Sy}bhW#=Q#}!9A!;89ga=O+DTB3%-&`qPyo3 znLU0ZPdqc&GQ9}#2)vsyM?8xan>{=W8@&}Sq`kP;=)7&aPrYsfExh+(G(8_kay_;w zd_3u#+C7rDV?D3q4^i55DaVjXW}McfHn1u)I{{D83+1 z6g?kL;ye}~5Iru5Y&|kUs=YW(;k~PFpggt_mArX?VLP)^LcAEt^t|;MgT0mon>^lb zA3ebG8@*nD13mgpL%d3I6Xi0M?9r-TfF$^ zioDsPp1jb6F}z+kQ9B{A5WVZ206W}->AeU120b%HmAqj_{5x>9Jv<+M{Jba?2)ggZ zu{#5GBfb2xpgdFV&^_zuJiR@x^*upPP`oXdk-Ql?L_IU-WjvZ;sJ+~cp1f6zalLSd z!99VY3_UdF6TJNfSUoVW$vw1QAU$4}v^`*nR=o~A$i0gsGreA+MLpehQN39`K0L5I zFS-jAbUbvdF}_7rECA=Ux3A>N}G`#pR1wA#XfIS_ATRcxCB0b_$#l1Zh06rri z?!0;`=RFz=JU#l0ZN0O`%)P8{oxGu}SiF~(SUq>=5WQbQc0EXun>-aa9K6_@^;^dkvygA(>(CDAU#{R^1NJr z(!IK)I6Z7!MZ8PxMLdt#!@MZ%%)Cy~uRYIxu{&r#X1ofCIz50e?1wa z06ovV?!2bZK0TBvbi7_tUp&_#yS&2EcR4OD$h>qskUez}5xo<*);+9bL%rRc$-ML+ z^}J$tM?IRic0ClxgT06_nz=QcK0K1MfxTa;ar61-xSAH38Z89g#~RK2@2LcQ~iF1`3vraY~wggoyX_dIqEB)t#k zggvuk@Vd}RFT78_fj#Zzb3OW1Oug}mb3D&kR6TOcMm&x?F+59A^E~UeK)o*|KfQzB z481s+r#)rTBR$<44Ln)YXFa}0K0Sw%6Fq0cX}x*91-<)|13Z$6BR%DqYCT+8jJ+4Y zg*Yr`jXaS%X*~g-=Dc*Vg*{&efxQeDAv}bEy*ky4z`OemCq3R0YCJ=^&%EOz13e)p zi@j(^6uY8UmOao13O%amB|SX&XuT}S3ce+)Q9b<^f<5~bPrR-gLp?ssaJ)u$S-el@ zRXks!l0EyJ%DqW}0X@fkp}qST1ijv-lf5fs06MjE6ur}?fW3-*<-O2&6}>bK4Lfe~ zls$&IuRRY&B|X1Lhdnmx+`UBGJv?=%mpm)$Ry=|@D7_zb#k}+h*F3N_ggs1m9zC_L z-?}G6;XEc{**qYxpgg4xXuY!yjXeeiyS*uOnml4#WIZ1s7`^$f z+PhR*;l2L8>pPY&b3CF?<-IV1u|12bIlb|$2tBd&7d$OHialNYxjbYhc0C(SV!er4 zygba|e>_i)FFhK@nmmm2h`mje8ok6>DZTmXX}p`{aXhs<>^*S4Z@n?>&%Kx2B|V)| zn>@UCl0EOI61~Zq_dSU%f;&;Q6FhBGXuJU%(z}Pw!add-+q`Ddk-Zq~06pn^7CjE{ z7ry5FzPvhc>%4-i-o46C6+T6O89lP&$~}awusyz@UA=$Czr8BW*gZy(W;+?`v^g%P z7QOqsC%hT%6g(kg54?3=SUn^=-@KzqhPx0ieLQHEnmm%iB0XWY=e#wvL%mLF{5xyf zWV}Fd3%yJW#=IlosX4@X;=N!mdA$wzZah4>?!3Lyjl8)*r#-_kP(IMXo;~a>1U)&& zsJuXul0BPX2fhMv8$G_t1HJ_G20ob!W4aJkfxUH|g1n#cU%bT$6gwVqls$!Ebv?QT z#l70@7`@}G$UHogM?J~1Lp{{vf4%Sj13e4QC_MqIuDgAkc|8pAe>|#smOWm^2tGRL z;yuZt?mMXr?z~Z?0y|D3Bs?YufxU65s=XOsH@${SyF0?of<1*3nZ3oOAU&4bIXrVJ zv^<)FN4mWj)`fp*&oY^E?RA{JiBH>pUksjXjq2XuT9y z4n495p*tyo7Cfm4q&x~D%)IE+FTM#=0KGn?PduQzG(8^qth{(z20ira>%Fzl_Pv!A zyghz`GQ8y}WV?ua3q7l@@H=Apg1c8_mAlw#pgrZVK|O0qPP+w8^E@ok20R<~9K9IJ zLcPL#nY{XzZarYzrai;_SUs5@gFUf9vAxUNsXfz-@jO}9H$5vZzdRR8)w{fgo4uS` zWjz*IGrdcg7QIFrD7~J>BfS)D{5*LiFTBo!iMyoA4!t-diM^y7Grfu#K)uevl09SB zF+F`Kggw8C&OEf`7d@Z2A3Zb#2fdUX0zPXV<2#5sJ-u$okUg@BVm$#p20fZf@;wPZ z**u{ZpS?q{fj#i`$vp-;wLCm6aJ|Ds96cc6Nxj5{;XU)G z+Pxne96pyY550VIZM|e4H9I8GK)rs|eZ8N?o4t-2C%rw$20h(=XFN(X^1KMbjXa44 zjy10t-MpF61!Zw|2#`XgS^B>cRElvwLQ2ifV_=OiM`uI=e!Kn5k0;K7d;yq zggnJ}hrFe#4803XLA@FW^Su8MLp?uuhCP6pt~?L_pgm>Tdp&(O z@;&^5Y&<36iaohcu{~;hcD;G6j6Jg89K4uoB)vFuEWJp+O*}ct>%B|b#yh6_d%QRXMm^0WHa)^4!#sa4v^{{Bvb|W1B0WSP zC%wazGrWwOyuBMF^S$?piw*kG&n0 z7QGnf^Sm6}wLHK9z8a9DZOBJ zyS$~i_C4eb(>$JjQ$0}uLOl_^guN|E2D~}RM!jn5!MvsIhdsbI9X%1U)jYgV;=Nvs zcsq@#p}qPEYCXKDBfWIt9X*b0$34Xd(L1ibZ#%FO2)$cux4Z$Kw!MRRalJzvfIZIz zguM+Jsynms&pbR5^}Xx+b3H2i<~(?|*1a_>yglpwt~=TvroH}JM!l1g*u4{)O}(yg zj=bFGB|W=&guHg6!@Q-m_`RB=SUr^^SUnqQalMO8K)p`Zkvx0GQ@zPbm^(cI_&lS& z#XT9+l{~)s=Q|93%{pb0lIlW}#7d`Y(89hCH zUcI)3*1P$td_4K`5<4m~$h`5$X1%cBk3DkkI6SSz;5~PCgS{ozHa+&PhrA-hlfAuF zH#|07cfE4%n!TJ4#k?ihQat+f8a*87qrEmTK)k|Nx;$~;>pgwK^1W1|R=s)F&%D#A zP&|^Syu8i!)jFM??Y$a!guG-ww>(lV8NC6h7Twxjpl{%RSatiafJ*$hyY^ zhrKMVpS^qcoV=(VA-tr2wL1yc+B?rAw7lNyhdf=yWj%W~pgs8{r8`}Xn>r@F;X6mU zNW6l3N4>3@Nxid48@*YjSiHLqV!i0X&b{iFp}nWLO+D1#DLwJP|2=J;xxLh^B0M)v zMm+hnE<8?^WxZO+fIE5|UOl>lg*-B?zrC7_9lb11)w?`GK0J*1fIVo_i#>$24L$wg zMLiSN{ypp@<-D|d_B)yi;5d5h!M%l9sJsGuSUmj15WUvsD?7vLoW1#EQM~VT%sd{A zgF9aQ#JpyK-8>R2zdSieP(7~42fZxcHM*bzk-d*u0=>@|TRf+>9KE?}p}ZRGaJ&$| zu)L;2y1YEvjlGhN(Y><@X1l}ELpu@5@;vyUW4$EVw>wc>Aw9|M8a;Kr1iUZfOuV+M zemvwaJiIE2D!tXhP(5cN`#l3(zPgy*;kv?mL_B8NJ@nL%g`6jXi^2 zq&@OQkiE_{g*zs~mc4ZB-MmS1eZ2v6A-t`TLA)=l^*nP)6h0q9h&=R09KFJo-@Pr1 zRXr_x5WORQPd#F{7CpaS)xFEijlG#9$h^oo@Vw}8nmoPC3q6+&QoTWPr#w3e61`^8 zoIM+!GrZUdy}Bk|YQ45)n7pP-EIwpv7P>oPue-26BE3>|_q-pNqCEtC$~>!5nY;xq ztvl5e#k)liL%d3M!ZHDVZEsQPrAeV z2EIO&+P&*3zPu{?K)v535WEl{vAr{nUBt6%y z{yZ)36Fj>#DLuxaZax10JiQhE?LD8&nLB^CS3BscD7{UaR6QLMti8?1oIEaDlD)Ar zVZDcVF}zVxnY>_|iaf!`ioKmMgS~-88oW2^M!kyguDqOXD!dC=mc6Hi13l_1x4hnM z3%#x+2fbW*$UOTOi9NJzi9L+L&%E+>7QMkzay<5B4?I*W|2!R6;5(7+(!FI7k-WKW z_&Ryo%RR*TfIUPmV?Fdkg}md6yFDRnhr7RPdphO&aXqE(F+GaMW4p=}_dE?)XuW>g zQ9TrPWxNuQHN8=(hdm{Tnmy=-CcOr!emp5Bjy>=qSv{jeguC+m7rd}&l)DpXAG{bA(z#_yz`PE=^t`ief;>Nf$vqN+ zx;$||vraTbrY`y6sUOkE{r@X9w zYCZmFusjAntGt)6xV)RR2t2L55Is%y8@>n2kG-H_E%5~#9KAO1TfI;KC%x<)Ts=UYK)uD*HoaGb>AdQ~OT7U0RlIQok39>IK0M`AO1;yO z);u`b#ysWg#yrEVxIC(RoxNZ}$2_o4`n|zU7d_ksmpouDRlPDg=e&eu4!!qGg1yRo zS-o@Z(L6)2V7yYv$ve9)4ZW-xXgueIioKd!l002K8ogQ*RlQ|<(7eL55WWC6 z`@KqczP*fgJH1dXN4+gvBfXa~l|5rhc07!{lfAliaJ}{+ioASpiaj}_kGu_eRy_+# zc|4%L-#alOjyi|0X_NNBE7kxySyaXA3em%|2#O}y*%*bA3cpq_Pn_o{<|xJ zLc9*pWjQXZi@VTTAG^;s06t|%iak`TRlIqwm%L5r$h{`#zP%sdkURPaqCM|{mAo+< zwLHDWjy+wMH9UL;(Y(3{{k*X=+PfMr$~{_4PP>T%(mjz^&O5K7XFcL1=Dfn$GraOd z`MaHVnY~jQD?MR7gS~3|hP+w0hdmrh*u2{Qg1a+!UOWbSVLN>cu)I6ZHof3kh&?C3 zJiMiSNIf&r3B5Ohc|Ao?Qax&B%1Y;b-by+ z6}?X6Vmv>f!aTGs54{Muu06rS6un$P551k0WIaspk-g4=1w9?ki8EVvc1n1n>-+gaJ<%kYCBO#JiRe1$UVU#r#*dz zki1H|LOlp52|fDM7ra*uBt4&BN4=lUBRsIWIX&IIsXK49xI9ff1U{<+u08UGt^fdl z|9?IEfnhxX)rY;lO&va}jp03k!lb)Hw4lAj7_+-hA(K6csjIp&`6oQp*91N&BKbQg z_8UFBSSvk630=Jt6NNnGy81j;JR3dmq2)Y?9E&_nQ+K<;(x*LrJp?^a?~J>rHn}}} zEdssZovFMy_K7=;kv2UM3mLsI83MdHDW*FnCj`7}%!@toFfu(33o<>o4l}&L`#(IK zP4ql8#8$mFGN(M`SDC%k7{xuh;y^t~^$fcS&XhgE=OR6XGUPp0Pc%Jz|A#z{E4;n5 zC)Yi84cfivTEIMZ1*bf_Q;fVWAg8?#y<5Fv&#FBSu$;WNw+Ov6sfW6=ktRJpaV@<@ zfRMb1%ig@r0LZ=ZmZm-ZRnNV}o}oR2-Pk*oRKdJ!4WPYXQcXQ^5+J>!d?~#Xp^3d( zff>DJx<9-cfuucg$fmr?I<~yaJUG3rG{HSg?JT?|4JbSbyvjT>Gcvub z4;4MGNpd~>aQ8hO%TPUzRGT~i?TkD+OU6CJ+A%!|F&Vw|Mk77t=K;GSTqiti8r3~! zSLQpraXq|+o##8Wg8{xV%dfqrE1tc?gXX-?d_BF5RF}Qq)(5_Jb>%%bOK-giOt-ze zf6P6mj_tZ)Lfbun+ONGd13JAT`o_ITa!Nd%iKIO^aa+9}!stB|A&$Cj)F?hE1dKgn z9H_kkwkbT3q%*xxdv3kxUI)G7FbF%q-i|#cy^6a4jsd>41qVH3K{&n3(x^Od8HT+;_b$9A z8pOPNG*Ub_R9ZcEl4LxO-6g$q#+p2cgO$DZ!UMfB@G?A<@Yg-z%OpKm`U<{hH6^?7 znx?#oHUPbc_g3eZD(T8dSaOb0ED=>tMV_xhB2IMW;M*gdM)T+i<)y<0(Az6>7X_ApO1cX|X&< z=6pTh`ysptBm=!T=L)>gYfe2rO)I=LKIgq>{ZPEo(2qSp8Q(nQViUV|a{fCv-$Om2 z+zdS58UDQEG>AH1@QA(86*N6fRM@*#t#v)H$?>~@lmfn$rZ~OREK~a#^d7vi5ZpcE?8CfqVbDC|6g@kq{OLQ-wx7MmuG~B7z&1T2WEZ{51)M$6 z9g93$bppLGH8Q;%5Q9B5SPDA>Uif)_op zDRewHdi6bgJE6SsIeI*3DHFZl@z}iRny9@sUk*M@wF*6X09w84Kf=6zC6ztQKzKcA zqZ>VxvI#tbUC6w8)&;%R!H~P2>5Dx)cf`C%DWW^kq7J=UybU_}?n=E>Lg_omB{V%> zo#{QDj<~(J)bczu^(ws%wwpYG3*Ei!tdl)xXoNf!ZBM6B{{un zDi}TF6F5D|U^u+>QZl^+42HdlZ-hPcQY<|sf)qPW`?)>h2kfsHZQy7rv1G_ zZh<{==$}14p~E~^erq~=b9Fpwd#*iwYIM9LPp3U~?>ssvmij!rNMJqit`a?c zsYE+13y{2)P-8rr*M7YQmyA6=1K>Ml8%RCEl#4tcRewC0{XjiYf|fmet|t@$%j3J zB#1mBcAPvx?hU4xW@&vuQ z05LrD!f`z$hO@l-lOjE`{|da?lYBj&aq~QOCS|;N!hUl;S&jYpXqs8ehE+(+55J7g{~&m_EJ4 z5V1TBK#{w>23|b$Xw|%n&MLgFXQDjx95+25-Df?Zjn}+>@?yGJd&RqA@f^MN>o>h{ zk!!tT36wmE~6j8jRL)KXEMDv@W#E0xfH#k8;ZR}+E%=#9iKh#*rmNol99V2@s+)hz+Jr{ zH10fbco{v+?FBsq8o#^?!4$of1$e#P1>rqqp1eF_EX%yaTtht62PeF+XpO!3S2nsY z*%UqKsGU9LKX1J;W-C49QaL>C55m3nc?rD|^s2hGfWJF!y3RQJ{wKUmfsH*KcoaR} z>f*cw&j3AyW%)hSW0Jd2ey%)P1G_!fC8#~key%*1PoX^vsgpcJ$_Kp`u#~(Hx%@l` z{N+7Bx+c8;igrDGY@a=EPv$+mO1{0!Y{I+5Mhd;0hDE*GntQznOw!6Li zy@Nd+K@z=Lqrbh<3K+c@sH!~|+Jil;6NNUI14v0F2Lkzt2gd4o}7#=;#^Y%OqEJD33w&gvgJcqpx1ev_S z|0O+#D!09Xn@By%VsAazG!s59(iptE9gaOt^Cmsc{hBwLqDQ@($d*0rTH-u0X-vET zt*AXqF&4cjeI31%uspmiNKL(%CQrRdPJ_Hwi{rha>Ycq0--qjy{ElwhgQ6ymNL93NBg{DL0UWj#o)aEf~LGK_K-ZVv5-7%!_7UQCD1#2R{p%^ ziAX#>069H`hk-n-$~wJ4=v+OhS`s_nCJeo96l~_ChI|;pl zvnRbWPQ^VCg8e-I`XW7E?;Jf;nXkL~`K-Jfm)}b_}#rh<_^6};-x!gr2@TpPW`-U?lL_lCMCTKT8+KNJtV!R z^`yMCSL3`*ajm^txTm~zL4rLNpZC0n6M4PK*$X|7t8Be7?&>{wF}l1{_tU)021>a_ z4MII7Ed;#-+F-oWS)aW^5#hY;|AxJ3E}=X`cN0BodnY|=1NS`f49q%eAv!&&BpkgX zp<6vt{%t&|fyg~*U_d?apF_Q-%kR9%Rq#CwT}M3_Ai*9|?r z(!07bEbp%4IvsMvS~<%eXwY+?TyyP|!TEE9$-YHj+J9jMTiFUhX`3i08aj zzDm88&PBbEOf9_|u0OnJE~7oEtbn~0?Z!R-J2gCpIC?$*m8HEW|1>=|ZI?Ss!T-IV zJ4L;KfFeDZKn%T&A^^ReU=Y2MDCj#mAN;)-y81k2v~oNYIPN^# zW1Kvzc80uNBV)Z5twp^Yk&(T#SP4B%YAii19U(oH43ND!J%_ygtcE>gt=~9rc|1H8 zzO=pPFao{^mE1hTFD|{&@i#mhPH8<)$Qr!gQP;gv=?1DV%c8EO@QQtcc zn%_I!hg>}-U-5xzm zVjev-s6f0}(GEO6r#(HLjcU4>Ix@WiX&gPS9=1IEHw-*P7CF3ZYK6R&4-37G7+XE8 z-)O!6hjcwOv$OZTP%|Zk0T)o>4ta3`{-r8I--ZMkl;@C`3K$is?M|gBrad zqP#q6nT|Y}AEvz);Iun*;(a`NrT9G2JvqIHiatD7gf+bPS7IOX7(z3lZ z1UkJs{yaUQ<&!-3$ND_=6|6lN?>;>e8_m45Qm4IbABQ{3Y{@+e^|?Do@)5nzyR|)d ztv0+QP$fK(97#LdX=Xj4ZKJ#py!Sk+934H_Hxs>vFN?hjB_q9c-I+bY4Uasra-BTw zE#JI;!x}vx;@!O3E3>$kVL$JCz?B3#;!bK2gbdUvo$7iqjdErYz=&JsPZ43WL5|MNT?#)7^1vC2GD^iI8E z7+<`*(ziW{!dpEh7qvWhte`yGhnT!5TTQ(}xk)`KU%k7!hU{z+jzXYsoT6=4hX%UxPiTREMUFhsv14g-7!4pm!iG=h8(?{v5&po z8>GBk-k&?L#-Y4M$)~-j^O?Ls-(bDtfG#~X5#~HQ**UzdmukJv>n%9HHmALLWz;>< zDTqCNUctKlrQ$q3RW`hBEAiH zYxz70bTK_@Wmde#gcm(umm5CgXAwQHm6E-BZTCF&No~Bv@tr&%>y^ET7HK_fR7|}> z>aM+3{lz@k0KPmLk9$4g1B5%IMpwOEU#UI%^wT_nx@C}E|PuVMgh=XE$=EC)SC<;T0!5|_Nw%`iPzYk9q5DY-ih;_E!B#-hApoR2&; z(bm1y!WKLL(>}bdTMWHJtFb%SE8sgvtP#C=lPEpEIJ=pB#t{U`{F(S?vp(3wv)O5w^h7A268;o^H#kAlt(?6k$t_D;;20{D!)Cu zs|G&M-;KQ#@_@YrvdO(JzWqGY-buZFpeDRlZ~46OcM!ctX|=sg+|RrCf|oqCSW7)3 zL4CbfGxIx>D2TljV5>cZ$6>uu7Y4nRi9S8*16n=$iOM|=DqB6ULyEmOAQZjYv8TP2 zczV54(jmLG17|&_(w9A@l})-!$%4Jm?R31ey{0^bbIv^lz_h$jT)sVOequb@n9{rz z@Tk1-L8U#i_=7yKF3da^w#z+L(1SgRZ6rOWk`BF`n~%K?GU>diwvN4oW)nR_U4T8_BzrsmI>x;TB3Qk2 zuroXel_ou+5;?sfqoh348W24OQYAhb8S*>jQ_elDwURtENaegy^(4JZFa*AiAL_i| z**U#><`KQ1n4UeIN$I;o(s4bdEsMO`B+NbQk6FF(QwhA3b2dF?AqKrii`G2v(?Gqq zcSpV7Nu#{NEyg@ih?G6XqpLkOsH;67D8aqBNp(EcE_l5D2je^n)UUkO(epgK?>;@L zQ?NaZf&)H)=V!ftlF__pbmzUtouoZ(Skb&II~_d~e7QWvPw74T#;v_vt#dpV0fs$) z#+^Oks_4A$$|O34Xl*>K30gc;-vvH-(`LOZ*E+lxJ}Nv{OzXU}Ez`Y|4;H=PHpDzV z13kUaABH_J_Iy2<4YWLy=+V1;TJO6RS6I5C;pn|Z)MUK)(i6Q@LkvC6_Y%FTdk($b zB$&H!NOHWgT&6r6OzS)svp+ktwjsUS#-P1BC4RkPUxmB=jMzOsc~w1#`|iBypRBwT zpy@r7HkrNm80EZ}+i$%=u?9V%{Ug1>=axKGby2-n3&=bf99X@W>IOX@v>Lq{q^7-n zoDw`&i3>fk%ZfcV#EU&(BQ!gjJpjEB?wLJ~1Asl}TO+-IcPu>|niM_J)G|H4w_&{h z66rh=?uNaN2M)X|2h6)h!!x~)(rY~i2|zs)BcD7>S*E(RWA(heugyJ=HypbfYnQyD z^n*JlI|RM(Ct5wOEdo9-eP=!4MiM>SV?{j?vTnU>8vs1^Bf>qC7?C|IQjtCB8hJbd zS#!HOfRj8-#s<5XYWO_>pVvIpNN_x*)Xh8$6(K$87ezh!y%apz*WA4rS?D|8mx8?o z)RDcIWDz`n`&2x5oD00#D6c$g!=}8p&W61)&4j%l*&Mwz>dn0{WT8Flz$86vO#4 zLlZrc^9Mbpuo=9Dl9j#L(?LBVwe&pS1{uBdxwSkcxyHQu<%ztHq24=p*w8%8Y7{)j zH<3ItmkT{cvwRj9p)HxoSyJM%n~arQd3s^B{>&E>uQ$6~#xfTg{KnK(V$MvOf& z>czZ$2s6FG>WMvBHGn-0y8}JimCU`^@z3hq5K=v+N=Rk=NcGM>DLwQ4<93e&v7&8fV_l(4;S#u`0`Ov6149(cXu>l3{kd9J*ECLul_ zzMs28(0slBsM@^B(-FNXkM_Le_69t70B}22NZY&4WtBaD*Jr(Dyehrnx>36)NB2A_ z=DEDh_&z-|ZhF0a7}mT8R5`obepNj{R5-micEG&`t?ayGM~%HEG~PVpb4xsEtS`Oh z8$dmTU$eYxzoxyLe=EEwv(!Aqssg?IW@NpBkIy_wqZGXc8``;PrH?)9?W#S3pFzEZ z-qF2nfNZ=G^CCTKeq21qyaK!9b)~&V21z|jo5H=?h{ZcS+tR)F4v#&H#rHj_zTvt> z1k^p7F+RO`eBZr3D_*_-^t?P8_;o#EA6Y%x5;MKU24FopI0(HwO8q><2ZX$iY0^Bb zN-(=lh=V;>=KH+`Rgk^J-3&V)D^onwhP^#~Av-<()&)IJV&gqntew5of1kW_Vc|X8 z2;4eEc@(`7`~WDl|uiQLVOf0=gyB$2{j0HW~ z`Xjyllc>C|liyLr6=U$MO~7!5sfOiMg@pB%kvujD+FCc2~T&6^}huRhT@T7%M!4L$^F@8C5+$ zDHc5hrV2g20X@79#kV@tKy5ul5jMO>b^^N((iS~h@54K_)s{Sjk^MZEx5K>R;{ZLf z}ERj2*ynwuZ7fL-bS8~1f&Y!&3i<&)T>f}5(_AEStX_q{%$cjB&>qxv_qP{#6 zj>o;{Rbsnzb_Tsd%7Z++Mwz{AiWohq4-h>-W|O=MKCZn8&#%381>d|-&*Qyzih(`+ zK7&2#gJeBjZZkcAA>O_DC6B${K@~mwcb>dlBoewR5463-j6giFN-I5eI%~Zieu%h# zBb>XXwGX|$P}sekIU~KO-|0MjaJoI4J&irS*-5;$5}G|kJ`+6x$8S4l4ZAywfh;}M z`qw>)3ZA_HI<>rD+r2yofp9%#NcTKg5E{L^(djk?p;JYCHFa<09d?eaPYk-`FlLzkitCH_+h(pwMV?~_=iod&Lj(2Kp9{Kq|PKg_&Y&|AISW6nLI6JtGWI(WUi>t;NhsNuaUS2I0plkGh! z0S!GsHA=nTtU$drtGhb&5qvwsb+SFJWH3EoW)Qs*<4ZgKEi61`X$QS3&5Sug;WWMS zF`7Lla_hXNHA6kN^MpMz7dbtQ|HZwJ-}=1vR}8&`_>;Xxz$CkL%Fw*v({sDse?PrV zBzwKF#k{>!GN?Tf=chcmomf35hA2H+K#)B?S~@*&>;*k1^8dV(6iYqk!&1GE2oXGK zjFG$X=MB9LXY#xVJRLp6n7Y039Uwif{F%DXewMr0fL6V~Xac_ULyo+l+9*Bj&n`U) zh@(Bp_gy<{Ru#Q6Q!G8fyMw&9c2~T)j?TTRofthaG$%dbyz)E~-_$&L)C|3iyYjpg z_&Pmkt?xZ)cyPTo7p^@@x2(Jq2DQ9x?;pL=Q1?AZJPW%NflIwy$l<;8+~mAnp+LOR zG5S0yAiF#x@*us~oUy&th~qms7KFTtO};#rb;G@$1`0jDcR{@AS(QB?COvou;;x0neDu3#xA{=mE*js z&JjJpUKqU&Pt`rSfj_;q*^RsC;pM$Aw+24zA6~sAs_(s4@RYq&{+PW|`7ga4nkYP$ zX2!ggnRvTa{Q*6^L94t9$vZu%XwtlxKoq^ADipi|V=TQojZeL*)r-B=(ycr#yq7#) zMRq-m!ni%dkVd?-K!2muZ zh;Kc>z^}Xl+b%r%O#iyGp}IW?BhWic_~$%X`xL!rx*$8|u`IpaFmgQN;#9n=MNU01 zn+3ey?U23jPmR6X?Xtbg4M;qdiHW__GA6wYLKr{ zUH3XEAFwWw`pxez^^p1nNteY-s65ePm;pM^WokeWS5kgUCG*{;0Y)BigU<<7jf z;<7!>n^Qf!{qQ@2{MoxR9)Z1MThzR@R5861Q!Bm1G7miIRC~Oe0?a&aLLoflQ#ZYe z9n8EL{sug~o-jRdOq9H84fs64kaN9NJ9ND*I~6^>;=DbhQA@qf&)>X(fpNVK9F{!> z=?}ebWV*ctLa02!#G*Ytj^I1Aho`-Ab;&%vr^!5?rl`Ei?zlSI(5}3i&?h}qD?vTX zC78Xoj!3+I9eF$7|4%(!thv1>MVUOPsxQ5%={7s?_BOpLo|L_i3Lm_-#T~tzuopaV zG*CPyVX(bFifTP549q=$x#v7eI`2F|L1;bKDr37NfMPv^4@NzV2#UKBZq+^9tE9bN zYD2qh5LCUgQawBsnv%Vw7%RTY^>931QpLS=y*s_4<+(h80)IVFc~rfvX(v3iTFO0? z_*^|W;g`L@yUROx^~gM$Y-c^p>nyzmY>vHMSbjb6C=)$4$7{W*0}niWvx7bR5`#T6 zI3>NtsSCW|l{P&NIexp~^sYU22EDu3l5IVQa-lplDxbYqfd;)F!qPn|vm(9KxtKkY z7$dzRi*h|YZWKLFY!5sPVsyQz8c@Ac_=vq#1pd5<wS+qY&fz?- zV?sNJ{lq*#l$AWu(w)847^FQ>Xf{19&&9m>u{b;~v%5Xc16e&O(sev7tGPQrOfJ0% zPW!zd)MCB8x4AuBq$|8u8ZNzhK9#)VC!@S-o?$&2d8Rz@c&NNoPYpXi)B(M_Tt>Y( z+K9czfyq60^MyPJJET4IV>rERz6ZTfp^`i`oddfw4<0;D+>^aLurfMrc-6duGrBz{ zKqtNZpKQGfVZVC>g+l{-KV?= zJwiQ*&`7&qE~z~NwLm>WAzQt_>_I&W%EY|yo`tPbKbF1Djrcus z{~o?!giAac0-L+LhGf0GUvj*k-}1cUDZ)HnjLp5G@(Dd^=|sGd`?bB>EI7O+`#8NF zS!=!JOyRr(WP3e9#z>6R123FF-tDat1y!q=`MuY5P1dy0Sey zt3Ev5^4z_nJF-1AskJ<%B_q9tf#|!%#9qB3EFL`k!s0y8{T#i}%mTe|aj-lKuOGeM z(q}!Y9KAeZ(_cMd0W`a+vWUH;Mn^pVGyObQsYAWp2{Syg>$*IXg7Z8Hvw=HdCg;4* zRSLZ{cknz#CJ;U6`v*Sv17^K^xF)^JMLj)IQ{cV!bjCc7XPQ0Rt-C$Te+fM>dRx4) z90k1$BsRS+gP%NQZcn^a^maWztu4LRL+8DITsFMWMx8xAd=I-z7O6cSKN>yEwNgCd z+uAz@x)!}}xNg1c;nX}~EU~?@6rMXxB7i*7+vPkfi-JAnV|P4t*U-DP#Z|o9VWT~v zs))T%WNExcXKFlt*kL^WuWCIx$Ob*bn$5d|mpi?)tHZqAx~IJ( zb(cJJK=VC}tUJBD8|J-!>xDe9R31E~`UpJOK3Ki&f@?jC3|zefL6W>#y8yf@wCTJx zOv^kxovUKYsozKBauA`3pNh0}#EyZmGRk zw=2CtLZZD**4a8EyhE>sUP6)Pg1%!+5(9%TcNqD$y&X!mj%7osUf}E zmc_ght2#Yn)VaOh_SL*3oIJf>jhDQ9qXa!GB=fxGy#BnAG?6`_fQ!0Ak4HV=p`Sg0 zu714yic-9{r9-?>1xY+1lN!7GC0jgxk(@p5^N-8=${D@HRw6wtm1sLr zhk`oJ_cp!XKHR$+Ja9eLc@8~_m!~}^ZKJ#7?Y+DkmVdjyUkE(}20y%Px+b+E)Mh3le=KMU6_lG;H;KsbdhuA$9LovOO=>$A3V1m4% z4IDh$gO5CtWP&{;eo;LvoE$y<|J}T^N07aOnWj9i6UaLSphZ0c`%pdKei*%%#*96< zb&I_(m4LmTtEasf(=!`=#9PEbmKfO_9#7dPx`!{z)C%KyLr8FQ35@G zk(4|*U97wshqSwom7Tra>V`bj=2pExZpS^FV>1Vy`H_JVx%cr~({FXg$486VjEaJPYHxj<8=8C

=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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 literal 0 KcmV+b0RR6000031 diff --git a/imperative/python/test/integration/mnist_model_with_test_cpu.mge b/imperative/python/test/integration/mnist_model_with_test_cpu.mge new file mode 100644 index 0000000000000000000000000000000000000000..b0e8ad5c98b17584cbbcdf50c395c553ca1f74ef GIT binary patch literal 1568745 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

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 zq4zvT-9J6Hw=F$pP}e*W_y|2pdIY?-jV8TIw@JOUJMKH{=~2Cw)$qMOm;gSWhYq~9 z5KcV6IOe@nk(9kH!yLV4nb5o|=$5?&fS@~)aymK$H6}etS6#er+84aHS`WSPzOg)f zG+(?^evLhz`b#@Yd6B#YU`xEXo&!6sgIzqjB%-{rEonU_-26Q8)`~rv)i6B_c`iAu zN>se2Lm9o8Z9Bc!5~MxWeFQy#w5q)h6MDT5eG)yktA#xTqcy!fx=+0<6Bs@9G0Z)s z@&Z126>dGe4^O*J*R{NMk3c=!sw6!-%pE;mLApC_q)9!9+k-sJOeDRSXY9LD2|2x3 zCqq4BCzU<3TUR>T&n-PaBGf#HCQv=dri{Ht>lVC%joCZ#M^HOpMvFb^TVOpf zUROQ8_guV@UWq&&0?Up ze5^e`W}v)YiCjIOO`W{{b4NW>#PB>n93H)rqO(27_>8;XKDWC``#QbN_e;G6KN3Ch zeX_iE!9P6NPpCXtUKG6q^F+P#C(1ly6lcB0UaUPcT{yjr!e%{egO0prS`a<#OANk6 z+10zPhHkuRi~u`McmuwjSFAj)PGr3-#IU_{JDnB2UoVC6g^ zRF}Q-)Z@Jwc0xVAmOwprmax60dz`(IeStk4Vc|T;2d6z)fJQuM{iwah%M?BSF^jzR z!IC@5S+cy*uL!!FaT&b=Fj75e@CQ94=Apf_sEa*#&P~00Ud+7iFWtSRX|}vv2@gJQ z7{NVm4_G~gY`r~1MTxvzK)XEn8x=kG*$O-q*8sgzKncC=x){3w$Be!5Ftt3CJw`j{ z+Tc5_t8P5@ED1c{e2uzBe^oqoZbdw+16)0x9N4^25~)0YwT(Tu=WabI&e^=@tDrrX z@c_MiKlME8sP;US3?bkaPNhUz_c6PY~MPBA@GN4vc)I)=RQuC+Z?{}H(q zk+?jgF;F~!Er2}l26nrcPK~`-TcJH6PPM(9g(W>oXMw#pHpjf4%K*M~2S2=-^DI4> zBsRNJ1ZX`(i&?y}X^OpA#!o#4(U-gn$Ui&~NEW@Ydc!;4V(GiFmV-PBnlwFa9_~GW znkBsQUQ4~v!PC5#;M#Z-i?@_(cqX#|V3=KUw?+HDR zl7>6YXP7)O#}zziQRO_9GJ!mWAt5`ym>9ei31hwMY-c@mE&;t+B1pO()C9dsR?@qf zn_)a@S9!f7%DOxkLb|*pN~gS70+hW^YEU~Ec0fIa&x5@?f7Cpq%_BX?as@rohRQu3 z6573blKQ(O+Wfi+@4mgpTzoxH7Zg0og^|1{2>88zE)+dkgg8CMu_-<0L0G-!>+!wK z(q}wRCkVZTO1HgIQLsGnb2q&+rBgddlgqtiA?&%I_Q{=m`&`~_(`+hv7J2^c-H;g?7ZL>O&*6lpd3=X}}-j=-?9GkuR za#p<^LG?UB2BbX3K$N_E2SUBg=88O)PZqq(1BN|}mHj&7uW`I&qEo$jgw{NA+FU&V zlz%;j`hq>W<2}6$;6uHad}Y0$0xi98Z6ZAgSP4EWb+kPeAoe^_M7un|grB`ThZ#KR z-D|z1zzn<}!lS&YLa{x;PFTGSyC*xS5*j_8<_%=o}s-E7#cjH<&wS3 zt-igzqJ=o)5xhMlp`$#ao#8xBC8s=KW-UBPk1;(2CTBg}UfMkHnX0^f8gaacC?!2z zyePeI%(}eZr(`{Si03>@+J?RB1K2!>>DIhOd_z4yq2)ZON(DXp!6H14-Kac89C_i()Cta7?~Ks!9wvPis4bA!ETN!7eGF9AJDa(KPmIaED>@jE^B zq$@o<7KOYIbsIc4FMGYzky1VSp)|Ztr4v0x`ZhgRbg#UQUzt25sb0KGs#85JJng-K zU?9EtW>&r6rHQ>q9Sc3-JcTxDJs1qnwmVr2MoPGv7o(uycN3$6cxSt zb1OYPS5rOQ*=@Y2|GvHQvZ}oteX_h+^xiu`ay`9hjJ7;`X6d>@!k4_Soe8}OFylO3 z%ZEMPFx5L}G#x!-UST~M^l`k@zg<1$-ljc6+PJ(PIF&teLm<7ZJIy`dA&Wemd9S_K z3XVGQ3`V^xy@b4UTmCzpOL)A?_K7`DOd-DKluEp^7|FaB0(m_>Od!1v4~RS$T%xkbEn%L6^1BA&gBu6;ew2MRqhQ<=S|7YV(U7971WN6|dh z3SYgdf`PsCjl?|Y;}AUTM$tXkzAU}GFD1U3R=K=^kuE)scrrZ<9mYNAgjPK@ZR$NN zHIuyQ z<0n0Wl8?PrIG;B!VaPnl`=~vFM=m{*ZJj)C&8R&PcZr-41ImKHo(e!#r>#E`uEWVbvl z>^r?qfmb}bjx)VT*q1yO$(KCYL?1i@f`U9@JmH~roB5Lwop4XWRbl;7}C6~dI!BDflR$P@r1kvj-tH<)1th4n9V&W zuZlfU&&)c+FpxdDSO+~JN1Qy>){Q+HIqtkxR02GstMt6Rw_`mjef7Kv9}>QB9N)a2 zcBQ;n`e!>klG{BI^6|Va(z-hTZ)?27;3hp7&LO+LOW8b-`=UE$3r4)()<--BV}iU9 z%ND$ZX(he!A;r8$vS>X6P=Y*U-B7&7>$N?wbC10zX}~>5hY-6sJutn90DV1rnV~w3 zG8nw~oew=)j9gS$-2c4Hsgb-j#7@2Iu<^ZYg_AuI zNTWSFV3|CZO6$BumHS#AXmLMgP6PtdTKiGbF=;x7?sL6u zxZu5ev`#%1pDexD3530)s^h$_FN?e*Z(Y0a;h?;+y1YHML@qu1HetL!*`qzuyxTp# zfDAoX7cD(C*P}REb3;5bP{=(OFu*(=N3%WYeS$rolQBJSaXh@Z=?Xj!#(ccN);hhp zS{}XI#5lduBGEnNf2h5{TChA72r@i{g`m3&moYmD*J?em34lEW;b}ck%ecG(Op86t z(K+ierGjY6{@EJWKOd`A>HD$fbe3Cq>+6z9C*uOki*4R8O z`RzQ2(9gV@dE-2bt(rZjGv&Prh|;_1TE0Dg#}&QtmZd#B;a5D1Mu0u1i{U(sSKvK6 z5D2~AM*2K2V;emO2cEszEP_19V5U4j*A%`#0(rdTm?FKjtR*^V$saw&wLU!q@sT}^ z+0Z@7z?VIWd+)ojo#ecx8d^N;aoxPfOzS*KG(0?Z%4$8!01Um}=_S3(o29ySHFReUhxu-olJ;S__!9zWnt;;+gB9J|gZSOts{IWemT(Z3hmyo@+7t*{w&fq<9 zy5GCfEiyckYA`zXj03$M5njDoikLl?1PDAhqiQ`X%L%)rG5@`B?9jbynLR!AVl_R? zsHr@2n>9WC6dAq4(d#{d6zDty6B@lq!~MLemK?lI)?qrdo@_l3tVuj2Wk|iK59~eH znR7hl-U+<5y(zp9+nGIHgor(_iUmBOa)CUPJ77GeDl0u)7xTOun>9Q` zQII0rIHDUUqvWN5tAAoV~y^e`?0&=wGcd~N+iAJ ze7ZWLI4r!XSkS$$eHJ=ELm$0#K}$U#xlO&vDs4SmP&K_|sisz1Gy`{cc~ zl`%bdt`EKApUgbh`hvTlF)O@If{s1;wV%CFume3r;eb82u9-bO1HC*43?Mz{LWsRK zzKFa@h336BdL=x|85BLXzF$2XmY}@BL*~3{Z5_Q4_W-_Z69m43gPpw>iS4|KDM-51 z&tN=;a*@0X7OA{mY1}+mB`&?vpPD_V@+!N@JLf%$2;=sE!=rKFd6ePXBVgWtnuoykF-!eTK7^OVb z>fSw_Z3Dc4&$>Ou<(0j~6)yPB z-Qc_t8r3~UI;1>0j7_}nCd0jq7%055lZZQ0)O0Oq#o9Vr{=#D+1*ik*ss+YUk9vi)xHwnIz4+FmPcbPkH!lyh&%~3tl-EzG#8g9Kn zdn>(uzYRUt3e-EG;)^`Y&Z9g$o%}rG?@PT$flqXY#yy19d%zSdG2>_!d1U08>3`Phvb=3G_U-L9V>Q zn2NiM$rU`E5stj#;le#s{RKNMd^0`jeX2de;JCLCa_BtD+cLcgWA40v!k)Z@T&X>F z;FCRncS}7g^M}1=^Vh_EtobkIl8acaFsO7x%3y8fzbCf-ag|54qv4A{!?l?T3 zSeCqT;-0;KeuKRpY7D)j8qB;U3gx`mqPaYwAh|nxdmB4)*HAo0FZI1~3y8fyIP*Lf z@f@mF#uO_>&9~!+O;B~yQ5l6klOOHG!)doGXU+uhtRPH=4 z9X~v%(E2>1S))9u#iBf$qQ1L3*7dv6xQIR0I1jyOUAnv=P#3+o&bhlYuP?phwLv_9 zAq;P1UR=&!s)9h^LQ-W0s(-2%KGif=qnfyq6n;-9=XAA~%t>jXWML=`>}hQ7VM z@IJh^i2*#>9VR`T77;zr7i7I%HCes-HJiOi-hDk&oToj3;sL#3Z=1ck1TDQc$zr+f zfRjBrPFlSsH@&e@UAbw$0WZVI~_-wr)dn!Grf($)y zsCF)-)KDg z%ac4qwx>N_2b{gZa8^Afgqyod{*66}U6H+z(C)lZXY0Hv`IJ2MRaU)=4GcYArg^-X z{)xSj$BsOrxWT)6xPv@d;H$m5WeUBV%p1H+^v1a&l7PHpvGTp^PmH{lhQ_?K7mB^w zzXQJTPMJKdcCNiy96&soO{hH}wu?RB;hsG_9CABL6c)Th+m*c*&^){izKy-4UM)S; z;mtfG(i1y0E!I4u>lM9XoFBc|BBQ)Eg)Ti+zdOCe0L?w%@l8F~GJ!po@f*FB7LL4a z$=^LiubsV_kUPB>Whp&INMXGmJ~=&&4X3^F6HC3zJ#IY0wClXkfuucAbo0Gj{Q|xH z%TYX~loq`>C}q9NhhsbtYIQw~3&uP%$V@ylO4~bJ8A?5!H`6>*LSa2jV0An$bLu?V z9}T@qX@xxoc00XMZp%Ck?cF;VXdOJosJ1<&2wXk3$00qfJCeN-DgV6eOp3iHSWrC{ zgvdQHr+mGh&~`g~HrKtT1ev_tffBuG>S;W(&YZk3@fWgtC54HP{~RlvNaf*(EP4cEL?d9Xd&fq^_76AQie&e=OBQw=;v zQr)^(b;Z5QowU3*Rh&Fs-i$q`Jn*_VpPoJadz?FtqL95DVf#Gek%T=URDM0VI)S~_ zbUVClUSqupM^rtG41zpyy-~cyQ;0o=&xyRLw{pE9-C8|D!wo%}h?hK_*~vW?Y^J_5FxVh25`>9jrn#6-P+CRV)*V#&Oy3h}&{^}#(h zaSS~GJ;S`yT?M?^#sR(NViP?;@d7^1_kO(?A(=fwGakKwo=m-e;{Uu(IVe36Lzq0o zWh6Zr2tPf#wQ0Q;Dz80ZAGy5(`Vl)gbacJ$yt6#lWTU+_w4*(PVc5J4S6#f`WF)=E z4br{QN>4p3>cKtK>YBN#%)mSV29&+dHUmBD8}vL{1i3s2qK`b}?vOnkyI4IC?t{I~ z*cd(K9#y?CI%B=!0Oq~nZqYnIS!BFx(b~NG+^4+_u^c=vOtCzwkPN&DutvSV`A)rM z6%)Pn{64*u?M=P9p{>2x*Vnu@d(6BXbRWCSl7KyE3eY?`Ec-k?(x^R==_b6h6b?SO zzBfGue=0q@Q<*(TJQ6(qNAf+W+$25W$mY9X-QPWOQ!Bkp(?dN&7dAWrM{7OW_fx(0 zPUk#rf6qJ>lY6{e+af)ki5NS>f@HnpdR4kD_-Q=->@_{yUWL7(PkB7F=2^W|Jik3C zeEU3}$JD)@JHEVDJ63=};84mG`-ZqB?Q3O77W`xHEmD_Xo-xJ^Ck z7Z<(zBZj@JC?CD^^tZfaufx1}E9E@L5)?g?%-1@mWlOstn#nwE`NTQ|w(`3ox1BwH zcuc%>teHE#S%W>T{B1m)Ya_hR>%lw^sSQ0)E5SWO=a9UG1%*8i%3!=Jupzz1z4knq z-)}u(ZI`_us~f%RFdn^qe~i3vKtDaT$>BW?G(0{2G}S$K3=6!nooYK4`g}d=x;MQM ziVMB+>9f7@6fe6q#f`l02G~63X+%9;PYOMm1_`~FKH9wsdJ8`EjB34#1fjf7g`GW6 zUWvPza|pcvoPj*d3o1Q!*>62ZK1MwlnL)jAGm^a^i7LIYu*p2TUl6?^5|zDw*Sx%z zA!EJm0_i+bp&z{pI0n6sr-{7d5r;ifqgB013P3$>w~@W`ex19ra;rTpb(p=Q(W1N* zFBd(ZMhUzw>w3LAbiF;Z=mWi3IfgxIh1fjAp7y-pIqW?XycfLQ_mRB|PuaVJ%a6Tb zSrxn~?TWnwPeHxFN7cQMwu?Nl1ckj+$PK==#Lhhn@=84;@cO)r*;zd>g_68zS}xEQ@^UW&X?iLJfiVUasWhaEd5&VW5{Av-*jF*7|@zpK2uvqU}OArd`4 zT#!4kLZZ9<42L}|OPIW5!RI@=i^#kv5z9UQEzvxR_XIul0Y1Gn&(XcwD|x%lZ@4^g z)q=gI3Szw&W?nmZQH{NSUrRk@q>8=yGs!%2=@GpOua-RPt};EXprt%wA6YykRJuFl zHl{rS%$_|&lKi|zT){nn0q?wCY6(7o#T&Zd{?Wa!hUq*IYEZnc2x7f&-p#zy{i8i5 zuNJ-6;9xv+-+#Td@TEM%0muWhN3)LE)G3FnHIf@1cN;LGNZk* z9y~nK&Z<24fjGR7kf=Np;mW+qj4!=x2n;@FeVV%#w*EXB9o@Uu(4jh@S3x~RpmDu& zisrq;|5m+uGb?o>IM`ilecB(zNmbtv)u#Y@s7IZwovf@0|2LQbU`KY^yd@Q~B zlwQ4A<5WC=u8uoHocz1@e*e4Z(Sf{@AgSouY zMlU@FSTVgdE9twb5^y~+Edad(P^-LP$BMnTv4=g176Cm1Z6>|Icg?*@MNK_TX%xLy z&0;-=r>4DhB}u&o1QcAr7QTV*>pjy3OSfIOhKgYZtJm5WMdZInA!Qo3 zWr{h1s2{x?KH)rfLB+i6!i>94KexLFT%bJT@}In_>nlAd`0BiB9x=T&JSaRJUnsoL z*9yIg9B92rbPv6tOifsxpK=JCCJR>Qj`{QSIXk+!`4qhr0y3Anvk zkpsP#2vWV|7@obLE04W!TUI^WOQ}5VLn}Pz_p7{^quo3}MhZRT#A&@{*NQwOs909!>9*aFm zs|mf!=d(Rh0w%olB!@kNa2q}7?6EshBaXd^Q@cF}G~>O!|02Ce2UENesl~f?u(Z76 zgB`r9<~TjH^~b$DIx0PzNld+-bw|DJIN7`&g@HVV(bK%8U>rRu5eB_lM;$#%J{`Rl zHMYFZgx@_;dp$i@k!L;6DS^GfcUQeYjha1+YbU(d^CP~dt2w>ovQfQ@{60LdQ#U=x zOn^MC&;Y#+7mT}}d3?PV9yPpQM<=~dPog{b$nrUDjD@{De;PfJa}~VViTJ!{`7%8q z9W=dtnZvwX=)AqP>%6_}!lpgd*_J$uI@3IFXu3SYntHwdcpbf*8F)P(ft0+tq};s< zabP_Y7DPN{NKL)p@0z_b2MxSAfFeHHJe@tmZiqW&7j8TrMee&!+GV^O@;yBW0h7JN zL*l6~sI)*m6C} zWO_SBH^#hJdyhRA_vyNftj{|lWNy7Nyh}WgkrX_BBxgLW1E0OAqjbHK00KVMa$!9V z4X`?+cD%gIu$j8(A)7rnLsq+TF9JOTIIX<~0H?ifauz)%uAx2bg}FS$BBeYS$n85m zKa;t_oUlCB&?r4zbFRFH@~XSt!5=*c9qzlP#=gA@a^Jg?L{+`mP&mDYWFr~qJKOLRJA->eil9SOvgP-T!=j-WIw$z z;2ylqc!@na?v*`#V%fc*emT9r4wXHlXNSB%i@rSfVzxco@nyYGdceH#^q@Rn@hQFO z=}tZ4HQzjH%N9L}b)`M}8<9QVL8v`}t^qw3hzmXbho3#&?IgWZXOFr|ktx07q#nHk zAV|I7fa1K_bX>jN|Mt9RIU+pZ?`FNYyWl*J^sqh6dk#JoX~jKKvSz%efkM8qfEYcl z`;omwRFXZd#LK;GKlVHKOl3TBe@{FSO~gGT3L(2b8xFk-v`#($uunaLYO_1^O|rZk z_N+ap_Ov{l)&;%B`anJF^B%n}UaPyAiVeObh)=z&uRXm#)#}$re5Bv?4vl4b?o| z?NB_pJTko~M`}G0Dds%w$(g*JRtr6MTX?$t|vN=5#1|7Zba~Qp`F?c)%2p_#i_t8Bd zOHMotK5Nu0_2Xorb(6w-i0P7QMaPj=Q|NUnsq6{n|N#m>WC~mN7gKv&y{zgj2o4 zLmRwzASu07d?3Bx5Vt%xz9~KF*d0BmX2CslkB~ZUt|~n(9BsU1XMw%7HIh8E6&Sr` zBXB%XDTclL(bv06=B2soC(1myB%Qk-aJIa~l$blv-K#ycy2rc0be+74g6zEJo1{IU zzm2?iFJZl7PKP~@4DviZGb+79(l@<9YRkOYh}gSszVW;>EFrxlIoLccE|k3!D<{3t zM(@4Oz$U%F_cT2ivCh04Cg(hc#YjEg#1lO*x$CU+Fx8FIXEA_~1A8*V+DxeYzJcegxi z7stI?JuAJ7csD%?#5%ijr9{5@DJng^o(VqF55Bx*tk}Fl{YAaO;|4yr_{6(J_XfR^ zLEF5EL)bfsPU}1*3{^e%j3+!&r*6B1rt&;oJT$$0hbldq>=!*E{2sgye73yX1XMi= zuFgFR^>Vy*EQdX{=?T4fryad=nU}oi0nj|J3Z6V;l?^@rY6!ivEyq2b>zuoNuf{vm z3#L7q86Ug-<{Z62qXoUKQo+5Per>&z3PQbXTMaz-5P7`TD^k6Mn#(Y%-< zVm!U}Bj!8Tv#vXCPc^+qHpjcq1pqz%B-OlCCIq^^5Q#jH6jnU%1NFS&ld!xCDzH6R zIhH#?9zZ>k+FZQdysEr2;Z{6yXD+?9ZXi8(o*lhvJd3@+b=AG9&hI?~aN z-;lgVq9VP&WSYBg@t?huUOhZWQ^7ps2-CeI@IJk|-_tykQRTc6BG0>)VT8R>V!Rq z?*qMf6l6S~2TZ(69^}1WzzV*GiZQ+W$%DO}&LO^W-?_c`-)X(O^Ig4_%9cD;(zZR= z-C4bE-buU-wmG?h$e27I2{ApZ8OA&mM3BJ5T+10&xcX++} z#e}^F^~CJMb`KVUt_wllpY{0%*U(I!1*sOh{F%HzGFKMK4KRe8J(XBRyPr<%Q)C7?aGcmllutcJYPE*-r%CjmVM zV8%SAqcz@XO2Bbdm%l;g3+|#`xtr|V-b7H-Z*<-!m7j(S{>Ylt0 zMYOxneu3!iVMB7;DSAD zfRw%PQa`-;a&^6HL5w?{XCS?`0+u?LVWT~^m4lGyXgQhXXw$se(G=sV+Uu z8vQ+B#)3WkD@!|e`ZPW8Rwg`}m3KT=t z%Ot(!OvSy>jj}wc<{CW}Gt;~?`cFN0;EO#~k3>CMA2+c>rTB*57Ruh z%4a=P=m))?2i?4aG;O`D`{TS802V!Kr|mooX%{`vjV8S?e?UDftc5+T1k=1K7>T{Q z+R#008l63!B@Mi~Y#+RZG0;8uxMe)?F?78rf|ESM(Y8I5m*Bln-jKW(>~X#0wHrJt z6iPhhj2yh07DYYM)w{b+<^?_N`>eZ*M5n!j2&_7_c~Lx49MV1R0Ovig0?EBD*C)Fv zmqxu7W);0k#8SOhN4UJIL}NXebfUcrFWa-h3k=Ult;ne;r6*^oTL1gpH#Hvm0`kGs3jLW#TZ%OJa)@!mY-`pmuJnHsz{ z8X&!hiab36ug*M3QS&`KKg&D|H;X-c;zGSAR+~K(Q~*2_k0w6aHrl;1Fw(vE5k0+3 z{}{Z|B2GOi9x6S{@IF23UE@4V83(-(aMnCS^shTZ1o=GkyLUbB^$9&O=C-_%IF!6q zHR8NG3kW-Q4F0{gj3hknUvj)8Nn5+9yV$(|!iGH)@Z3E8BKExDSP#87pAo*~!T&sL zotnG{^c+2C%>zCSDRt{Vcp}b*;Sv%z^LD+mo0&asDMvl;I~F}aH(@;r!~Q#pdMZ59o|ro}NR+$) z%)hX_;I~U+?YH@P$0Dp36A_7^Xds z{dzs%!qz>rn;<>oZZkbg$X>hQTf@9hJC!|W9G|?n_1wEKu+qF709n0>pgX-!VKF^` z2RA(zG;})KgT6f?1Cl+xZ4SMM&M3X|60AG!PEI|kOTj!Y4u-waOv=0+fuOyJ*3mtM zr!~FiN=ZGhp6)yseH=WgzmYtTMs_^4u#r7{U~Ik8HE=yi9g;oDV${@fJPPh`l`=gHFAtGO4`&o+mp- z)-1j0dyqZBk6gRe^2EDkg)2PG#z?)`gXp}Nd5OJ1NP)fE8fU#w)m%Mxrkgz_u1LJp zK4HCi(09F-?#w*&^bNh|^eVhj&xE~-Dkwb7<~_Yb!-qUS4)?sby7@fc0EfLR zl`g%@OT0Xhe}L}NU4T_(F7M{K>j%BDO_rI5YOP3^sa zqrE#0K$ktSm}5Qib%VUym>Rrdm`l5Q1R6cF2+X{(5K6ok zJ$k&k0rS1z@YOuuo{2nPV8Og+!m7MC<9ogEK%Kq+^JKhQlP*06;$%FQNYp(_ZQ{JQ z!;QVwfjGUV=qA1}tJ}QZB@;Yxh=@IV)Yd$?S@pbs%G5mO$O*l1-KxFOQKCH={@c7< z`n5eFc%Z$8!MwajET26d=m@=#H@3Vt#a+BeVu`)ty`Mcq4p6)csSUh;-`Tykb*MZ- zq1U|&(!@N%YXrWvSH8MQ1%_QL4T6fUi1i;G#S)YG*xMv^+eUvZFjc4yHR9d-gmG4353eKdC(> z@4UN15$-$L=rp}f+bujNa^Jf1JFq=*p+UV?v~4^!0ZKj%fpoh9QwF^+>@+<&oEE+K zYM#7)Y~Q>-)iXTSyWhH6YcsrNebqe`Nya=MsDnIHorODX?}WR^dKbJ(PWL?J7&p5l z*C{=V98NvFc22!G7YuF*Vi4x&4i@q;|FnoGTSw}!nF80kGj4WhmB z8lSxlQn);CIxsxyk%hf|4#B*JS%f^MB(yxECP}?OpA)`5Rs1`bN2t41`zk$!i-Np^ zvRJ$Wl~g?6ga*B9+|0ZYLux$-?W4U&jX^w?8I8PCRMk8mgIzgZsa-ukOG!L_U3EGi zY(YGqOT)ZExHi4#8y&slI(a++D;u5`KO`yHx*_k~ZbBI0IF$+EFM%}$L68b#+GtRs$fPB4mEjqnwJa9d8MR&Uf zm&QHUp3^<8Vog0EOuRcZIuAUnmy^6=JVrf*W&piU)St986%`mDVR0%^UTO#Hmo z3zWRF?zy~?G2uK37^^*Q%H28)95}s8&JDf5?*%=PX}dh~lY+b{mzTYt+xWfZ%v?O= za`%bQ;WT*3r)T4ii$j9x{bWvdJ#R>K9f91`xQJt z6i+=NQ*XUMaZ|fJ%;mf^B<#H!JHb7x*5o=s@Yg)@Zepme-#AdI}Y!Kyup zym&pW%#S^-j2k_e?6*3`UjQanA|#VS0XK!Lp?=OsOv2phc>y{^2~ z%3{4RB8EF9f4DrrV@Evb)LFfoID@>N7KOZTROYNvXX5msBb-U z%I&+26=XfJQm#92#htw@t9HH1TZlc~gN!>$B*Z+uND@1nNddlI`wYIsY`Z(ziQYWB zkGHudgtRlAS$&-9o)7nYDT@tWV5>`qpdvOaN0azU(~!)7NNb^9Fn~_ z94@^Xi3h$V1)sb@=xx1cb%?z<4urh?#|XXOw75GAbq77%eULrt$1puOr`ElBgk!y) zIyAi?lpwvb`mjA7{;)lB>T|t9uG>6jQC+0G^~ z;K{oPVqHDwJomgC>{C5z1BpHAJxM)+=+C^~nisu@Vuic`xuLu`h_5|@OYS_tl{vf+ zm`gotM>xFl{xCctdKEn;L6<%5U9CODX%Ib1ie$Yyq1`-~#B)5>6YacYd5=6TKBGLd zbA-M5Ah0~@NY%T&|2#c^A0jvYpuJQZ-u?jsD!-YxDLH;MRGl~ZD738qMyCU zdvUz)B1*lXNlv{b?619AEk-+F0}H%F)K$HhSB5<@O5Hq4=M%ka5V}3PKHxkaOhi0& zpkBMTy0pBEH=?|IA{V`Kp_x7Beu_QU^Nzgdqv$*$?NPj(uGc(@haWtbMI=0Vao{}M zsVBRV22r9p62o z64SippO8Hst!X@4K%qT5VYfY@oEE%PD9t>{w{bjzspdW7`trTYE^WMtXBa)F#r2>Owo3C{WLuob5lJ}`R%-CuZ=y0ZH&A$tZ%*1e963ZyVW@z<0d_S zWJSI0ue`gh!UjDNSNptSjvc-CzEHh>(e6B|M=m>=27bMK@_D`VD=WQPLKi(x_YXdw zEigPu4J19cIpsVP&K|v>fFeEIH<7)2>!3X`Pl`P&c*ne4@H9Oaj3+&XFb6%lEeJlm zyn#Gj6$ZT%(Ja1E(~CSF@v=L{M`gSR z6nH%6O830}UK2ggb-q0dy|TQ*^vb*!yFI;<0LeV?2^>9muX(*{2FbhLLP|Y&EnPkJ zapSy03N=0Vb>Tf6xWPTc5^_D9Svfr`M>DsKnQgm9905FK?pVFf z-xfXn63e_!hSS~iCjDlYnZ)Bz??lE1tq<6XJR}<5*fUC`W8A)&L2C_ z_nf^3?1{bD*|_hrfH%Dtcw0MKSE4<|ZrQt}Q5QXm z^98$tZjU{EV3<9~6`(w!*hahIBALBeo1{IJnrJ=lweq~fb1l8%B>=p@JQ+Q$vDLk= zZihU&2fn<8lXyLXwimrb!w)@+>ySMc@>RX+EDSv^8pJ#l+^xJ-9ICw+z8F0;Tthwo zegQq$2+urp@ozi>?=(GGo)f*gMjSnbfZIGke-^#HigCT+9hE#=*805x!~?xf8#}$xU=+Ni+N-^%{bRjrIMcmK@)o>XA&opN z_|`lS%p|@!S3A7-$RE6HYpT6y2PVE>9m2fm4r9C3iUhlnb!I&$tO7iaW~V%OgC4zK zdGM}jIKQA#b-UEvn4&GV0%6Ic~3nj7EL|>F9SVy`{z6>0?9o=>;gPs z$e6tX?isz=1jM}5w4gj#FD<={N?W~?a9+J&p?1A0%W6C!az8!E?QT8u{3yI+-GMqf z3{X8hVG=!M2hKd`F26h{wqZM+!G*nEpxZkk|3ke&LVLZ2`G-9RIb^z$cqF{6iyl4g z)uX+N6qP(b2^PI3G4H$%pW!@MOOQS28!SD371O*yADKO4XGXjp!IwKN`hvaM56QX= z&#pYM0&+a#HeWq-!cx7M*b2Q8H_$x%6N)?%{5QQIWi&knoG3kZAM!i4j&wbI z_OZL7X@filEcv~#`rA858-%?pa<04$xCXqcp?W-;Uq-z$TlBmVj%YpLk}FV^};b*Y&;Q?e4sgy=c7d>J~e!asE8HpB24RCf~e#ss_AiXcWDh zk-xnzy2w3dtB<|6T);fz83Me$37kDjzNfr)T=Be<<{rKU`64|a@9jJwvMW6_`is3_ zv$H!sXEwc2P!Tc2GUn8Lm6Sd7M4(v8laW;E+8yp;5g2Ex)|~*oHlebX2{CDt*0= zI~_gBlY%`9rO7-~_6)wdPG3Eq))>60b=1AH53jr=mIgeL^EA3Q5uUwflSDe&Jj6YI z)#E(LjTAjj_`E#}>~1|hvv0kX#{j)o?I}G|x->mtjjTMEpLIQU;5t0$X41U+*pj_Q zL$N(Be=j{BMClbk)h0*_lhon3N1ZF&H$>%&B7Erxq z5OF;L(~-UB0&=`-k0iat6281v{)jz(JxrT=?lG!UoX5_LV`Pp zG$Xy|R(8GilcBwZ+*rL9kp;ck0%W~L%9%Ux_9s1`2ba8BqQ*Ue*qXac6M?)X;DJ4q zTmQT=6_vgJ1+YDAKXg5zTNJvAimN?y0f#)`7^l0<)lI!p=$$=JVx&D2rXf8P`@+04 z+@`v}G?_dC9-q8QsUN+9*#feQaQaL zOmMxU=-|CF%67c7OEWuvAMOX|9aRlz*8WWziSslmL|JyJd3YO*~U4lp^U>A<~n zDf&G&8;Crk`VYRcb+SG1%H_On)vP?32?sr2yve)8iLSinl9)V*F{->&{j5D*N{GDH z`u{w}ezCg?C~rEAqA*rh`0jD8#&Yk?p-b6hpm&ZeF{E(G9-x;Z7y}>+;4G2Dm-S39~%nzWF_Z zHcmV}9iF|iTBST`pw&Gfj2%6Zt8_hx_~1M(X~Mg+fQLQN+e$qpmeRexMn60~;E26B z7(6{~1%^GCPOQCqHz&L8p)EZ*b$>lbmkBy{#FIR{XO2ByUy;3A?oB<;HY`0BepS3A z($TumAFMolFUPzS4uo&&{RF?(X_o|-Sj&jkA*#3FrmFc z2@1WXGMl}17zI5BY0o-Ars_M2G?To#75qFo834WE+*!Qb;blFjgh4$tFZ`piP%^u|^t8N= zZaX}FelNWRXa&7!(1<)NQmZ=>MnydZakjk2v!}gJ;7_}wAXL3WpqRaQ+;KfKw7Wg3 zK`_03y2?C$C4s$-^sBwzKxw_-bDX__5-h!Ud3QZ(kUG3b-kQA*nS{Ksthl@hK@+`a zD26@%IE}rlqSrg62N6Bne26?l3Q;}K@|rwru^c_@*fPCm;Cj6*Hi|tvt`E9XJ3G9f z%W*u5o&vo}anilqSj)Vpj+MRKVivx%MXM>g=Rbf`F6aAN-8}8n}$7D*l4}R>Y_YsfO0(K<4U`tTl_mnOs+jL{lGonMo7It zvV=U221>n%P#L|}f=#_RlVCfiil{x61{S@0q)okbMUFgmyA-|Je*!#$jWs>7afv%YRarfVnxVZSVxv8g zC;PmHVtc)2^BlVPK8HOYpOC%EFbF*v+5x>x+Jn8%X*j)rAqG8g2ll(esq(vddm|v4=h5fIz)1 zPH()NW{SLZSqwdyeC)hXmvg%s?v1^)g6X|7#Nj-d(T=?xNL)LWFdw}6emK2zcda}N z2&=tPikCbzk0m`9*M2=aqEr#`)Vx|uvXdWgN2 z0UtdAJ$$^i0@Ph(|KdE{a@#z;-F3aY42?S`W70fV!gxJq z7EV2x6Yo49=D?7cPW1+hd6rDXx3o<-ilng!b<3hc%CEC14Ua~y}DR8|%fStWs zNW8r8g5|s?4v@WfnPa_(1+hJ(pbWgrfKfei{i3|_5vjV!aRt3aE!jPIu}nSVf}}fT z1CG3W&<;H@)B8Lj4~RVUM&>*@FVnp(zI?q@A6z^Fglj$G$%(wuJTp8gUnD%d?H9e{ z=x{vFw(C4!ppw1iUog9XiHbZkU6DQEA_u*;-i|ymMd>{MXXCt*Ev7uz6hk{`uy;LW znTtGdlv2HO2ot^Es^+{gZMeEI%)q=-_dPukXdAvOXbe5ZNCUhge-1pKV70u}E3v)b z5+uCBYC}8a{q8xieWJZ`TDv@e!LL0C@9jM6x(+>GQjWd0OIy7mR5v}2jGsFIh;lv7 zX$QUaSM0ri)wnz(FQ~m&(7?PDst>)TjSxM*F9tnJZveeJ-j%(} z){MPJr?@+0RLQ+Wi%q?;FiySerkFfa)TKRD#IU^+o&&ul^Kw0^1&}>mxtYD9aBDmm zIJ7*Js~o(1G!ng#Ua37+WOqFaXJS2W)*!t6{Vct`rV70qz$!iK-9SCl#dEz7zVp4# zk%GP5fIdA2P|7@eRJ%POBaXeOa^<@zt+c(@VnDnV9N4>c#SXo~MwmUluHrm}h@QQj z492`z+bTV8N@q{T0cFsLF>ILp2R#fzJI-IqMSX$SMj{$I5@n+ z7H7R8Fo`=^QrtXkpV_?qS<-)vLr58O`VmZA+giAdqMm4>&HYB~V!zw)E zN)0?qsW3gu$rZh)-4VTX0X)6>A7Z_}7dbtnhyOeu7V$hIk?Xvpg>JnDO5(d^b45Id zMTERM0fRh|{o1>sEY7?XBrv^2Q(?Ue^q4$lB;2~$!JWNXZic+Fu_nDdMjJg+x4aFKOqB7CyZ9B^Et{wEjAI?ykLo zSIoT?Ha0yrTf)5U9OFGO7?3?r&a6Cqxj8+Wi+4S+206UUz^pvdt82Zg=(xQi?0!8i z-h;h%RYAR)Lm54iC2GCpwHZCnx|zE?&Mdtz8;`ue z6`(s(;1s+N_NP4PchI~%>xMl3VFJ9eq&2%tfqpxL@H)K=Mqavabbh_h-Y-41Y+1W! z_ftKEjr_de>PEe#t++jDr7t`GP)s{8SxUT#ou52JO9{Tuoi{z4vobyM-Oszb#lXG5 zimtuRXC1wb49UHG;uAfCV5Yt0@jpEhlodVv7o5G-62raDo_0F|J(s=ksW-fe5lg)H zE9g8XhTyyawG2Hhof^H32%o)yG=x3z4I90mWQIM0$1uHO0kS;^uIxMoQV~1>-(Wor z`3pVuxJJD1LPtG3_?XJOaHwp@h6d3%fmmk%c>uz(~7tEmXYN z5Dq;)!lS%9Ndi6eBP=}pp$|HW8@s$xTb4a4$+Xo} z!K%ID*QCAb0hB$yaS*-PdHcPvR1iINfkr(n!biPna85lD0Q@{5(-J*F-bX#e6s5fl z1Qb0iWotc#v9UbjNh7_v`D?wZ=0Uwt(S*IdiJ!bB7+*ctTPeLg;f=gN77RQ+B0xSh zpE12qcM82JzPeuzC; zg^0b74KloB{kA=ga6&!EAvrxXiUU5@m_$4V?t{EwtOq>n{+zvvV2?eC97nzNj$pk@ z$soNSUqijlSnIsmNC3X5`UpMxJ5@dIV_v=aXm34|hr_%spWM9A;?2F^W!Jo@%G*8v z0sua^@0C5BAOF0k!hk)zH+nq}RSG?!NHjgpftNgK0(`x!<)XY#->tli$eg{T&dt3r z-6p*rAS^wZc<#JsMgYB}RFXZ~h26bmS4Q) zQw+Sd=W0E6C?P%PNy@#PP-VOraOXUyJb=7JqBy%iw{JW{;>|soeP%uC#yh=?`k_2az4krKk6}GE z`Bc4bZK*wkCA2(wqH?@BZ>_z=u|d0Shm1WID)T%-k?TA!E4w{3pDDd(s5d?8S$;hyS&hARVpzBV7acu-fv~;T+bTVoL`1z9 z!Dl>*0lvF(?pr^Wi9EiMF*Lk~kHj})xM6J9&@;W`| z(F499d_Fxr=i0qr#;-i@w+TH{9F#j8D;B#A;blEz2YWpS`CC10KYhK!N_9O=7M8r6 zz$U$HEge0>SuDM-5BW?((k&Tl-3p5i=1h0eV3$iKVg_FugfJ6^hxL$EyoxuLv2 zpQXFf<%m1H=A}ES-TgdkQM|k27(+dA3s$|j5=uNYu>(B*)R8@p1p__h+mgMtg)O|i zC+j@2mY2Ph|JA$%6LGqu>oPsZU|v1Hg9SXYC!xJXec-xyi>f_|{?xs@9Z$Xf2#7pn zSui~sxnQ~`cuKu#Z3ev?!s$HC1!241xad5K5I#J?@+iH@BvCx(K%%^hP=dRAEbYCu z#-+U^rQf~7)^t3kq_{nUi$XnHMJK%#@Dx3grV%`Hf0etGT46nzU$s5K#)LfUjnlnV zGLb#ZYH>Z0m)JaxiC8_CR}s93NOZj%sO7z3_kg{3fg3$Il)<}xLLNM+-)6m`(ciqP z1E4$~4gfvO=rO#sHf+6FJUl%(me#!D?~%MafucNoVy3;FfCjtm{#`s?!S=jx7iv7g z&E37h8iKu*2B$p6U4*?wDwsW1?RLDRsRTVvwxc_G)eAjP=(oIrA{sq!L$JK}*CM^L zZK}OZG0QwG^$0xS#wtB-!iqg=KqNh>&OSXp@1Z>m@vS?2Xgs~8m`%JQI{7?%Kl?n@ zM9Dn+x@NqYdgZ+Ck$*jVMteOS()K(kD6%{W$E~~HUMD=y8tA+cC2hU7cZahCMUi;CsU%6f zY!6tylJl{=S!H>>NwfgG?hBl~t@1iOfOKWOw1?QdsLX@BjXR{hr-3lN1W}1RU3>t& zIX|8~E66)N(uxzjl70caSS&X@k}J49a6?nQSK7QX;XvKQCClo7+*n ztCht&PhKp&<-*oHrKZEYF6o=R!$$kOPht}!J&V;X}z z;$>{RU_7e5H$LUPt-N!*?GJxF@3ojcKD}W*y}t>)X2Fy^+0E=c3kHlkF^`44!~-uq zJmcX!&!2=kPpgl;OI>ZfftAF%DBgxW@k^Gv6$%eMLm_Xy_$&`S197-K_`{IA75R}o zsiR9hOeMBGlOL$Of1wmTf2`d+FVwTVyxz&YPqFs8*V+j^IRcTrz5nvO59pmd#3PM6 zVst&dB#Ov93OX^pUK2dMg;T&hI)HP$?&iL{j+B8s7nJ!t0D^fvU}bYWC78ZE8QU7Y zkZ@+biGU_OP2~%{F24i4y;@d1zaDx#@Ns~=ACX5r>REriXZ4;ugS;HQPTGw;_M&*b zSBbB@gK@yU+4yQb!@?=N_myHhIkHwgB^`OYTKK`dTP*p!vA_nsD`1X2?_lFRT&dx` zrIbLuP9;=5nb{S+9RU|T(5c}(>Ruf@T34OD@ZpQR6qK+$f|{T_YYn2j6tZGHyK+ap z8!~6R?QbN#8a}BzmI~9mxHkv9vtw?&@i?(PXGJtT(=^RI5%O?ia`~;E7Qfjy3SF(@c^~DTH4IK8f8>GFZf(N zBmV=v6sU1MC}s^ko2~%83i`Ocg_v4Boedv7QUja34*5SjX}||P!eWiQ!!NMBOQ`_8 z?fRj;B{&_uuKm4_)wxf;$bB{{AL9`ALR@_Ih6W5s{7Zx85SYE?eRss(Iuokr2n)$27wDbiS?Vk zbh|CR>%&ex!p|r^fEqEsr@pK%rs1j_QIu zJ;>udY{pSN<(#QKs?Zm`L4FK9#We@KGJQ9_^Hgd*mF1bcqwh{VdhHgy=`8oW-Go{@ z^DV=?uGT6%h~Skyw}PX+(}zjD+rS__y=pVOB}sg{@+zM_>1;8*j6&r*Y8-F9hAERh zApe#-3)>7mw-l(or5kp=Bj?vU#FM&96u^bNO+A)H?t}>)Ndy-Z?4yPqObhwQ@^~EkcvnY8z>H&DYw~39sTBVLX z)_yCzP6L@d)s0uZfxQX6O4akcs?0aMXx|<^DIA7930HiTf$Nju4eSe+xik_FdEzp`fSL({Vi4?p&ERIw?cOC^iL!8R8^^3K{kti?^e81H_)J>8l-Ojiv&$lR+uw&#Yu^ANT@JcXG%(Cg*7 zE~SdSQ7mP>u)tltdF&^5i+t5A`vqWI$EO9o z=tYdZF`!etGa;@#C96=pyPFEVn=GfP~jOk51+=7t3W#)N1 z0cH_B$I$sa8kc9he*9@XQDr?no&PDlUX2I5Nk1Swig5ir?oll~JIY$SCYL+C@YvTo z7+|G5r%oZgn=|Y@puVa+C~>koJbz}rc5XF2kBWmmiCbAcYF&Uki?D*d9e&rm`VXJI zo({ddIOnN7gjQNS`&+s_jQ_Abt1cBhn2ZX&i1yyS9>W~HHkX4vp|FEJ_h^beZ_l4R z4fSR`3X+Mu-C^TAun%56$_v-Kn#9(qn72`gDms!Ck0fFc|^28jxw{QnN z=|nfZjeP>v_j((lJ3{>Adej{TB?A((4vGr z@EV9b6pDbo4kWZa^^xT}l*y63>#Y<$sI@gbuY)MPxSv!!{GX^j@Y-=bKeM_$FoLT* z2E+tB4Pp^JCtJNcNe#Na#~;kRhi_B8XJZdN0&wI#0;npz3*TcrizW@eF5y+Y9A~;c z+v3Q*`WB@;C}3ed3#R8iB^E@zmZ*?Cge|K&UZj9M*F8EtFefuT*kYJHwsKOv*>hsO z;Yz=}NznJbmIpArK{o?DcnRvdv`N!Fo*t6D*;`S(!Q3G|rg@^hNTK7rD=DZw)gX;MQXGf9 z;|+tob*jTW2Ht!;(x*nf*K~)y__wk=$(5?STWh1cxaQD3m3N^$8W|uw|EOENjCjkv zEzIV;4$ft~1}nb3wf_^nUA?os0pFQBdH-3xz-#jbIYl`ohp{Sq21Ryp1{UE$5rXQClcd3lr9my zKF%b)0i#;IJPJ%bBQ1-(+3%UXWPXJ`fMzJYSf!l3?Ucei*owWpSkNau?zp169Oj_C z)@1QK#%Z0sPncpnHKBpMGmn0|J2DGBq42HtL-{#wdlo z2{?+qd{Y@cUwIY0WH${xqsc!!s29V$ZfUDMX8OB1<;sOU97Mgn;7>O_G!K0|lhwn# zN1}{9^Da@n^yNXlnNz2{KCd}DKmvTdLFw>T$cf>j`l^^G@5m1L;$|37liS zNZe07Ez(831$6N{t#jwPy8?whuY)5!es zvMv@qh;$e|RDHy}Y{uj|g8!YowoZmSyQe3;SqBci>_ij3!75q2*L&_eI~fr?@{a?( z4kJlDWX%IT4$@OSCTW>H%mA~!lmtAzbD`mz}^`{tWFekjr!z7CIX_ zrJX`O!;LMy|J$EES=ThZS9cyg@q?f}M)sXNZ=zoOM?g)rI%?R5)OpdobjUoZP zewstOw~G3@?}_d^0u~*;}lblQ^Hd zxObYlkT{yW7CRWd?`MTQSzThidD6x_;#;>pU@z^xoGg(%M9IuO7nE(im%QY?B?KP5 z6BoO@y%S8kJ&f1AFH~ebSxd6KAau;UXTOKN$T|nU^fi~gJjR5)?f9QPuerHAr%2Mg ziuzl9ROqBU@f6EFq0H92^Uz|wAElAJ>yFhud>f}ddoabkgH`!pS3!@w%8{x(_Ie11V9woy)uB^kWEg@j@~ttJn>dYN;)L==9!rQIeyOHF^h4-=8SaACB)0}m)Y zBo#fq2P+1?ri*bsI?d+2cSv?U?e0uHJQL$QE&!!Gx4(%!B08lz3`5twC4K+9Xht)< zl-edd5K75Co2+rXy9i{w9qA0ad@)kJDSUoAX!be1j=iQl+>TznQ=+9ifc>()8oLU; z{SpMd{yMNb`Kp?|@klp4ub}?CEz}~t<(Skxp_*2^&yP_%Lbl1guVCanqW4febs2a( zec;)=k`9?uUv(}+*KtNqSASZbcV zk~Ji~Q^Tq~W_m@vGC>kOCj~;iRoBryprnqyu7Hy~b>nG03KEjMG<3DRPl52e>uw6Z z6O~6j18t2x^T|{_ptO0tsz*agA3M7HOKg|EV zMKP#7gWc&oILY2URFH2xp68M}f&yv1zAlZt>TtuoOgfgl2}E|hxn&+az1#!6{)5lF z^u;&58ZZ<-la_D2eds{F9-!E}+aB;ecmQ_2te-Tz)@@@v_zIW3y3u>Qy8|#iVQId+ zj&A+DrhHF3bJ8$9cb6bN$8wrGrI)+CfSAX?_U@^K%d~fp#x95unx#Qe~-q! z2-Sr>8MKSNWC4LaE2);W>?5Lo4T<*+j%;@CH;pzSiqmX^D=F`TH%Jg z_K*cVO9sli9h&aE^qUDi>Ky~Va_$Vg-DJf)xUKg*2UWFN(tmUm0~YF zXo};!rrCBp+{c(YK(UKGFqw2c*LJi#Lvo-!>|!K6jQkC~&LEM!SUak{nF6glA|OOP zP&tQmmUh2M>h3eyt@vH7t)kg{rALwLQ-~7VsOp3Y7%BQAtR=iP$ncC;v%2(&xmy z_aK73?ccY(Ua#D|%yezN!fleg5*ZD=(xSpVvd`K)WZFGEB2xUj*eIMmO+ZJyG)=j> zBTuTlmWCxghbp7Ip=h8z&u@i0n;(_D|7AEj{7Sq$q*lT`&8nY0pF`@r!1D|~BBZXp zyE?`_ov7?QFa3=@;Zzm9ru$^NYYt_-RnAd7x3xXJ8CyL)$>{hz@$KCo-WNKrn$$3?-sis(8$cFz&Lw>pWua89tia80>Ae99O-x8D}M zZ*~SftAi4~)Sh0wkKBE|F$c0eLYQVfT;27(dwX8JPg~7Bz-o&UYJvr+*))xr-v`E%+$-fav$Q@C=x$c8UI=ux6PgE|7Ndo{Y^`%VWMZ1VyIPk$=7+z%6pceY3rxX0 z%Hd}_t&e%Vkv0UpgugevtDVz3n30-29ko0?+oKV^!N3Q-<~0JnwuQ00C*py<>WHO1 zRHv3Y)J*U^E_|%K!EFpZS~J1D=29~~OG2wXYeo(}nV+w{6S=cI52SLrA#(UVQM+_K z6tYLX61=}X`l5(E4a*=s6f8Bo@g)vDDvcz)3jUG3!;xS-)Iq=0Ehj!bcr%{7dd9DFitjj$;{>uZqFtfkCvo^9l`{i{#zD$)o%i(vu za=+L;>fmZTieU)6EX6jx6?u9+BXqbuml8+4Id!5vBJi3$56FT%eRzw#EDs7kzDVl3 zP<+BXqD5*wyuF<}*9H5tt!3@lr{npOrq|3bz*Y>0$CyEwbNNJWpm zdopG{Et7V<6o#ujFF3_E)~vcb8HD=0P(?vKjzCbni2zzXQo7kaDR1#SSoat`3?MJO zb3iP+ilc%()=E{qg|dh}04#w$4sBSyQ_-nBb*aHUJjU$2#AdL)JY5F8k|l+_n4pk6 zecg*ag)ShzIFZ@Bzg`bLqz5LwjC9F8+D7p_AUvMDpu3*Ds{;!>SUbnNJ1c5EM+WY_ zf28HSV-Kr67=>;;gP=D&0rZr-lEi;Kz5diZuMNXJ&ZJ^H)}7+Lq0TD3V#xNqXPEN6 zM#Vlmgzz-IJ4qG1jc?>TKn?Ud8*2f)n5mUK>w&*KC_tOL$0qT;>SfBjtwuJz$>l^n zzptCT8MB1F6$phr03%yHq3(>m^i-}rV=8XF>hRe-hM#=BdeNA@L$dt6de}R?y~u*Q z(o4}jg%*}QPkG-wI{%WrGWjID3=*C_&E@Sp9COY+#P{+$7>=_$W&FcD5^tlu`jG5B zAP&~N4qTKy4Ku(zh*q3E{t~Xcsd2wNGhidV`2v`{tu(QRbVu{5YF9d9+g zoAl=hJgN zgWH}w8U;hWigkNCXO$8?&XFxW8$ZH5k9re5>e70>{D8Z?ZKR_-^&2cajA=E!1{>}> zy1MSX*=eG^;Epdn#c*xCLyPG=nmg1ycNj;#hc{ucLt0+bx^3gff@Z1?6ToH#m$fRdI`6)2HGz7c3;G$H$Ibo*P!<3@G^l{RyVr)i`l~O! zSJ#(4dShuk;h)nzJ3bw~&}6l|0D&Jo^qh>nA+xGH&`v--$i+N76VZ9S!0bysG-71D zs{n>Qh-sEQZyx+S`n3JKqLc4CI7)*&=KiHS)UcnuUBXd3?Sz#)7IQhh<_f92N7PgSP|4uBunxGxM&JNJKT1jR- zGo;$Q!QchG$Y*iAS--qI4SfT<5oSQVO);^(pvoXRjTVf($emrh)Ie9gtm$RFkj1;a z*&;_h92Wq+N`cqBtjv%-7BULG(Od63h};{!27AvtFA#D)tH!lGHUZ7L0Fj8j^dN>j zNxJ(z@G9rM&;K~Rty3;Ns`Ej;5RisFjz^HaOO_TrA-Fibb;ww}+~&GHX?Qq1(0|1| zPzLV2%XP23N2{2;$JPWrD134|av3l^fl3TJGM%VBg=;yytj?po61{9av|7zQHuCX2 zEuSO26>(I(ZS79GfYG!)1mi(HwvY?He^j?Un(`gJ;*}e`^gxw7qN2MyHT(j))?Hn_ ztu1an!eXPmFo)>8zd>xh6c+_N^d&L9`~UDfj`0;euYUEsuQ6r4{)(%;d^^v*UwAa+l^dLYI; zj)#xEFRuzcyBiHXWPXUex6wpB*o%fe4Z*#(5eJIRug@_mEe25+mBPdy3~p~ zD0|MjfkX5>*d!>rdEps7XXU=T+np=D$_603-b}o_bt!PYMM!`>jIZE4H?Al=ftMIO zSg2$>hT!--wh~x8L%xK(a2kj_#b&I%Ohi(>z*i}~C}!Hb*PAgs>i>1UAiS_VZs|rn z0^N~2B~-t;&4?O2IStLcl$_~0bJ~SH059*m9RwddaL$;$wgq)O^r&aM&zNAnyiM{v zlXvI5bHQD`5T4UK4|SV83V(9FJyl~p%-LhS{PO|5_)sCek_?7D%F=l~(wg?YgGQxb-}^2c30w1!Z;mR-WU`C;F^>W9v|zJF~zvk4Tv_u8L3%Zced zhk4Julq*)fF#7bpFq$>J(;51_Oc%;MdU^!D!>ao{QJM+8VRKl#SF4>p81E`P1&+PE zS8DdWp;)3ksF0pLA%ZtO0-7$p`PnTzZ%}o;WowbVlpAThg!-vGJFgl&_k9|@D)hg+ zsp&Sn7SFD|4CF7o7(QV=DX}p;KRpD!nntv}!-btZ$MT81*T!i)-7VL=XC87r=+6(m zN30V*-%hW*a=XU8hT2g*0!l}{o`dl`)7OT*FB?-myEk^dSn!TJ2s2;2K*@)_oOO@9 zsdh`fSLDV#vqnNZ0N)EeRhyE%iLX~Z;VX;0OrXTN5Rbw=jAE8OBxT(@t_ftlqY@Fk zc?yj@ofN=5kW6|#2(b*lJR&PS18oOA*wL!Jy(2L_cG4NW^=>%5a?%dI0~pIZIVuyq zQ9J28ZS#z~vw*0*{s8X0;r?R12v0~o6}0fY+JDwPRhgu{0mFH`fZATYUiE=JyU`E5 z-ygiZ15@|Btt7WQ$eTdD#FR|DcoHK$xk!(^5#N%%fHnKOUz`uUMT3t!I#8j#X=X<~ zqb}>baPpiyfEJWI%YsS0{x^y}kf2>Wk(?vEj$x*~g2*MkhGuTO;2$D9C3mR3=M)$` z`p>?+V)H(|)I!p{ zl=@>l?WglS5E_TQ$=`3iv@N#0Me7(n2~||Po~L2Gni$nQAY(Q>dKbz(arZR6CCn5) zJ@Y`lP&Jc0KGMv*qaFghd)$0I8$f70je8iqTMD2&uLlJ_PL+|pNgOFW*6jqn5vfZ$ z7f-jnu7PSj!~rBd-Akf8fc73e_#Lpk9?wg?jD_DkG?GX>vEkA^zB$x9k{G%?+Z+x( z1mFQYZ;2AU=T4Bk_DGjKNI3#Msay>{r4gpPYE`~GA^+>VJumaTn8p~r1_@idss)6- zS=NxefHXclt@3?6lXqf0kp=atJeRpocRj5c1qmvz273hQ#ctpmk8b%cRDXttX@ZRv@;r8YCX^5`MFIoicK+)CuU zUFK6gFr_EFnxJVtaWX}{&q>!jN{1&s5_B;=q;rHlPd&B0U}&d3awxhy>T-0wtq4Iq zw2%rtDvXUi+E8@8d@|2GGlzmb$e7DKmy98yu9EZugKF3NtB|?uq@w~M>vJ@>nauVge>F$y}uRpCiehN&w z;*^oRv>ot0dY_BD7OXG5z)GdO5Jh}EPc+uNp{2k(-syJCu69wU&vrfvW{^Vljq2a6f{*xx#k6 z4{^LZw+IP5hMg3<^uS2G1{I<_n$R^pw#K);EUzFvzB~E5gG9=`5{aEVh+x3I1g8$Y zx{q2t`~LtvdIa@7Z|~u~Kj{IzRiQ$im=x*cRa zB@=MH8=X2m*S}mnkZQ!dX)?3C2~xm4HRtI&*laJoQF8`8TqGVnG`i0f)N1 zZOQ;W_ZC?@V3Zxb^e;@k^S2B=1<#~Cq$)+dIfKPL0!6^Qj&!{}If!39h}4liHMQuy z_5RVl$7KpTn_E%6EgKU(#?&W1#>6DOcuZ`)7KjZ#86!G98`q~iAM(GvZ^{$BX?S|Q z^#P~50pN)}JByt?yj)DZ7n|a| z3%H!Ut*+p^>#Fg)5G-ju8+qluUXW+J43%TOx5%`-Cziat(97^Wi=EfJnpBg$-#1CU+hzDX4b93uiksWKGz)?|;PWIqiZ7Nuk|<%jJSZPJa(RC} zB!f1+He)Y6);@r}Y?%7GsS_r>&#e48syPC^<%Cnb_@t9NzFoLHlTUrUq5P{o8+`7(bU~`TiwnHGgC*fS0lbL4 z#$%7W^DDJHNr5iC^!tasR2JL4o6Xofuf>QpKt|B0vMZ2mYMB zc%DVQ%CJE_+~kYAE=FuTaKm4`xeXgVJ@pzrKwO(W#SuTfc4C>mVGp^z>B@e*`~*L} z_*#`bCZguNiK4T;Zx?~R>U+ICMtFQZT7t#B_#qfNfaU@{t^fkQ_)q}8sM$ow-EQ_gn-P<|u5?H}hhlfUrkqMW`*_bgGv%?n|KcgVMWv2CMI5)hJKjY)MQ?&V zG9@RxO&**)W7&SZ5R-~MTG%){NltUTel!ui+yxT7jOu4SLH_nUQY0lkyx>MWvrU6N zU?}XoCls~4O4RqgP4%X`qz1Y@5A9Yx$#xe#jh&A>?}&uFat`af%Ige08vMw;&cS@V z!p>nm^tA)MD2NF?Q!`;bX%~~d-BuU9zyy;#Ttt98Im7`y@h4wA6^frdI|39uon25o z8x!(98WL$dp7!WGPNloN#RAd1x)y-Dg0X769=oJGC6Z0OQJ2U(mZx+*S%=KMW>Drl zbF5Ij{ux<1_q<8H_2b{XaGwRe^V|VFgVC})ICCOA+beXv+sn^?;{slZ8qsWRsF8KG4GYU ziahl^1HmJ_GSdaT-T_3tsss!@6_5_R!uVW0cEnRXx%I9*Uh~d82ircq+~W^B1$VGH zMwDi~9k8`L_H-jX6?+amhb#p>C5lbGsSFUk_lJ@^oK!Qs2s92nXg9XK6CbO+wHJ#$ zFwze__exs5Je7+)^bHj~G=!Ty2ImvK=0^oR4HkmB+%Gb{w4AFw-BTaEVWrhQ*34(U zt~!G}!X}Wtn|6mg2g35Zv076+kx@mwlODOemIx5M17w%D+sunSzsQI^&R{V++G4!B zb}C@KG>m~gbY1bhoa7U|G(v*A!YIc)xp0ZS2$Ise4ltHH1VWj;hz1F}QwbftPtgKB zjLX?NSBxC5}f0eMb6Rn&mJZ&!Z1k{bv;xaSi+H8sOLD`l5F21Z2W8N_g+7)$9oPlEEhol3b+n>8LE~pU$et0s z7o)+vTM&snSNe;*R2=5Kxdfs;7h^s=`L2S!wKRA=%YNBC9MxewCv&d6dh?t;UymHU zGkLhYSzCv_^bBvjm6f(UJ4`dZ%sDbWaU4Cp%`>^Yc?!ckeZE_~#^GeWo$P_VMa3FB zJ0)hk)&mJWcaD+0$Xf|Lcp(oydHd`=aB8KzVA?Xh+m6#bRN>6Mse#!&ON&H1>+w1~ zz-_EOS&j6(C9Xw0>@|oz)P$J5zpwl~8m<1jSHqgTQkyqDf!eseIX*YNB$A*#CJ^Mj za)pjN*w+S0OkV9m>cp z8KjdtQ`|AU1zILOBE`Bqh;@WKrRr|IF?~M0L`)F9?zoM;U`3q0Bq)%*_csANeA$XT zYFPigvOEC2s{t~-K=_`!OzNw>Sq2!rgouwkuA0QXd7_;>(HUwxZg0*!J3ZvR#u>Cd z1SO(9UE!K}Y(! z*W5e3gL#KN3m)~nr7bl*S~&r}8&YOF*y6>#vjly;yOO~@9sc6Gzk+~01npQojQ@zc zb+9tMeS3sEQX`T*Su0CD`229aWnqpz(yom?y^jRI`sgQ-xo>q9PoY}mDldP7AnTOB9BA9oh5!fN%&Yj?tx>yniCW~JnafS zKrgF3o7A1Wuo{3pRGr2=+EvQDK$ADUpK^4)&lzI9t3BU5tseos0Lg+qCyv#;=KDrF zD2Qo0Haw%fEj_BeOOk**lzq`VM`)S6AWJnpP%gDSN)`gWNuC!yB@MznAVx_&KM(=E zdpRV%hZAtUYO6K83-YtPnbCqf8$-~%c)0yMmqO({KWbsT2#4&w8 zz&h4E+kvJ$y!seCrV9+cFAo|%wggAKQ%jh=cBRHWF4A4SUT{pkpRaPg=Se%gxJ?PY z?)Q;B_3KSN1f+*OL%`=e-N)%W9eheXGK>X2=IoNZldLB^F5_T5O^)!otr`G5=j=(n z1KLTvPhNmKlIVny_3wSJ)%GOAiY@frg1aAL;cyaCP^) zvRHq--{OcpCqRL{h`gEoDT}T zgj=;elKq%H<=cHc2y@@M4j{R_ip6$4I}TaB+0cc(_{B@TlO0Yx74eX~M$GL!Lg_fY z&=7k)O1XYKRGW@G$VkS#gZ`gAz8^fi@Bb*Cx0V&5>9DIiv`UjaLdh~c$CGlsy_osDBW%pP zgpq5!v`Q*GcOg=}o%x%+1%4JiU7CVDGlNAvUHpl>-Qvx=p#gBcHKobDl--!T;TRRY zpP9qFxV`f`$KU=s0Q=lKbW_YcPbUdIw0c85lj+VpqQf{m!_QB>sVMe5B(BT6s`4+r zr`007N;ELNjEC{Op2iuy0vaPdQr40^03z5tbSx!2@8*6zM}(`q00-l`v`!^G`9lmm z+dlxlJ+RHZ{cpKEX9e86dWeF(56~{W)X?I*F+*qmTgYG41OlPVo2t@BaBYG!8JX-QO^auI-l4) zW1f_~%O#k-`8LM9qZ`@1*!FR~@!tKtCoK@XcIHhx5;Q+Otf8d6<*cDR;gkoxk-k5@ zY-`^-NZf-w6X9FECDIZ-O|HT_DD6%?)ArxIiZM|-n42BFjnomnoz|Vac#^Zdd;Gn< z^u>?8vuPDQ7+n`Vv6S??&|}R!4uu81yQm&KV!PK#j8<0t?mFl>BX446WWzK z-n$Gw-=^oh8(TX(UR*0Z_lDfNVh=ezY2E=op`^?_tQ)>P?03n%1dF!2(%5;t;#(;_ zi@=3EMK_r}2rO1S$|YL8TqJ+J8OEf%g`;3Sa^L>EUu=Ornz}~4HN$(uXI# z3>Z&6nE$yv0-?XX1DAn42I>?%73;UWBC^FiV)lDHcRZ9m#)0lVjk-NOVL6IDAg4(^ z&y+a5nCuw5Iu6`C&=&!`l(Rs+v~IRMdKk;R(fka(x9Tapf1m&i*ew*lPMbgj)l? z9~(G5qq(#_KT2deP7R+uM1l^ySTGblNGBFOpjAgaimf6&niP~h#0zviB=k%@(o~VX z2n>@waAKvs$fL$Rz_t`UY^#I3bm_pnp=b@g1B8n`0KiSXsw9@ZW+9KfBr{z+8hCv@ zHDy;lvC4A2H0|oVk&PR^chTp(wU5WW_0pa^XKl~C+tiUgZxuegjVNNh79!BRCg?sr zO9Se=U?cgwQ$anv+rSGwN%R~%-XiEa2TlP!B5T0B%=D@}AZ!Udlv--Nttv)6*5_yw2&Y~5HrInVbzii7Dp(^?ZfaAg9!jE~Q~5^@Q>fr}J9;JB5&vDh!Xmyy#w zB7>egb!kjIqskmTrM;s$oQ{Y+z{UBzT}xoR!4Jhegc2IPJjaqeY&bQ&v&Wo047YbZ z%-};k<=UdXFTj31LS0WhRW$@XCXIW&K}MH7w6QL{3z{H3M_dlQPIMT(Fz6ROVgAfL z4HmDv4ec$x4iY*$nGILH=+lR~b54UjFk{I)0Lsoh)n0SG@FpfblZ*2mU z9~-Z`@T71(P*WPc5Hw=FterbO5$$rkQ;-lnniSZ)LSG|2MRg530QI}Qf&dr1&rEPV zudr)9aJ@gi4r|Xn5gDL82}9dG%G%bv*q-@3BRKlH7Q@QD{B0J!OUq0>E!ulMze1Y2 z&>Sqit8A`4avytV}UHJX3(Z z^88Z0_TM5s)EIQV;!9>c8Osm6M~6Q>;zL6`*mNE}t2u={#-&TW)*eSZNHc9c5Y?u= zEAfmy*vO*2!Z~KWq482XhE~YD#?{WeKiQEy%^knIwKae}aw5|`#zbzrx)&upL$9yB zs393UPJRddgGxxt%u6ID;EX5t*eW?C(%?pt%(Xfj5CY857uA2FHV}go^HK7 zei|1&fa%}7 zqUEc-KLD}3d=9cZWf6WoToUoT`bvPk_E(<0f8H%U4Y+hX`s}>CP1AR=qsE1^{$DCby70T1qoL3gV``lz-8^lYykWv*TO5{6_J-CV!B- za5_A_yE}BeB9uWr*C|T9Zt_#QU$Gp!LNYWxVIX|H&W4aZYSS@2k56;GFOY}4W%Dh( zY%HI=nKU;&CD~8BVl~4%_@@`Wg+~oMZv6T@tcw9XQlRZT%}@b6Fav=+{ilpP9(H8C z@R>M0;EY>6WySA2P>(OXp+7A=t1w8tV=$6Dc))u-1k2Vu>tXo3KM;+*(;*)`rr)-_ z(Ob+sH{Xf8Px0TogQW;PPsV_}OqD;p4;qs^EGMG^Dg`b~2sR`q}!y~>uyd<+c&*P;# zKan-OGb0;3pX_lxO9WKC@ev}uI*A@VN0FyJlEZ90r)3E}Z2_9R zL7Td}-9p?vauAw46v!35w$(2^31VwJGZ@glevoWDvAX-bquS~`s0lPZWm=-V3tgtX zo6&%*ji1zsM)bR?^x)(B9Q;P zW0iS5$OFth2}G?uLgi$=KPyH&G;_i{Bo_g_)X2L$Wca8#1geX@q6Ahwc^sKMyKE^w zb~1@Orr;yJVAae#rV6w?mchLa!85@;kdT2qjR~K-c1|k2 zv?iH7gTGZhzX#uinji|jFUfSgI7&CX-$N$7r*1ktMzrHRNW{3jg<1{0Ek$6x*JYr*?Ud-f9mCkY zbl(xZJv{(9Q97qRk7cMl1l)(bnI|ee(RN?G1S}6eUfATGo`A-119EDWDLNrex+HV7@fy)ECoJjrl96ng?aY=aWL^sv6XW(^y>o13t` z(PZqsMiinvA%VfYr2tSo%v|!j8Xl`XStC}vXRn?+hve(L1uERUgP~eIX4W}9R4CHC zy>W^>X3w`h`0OUVxzBFA*eO(v4 z!4LktXq(17cziA1E@t{uWR@b=rZw-DhmQeVR2r94%!%b1sCu z5qt+dA2wG#uGkVhozWIORL!HkFDwK-x5(JLq7^K>#a;ls;%6(zN*H(`ZN)}Ig2{H zRTA?$!n$HTkaLYZrlwpxU3VHi**&p4UspT5ebv0Y#f{j!-4p>m_!Q4OF!skiL?5ZV zmJ^aaFEy$?UX6RbYH2dN31OK%fpxJwjxvHh`#Wd7n4L_!e?5`B6sz#Oj7FHe9T^h7 zHCIf%dp|5Z6aC0NHvdY!bY@+>)zAXIKcF={yAD}B12WP*KT}9OwACs+i7RQn%GIX5 z9h};|%A`#_*i~V@-=#IZ8O6gqOb)2McG4C-wS{H9HSDy#dz`<$?*b^j^Cd1lf{mfQ z|9$VgqXdLJx-*DC z`53@EmykfcZ^%i#cHJXAMbosshXVb)%#V(|0vu+$Z-;ojO1m#S5i6lQ9C!h}$PtXZ zajw3+m!{0RB%upD{`BxWcW-_?f2hyA0Wj#j>y*Gewz;Xjkx^;9WH*AnyFU%ReuuEU zMQr0eQi18b=Ad#sTI&})-m3thO$9Ld0KHm0k0)Wf^-hDm6}?uy zdzlD5eYEa{QFz~i|+1AlNlZ#C>a+F%pAY)no)w;|xXuE!y~%75lPhY2t{i|};3 zymzC$b6KH1p}C+vOA!;kh3F$a0Z-^WwmX-+b9YI+lJ-Ts^g77A57jWdsYr~x5-p>> zZuB!dNag{&huu)Tg(qCSM?_z}qBY^X^<|a2F=Y(AoL{NEw1tK|3aSP?s?U!+!1$rP zB?uNgDU1@m`~85tx!X29Jrmly^FQc3U%|(`i0%lz|GL;ZjcZQ51Ln59Q-6@WYJ?}f zqR-SkG?dFc1@@)AvjToSu|-%tC{M9G$;5;`gv^~hVBZft8wqngG>o=AUN9QI7oFNX zuM`Nq4!DTDp!u1);lB{Qn)aH!YAH3mS!jp6>{WrhuVW-VK2pd%ER@^4jYLU3b|?V8 z(e6dOYv6mli0T$RxrWTVSVO2fsb!J9{qoVgF<1J%1`PJStR!>~Rh~eE{~opz*0a;p$O5S~~N+$SJJ7e>Zl!WJ;nu!bLPax<|mh zc@g`(<(ld|5Z1W7an72&>)j2#^&k&D=z3zk7#ZKZ^y>3FI#g6We(U?Z)G=E;{X9Fo zrbCXsJFFnQt9nGepaK89x6gpRwW>nB>#MfC8gr37LA|CuJwc#6AGTq=D!gdDYm*eb zL=P>!$8&1EO0X`xz+RlZ&v-Gt07T%tZbFWf!6 zD8KDI&%oZhC;fyyQhlJj+OfAiKUX`w#4Ino=j01K6qnDu^G*G`)-)WwV?Gc(24RrA zra`d0`>Z#;}99D^{V?k)ETWk9WXdN>D!PzUcP(0UgbtS(H#sukuqkzC{a^AuG^}-+$6|6 zves<9SLp=2Nqf}2+E8;nowGf?9Pf8M)b@tFvzJml7)rpqUgnRyzF{i6#%0#LHasc4 zsB%}mFY;%+G;&)#LD>#HK9u=95scM6Xw$4ce+v4%as6*R5F$OjMEfGWJ@KBrEsudb zYxu4_H~@ydk<4s8lx_*Vf+7PxPU(U@F&o>u&f5|_Fo z>hUW)wmo?~luaQ$-x(FVQw#yT%ng-2NjW1u54i%qXkExX`S+PUf6Mnga!ijscZ{sO zq+heWyyaNE>V~SlqKYd#oOwLFzxJxU9kLR>+p0&t1Z(`fAwbkT%jcWC7IM`*o*<_^ z_KJNy!!8Xx9sB+})*<4&t7C&bdP?HG2EM60=OD1XOY3yK_d|g@!OaA{iOM29RqYr( z@z>ux{R3V-aTB^biz@rP&r?ggdX2ulMVEg)AfP|JMbS^a*%&Omm(6uNR?0U$nNp8D z*ndYn4H$sDrdRVk0JSGQA>v0pg^-y&_*kgD&>q1&R6CD7tb`ao#`oR55QllaVSMF0 zwzTLwn8C(FY#BfJ2wPDpfPRAe7s^ zV=i9%z&ZFy5YpyR;2GOsi}$vB2R zS9zyB0bNf#eQqqh&enOo@DCL|GbUj?cb34t!dDkPt#qh8j~nYfGWw;x4$Ypu85NPe zK9iEY9cy|$*J+_W4>*dw%C1(uqVaOQ$KwdSt)~sW_$G(Ff%yo!r(rog8z}NU4^=EZ zvjko}NZw7o+Cr$kG@frc5sY3vs2;gIabcG|l$d%we{TRj){alT>x_xL)len98%=gQ z173=|v7975mJm2Sl?HA-g*m}IzS=`QerEkWaKQmQ9x>57QYJM$E^($j*Vb>mmTVh6 zpW!k+EXL*o4fkjWc?AC`oMQM}0?+T?n7t5-=g-j1UTog^c(-<|pJVq@& zMY@-~d$Zd->v4oTLXk4PTP0?^BoB$by91Ox1VahE*U53c(aY3^7~_>aB)@U|}ddK_!p9E%z%u8Ll$DwjoWu*Brt;WxY&1ei^g8@Uxmd_+8FBasRbD ztefXM`}O@h;C4yiGDOzArMQK? z_{;n}W3N@c20W&{s1_8xPD1iLk@JJRE)hn&1BYn5s%;oO9RPQ{FlL55N;LL7-zJMZ zdoKY#wN}KuuKBLKM1Q|MVr=s~<5pWepxjBl$Xi*xzX?q{1iPEPwEbPZVfT`}{IwW8 znjt8>8NMMqRQ#ws%V<|T(Pv^k$U~C6k?@x|`nN?rL{&Jv>T)=}`lZ}GAp6rj|KkX~ zm7{YzDm}8iVb;LCpwL-5KWo4|&C20Cuh>sLM^=-(3R(8NmKwr5M0{91VT++XzAkh< zh;N)bR~_m-R*<|s)C*R<@X?Vxya08*Mc0$OnS-xA60y@fQG6#oqL^g8AI_4!QCix( z%D#X+jHP)M=?aa0j%#cA`E#0i@KtjAEs|#L%}qYog#h&QnS~ zWrsGsYfm=4Q49gQwy(20)mxXne5^ZLYgbRAVEhx4!gX)*LdVS_FFYQWv_U>xo)yMp-d>f@A;@a1e1%s zA?qT&0)ipFWXvbM;u6C>5eI}l^Hf4SmObFRa_px(P(*;eci;iNOLO_WUgZ5f zRw~cC(y9f$QK_=MJzH71$2;RCn{b{YdzD1cmzhsv>t6_e+ zeJV=4pAKIn>i{v8LsPgwc9RJr=Q z+$6fYR!$9&m_OW3-a_~|; zU^=S2X&Kc#`B+vxj`fDUm3zcHIqSK*74VF?b?Jt?$^)`JZEw>%HWwW|2kdXXRadAz zST0UIcNG-7T$H)J$$hUqDiNnWQ+5|Ui<7ZD?vOn_sumx;xq}qEKIf^tf5l@xizD1S zPz5&YQJG;pYUZdtnFCb4Vb1Ef3I)79GNuu{)o$xN zIJcO)ml91pNMb!bj_~a~H1sdMe5IH@-IVpbnX=|QDFwtlvZ7zRn6sU{ty^b3#n+WPpX?^R908;~%PncWG?>af!04Df z&Lp0@J!u^~Ztmeceo=-!f<=kFwK9V|;SC$SsE9y4wPpIe$(s1R3hq!nl8CH5Rn#0k z1G^nPsiHc&4hHZ&JiLKDDNAy_f(G+E_MkDn-iYqJVi23WIr`f@Y?bUgzCo%zeO;(L zUNVV1{~=+#!Ve<7tX{}H`0xh4eu3G&%4a4#C}DU!l#%|t9*FV1T+NrfsX@Ix;KF=8 zf(}KyS+Qq5?|neK_MA_>HDznO2gilI5ke(B;yDyOd`v98b(-S5U`eMvhhg|VYhQxA z)$|R$X~Hf&d!ueWoL)1%dz-^NLMjnG-8!VaRHU%HP)k_5L|DT;zH1b{QfA`4Ii{Pt z8;!C&8iwpWR(3@_s@7n=aNiBRxQ_lj4^}un0KNGclb5E^gkRu7WW%E7Tp6qXA0E4W!>yO8!|^chwBwR*J}g5{%se%fQKCzwWXoG z*CL#|TTSo1I!#_XP0XXbSYD<)bFt1mA>}$fefc6j5nPcx{lG3gzyqs1OuS9K^jP4$ z7az5}D8nl~-L1|_~wQ@z~p|t)*?i`Q617fe5GwY3G!CFCY)M5ADx6ehK6iC zF)@w3?F^nhsogidiO!6@woTl;8z`5(i=Kx)*FpEaTmHqprZ2(0aF>cbq!vp&vlItB zLgUB0N+1`#`I0C-VfQ(_@>Kvnaj6ZxfrY-kCEI+wc!k=%(u)2)4=B~VeF*{Ph6Wyde7O@h&G9;qCy=FYUgpLQj zQaFh`P$ZJQUh}Kvdv??qD*Hy!E=ecZ`p1={8dfpE{B~NRP<9gB%Jx*8@qtd|pz$ z?X35_Rxryw#PXKCZ^-0229@r-*iL*sM1qmKGE53Rg$n~c(N9G^{N$3owt_mm4Ya^K zA5)^dH6R5&OT%it`$GXeJKmB!7<2JFcJiM+X)Y7JHn-|LiKYa*!(x&>^oa_+oO~KR z7D$l1&9uZl%bsjKKHCXByr)$?wu;m{9eaSi4uvngp@XA6<%uypY>_iPlSq?07U6Te z2SqYH5R9F@({eMtuDQrO{Y^f-!zoFuGISTc;|)=~MG1#IyLhF&XA*5a zMgVR-#r3v4p))$YuSU;3qwdc==pO|=E8Gyi?p>|BqnxlkdU;kne~rPti}t@f=`im* zF)9{2%90|zM}zr0Og!;DM4A9TCH2C*sX+%kufVgsn4z3K{G1KFwm_-8w`)GVb9|M& zexg7sh6nq+E8f_=Vd)^e9&U2I41M}NWQY&FNK-RC z1O%=^!SNBF}%6rr8HxA;lCrt4BYdmqQVJc@lgfC?%+ zUeV(^nr09_ikDiw(FR7nCWR8cg-WqJk4gPKFZUciD4Hg{p-ON(=pw?rI_(#{4l$%V zADqOz$9}rJorM5AuXG4IgphN)$Sp}bcQK|sL$HoL+Lk#zRzA7BI3+&3r!H5#DGd+3 zy6(2TiwY3E9q8#jj^MAn$kTW|ZKE1Joi)=vF$1+ce$hrfMPCy=J>JYZEnqG^Cqz5F zFjL68X)CO~-J^oNko0stA#=h#EQuaHp@lWQ#trGa7ZkQUFuPAUfE7PIQ-F!Rhk)L@ z_j3=tNS9!|WBmj^g+_HfmHfv%%U_Z_VFlzo5}`Cb;V4W!vj}#)O`dPO)O2 za&f%9xoaG~*NKF@FPj@X%QgYMwz4oimi(VPDO~@&Xcs*^^|=r`M1tZxi47mUi{-I9 zU5*;OErFLk^-!2R#uKZ(YXe0+Lw57MM#nfkO-5L~vL#471Xxx*NlG`pI5RT6D5pKW z8Bqs4;2lvt1^)CriBO$ASfvm=dKV(S#Xgw4@Wh5ZnSHjrsocgn^5LMMYe*S5R86fK9ne`?D-K2GR6byLSYmEWYj+FjzjS0)=h zoD^8S64ubXDYWUlBqsGc*2Yym-5uGy1z|2dflX#T=E8})T?**E6hX5*(RDk!=~zm< z?%TON3Oa~9xZOXzdySyIH8_Gj;n{S&Eo6keS{p{al;)4SelNW}v=vxAx8lq_X*pv( zvXZj9_+TD8Z2Xu#nQOH?dp_wrEWa(h!OaG}F$0#oAG>@#X?cx3@7^iA)_;dRhzU+T zN`opqjU)y<1LXL;DLXm6vm`e?^D?GAr=iR}c9Xn4g}3kTBZg&75bUIn3IM*fGj9JsdqlR`%)afA^@8_kAej~H7f-?IWWsSnO}%K zLxoyB*6+N$9uIdt;b1krBJ;|;!7PG2t)?KoQ?&!W`j$OCG6iV8H&kamvjEIH`7^=2 z`sq(ST=+pfq-4xGlmQaGe-WrXgm<;Q;|YH~esNd4E~Ztypf?1)4f!X%QtVf~DLmu6 z8H~(4BUCxNV=q8G1(mS94~SK}Wo8jQ0*@R!JwRBzvK@`Psw%O)=Kk6|=9L}26e*KE ztkIsl$0zx{j@Qz>e%FXR@%sZk70sADIcp<5zM(KZZ09~b%xADY^`<^MapXch$etBD zL<*z5;4qlIK(nDeb_uAx7Z#7bS6mG}WkZF%q57pgGW4Ok;(LC)0=l}qhh@(_0mCId z!(0WtFJ}=u{4FuPPA`bP_2dverxETww>sp!oZ7Fu{m#6-Svm$j^_O{upRIlT_ zg39VUqgjQ$>Jz-&{_q(ZR#1$0Lfnf%D_NQ3kEO9sSn4$=_SO zpxXmIvZ^3G0p={cH3W-1Ezy`fquzPFA$1YHl@D~o8dUgOkFNlIX=jJjzlti69 zSXb)3b1oOW&J`iO%r~vOnCUXTQud3zC_#xmF{%x`lc6v?vzaYBP$Y{whHgbXa(Gy~ z4NjQ68Q-TpXA7yl_cI+mm=}q>k}oqo4X}GX8Q(-bd@h_kshGh$j)PvklVmu(*9OEq z8KNV+ZL(oKA>D&KI=tIF`OtH{q5tnZ5f(^^O6_5FP9X(9YYvB zq&2xbyj_VsO1^77A)cWo#L+BN~()VAz zIMBztIKwi%cy}_r3#Q~d@lr&+7#$40NY)TM)p}(;*NU#aZc{`(LiZKD{G9SU-{6qE z;I2VEB@M>CeFgcvibLx=ysjfWQJv^L>3nFs#$Am)s3$eMMO4DPtL%3@oGiz>gN#Ew z-v~@S+2_f-X!eFYVG)=;_VWQg3Sfb|*3GoNa@SP6Bpj%Gr214nBkTn| zwEye9PAh)B0fM@`tlGOfXcPRrQg9NyQtBzXV8lB;EJW5lj+_rYk!(3VF)ETgsP&&c zUHQYj3dhd9%yyW)JtI;*l$IzxHm#LCNYu%^SiOk7kK*$^#YNRTckYip25%cZ zn6T=++^3tp72CBuq6S~RqFq5FlW^XflPoahuG$nAzYvXG85g zKOQc;_5%bxMhgqP(|$9)IG?q>%S05t{&zw>fwM(D30lWH&ueA8$Qs){Rh}cg6P?Vw z5(`bd%aZN8y8S#pI#yIYiRdJ~p@k4V2!5cv+=Q$>Xc|R5Z^{ThT}P9>HD!3b?9>uH zN)a2q(Mf^5*Ig?-6OC8AgeT*?hIMDX{8D7R=;{tV#li`_h^`ntwm$^DE;Pfvr@R%t zf+z|-HPKN#PAYaihea1XCdJOY9MK0oH%eu_E?^A3HISRTWRjP?nDKqRNV3JemT9m& zHon@t)fAGw)r2>^TJcppx#65U_{pohKBEo1XFESV1?yqG2KS1)OzEXPRkOA|%PESy z=KQw3$etKGS;f@7v?rOpJu;WQM4$A$=%~ZI>yIcs8rprm&`LQ282n@VDej=(p;?d?gZi9h5FabZkTtf`K8@y7zoTx;+ z%@S(7HS?Q1%i2&qS11@fvsweacW6L5!ZB{Wtnh@qsJCi65q!2h26)N6v1-b_57S4z zBB9_rmmokq!MTY#s}|C|@RT&X{GPcz`!!-bE9|4YC1s|(xiBcaTLAw(X%wtIT4ZNB zRxS^`OpTMhh9QVMHZ3SU(GHe8`ktsg;I+ZMSamtQg=$E>R`6W9v%q$}n9`BEr~`Ao z;0TsIQL){-myl<@9oaNI8uyAlzL#!23L%|6alM$mmK@SMCh>YbuuYRa9z{MoKiTrV zW#*~8yctlvTi=wt%XG86#Wo?nYD2<3EZVL;?#HsdPP-31MbCge$@~eu07o-DglY!8 zASMwzmPn61r^z0?Qqc)Lp45ju_t{-N={qRBOqB_}>*|L+i2|~{XR6x0K?)GPFk#od zJX+d3z>*xicD8jrZEV23NQpAM9c8LL4F9RTxC7Cjr&1C~yNjF`fCn+7bl4B(Lo~gU4(=7Yc?u z*lh*9A19JMl+K8~6TdP&uqlbW{;8t9J4-gaS-vs7Xa@1Te0YSsy_u=JIuLigX9ga; zC$?}d2fbIkA~IXO>1X}CXh51gH)5TWHYk;fq{6L7~08l>sF^Pj3Re6R6)jP_&!8lt#e2ymK2pd)X$t z{hjkYH}0vukuik4*z8}tum%u5ix8;%vD>xhzy0jo(qIM$T>W{c?jXXXi&Vn$koNW zEjBbez5PJFjIWtHCH12`D~hB&#??c-wk^y(?CqSrlI|J1QFe_z0q6j`O$2m33Zlup zO7c8CS&K0~Oq(n{KyRTvbWbNe!O`D5benj+udSE7w8E@Cny7odYfFth)Bqy8iMPW% z8=DZkl9MPtVw#IQcRdfi%-@E+rZho4Y%AqGuD-&(2=dN69i)i8-BmF>JV)NVr!X76 zlSwPR{eA?!@d~WHSm8LlT83sk8NhqJ7)z8qA+j60i*t`X=$UCf4Aqo8CFk2b-H8*u zR{z31Y;WW}XX9c$NF{$fX6yhx=~_6wV(Sz=zS8Br2;U4lwDA$WM{CBrw3WR)HQsbQ zJ+du5HwY6woABp6E{d?c8vDb%-C%D$mnTQOvAWT{EH|+|P={(gHb3P&BIYhVdCzD( z_Ze6{>40m!99@w;sP}5U`L6N1BY`G6ORH5q?8OnihyjW{pG$1L7bnp>--m;|4m88O z9AnWun~#>gxmtETMF#M@*hGLm>yV5+%ZIhSU=}qzXFe>wB~P+FKD_F^@$wG65=_E9 zl~sg2fOPu0{3HmxX0eMryeTL>i>e_#+XfiDl@SZQ3&$iq;`}AM>;-?lQUf5p$hWw> zx+D-hopu1cJ_VP&nKCE5P_rI8Cy4Aj`V|JfY++A4&HK;1<<#9hgGd~_ z=DHC*p+79W0D6(VCgPU8zLMZPUG~O3!)+Hj=5E`(tVmoug#;Kola%N^Pnl~yV9dz9 z53Gtk)i{Q|R|fyQa)X0B-fuoVwZh@NISJamwbrFQL-W8rKZt`pc)cCHA2&uM(U?U@R_!XG(2JWMG)eig91J7UQ^*9Qo_oG}}{8BP8> z4V-tpU5hllLqSWu1MitU)J7M)`BCINl_HxxR`q{8K7SlM3#%l(s9(iB>{h!yPo^$C zYbO)DvUnW4-|NOb>^AYde>VcX++3?W_X4uLvdUPz6q#Q= z(^3#V!eqESuP<1;@<;r<-&|$8#rd1P-icg2(?*=V9m;~eFaDnPHK=!b@m8Vm4zvP~`Ny+I@t*9u5;d(|nFScMTD}z!QtTt@czs(p)sW z`d8aM7h}FW;{6gmP;m0RUF?IsbOiN0F$`0^avu4-#qXQFFp;RdzA6Sk~9 zU^BcqTF%nED4qJe-P{Sh#NQLW%wu3Zzt!433hKGLyR#QNH0(9K1uSnn(OLsNF}D}hgZ)K47h&8y zk`muNDZKPN>iovMA`#_1Er2UM?i-oC$!Y4lh-oXmsWFPXW+3Ri<;|!)rB}K=fr)3l zbYZi-HeNtIPDq2jK|s?y<$;qu0#oHZ=#pPOHYZ-aCi2R>+VAMQbieLBLKi;0ceWcn z06d;Om8gxq8ESsL zt|#C;j;o!!R!@Sx=MXnNn29|-#3a5smUfH1o_EB&A5sZD1plkN{O(V^HIchK#};P1 z9o|i`73&2MTu7i&X3xH+6V+sn;6_sLW}J&VaYcAY3a z?4%DqWxFrDJ{Bdsgogb*8-D7%4^;@g(OZ4HMwmuDOq&rs=eR&UX zuYm%-NQ@~xr||#0m{UMJ8JU_rp=l|-8UNKike{l&S(^&Ic^gck(WRw4bV(Y$ z>4&+!U?9#s(n6X&rcFY+B{);PLa**TpjQpOqBdkbZM$$hqLUUp{GztIC@mO0)3ZW7 zbrotojP;*9)v3R|G6X)n63<6HilI|Id;ti&?BP8<&G4MOR{Q5Xuw$9L8X&+t-)EmZ z#>r&6a&1h#SexQJ&(smS>^L#Hr5OZ0{xsgbQ3WtPAYE^~PZGYouvF$eGj@zU`=XM) z8&~%{X{A`b8}wQ|c47uSR56D=gf&V%do<)cP!}aUB?%9^vo`#_$CY`!*b8nwdNl;R zDSZgNxOf?;IaTcP~KEMB1?n3F?=sO?&Bmq38TS0Vsvyp16bs|hqURuJ3-C7 zjFgZ)?5j*YKkE@aXv~K?xDX~gM&1`ZbXZTli#r)S;PzNOlz%!rJq)uwJY1AKdE6kq zhgk%?TJp3#FvpBM>W73nQOI*W6JP;7)ik-h9Z)m9@Y--aOru~td?3R-(AY3N@s`oM zesmzbdvnUYBvh2U9i)W3B2+XzyhLj~q!u>4aUd5yP)l>Wxh^`rVYJ*mjthakjI0qo zx?MTEVHi?9Ww~g)+wZYEg@ggV>qck2lRaTQey(CYh^#t2w&5$i{#Dt$YBN^7)t44j80 zy?~s(2pb2zBxne`ay>e|1IT&3S;CpSy)h>}UkNciFfhV9>w$;*ws24Ay0 z;Qj=?T^S2JdCHx={txfG>w1Jd)$>KY34lYoA%XGGYY2fiR`LXmq}_PX-UWac%rOAf?~ENuL$FN&~IEcRHOt5pF-c zUYLly3f5UX07iH^t4!&=uzH|9($qD*s&Wjyyn7D4s_jrc0#+kDuL7jIC9%%D>ArS6 zZ58CY(m?~fbt5-D!sR4Ae&P;2g~EBgMYmc#Pqf%PE%tLg_~)xTDrJ7X&#MeQYQCnt z@z+T`>ssNw50{6%TrXZa`||?52y-R9nVYMguhB|$d5HcL%C6u<#J0&L+t z-XX_4?YyVG{hr{w9h|VdPdW;|{;v_ednq+NWWW?UTtyZgmExH^ z`iuoWy04}@qp?>!;gTgisK(bk#Ob)aE{boxwm;&$qYf=QkpnM1d>nec&*}?3Zx@j~ z2riO6>b!|O4n!Ecgext*hwm!A@#hdd44S1q1_8T0JGciuZP3)b%|VwvGkW*DMRc#c zCzQ}TaeW3o6FEsey=`i}v`^B!(*VIaLnSc13RuUy$_FjIcJ72c0j_PmgP*oMouqv| z$iY9nGmIy_3yX9-2q+J|+k=X|;9ju3uC!)7qo-><|44E?rOIi&Kk4K=V!~~`raSz+ z%p%M@nM`rLNEo|43Pu$@=NX&3{Zscl=XI&QULf#2BHfuhY;RvXu6K;Q8J&u~t>rnr8LC{oy1KEw z3$oHZ8}cu`&Px)#pf=Jx2g0j8$?XO{%%F)qCGD3yyXcrba8Lj|#Nrw~r8#=M3&d!= zKDReL+QT9}%V37R)D(q1T%6`T+f|x967irs%yLq_N2S@keP52ctX;G{AL5g}2EMdB zhoFo+yrzsi$!;gTg7nfnfNDuS8$~=lf192>l7uuoe$*g6O(c#yIX~jNs~1?kHmkq9 z5Zd`X&ZA1bv$X=g8kc7~3#+s}Jy>HsmCg^neJ*{x&`^{-f;h@NQkgHkL-~$7+sL}S zyMDPlWPYtZZmre4deD)*>6}PCOVZxGv!V*USl`pUj62i3gno~_|MhgdZgWk&bmvSx zcIfWCkU*Eb{OF&(J$XDkuSJJETiriBbOU+4+cH$V@CPP6;uEGkqHPj88-AcVyP)_J^*#Q)tXQp`({Pp^w+Q#v$iDi9K7rWuuEd*PYQk+MM}4qdnp~8AYbN z3Y8nZ)G(?%Yui~o)|OknFUFiaYy6WtcQQ@A2C=QZ;6xleKK*k&01I`!jfcv+SWxr4 zWkr`g&e%o0+8ZA{E56yhoO4jU{vZ!M0%gTL4q~S{`~aoAne4LU-pSFtxHmApMg=K7#TqL-&PJfU8XEdMk~hyg0Y=lj5rcX?Tx1eF znUeWDfPSw%VSa->G5qhmOn#OU z9Z(a#mDj61?pqnX;0aMXn@1D81m35-9Hj+3_{b(bRc1E3teH_gOY}3nmWHT3PD$mx zocN2qhIN2E1uNCOH#Jl}x=F#k(5mS?2r5oJhVctN3R3$#08$^lbT*+q4i;5Cw&WE( z_Q;sMFFlt#l0u5TtC`R|6Bmd)S-2g&R%rx2DmkdUyMyIDk0n?=Ba`mD_IM6H;QuT= z_r!s{WJTUQ8b2nz>Bm65(rr*Z77dg=kIu`zMW`D*2fHpj7#-idPMw>*NeYm?XLPeX zc=bm+^(b1r6$ffPX_FSYR8GmfA(!pF7TeZ6X<}hJPgozlE1b5y@CIhQNy3agk>t)j zO%G^2?J^j>k)MS7DVsyQrMKep`~f*1#(~_w%(q1mg?7ax*!+eEEXB zO*M5r;v57#PaYG!I36LWbWiV|0qqp zdejlTY}_Eam*la%DCYmYBEQ}_%`^)=%N(aXB0P`1uoSXA;S>u!$m3&r-g<2K)Xzs6Ng-tr|W& z!lh`vI>MVr4r)$l;U$*bN zFTf7Hn1hJCOT~V@u|%o8lKCt=)c=V+NWif?rX7VnRB+|Ioqv11=}nqFU5WU+* z6FNY>MzO^_aJVBqj4ZD`@#~Si=u4M863DPU)xR-4f|xnI$Pyhr;5}`-?M&G`Z#m*S z8U3a_WP%C3!4CvH^aJQS5*Il-qNMD+^I%Lo#2C0eGS~q=5j2I*2gqFJ&$Tjb-sF`t#a35Y#B3Hi3X-UijY_V*$^(~>PZCYjT{ z;P5~_^B&whte0cG8&@B_Gu@6n5ZL!Uwn5ChZWD^V2twSua053zVyZ~JaB%)Rwh3lE z0-2$_uG8|ozmEAkt#s_Yan!lJtU-jlE*%*?6KQq5?R4cmI4F-j-2IHb!KN-c=Z!JG zCsnsR=U`mCm2MHeD<~(u?lo6Dh*mGVf;@0NqRk+^YNMh(AcMfX_%=nncx5HK?|Y#< zP1T9Kn~t5m6ZvJmJMJbu<3`6k<%$ix(exg@q5d_!)eca-UONpvnIAU2yXp(Q2s>uI z=Cx!!s=o|9P%+TD4GgY5S3B7}bdzB`&h&mgNX(Hu2yY&}w^~R&xI3vl_4zKmhRcIJ zIGkg=UOS&X&@c4|;95;zQsXbV|!eE!YOV@h6M4kjZF?C@*g^uDp+C@t@ zz6+K-jF2e2L;L8w5tHJ*th8pm_5vI}+1n>Qfgv5dwog{P;-NFVY$h5!1bKnILGrIX zD3xYC_R|$TBvGZkRl65Gc7I1b8kw&>)w^6hh3H+q6@mJNHn$Z9h1?h)oZ@M(A}tnS&X<(sE!tp!EhmkX2l~>eEZT6rR4lrcDn$*aM$E z-|r$l-bk@LZT?(60tih#A={2S<(B9?V)i+`Nni3jfU8$M?ZNQ65M2JeL};KrRUK%& zAn}#FAI&(u&a@-EiB-+L)c2>o&RZ@vh7|xSJnuKC zYl4|Peu&gO#lp`$r~xWHQ3n>idW6kA?Yk4bWKM>?EY)wl+BSo|j{Y;fp!okhprwjE zX~Ew+%Eb-5ru;s~U-GW`<0X*(#qR|VBNZ9-c;epLcJwJ@>0w5*anUr?O99EyOwEE*-f z(4}EKSoDWI$r1@Z^Pu6pZI1D~FefR!TAWqA^)r$^#8E4|dp@tcfw>_&YQ&a3Nv@MU zHeYBwub`_vD1;Ebt{%-jKoAza`;D9c0D%90yf`#Wygv8dJhrTgJn{*qy@R;FyayJ% zJr0_{Jxv2gyR}!GJvqz8y+)W-y_|YIJr=^SJ>KZIJg)hay(yQ!y(N{_J=~I>Jw{+p zJwGJ?y*N1ty)Vavyyn-}yFi*$y_HcwJ#>YFyxIJ!JT$3;Jt#F?I;M`!J&Sz$y~P~( zJoEDyy)Id6ykOb8ymCm?yJ``LJac1+Jm-Wyz33*nJ%iD(Jf+xryutU2J1&2BJ%jia zyot@3yZA|fycxW6J!=gVz7oU|y=+DUy_g`8y&Cxxy+nZNJSm69yVc96JsnF+y+v0n zyfI=Cy_WkJJ?u=wJPK6?y~EH3KD5SyJ-D&)Jv7ZxJ?b-tJT#J@J+)8FJW|d1JP4{s zy$wycy}vGoy}IgvyB(O4I|sJVyvMZFJ!*2TJd948y<3QuIhF_>Jhkf^yfkH?Js?I- zy~y2@y+Kt}JRoCCJPKyvy;+zPy=9icy)@nhyG^*PJY#bLy~t$Jxqc?ly)SXsJ@%~d zJhu2rJgr)|Jdd~7tJ+82#y)hJ^J?Sp0J-Lsqy!Bqa zy%4vVJ=&ugy=i^9y|d55y-7yg?dey;03mJcF=vz5jZqXJIaxT zy-@wAyxwHyJ>K{8Jk*LgyjswNz0UnHy=i@qJtrb)I^n=oJ>rCuJG-1ezCS@eyo5u= zJY0u{JX<0tJ;7SNy$X~|y`44(J#S+9JixvtJu0&pJi!{FJO@GSy>moWJ(xe8Jr6;2 zyzo9}y?^>By=wG~ySX%6J<{Ziyp%(Uy*=WUy>%>>yoCLQy^^uyy8-zEy&mOuJPgC` zymLrbz1#qZJ^oQYy=e9dy!0|vybH%=Jq9rJJV1l`JW}n0ylki^KI2Mdy>g&{z47Rayb5}ty}O&2 zJ&sUEypdb}yw=k!y@bxpJYFSIJM>RyJV|0Wy@Y+VyvU3`y^5L+KEdo&JrqNYyt7XL zy$MSCyOkW=JdFCwJ)BYaytlxNy(1`oyXpO7y*Icmy)g*vy=PiBy;)oYJbI}>Jg$BR zIyE+)y!}-nz58N!ymyshy{uudyz~oPyy7D-J-Mv#yrI$`yp;Hdy~OYkJ%(c-Jw0W( zy^g;Zy}`^}J%V9qylS4fJpaxEJPBORJypRNz5FzdJ>(5Iyzo2=Jjf%qJ)H@)J-cGG zJd7DUy;nP#x`tNQJk#|Mz3O&BJWM!Eyw<0@ysfG8ylg@(y?W_HyqWciz1ETqy{#Be zJ?ZoQyw~!}y<)?yyZ*Q(y1H4Bym6;#J;C+XJLDs(yiu4Mz9=}TJlY|Ly-l^ey{4ec zJ#0&!y=}fpJcY;-y@Gv{J#`T!JzRBxJW>=J$T@~ys}xcy#2S@yum0$J=Kz;Jn{w0yg}2A zJW!9=yJys|JfRthy_9E=y@p<=yh)KTyf1V&y8T8`z1njIy_>&Dz3KU`y})$dJiTM7 zJv_{Ry(u3ay-_pVy-2KOyEUkz0ty1y-&$>y(bNIy<5Y(yrX!v zJ=lTCydVUQz2QS9z45U$Jz;r)yM5-ZJY@z0y?>TFJH;kjJyp?IJnWxcy;Fo)y*XhM zy#<6vJyGj;JYb4UyomNWJT{_#J&#BNy-~K+J%{TMJ-O$5JcE$tz4*dMz59wq zJ(%9nyd&Sgyhzc6JT}xfyy_=_ys+1}J57yubMNyTf=*y+IL=y`E@{J)uUf zJuegJcan!Jk`Raya60~yPrRx zz57t!yYB|~Jgu^)Jrhl6y>uiCJm>fayn?_bJY7JbJ=V)jyRB4=J#Bb|J*xkzyAY(M zJyEiWxn`H(JmzfAyh9bAJvQnDJ+K8X8=Jv&)Wy#wCuJSfDpJ&G%@J&!uA zJm~16JzIjyy_p>eypAb=ymFT_z2-&by#BruK3Dz|Jl5&wJOnuUJev~GJeO!QJtx*N zJo+k%Jo>OMzFF0eJ;b+qy*!k+J3m_|KIPaGy}llay`%7^y~`3( zJ?5wNyH0zoz23pLJt$8SJj!ihJPkYoJuOy%Ju-V=y~NfHy|bpRJV?DZJ>F2)yM@tO zJviHmJ>5LKJ;@eUy=Lu&yhyptylkmWy}&>4JJZqZyoQlyaZZxJR)snJYL(y zJqnQuz49X5x>V*lJwyX4y=ROJJuMi}Jo&!JJnk6iJU-;Ky)n(iyd1vKy-d%1y~_c6 zz33jWy?od_Jxbv&y-Mt6J=L#Ayhy}>yz#KKJoPNsJu4V&y;LQsJ^ohFJ&O&qy{mRh zy>zf>yld3Myo^r0ywy&*y+<+0JBiw=y(I*ey?}PCJ)d#^ISYe{y(tGCJtdzQyfCOq zJC*T?z26|VyqZ#ky(Y#5y;iF*Jr^QGy||lVJpU!3Jy**5J7LYxJcvVIJ#E(kyq##F zJ8Q#8J^ZW*z3(|!JcqMFJvf5aJ)S=5yD~t$Jb^n@y~5t&y;umHy+?gVz3g~`ye<)m zyd(LHI~OZDJ#J-DA0y<)CXJyTipygEaoJhu+$#YJv|=JJm#BOyu}0^ zJzYVWJwhd1J>brwJ-Fh1J@)C!yrD+nJp1Liy)S=}JQ>QgJ!KRsy%J!=Jcs}M|hJX&SD zy@n!rz2gd8y|+r%JhU5Vyyr4(yqG*)y`gFkyu*fYy$HkVIiLZXy>s~RJGca(Jlc_h zydRJ)y+;W3y=Rmly_?|^Jqe{Iy`-@9J%8RZyv4`}y6WvIJkua+J3nN2J zyJ*G2J#n-Qy>5@OJg#8Pyc%YIy;|t&Jh=p&Jk&4ny?wq4y(L@|J)`!RJErjlJ#!d6 zy{{E9Jv8YjJn2M;Jw zy?&W2JriLZJv1R#z2!X{Jt7eWym$6yjh8CJ5||% zJNlM;I%CB2JcqiMJF5Riy`JTHJ&1eqJbXPZJ({)iJ4-H@y!ifCJ;sIJJ=GLhy`XmS zyMY1yy%`73y?Q9+yie*=y_G6~y(=I7JYlccJlMrGJ%23yJfHdyJ=fI-JqaaiJXE8r zxeyM7y#iJAyZ{WIJ+){(JqOu?JpY@4y}5U%Jw|e@ypEF3yA}p(ym3e0yr{H_yN1ykhvFy_B0%J!`_W zJPZlpyzeK(I|a*mJN=?@y_FUGyaU1uy{N7*y{mLAJp)mVJ?EXqJwh^-y{VEJJ$kI4 zymV;=KFCzcz0w4%IxMw>Jvm!Dy|hY{JaMXpyzyhNJ0VD=y^DANz4gtxyi$d@yz*3z zJ2efz4GNwJnEM{Jl*AHJra&Fx*_j1Jr-$?Jj01&JwXqRJrXh$ zJ+*D6JvqR?yC#yky|A8ZywSKhyn(=?y~Q#ryw5i2y)y{zhCyhJNKywL?KJ>mQv zy*G2FJ@W~|J@=?#z2gqPJ*X#!z1IGeyVN49y;=>oyp|FnJ#PKWyvxp}yu3e{Jquub zJJntJATX(JzJ5Zy$o$fy&%?Y zyyqBDy;$l{JX_WJJpXIjJNPBGymw}AyH;c%Js<`Eya9yuJ$8`3Jfht*y&(%0yuL`k zJPQ2GJ@U(zJvH#CJbS|^KB6N%J1akNJv5&#JT*%)Jzxcy;zMbJ*8Sfz0^!@yr;Nay)w3sypprQJjgz_JBBkUy$_mg zI(p3?y<35eym5}ZJQw&`yP1L%y@r8+Jq}&0J?~alyC=<>J97@nJ$Ck8yxinAyJGIt zyoM>Sy)>b)y$Ld_JoIm~JYI=(y}M5IJwJbLx|QETz2r^;JqE^CJ!L-zJmidly$Z`Z zyI%KWz2GDzJw@a1JR!uYJ)PW?JYn0tJYEe)y?cKMy~i>Oy|4>?yoxuny!nUbJrSlQ zz1`{Wy_6@Vyczq1y%2WSy}5}JJu-lcyF^-wI|%~zyu1sHJ(==JJHY@}J#acxJ)&Vx zz1C{Kyit`nJwT3>y@fQLJ7qNnz3K!kJxpjIyuMoGy&PyJ<#SRJU09}J8FARJucIXy>s&-J!TFYJQ=hR zJ)kM)z1O?Qyb*X;ye?*6y;f#jJ))L3J%#9%JO#xeJw0g?y+quzJ+v4}J*kplJ?{QM zJS4O5yhM_yy&teRJxMa7Jm<<*yr0XjJ(zI&JfLa-z00+GJhSBbJWG{sJpg42yrmf8 zyu=N9z1|aiJ^5p&yvFV!y_KOQJ=Q`^z1%Upy>hBYJs58Cyw5Ncy;U1Ly`onfJi;DyJgezJWdz@J@*b`ylccPy|m7hy`y9yJ@Nb@y?eDOycR8$ycdJSJW|Qv zy#=nhyc8^&Jd1F3J?6XgI}oEUJx~^oyq}fJy;b5cy@RlhJ(H&1y$~_Cyz*QMJ@>#m zJZ?RJyf|KkJpWPqJ?{y^JysLJI~j?jJgfI1z4E8Ky)-0(J(pCKI_b}+JwD8?J;k@( zxy(*q+y}}S3Jx$J?yV1aNy3?ylU3DJg-GEJKlMIyK*u5yrQ{X zy$X#Cy>#aqy@sEgyb7Kcy#+4Ayj}XPJ-tc*y*Iz>y;mo2y*|{%yu17eJyh@sy%IVr zy@o)#y!iDVJR)WGJmL~_ybtdJz3wGhy)wbQJ+uf4J?U06y&=K5J-M^oJJ;|qJp`=B zJaRj6J?4hGseJxDXUyyDBMJV@VmybUCK zJkq{`y#n3>J#P_bOz2%-gy(K}ly^M_gyK~(V zz3>U4J!vw^yPZG2Jokh9J)emRy_#z?JyXmjJzHd*JdWfKy<3Jjy?jnEygh3;y-Hut zyimyeJQ-_?Jmh7By>rVbJwqHyz4Y@TJvZz`J#7U#z01G{Jr>*uJ{8%%J9^8#y>Y*p zy(=JUO34y(MO9JM#;|z3pEYJt_I4y^*PVJ!=lYyu~{)y+iPTJz+w>ysy|~ zJfHQ~yv@B^y(cPwJ&SLYy_ApRJXf0TT|JUTDryfu-UJw&SIz3fP< zJNg}dyqWODyM*5fyB@$pybA#(J~bR#yy^u;Ly<)uwJ|A(IywTsRJ<&5Py^ONcy}Eld zJ^!v@y@|~*JlJSBJzjr}yvg>4Jl9Az2G0?JngJ9y?N)5y~L}Qy#aU2 zJY2KuyuQO#J>SsWJRCf4J3I_iJq++RJB`Vdy%4Xty!K$tysM`XzW2S7y<>!3J?N)2 zJ>WtQJ=<#jyffcjym;I^yL!Y)xXt2^Iy?2(by@qN-Jd#3az0tavJcyh}iiJ%Ee=ylSMgy_t&!y>ML`JuE~@J^IR- zybC~8Jfi|lJ#2rQJ0)Zgy=&%|Jmdz%y-z#uJlQ*yJ;xay~FyN^kdy?rO}yyMBMJo25>y)msryr9f1J>{?gyqJyh1ey<)9aJj>CLyn|Cuz1z!Xy##s2Jmd|5Jq^o-I}$@pz2R|MJ)}JVpFqyi+i^JVokRJuG7yyhCG! zyz=c#I(HAJy)SA!y>+|iyozKuy;(*0Icd>Kz4qrPyY{)hJ=d7Iy^M%^JAr2yeZdJsQsf zJ!8Qnz4O6xyoA;_JvTCSJv{bqy|C*plJyoLWCz2ehT zJxH~aJsjRoy_ka!JSep%zDAx}J^g?RJSKy?GiC zJ=1DUy^vK^JtWi$Jt?TYJ;f=KJyw8jJ(NC_JuK3Gyn?~l zJrYvNJnCzRx|lJBJ>HhkJU49{Jy~3ey|VNry;SJ^J&g66I>@F%J=b``Jz6?QJR#+a zJ(|eIyx&kvy~T`Fy*kFkyryz{y=RT-Ja!3tJ3Q*-Jr`WKy>eL)zFg1)J?(J&y>mCd zym*Z5z4U1BJed$eJSRfTJCXblJZlTIy|lBYyp{#zyo@XqJ*U~Vz5aU?Jx@XFII9$n zJ@rv-yjp^byUT%)J?_ZSy|wJU%A~J;D%8J>d?kyyh4NK6EIOy$IPWJ-)1ly$RG$q9JsUu&y|)gJ zywVUWy{~CIyxOuDJ)qjbJTu1SJQ%UwJey|UyNMZqJ+t=(Jr3c3yhWECJM-tgyle%;ypbutyqM6Ay^rfK zz2Q!^yfpy~y*B2Ax@KB}z4ZZ#J%am%JWQW zyO+WkyuKBRy#E4Jks8Jyh7&aJ1zW5Jq0X@J&V!PJm{~7y%zj3yz*OwypF4>y_NZ zy^h0oJl8DIJac-mJqxaIJJd=Aa zz1^^3z3hWyy^NvOypQuTy>YNXJ?#SUJ8Cizyko}!y|vbsy;Nxsy;6S&ylT=Jy_Zbb zJfQ7yy;xyXynH%`JqB5zJAPS}x{N*ZyO=gxxj-GuIe4JMJY=?myg8oxJSLLsJ2mTF zJmN&WJ)5PkJUkl-J9LW8y(fK`y_UV0y`BsPz2^(MJfYmqy$jR{yC@4PJY10!J^O|Y zJ;+emyz4&YyF8@kyo-4EJb*|PyeWxuy=z2|J7AQly_~wwyt#{oJ53&OJOSRhyQhkh zJwu%kJ^c(~y}@37y`@MRy!qqZJd2sAJkmutyy(_-JdgpLJko;eJ2NU|y;10?JBxTI zy(@&_z51khJ9>eGx_)S8J&&CZy?fh%J>#Amy#oW%JURA=Jx#BQyqN@3J=PXbJi5v% zJ!GiuJc^(MyhJrzJ!6RVJc;z7y>ZNLJS`hzyb>T1I|i0`JxS9Ryvb8my?Q|_y|oN0 zJdygmy)U#zJ?9U8ye7!QJjBg1J%+gfy$98?y#@A@z4LPuJ!KXcyfKs9JkO-@JPW&q zy`A(Dz3|g0Jw19kz4VcGyjwdNJx2SXJur-cy+684JV_)mJtY##yNKZ9J#rtyfL!cypvj=J(z{;yTw3by@pUzz4+D6J!OIqz55(EJz|JC zyK)PpJ1B`Jz4gU_y_S@)y$Q~Ky@$00y|E0%yaHgWJ$*qoJ;;;`zGPy8y$cl{Jm(h7 zx~c!&JZat_yE)#2y+2`xyeg=NyoawOK5#}UJqUn&)2J5&I#J$|_1yC3WHJeRA6y$si@Jtjm4J${`q zy%W-sJK3MtJz4AAJ*yLyy)9LQymCL3JsJbbJC+t-y|T4%ysQjgJxa-ZJ-`4Jk_pU zy>pPuJKUABJ5>G|y(J=dx|zX^yCe4Qz3CU4J+3pVJh?DYyqOSAz3L9Xx`}@Ky`2ts zJ&To)J@I0JJJQVEJ&n^4y(qT}z4zzay#G_(yaIuxJGPHNJN>z%JhI(*JakREJs^Jh zyl7jGJXZ#*y(50dyNo0&JZ>vay}mAtJ#+J1JqOG{z3!Huyi{W|Jt4?Oy-pH5z5S%{ zJQ#F_ys*$cyP70ZJ(O{NJ?N}$ydY+Qy!YKwJoRN?ya8bGz4l#>J!SjOyq_z@J(a2P zJhGg9J$)RQJujjGybb#ZyaL3_J@X8ky_$i^z2Z#eJe$dBJ!okbyuLARJo`8eKHU*X zJj-UKyqaHYJ)&rGyaNWoyldTNy>sl2J=;LTx)@k(Jxmr8y^SUEJr&yxJ>+6}yi|4B zJVZbJJAfFuJwjmjRy+_&!zEq4C zyk>^*JL+`Wys9^!Jx2TNy%$^&Dyd-ZaJrXuTyk@S0Jl6r~JXE3=Jti^; zz1dNVJoqk2J#6a(y|^zoJ*sFjJ><}Lyh;?qJ?yr)z18&AJSo>D=VJxz?1y%#7+JrF=}ypa=5y$9YcJw35AytzOjJ@wTey;+v6y`!edycTMfyfv_w zySb}Hy-(gayvvROyl)eSy`3|!y$yW7yCjJOy?_QkJ>*1&yw=VKKJW`LJv6gHJXMd# zyvg9mJd0TQyp)n7yxfI_J3=cgJrxm{Je4nMy?D8Dy_S9&zBm4}JjY#mJdxo{J%Bwpy^EM_Jdcv_Jl~0%JLxtpy-dQHJ)=c4 zJ^yUdpvJyCs%y~Gv^zT(`NJgCClJ**)hJ@I)mJs1Ndx*)EhysLm|yodfBy(BUK zzU2R=yWaLeypXytJF**;yceFzy;N;=z120qy-IL*ym0Z&ySJ*o%UIrFZQJh*hMyEx9Xyb+P|JThK|I|3R8y#(4+J=$G@ zyf4!hyxHplJ=#pOJ$*~tJlQRQJ*>WQI}XhNz45WNIXwi0JXC`CyQNXFJ=6MBy_G&j zJzuN~J)Clry(zwfz2kJPJYcMYJ<3Tiyty%3J$$wMI?PonzLVCCJ<1IjJt!F5J^bd3 zy)AAiybjG%y%LBUzDfG#JR_-qy%39Cy)mcgJC!%7y&Hxtz0{@)JV%F>y;}2_JvE$a zyqB4uI|x-OJW#nVy$^%|JBDc}y~t@TJyl4iJys?DyiRmly;lOpyk5$By>-HJRniRyl)yhJl0%@ysTDdy@;JRz4*RXJShlWy8I>xJvg?gz2qpy zyy_N;y?KKgy;6LyJ(R>2y`|7bxNI7fJsGi3J!vu+J++XhJ;AquJz=3@y{SX4Jb4Qh zyh#aIJtYwqyvF8Gy?y1jJiGPeJ>5=$J;HWfJ@_<_y;4zPJuT=0ytH+KJZ_F-ydssdy}341 zy@nZRyu0%~J)^4yyZ@MJph6jJXyH{yzmCcJsTJiy&!#vJvqP9 zJoS|#JyH}OJ-QzXy_b{JJw>RNyap65y@oT$yWNZkJ^!zcJxnz1yxN^ny(gm`yeN@| zJh*nPz1L~Syjiz!y~vX_JPqbcs`z2J$BJk|^Oy$MJfyIIgCy{oT~y$HCjJ+Wt&J^zY?JMjS# zJ7#f9yg5isy&VO1^;ytAbPJH{j{JXGGNyApcLye0@JJ^Z?$yWBF$JEUF#Jpp8B zJrfRuy9f-9z2c1VIy|`%FJZSL~Jt=;XJQOi%JfM|zy>K}&J%hUhy<-@G zJJT65dz1`jBJWW3tJ^TVqy_~6yJj+<=yi0;az35vYK62&cycz_) zx|SfJz3r_}J!ZBqyqJT5y`P)rI%CfOJyeN4J%pY=Jww(Ty|B~3J^fY@JPJp;JR#Ka zysqVfJrZ9RJ^g?5yZ69}Ja$pdJP4>5JaEW>z2($+J%#Q!Jy#_my&1K_Jz&wDy=jL{ zy^D#BJRK(+J>()8ymX?3JhW$fJvOzsJ)gA?y>;~=JuRHtJgC6JIw9*Rya>upy^KOv zy~F#-ydc!{Jex~AJPKI>J+xq+y)(a&yc8U+ymm+e2iy@piL zy}SjbyCrJ#JL77Jy;BVxJZV5QJn%p&J-rS;y567yq9>Gy`8XdJSxamJzY1CypkCCyrU{0JseyfykqO3yyyE= zy&HTty-P@?JwwhAzOhb>y;KmMJ*uz8JWyVWy(G0jy&Zh`JjG-Kz0GE_y|ed+y{3gs zJ%2thy=aLuJU$-hJvMu0yF(R=y~~2oz05sFJdu8xJu^TsJyF5JyuoUoy^FLzy@>v` zJ2Q}_Jcw^YJW#^sJh(83J$w0vJgH*aJcJ6~ya=j=yQcz@yhU`jy#}eBy;GRVz5i>4 zz5gD9y;8$my@`y?y|4uGyguB-xwvrtJ$%LqJyJo`M)Ja@rbJPqM6y|JLP zJBb@(y_-vjJ>AC!Jx!^Cy>!RxyiDhvJs(dfylO>?y$QTfy|@xay+)R}J?KKAy2)uE zJ-^P3I*(wfJ$D~(JoKmHynCGFJk?i6z4rM;JwG&OJplI$Jl_`?J@UUcyiOI@y>idq zytwUzJFnoJz0GbyJ*!rTJ)wi}JYy(~y(ZMIyyNXKx{|VhJ@nA1Jb)%&JXP@tyn;O= zygbfNJNykqPPJo7I#yydpPyd6 zy%o5{yx@bJJRdT%JSOHrJeUmrJZf@UJ@GEkyy41gz1}{Qy&+wGJe}(ZJePtky=7i9 zys6y4JTEGvJR>h7Jt3{tyqPB_JtF1Uy%@-(Jouy}y?vy(pzJy`7sUJ^Ytiyt`c8J)%DxJq~0? zy$*zEy(L1DJL6^@Jnue=I@hnJy)rF0y|+uhyaa?;yua+vJxyh|J#*d!JEaVOyce`# zJ%CvWy;%$=JpR0!x@JqlyfJaSJppsSJ=eB?y^BX7y-=Y%y?n(-JyN7dy;Eg(y>YC< zy>pL4y^p1_JsJqiyc{|$z5JDXy@k%1J=1-Pyv;EWy(7q4x{Ur$y_{J?J?JKoJOwd~ zJsn0#y&B|&yx4W{yQ>keJ(#QYJbNyKJ*gReJ@}0%Jx6>Vy{dT#y~a1DJ4e-RJ&ykx zybaCWyh3~vz30wDy;M0sJ8wWEy?D$BJ+F46ygUFty(8FBy}hT6J>*lNy^ul?JiGVq zJOC!tye9Ahy)gn^z0T6LJdOnNym7>XJ+MpsJc8GUJWJIcJx>s)y?|sDJZb90y|Wi~ zyRK4Sy~zmKJbJDhJ)BO_ydiFzy)owCyeTI&J&pw&y$<#GJT_l(yyTn`Jp-dty>*O? zy$mPgyL*X&IVmIgJdG?0zUX9)Js`P7I}8}gJf(L4z0Smfz0q#NJdL%Fyj~~(Jy+zd zJ*9T&JfDj%J?xZsx-Q-|Jv)@My(J`Fy%xUFy)U}IJqM|RJ(+-!yEbJ4KH|xY zy~L*EJk92AJW*Gny@= zz2&k+J>>VtJz~RrJ%Rp=y=;YUJf7mRy;C?~Ju)RdJevRLytGL1JOT??JY;(yy)PkP zJp5m9ysYWvyyW^4y+OP~y<+^fy;%u~yu8o0y%nejJ;ystJW<-PJunLIJ0zm5yfKx< zy?4fzJbt;Kz3hw6J@G5EJA9bNJ4?G2y}am_yoX$*ycJ&Qyd)dZy&>ZyfMdUJ*OK3J+i}$J$OYfyhMmSJds1fJVeHRy<{^HJ>zvH zJUq*>yoE7>y^Mq-zU=(vJO(!ZJ4q}~y#x2Eyib`mJ%Q~8J%i;oJza+jy)R{!yglNJ zJ*MXCyx+GdJt$J1Je}qSJvmh(z3=x*JrtRhy*LA7y%ccVyEssjJwF&by!dwRJk#AC zJ;`5hJVNJ$ZnEJrrXlyn2_*J+*8Sy>$0zyw;|{J!f*H zy*;WRy|Ca2Jhc{Iy~FiQJ%jlhJx?>^y<=sGJPzv+JuE;myeXawy_z+oy=IocyegnT zyu183yBoQ`yow9nJRwUTJsp;$yVqv zJa!x$y`6hayu=zzFXf~J66`qJuBD^J&{tUJdQl4y(*|8J?3sZJx=qCJewa6 zJ$quGJfL8VJ9s;Uy96`_y~k|DJ3Tw*JzhQTyp0ASJ%`{Kyn2b0y0al9J@ry$y>m1} zy*~<>y~LXOJP|-#y}O&VJ@)N9y{?ZnJqEWVy&~R}J(R`ryzQDcJ4xAtJ;B0*J@h!H zJQeKYytGmxy~nBhJCblEJapWyy>3_xydrAgyxW*oJ>zXty$|{Myzzs~yz8owyzY{P zy`dzbIvj3BJWh?3Jq5W!ym!=~JKFyry{YK`y9!Iay@xhDy9g4g zykcHry&nMeJX!(;y?8H6J^zR3|y*99`ysyO> zy>2KGJ?5yiABcyPzphJk>I^yS})QJ@E=`J;P;8yab^Py<;&5JU<4Ky`El} zJ+pciy-^%3Jh8oTJ@8)&JzMhyysaz(JRUsIJy!=KJm}?dJvWbbIJt`3y;iurJ(6RQ zyh@h=zM2-4y(}~1JeJ0?yDv0AJvB|wypO^xydYaEJjgYuz5K%8Dy;RT=K5ur^yS$UwJubcXJBUgQp$y~G;qJuZZlysz?&yIv(cJ)u^RJ>3u`J>G-1J!|!AJ?znfyqkqjy+&_O zJ#DygJetapyqE4}J&qDaJa7s5yt9IKJJnvyy;os8y*FNBy$9ZwyAor^yn2L4Ji-e7 zy&vYFJ%x~LJ!aZ-y=2crJ)6&Oz5jALJNQc%yoofJJ3;$aJi#@%Jc2uhJcZz_y~@)y zJ#9L(ykBw2yotYEz5dM&JR)LEJ&S|@zW?bLz2|9RJ;;Z%JSmNpJt76oxe_~PJ+Vu{ zJRtlsJ$d=jy#~KvJ-GV*Ja0NAz4&2Xy;I4lJ@x>6J!@3`y)}ZlJSCzWyQpJ%Iz0~8 zy$na2z0hH#JZQvTJLN55Jk#48y+9n3J%b5 zx&gj=yUcidJsA!bJu4FhJ@W}uydR!Sy~g}bJ;|plJ<_~=I{@NAJ&az%JbJex zyc9FVz3@<}J3_HNJXrFky~L-0Jk7XfJ;4XVyjn9qJ$@NGJ?a^oyfJ|uJ<-3NJYx>) zy=VwzJWgiuy|UA2y6u;By~Ts8ydo5gJ!W@CJYfE;yB*R3Jv`YTJwv1by+JRZJhAPk zycnp2yxwPMy%)xBJum)7J!dg9J%+r3y(Y{;yvV?)Jab)#y|?Oby=WbEy-O++J!YXv zy~VqUJxL*7yW@XgJ)BR6Jw|D1y%M6iJsWxqK5i=iJ=A-fJ*I=4yv--GJw@1qy*rie zy*3P%Jm|2?yk^k!Jn-m6y^~+Xyy9+{J!CXOz36j*yo%MgJn(70yq}>FJoAI#ykDY< zy-t?lyeN~TyrHGCJvD%#Jz}E&I(fYqy<&z_y>31JycN`oJU&|&y^vR7yyGbnJ}dUG zJnR1{JkQUzJ=Hm1JWE|sygETTzLL}dy&p^yy}};>Jz}sHy)XHWK7 zJv5fyy*6_7yn^w=I*Fo-yb=nEJ5q%LJ+Ga!JmoVCJrKynW(uJ>)?sJ;msPybZrvJQYrtJP5DJH=L|JzscTylp7RJ)`i3JXU%CDy{aCAz5Ro9Jjd+4Jeu>nyak-*yq^VKJ@eEnz2KrJylev#J@v9|z2|R-Jy%q? zJecorJ*vghJo%Y~y<~tDy*#FiIYk;7JvWQUJruW{ymUA;yS5jNJzdKuyv2CNyyT?9 zJwE7Oy#oZGJlT);Ix;m=y%Pigy*gmJy&WY9y=>+}JaO+ay8|JJJzKhOyJ@V6tyrahWygP{_J(JH04?yz4(RJ^PFey*SQ~ zJWFuMyx{xHJou>7Jjtluy`x*jy(#1@JaAZ}Jei%Dy?aI$KJuIBybF~jy=!O@y{Quw zy^7>my|2x;yUNiKJ#+J@JPLgvy_~&Oz1PA9z1qNrJr6(Ryo&aaJWtddJ-6mZJ^17c zz4WBbJ*kpez0b~qyiGtuy?aS;Jx3}Ky|ARDJu13Qy+Ftyy*IM2JkDF@y#w#?yx|g$ zJZFyAz4#ukJ+vCPyJrfyITd4(y$x}Yycf;qy~!I4Js&7ry<#S{JlzD3J-%j*y+4%p zy(t%fy=Q`>y`R5rJomvKJzS#;9y;1ZWy^B-9JZpBLyrf1Vz007RIt)YoJo<6L zy+2F)JMNM*y(r?Dyg5{;y9`|gK4P0PJI_I8J(*y-JPC{AyH?Uyu+M(JzVu2zRo|1J-QB>z0K$=y;G!% zJUEmDK6ph0JYvY=ywsk9J>?mpJmQKsy}qc;Juvn-yL<5wz0>}My@-E)y$Z$8Jha@_ zI!&8az0w_pyvB=uy(gEdJz=?aJ)FPdyM;=pyT$ zJ^x3Ayf@h-Js9tQyThfrJn1yMEfey(e>+ydMOLyd#(bzQ(x0J6WT2y*+DMyiu{8 zJ*AoBJr^wtJW4ciyd_fJI}f{-y_1V_J?U{Ky?@GdJ?2nGJzp8hz1N_%JZ{OvJYbr^ zy`WADJy^WXy~h_?y&kyFJ>7}&y&r(5J@r{PJw?$oy>#gUzRBZ?ykQoZJ-qIWy$h(r zJI_Rdy=P00J)%T1J%t)=Jb0{3y%%c_J5J)4ThJUI77ycJaDJgW`ay|l=@y|5gfJc17sJvHRvJop;5y{v$5y;ZziJh07) zI}FbPJaCHiys=BUJ?3+!x;iL(JR3cmJTa!MJv5G{z0!9+y-TV^y`hgLz0@JyJV}N~ zywu!fJrzMZyqR?pJRc4myw=2qJ+xWMJf+!{JYIn$J%7yvWDXJiGAqJOiFFy)=w-yBG*BJ*C%|I?MvsJkM?Bz3^8BJ;TYa zJ>P&my^pIcJ!Y6FKGiX4J!$PpJZ{N$z37bsy%Jmuv2yrF=Ly{W$jy`zUBz5OlUy#A}W zJTbosy{=9Hz0v@ax|=dX@JtY*Fy)meVyZuv9y=$h1J=UESJzUpi zy)94myi0rHJBEM-y|DyXJTnskJsXQTy&2o8yyRd4y#9omJm|WFy)oMcK9lUbJ)AS$ zJ*VPoy(9{|J-QfCJ>FvGyi)LxyncpnJ@|SEK50%jy=a%$ysvy`J?|#OJ-eThyK~?j zy&N)Cz5kDqy@_1{KFB>Cyu+UZK4iZXJ7TlRycT_6JgZ+ny}P)JJsEj2y!@`DyWuS` zJy@&;ykEhPJv2c|y-h5lJX2k@yfy^1z2Lobz3uWmzNupDJiDQ*Joua#ygg8lJqJ<4 zJmvfPJorebJ(6r?ypr~cJi~kyzA0|dJhi<9J8Qr>JBF^?ymgAzy|Z?2J(X-6JuXgE zJ5&~sJ+&+czRev6zUwiiy;_QHJ#+dxy_K6sJQ>#lJdV<(Jube$JV;%tyg-_~JUJwjg`x+tO%z4X4dy+8eKJ+#r8I|VneJKapEz0epzJ?oTFyH*7Z zy`BK}yk#+KJ)YURoqyc`4C zJOrs~z4x7cyq1*IJasE0y}lr#Jn@{FyauFey(^XHJ(*}6Je8WXJz3;uyl>(Oys2Tn zyg!e+yw%~Syt+uRyaTv0ytFexJ)@(8Jh~t~J+CT>Jr=>sJunL8yzPa|ylEIey;0c> zJaD1>yp^7%y@{~Byobjz3WJ& zJWWT;yg!ykJ)+mbyDE9>Jl7j7J+tdNJiR2sJqq&xJs>mfy9EPgyhxA{Jv8IWydhIc zJw&i}JrKHtJJ^ueyEm7z4Arx zJR;sd=yJ%lezJqZ`qJXM_{y?eBaJ((Joz09tfJ!e5Iz0!og zy+pt+J7X_NJU6kuJ;gG`y_hb~y-@;ZJs2kiJ+y=BV2yeBE6JhT*y;O;xz2BXH zJrj&NJhh5gy}x*@z4k{LJyv3KpyTp*zyvxETz2tp>JuA%}JpiMaJaOcV zz4mwpJ&rR!y(z@{yX%n{y>Rc{JTeL@JsD(vz4k-2JQmfCy`BMSJF?yjyDzOYy%>I_c@KJ+gyyJL<#8yoCC~ zJvn<`J&(JvJ9a$}J8$e)JkdbJyrMO(J!0Qzy-LJ2JqA1}J=&zeJECU>yV%rUyf#LL zJkQMjyvNSKJ(U8AJo|U@Jh%9ZJwx3rJ*2Tryn$X#JyST4Jn27kz5W&`y%7dnz2*{b zJ?So$y`Jv97^y+k4kJz;9RJ)it6yOr-E zyzStNy?IK5JI!p2JZY@)JYCcyy_43oJz}tFI2F~1J(EBZz1rrGy~ET+JzLIuIyjBOsyrJ4Vy-EXkI=?1` zJ*Rsey}U5DJ(d5UJ1ekZy`%yrJ)|g1J=j$pz1abCyCa#5y~cRkydd~%JTJwiJ1J$O zJs9*OJZ)GIy$W#yy~qVLyi{gKz22=PJVVzsy*8*8Jr)XNy@`pYJRdWwyy$QmJ+aX} zJ$iv}JjDMky$Ub=yi7JRy{Qo8JkFviy_iB$J#B_fJWD)SJaY8=y@}ZCy?f#uykf`- zJ)skcyjqVXywO6wx~s0jJPplzJTlh@J+_CuJ$fuTy?ic)z35&ey$A8HJa2(ty%08V zJrKquy*^69JQhBoJnHa{y;+u#z47+Hya^Qoyk8*7JP(40z1dlOyz^)0ym6DeiJ@7V5J?j|CyP!IZyc#cFJs$qoyjx`dymwlwyv#k9y|97;JYcZBy-%#&JYVyp zy#NU`J>!}lz0TJdJT$?zx}gq)y(NrzySHd*yf`Y#JR4xYz0Ap2J+knQJ(QRBJ=kpm zz4VU1y|4e+y}3nny_3aZJq3a;y@f3sJr>jHywcbRy+}4Vy_qOzHyUiz0BngKK0R|J=7$Zy^1L^Jp&O2y~XNJJ^bNfy-v_0y#Npp zyz0Yxwy*`SIJg_06Jl+ndJ+t|My|gNfJ@L-WygDR|z0#YOy=B45Jmu{fJz7#N zJ$re8JbTbny)^mwJH(3oJwcUaJn~XpJA!-9JZ9nay!3Npy?N=y!9Lqy)ikoJ-)jhy<@E@ybw)?J#t>`yeOrIy|Yb) zycj=^y|~k}yt98XJ#%3Cy~D#sy+={F zIScnVJo1=yJkrG4Jiv$4yEnPPz3wiXy)4BMy{baVJWRgKyJ>ZXy;K-IJqbOfJ@ChO zJ)DtLyBg*oJ*iQoJkb(?J^v(!JMu+~y$sH9Jsy8XJt5+@J!}=gy|oa6xoMtaz4&|+ zJrzE?NZqy=yLoyvNY5JikPdJa~NuyuERT zy?oG?y`MuHJ{2F4yQt^Ky@~VtyuNq;JX-%bz5I?NJrms3J(EhMyg?|uJj$AJJ^2VO zyzeLSynkD=J(1?dy-)oFzS$?yJO~nVJ#MY=yQE{vz2xiWx=a5+z2N4BJg+5_Jmy3Z zJwC-my;nWTy{HZyz4jGEz09fxJQL#wJ-%p%yyr&fJoAMqy^2DBz4WgEJx%adJ-e=e zIv4@NJ1IHEz1Z5QmAya#1>J#BdSyil=1y|skxJz!3E zJshDby&3*Z zJYEyUJXVl-Je^}Myt*Edz311GJ3@WuJSaYoJ19CydUo&JqovSJVcu!J>^8{ zJx&faJ!@gMJxsIKyq91my>CFlJcU9jz1vShJ;H&syy~+KJ?0k5yyskzbyrXb= zyDO^ayrLViyqvt`yyJ3m0PJ;IcZy|)Hiy$}mDJdYgYyxiQJJ$5LR zJb$(VygcQkz06z+y?it_z2B*{JyM8Fyc~zYyU$%Sy}O-=y+rL6y+PDRy(*59Jxw6f zJX+D&JV+{tJ^DTPJc{3zJVa>Qxe{y?y+kSXyd-$5yhsxhJ2bi@gJvS>qy(e5Jyod#CJYlK+yk0gHy?-P5Jo3gjy<^lby#_#iz2@n~ zJq26VJ9B=5y)gr?y-Y}2Je*fIJ=|=bJ-m=gy%IheyrZliy;nl*yul^~zS2YsJw!1E zK5TX_J$X8cy<>cOJ3=o{JrbNXy%MLIJa|8BJ^$7EymhnJJQP2MJ#D}fJOzwax%HI; zy@6%My)5r@y+NIcyoAQLz2x*Ky)A8oy~*%DyIz%=y$&FYz3U|FJairvJ*C2MJqt;{ zy`^fDy>_Kgy(A*8J!c6Ey`LIIyNWd@y><6Py@k~fympqRJ%YHPy%a-&y$qd;y}?|Q zy~ZBky_|=(z1{P~JpJh(J6fyTkQVyV0PoyxvI(Ju^=DJcXhgy(HUMz2qB@ zytjE1JwVp1J=$BXJ^6~#Jxdo~y;fx|JOTZCy&w@=J@ho#ya%m{JvGvcyl2Pyysm@= zJrS(XJxgAkJ+Hr6yh&f4J!=TeyfZQpJvC|&JmkxWHwz2Sj_Jz&2{y@H`fJ+Y7N zyA}F@y;%WeybX!%JRQHPJ)5{DzL~%nJRH)~z1yJ;yzma>Jju(7J?T9oytWpgy#R?{ zy_VbkJpDM6y;n;+y_k;ZyJDh?IiqdMz55HdJy%9}y&m$Iye2?@yrLk~y@-YrJ@s0W zJW3GJywpP_zC4aPJgd?8ysR0_y)F!sy_&m6y#&HuRy@q49JSj$_y(N^yJ1hT3JY^3zQJbssD zJ8T|}yFYo5yjsj1z7661JXhS5J$sgey>3WByo#z%y_d=VIuKM7zQVD@yEpHYJuUs5 zJxQqpJ)tQLy@zrWy{0Xvy`R()z1>KGJZeHBz4e~zJd7J;Ja2soJ+bzBJy|(hy(3!h zykoQbJW#JRy~vNeJ$<)|J(;eDJ;wc-yaBWFykOe|y^2H@J-Lg6y`U(MJdz%1J+0ty zyu_hLJ;#F0J-y-u=!ymlaq zyeyb@Tpx)%rgJ0DY-ys{}2Jy-hn zJ6j2Sy^T-Vyrg1=y`@y4y#xQ0JpiGEJu(GJJ*&w_JBWg%Jd`kvy+H8}y!WS%J!qwb zJAb#oy|4+3J2?=`y!Z2MJs{hwxgFevypP$0J@#ehyA8Jx9EWz0W}`z3%g`Jj5*JyqTHNysm+K zJ+qQ7JOB{ZJWxTLJ!P~DJ*oGSJ*I=JyKKxPJ%13VJwg*Yyy1?Oyq4ch(^J3L6vyzjOYJZWQTJ<5=Ty*rm5JwiIiJmwD#Ji$UI zyacIbJTyz=9mz2q3JyFh26JjoMQz3qOBJeevVJ8%wVJl&#V zJiM~NJyL7YJb^oHJ$x0~yowr9J!|4vy;RNLJWG}Xy}OE2y(z{IJd?yVJfPu;z5To& zz4qR^Jx{pJJs0rxJ2@_Oy&1Wpy)fTMz4t}HJzDgxJpqlPy#pg)z4GzAJB*SCJ+$;P zy+VruJO2_Ry<)@Qyvcy`Jcd^Yy;v?1J)|X*Jaos1y|&*NylmmEy@6R%yrP1!Jp`z0 zJY+1mJZmA7y?vd^z1-0Uy^bV}z1Zl7z1fmqJ>{bdzPFvnyq|IgK07ylyacD_Jr9Mi zJxB#8Jf@}J?12cy>Oz+JXnh&yT6uoybPcwy`ZyMy!(7~y=g()yl~?SJ#LF|yo*b~ zyp|8vy(ktuyOuDHy{8D!y}4?&y=&S;JR-pmKAT5Jyny8+y+cp6J4znlJmI9VJfC%? zygkQbJT1lzy{S*2ymVoqI+uZZJwm}Cy`e$vJ$X!hJtm5Ey^rL4yH!wDyN7KWy~9+b zJq)5|y^gIRJzlW)ycX(FJ@u-GI&OI;J^n#zJ=+V6y--G%Jd%CCyi_f=y?>fpJ;|Me zJz_-CyN+szJeB>GyTHT+JCEIJJcrkLynAoByiUnsJ$wmSJP5pFyla0mz31e$JU)wEdJg+ep zK7hr~ya_Q!y+o)_J6t-zz4^B$yp9T^y~w!-JsNojy-{X?JsBIky=i@aJ+>L(JEq|V zy@y0sJ7JsUP_J!)s4J&?))y+nV$Jx(jMI|s)SIkeu~yaIGhyCMp( zy-5PkJo*`wI+8Ify-@Uy|fTyiilEJZ6Z|JQH78 zJxwUkI=JWb zykJlrJh{7!J;!wcJ8(oeJ(q70yO9WGy?U%nJxZcFz3|y}z4XzAy`byJt)3aJ+C)|y*VCcy)Cz4IOEJ+Aj3JXr-t zJ25COJ#Dxby=3~4JaC^pJ*kFsytnB@J%+1AJ+Y95y%o`PJsAlVJ+1Jqy!Z%%yIi%j zyuXtbJ$K^=JaMS2Jkei|yubtPyD+6QJvJ|@J?7Rdy#pz&JW7|PyPgXbJ-m}MJqR>s zy*<~Yy%u)cJU)DYJi0KoJbqvoKCL{1JcM?aJy?!XysbJ5y@&%wy}Ym`JqkXlyy5ee zJU!XSy^VffJ-nd)yq!LsJV~uCJ~LS0yqeJ!J*9u5yilE;yia>dyl+P7JeAUXz0XV) zJ^yr$y>nNaJzK_qJ!SdqJ-mC6y$YZiy@)e%J@7gUJ$SE{y$|+*Jw4OqJTz%kJtwQw zyCv=Tyv7MiKGMo>JT30Mz2^c-y{J(Jy}cO-y%Z^|y*X4?JyYiuyi;9-Jvox%JgLHn zy}>tmy%8+^JintkJ6>3Ty#Eooyf}6UJ?23=y|Ctzy#i@9y<3l-y(RN3Jt8SpJSFh& zyf?TRJcuRdyi<`-JIg_ZJpQEgy^(kxJqY*fJV8-LJtz8iy!xEUJ&~tmJs3F%y=ld& zyBx{Ey`hOMJ#x{Az0F2DJ>Z4vy90Zzy%P(;Jm1BhyigB9JURKkJwZeXJsgY+JoV5G zy&XA;y@xrEJgcA(yrHXsy;q8uJVqiYy;b)%Jgdk1y?ha|yp;Dzy%yvxJ?ADMJ@1uP zJRpqy%zCmJuh7aJowN(JeJzMy=sO`yDg~IJ;=)xzJ4Vo zyj8tYy%tIwxz-7!y;4T8yPaHsy&n~>J>Xkby$XdwJul!=J=2JHz49p0JylPryykdL zJ+apiy?v8Gz4H4Yy{#)5J;W@iyfpXyJ5os8JR|shJX>zDys`(2Js`f;yxs25IeQ&s zyWobnJIIYrymG+0yjh;vJVtXAzMQ|uJEC9UyssI&JxfycyR`A$Jb}@LJXXH@yw_Me zJ&b*mJcWB+y;jIVJcmJ2yv#1`JkkY(Jr-U7y&^+xH-_3(yKQo#J)8i}ymq~Ty<0U} zyl=pWy|QDgJj)ClJ=iEoJ%|UkJjg8WySvbZJwr5)JPBQ}I;#h>JhuoCJ+3_ty*H<; zy&U&~I+|$sx_^Z$J^ocRJbqL2y^X95J+G%wJtL5wJBK;fJY^MZyqX{SJT8wLJxXz! zJlrRGy-q>PJ+s;oJb0AFy+jXzJV^fPyc_kJy?dcdJ*vNFymse~JvoIKJVM0YJ#FJO zx&CziJE2(3Jrqy8yi={Py~;?Bz18N}Jgoihyb;bWz1r8CyYSkmJ@961z4$Uiy*xHH zy{T0Xz0sgRz41fBy(Uk=Jd47yz3b$PymnsYJNE>)z1#q3y>BpxJ>#^Cz3V8| zySnOrJctu1y|n>Nz4!clyx=i2y`@%Ry*l?Hy%fY2yjOw0Jyw0byM8Ixy*XdRJeQ|y zJ#NG*J=08dJv_51I~G+#JS0)Nz5d;lJsi^dxg`|3JK(!ky~Iy|yCb`KJpnPzyE~e4 zy%*QDx-T|6Jry%0y;NVfJ)zSty$>mxyRaJ;y&4!%y`0qTIx9N%y$=B}KB)1;ycl5} zy=%CTyko@az2ceFJVnzyJ071vJkmZbysrkBJ>2DKyN^GOJq+AcJu=D{y_!jvy`(Az zz1nz)yyX%@J^mCyJbY9wz2!G&yn}w2yfak_zH83Cy-PQqx=&j?JZSc*y=}-4JJ>*h+JGCh? zJkEy2JD~Oyh>ciJp-qjyvwbyx)6aQJzvs{yA{7(y^V1ZzIR1;JRZZC zJ@4C`y@9tdz4`=AJQgsVJZ|2R zJ2Vf;ykWh$y#r7qJwCCmy>HKwJ#svhyjj^ly{0TYyCbflJf7$$y|z*RyfK=Py!oze zJv#K2J>IA}Jr~K0Jx4l{y>KbNJrp#qJr6eozWFwaz2m<-y)F0CyoejEyvUdry})X5 zytGG+z19|*JZXDVy`RI#yN?<`y%Dg4y@p_Wy?ZvFJkn|by@_6JJzkA$z52uhy*UbH zJI@=bJlZ$0yc_hQJ#DnHJ8%@HJihe2lVyq@w#J-FHpyqjx& zJwY5Ky^Ewlx_d+%JcXXmJWX0@JTDMzJ!*!8JZ#e}yqyjOy(ZbAJTVTtJU4oWyclA4 zy$a`@yz90}y<@N*y`yJXJ<)8_y-*RqJSs=9y*BKpJmtutJd~uuJCQ#9y4h3@y$?!P zJ?aNdJ<#poyQap*J2_FKyHO$;JBtD9z0OV8JwvdKJN~yAJ*Mh6Jx+kAytzdvJW`<9 zJAE5_JQRPhJ%4o)y&o9vyb0m*J&MR!y?AOdJP#J#gxcyov@2JU2i{ zz4a)UJi<|*J%;SCJE)Uny~x^My|fsnJ<=cQy(g~=JuT{Jy;CcWyp8ky|=g%J!BopyQ%b@ zJ)rpozE&fgJP_ovJF8@_J6K}lJjw7cy%a{DJg2-Ty$-*LyxS^>y<5Dnyr#|JyeV%U zJF>Hdy@1#ZJ?7puJ(8UcJ(};TJgaX7y~3diy!L3Oy*2lUJfKRGy!q7@Jgcp%yJofM zyn2q*Jd^xAz2c_#y5c9vy^^MAy&GvVJuGR}JoU02yb%>)yr-%jz20MRy(eh^y`Ka2 zyk}|XJt$}Byvc59Jg=Y4Jnjxfy#2i=Jj#zmJylD%J;MSVI&RzcJ-L{Sy)YdcJTFAFJ*kMxJ?coUz0>jJJwR~+J?u&vyc9!=yhe;$yH*v4 zJS?p8yUac&yQ@eQy_*&*J#+4*J<$4yI}Q*oy_HF?yG}x$y&O`vJQHbkJ$U93y(PiJ zymaIYJ1rBmywDlXy{cL%y&c`PxPJv#`myH9_TJo+K` zyj=!lycp_gz0YXBJ#L~vJaD@nJ@x zyDy1#J13pFJstMjJ%4O*Jg;Y}Jz|?1z588dJ1Xozy?B+>JN>CIyb~#aAI-Y%yJ>f+J%`!8JcFniy~};lJ;0!HJDaW^Jj0|1yok#Q zJzR~fyvk>%JgeqNyR>?zx+qjAJ#ir2Jsqf`y*}7FJqpp-yT~a}J&EGLJ?0Mbylu)6 zy?L#Jz49@*JS>wcJlR$Wy%${+y>{}pJQPPZJ!g6^Jk52Hy|}vcJDWN#JxOb-x(HAf zJe)pky_KtoJ;KhbyR}?FJ%_CnJa90;Jv+l^I~0cxJB&ESy+%M1y;zQdy+bR-yq}E` zyVVJryx5zYJJ$W^y}=v-JpC4|z37Qfy(KA8JvzuxJr(gQyxOrPJ@p3cJi(aBy-psw zyi*3`ykX^HJt#+EJ(#$Rywe9SJQjLcy|P2N zy#My-J$EhayfZ8^J)8Z-yhquEy%~2*Jyn8EJwdO+y^NmGy?fF>y}v%$JPuYjy_ua0 zz3^~tyv&9aJ6adfJyw;YJa}9uy%;0(yk0x4y_k!$Jp&FEy;C*xyh`Mvy=4}JfP`CJi1W5y*@BeybB`>JSF=eK4~kKJQQ<*yL%JMJWuX{ySyq{JyAy)J>hRV zyZR)6J<$JuJc&SFyk~+Dy`mx-J_|95y!nJlJLU_hyeHqNy+yxtJ-(;sJn9l|Jcp-x zJ>qCyy-GG6y`}NyIy*&hDJtxH|y{96hJx)7@ zyoTkiyj5G7y{N{QJiOe^J<68~zJQqeJgDx>ywbRdJ@MmDJwv`Gy<@Xqyi^0Dy_*}4 zy|kewJ>MD2Jn`YwygHprJRDlrJ+7DxJvXejJiJ^=yrP3Ey&a@@JzCp9J^Kuhy;Afa zJ&hYYy?Vu8J)K!vJ>+A!z19jIJpevey`++iJZ&#-y`cVWJT=@2z8-eUIyg;+yoF_U zJxU;#J)}~zJk#TLJzkd!K96UhJt&h|y;^A7J?WPVy)9SvJ=mJPy{FwFJ!|25yZRIz zJlvg1y#`egK6CqqJ!ofBy^PrUJS0WzJbzjYJt6F5y(@TPy=NU*yL*qeyc8SqydHFO zJ+t)kz3%ASI)s29JzD;AyT7YUz4j#uzLFKTz0W%6yb+%)Ji51OJy6z_J*pJcys@`h zJ=YxcyevNny@TkNJ12L7y&{sLJrWy4JqsqEJR9P`yW(cJqKh&y;6Uo zJG#jmy^}VSy=xSRyi`w-yVAOBJ>Nr&y^r3wyqUD-Jo1&ry?e>wJck*PJ35XqJ!mR! zyoMm3Je`F)y_4$}Jx-RFJxNW+JUFK`y}L)(y)59PJe3w6Jz6^>yuRfaye5g_JC0eF zJ8?j9y)){}y=>|;z4l9&JbfOUy;$FwJ9kW-J=3&uJY3K_JjNT0yLRWvyjy5MJZuya zy&U(6SI}gmSyP|A0JWcDvy}({Uy~j7jJzTl}z2#moJ(2@-J8_t` zJ!^P)J$dfJJn@MwJrFr!z2c0AJy-WvJ%gIIJ*)_TJ?qgZJ$|RuJZ}!yzEbAy~YyMJl@oDz0noXJ1nT$ym-sJ zy)CbaJH3g3J!A#~KKGReKGV1Cy}0X$Jlv-}y+LpsJu!K}yxyO`y{VIYy_3a{JecJe zJ*OHhKH39hJtCBzJ9^k5zMB#by-_z3^WY zyFp}2y>a6|yc%1@JhSvbx?>>@Jp+R)y#L^1J?7A9z3-Upz02q!JcwGwy7L#9J^R)* zyv#5`yy26SJvT6UJ-rE8JEE4vJrIVtJFR)*JuuI7Jtt;dJ?&MsJtgevJhmO^yc?zj zJxNXoJ*9&hzFd}7y|PP^J?k~Hy^{U3yCZJvJi5!2Jqr$vJC`aDyExolJeBOsyR0|FJOYJ6yy%^uyN><#yCM`ey?$gKyl<9tJv^ZbzPeUUyngW< zy%(vNJt~g8Jk65XJR(1oJ8Vw#JSkgAy%+4^Jpu)3J2!IVJKQi(Jqgw=y+QMkJY;7E zJ<}M-z4ZLHyVlrZyKGSsy{lKYy>&mPJF@GiJ<`=IyfSEIJn7V1J-P!^y?x1My&%ao zJxC0NJzb3Gyy{KYJPF7^I|fOUy-?5@y>xkuybLI+y!ok;Ju9f`JoQvSJ>5c>Ja{Au zyp{^LJxS^LJP`t!IWJDdJr(kky_5BqyyL`DJh7I^JW(A2y*j9$JphZ3JLO%Qy;`q7 zJl|+Xz4?j1J#!@`ym9`OJiYdGy^bX9J+qibyWm?JJ+&4;J)?htJ-Tg4JceP6y(Tzd zJ)8Y(ybXgerytJw`J!P|)J#4JkE$jy!>C+ zyc4jiyri_Eyp79?y$oIIJc${ayd^ecJwEY>y?|i~Ju(^>y!;V=ys~C!JZ652y^Yr7 zy`JXBy|syu(^Ay{7jgybnhOJ`}!6Jc6~pJlw*-JLS&Wy*uY*JS_`WJ*`pX zJTmy$x_XAQJ>rq;JhPY0JdB~7JVfJUyfn)(J%&9hy-?}_JJP|9J$y`ZfIJz^;Vy^`3EJo$m9yj?p?J+UNtJal7_y*ZQsJThQwJW-P(yUUXc zzM^3wJ$t^5y&)N_Jq<$OxoHJLy^92+J&NVAJoNsRJ5!t|yG^`yyJt#L-y%_Q_y~sk=y#9ZM zyzR`Ty@fH6JdNiRJts;ky=AYey&+{FJ=UZTy}kJOJWh47y?;FayZZjbygGY`y>PCm zy?8hCJmkh;z5SA@ym`h@yN^|rz0Ad*y)$z|yF&y>yylM?y~5=J*X!bz06~tJaj3wy@FQhJXT4vyn%P3J?-!M zJy;POy<2|DywG@BJqf4vJZ%h=J?J_tJ&0~$J+69*Jx&lvJVM*>JmDsiJd9~rJflvx zJ$hNkJ#>O$y(pqAJ~l6aJsz;2JR1X*y+r^yJ=?1Rz9^oOx;(BKy+MC1J=R^1z1vq1 zJ<~E3y}}$~y;}XLyr`}Wy)$n-yjpf!J+cB-yh5vsJvB*Uz4Qi4y_S6UJYM2Xy*T+E zy&QoOy}^AxJvi&4JTs!VJqGB{yfk|Oz2p_Cy?0yjImZys6!)J^$>tz4m6Oy@pR{J#Jl`Jy0?hJx>Way}rnKy~Su?J*1zb zyS;NFJ>qD!Jq@{cJurR4ydn6RyfEw0yKU<@J(sD>J=cCFy(SP4JEskUyNry&J6Qy;v};JyunU zy+UsuJu!uHy$jt2ymgnWyAEgTJEPS`Jt2GGJiz*;J3ONoJ;$@VJ;?7+JwB*6JJ)%Z zyru;pyodh_x>vh&yod>MJoqWwyyI9TJ<+d-JILJzzUyg*JvawYy}>-uyCvKpJ?rO| zJ;*$cJ)Zuzy-t!gJ(5FNyqt4Fy;S+Qy%e3CJUS5oy(_&aJp5~{x;HZSJMtpKIu-^r zJOQU=y<4O=y|z?(y=c&oJ#;@IyOowny`;*6y;eHzyoFfWy-{vrJS3uHJ;7iIy}Y(5 zJr`XiJ(mAuJ=OHxz3GC4z2JvvJUg?ny)@96yzq8{J$YjnJkh!FI=;$qJ-}6-y7?HO zywNPuJ!?i&y!2O$ygf<{J5s40I}%%ty>7L2JC9FWysG!ayhhg=J+bgPz0R>gJ)bv| zJIK5^y`TfUyt*1kJ@WRiJyvOiJUcB6JsArpJ>noyJ!B<3ydJ-TJs-9UJxfE$yz7Ou zJcurhJ^3UBJ)D5tJOZ(yJak}~yo?8xy_szvJ%gE~yi|{%y#vZYI?J@6J=JktJ^NHH zJ$k{uy%``Hyiy_|JcRyzJcBp-yrKefy+tssJN26wzSnTBI_nS$y%v7{y%fA(JwOKO zyJFYl~JO#PaJ?m{Ty~hc^yiVMU zy_`#cJqgLYJs~bky*HLcypjdIyunzWJf{TQy#*@Gyh!V3y*g)IJa4*3yh&N$JYKkm zJQ7#)ydyU9z4g!5IzGY~x{7I}yhW8EJtiYfJ>pzmJt3~Ryd0`Uyorz8yD+Giy}b~z zJ*kJ^y~^h~Jp=$TJ&ducJ+F?qKJ&cG5y*;U&yf-cRJWv=NJyBiC zJDd?QJ>KC9ykhK_J=YJ0y%E`uJ=!y+z0@D(y`bXOJV(%gy=rU+z0=NAysQw8z1&}m zyYS(qy}GR_y^IQsy^Em{y~N*%IalheJ01Q{y({7lJ>KHC004mhe>|+*`8$nt-aX3W z>%20mK|OjVXgme|f4%%Vl)WLD{XEIPqrH~WKs~_obi8_Qmp$u@Q9WYPi@VW;Te}Jr zlf54#%{(u5kv!?5Mm>l1B|K2J$vvLLyS*~$ z2)&>uTD@Hu&$>aCAib|>hrJWsmb(j9cf2D5*1R-cx4n=%3Kq6+L)a;XLB8=RK`=F}?on06r3V-8}Pv z;=Db@iM)z`!M$W_9KCu2puMFZy*$_1$xV>-xqP*pEAw9`3=sbh`0zS#z5k1n}lfCUzraMb~6TDT}f4n5H ze?2b)7QK0$)I82>LAw>WtUUAH);vbKs=W5T4?axUNxhFopFPg8%seuPVm)>7y*$>o z8$Hn=KRxBq!Mj5a6}=bD?LBJSy}eQXcD$xye?3?Y)jcE#ayO7&Ab`9yS&3vbv=UxhP}1V zXFNDA&ph0xusxail|72IhP^UF3^^-{c|7ylsXZI67CkP7g*+_YrabifJH3SehdqA- zOg#@kkUSq_LcDchHoaWLO1oK1A3Z;B4!ph$TfN#;c)dKpLcIUttvz7G89W4uz&(62 z3_Wn8#XTubfjzbB7rge$#k_r-roF1Cz`T1^K)i7w13msL2)##VWjqy~w!IzybiI+b zt-Z05bUi@Njy#LJjy$X7+q|)*9zC>vw!N6cHasRn^E`+)#5~wpTfO3QyFGsF$~=tO z&b)3UYQ4{38$6%26FsU&6+H(-3_F{VAHBvgXS{|#89deVXuNN5L_GRRXuYRBkvxL& zC_TX-$UR0--aQs|3%$x+Q@zLm-aMwiuDx+BSiGk{UO9JE7d&%-0zEV%SUt+!1wDi3 zn7#D=$URO*h&@`iPrSu8P(0i^&OGipus!T!2)*H@Z#`4@guG*|Ail(FAUzcT$2}~c z8$Cqiki5DzO+9(|aXlSE?YuNU5WQ*$mOZe4V?BMY=)AWiEIsCMTs>p`>^%4-}ki2Cqm%IndoxJ+N2|X7=ySyfc zo4ir+Ha#+gwLDJn=e-8|ls#J7NWCLhpuJ;ykUiwx)4ZzXk39+Rv^;Ot2|bxu?7jci zjXlf{DLw8(oID)HMLn$+DoFTK;^oV^C&Gd)L!<~wC!oV}l+oIE~cXuPgio4f`r z$GYEyPCKwoN4$qn54oHs$-JB9g*_iu(L9Zc7QIpsQ$6om6+OI66g(ZIX+7j5HN1}= zrM%q??!9|$o;~@ypgjNpIlX!$G(G%Z4n3jNn>8yuA#Q>Ac3QKs}*E4ZU#%l)N!?db=qFl0B~H*t|<6UcDll z$-VAmp*lX0aJ@?PB|St-p*tC>fxV_o06T`~5xt&R$Gxod5Ivj_=e*=wtUX{0L%q-@ zy}Pe!9KBQ5$UNGgK|S2JqrDEWK)tXo{ybsKp*=IAhdWreOubm~E4_Z4ioMfSQayw~ z*1X#b!@Spy@;ns%H@(NYg*;j6Q#}i2QN2c3sJia08b18mLp?5fO}sN%V7;~2g}rR1 z&^>+?o;_G2TRojjTs@ApIK7&|XT0xeY`iG!xV@_%O*{^&ro3o)dAt#6<2}6ytGp?5 z?L1qNFTG>xD7_r6F+I*i9KPcHx;;p6zP-tq>p2EAMZNoi7QN^A#62%kb-c(5r9CMl zrM%LA-hUzCDG# zXgn8!yF02*sJ+WG3cV#oJH5vdguDW29lcX`zdR>)3B4xSCcRAVGd*BfafP-aNT^p*akXP`qh1em%t) zhCM0i2R+amfIFjq=R6vk2R)XK3cdi6g}rtQLp*xZnY@&&EWJNV624$3nY{4#{k>Mq z#yk`1OFV40@jRI589UcMYP|tsX}hI=l|8Gr5IwylC%wYK1U`%=qrJRCe7zBB9z62u zbv=y%K|K^2JH7UKYP{#|7`-_cAH5g!kv%!HX}h=(YrTjnqrBYBN4+~LV?8(or9Dz> zX*`4b_dHAL6216$F1-?}sXWKx&^tYRay**@Vm;(c!nx|4%DiX*54`W<2|e|A)I2Kd zpuNy==e-j0yu4pg13i{?FTGPF*F7zOmpvXP0lkbVtGsn;vOLOdrM$9h>AH)9l0D8< zoIT#+k-bQL>^)&Uvb_aCo4wKdW4%Rh*t~-uYCV#z`@PFVv%M)vx;*~(zCHJ01Fg-8f z93O$r`gFV6Pust{5(49wmo#BAU(qNlfCp+$UVKr89dz1A-o%hkv&&{pS@de&^*YW zK)t3Q89gT35Ieqc0=;pTyS%MAF}>B+F1*LFygZNkfju{}mOPSd!M%^~JiU6lAH8Fr z+B{;vWW8Jg1U}C{g}p8xsk|g-`@4bQ9lZ1MAiHue0loS#6ufluoV_xXwmtSkBt6Hh zxII7?fjy`doI1ubG(96jm_7e|vpi;#k~|v4f;`+E3%(F1fxT8q!acr&i9Kp<#5|A& zR=qdwSiDub*gP&(6+H)jl08?MxV$IcQa%4n3qBjmi#+YLyt`l-W4*>XFFjvu2R)v8 z`#eManLHP``MoS+6+KVzTD#*2Fg(>SsyzE7ustSF6*~%d?mRgj{k+7^SiBE*6gxoN z&OA>t3B621xV&mfg*~8k+PqWwOFepBgFSnulDrX=FFf1l-#wJ7rMr%mSiMzzX+3$y zbUgIZvb_m#V7)PLW4%NkF}&(q2fZJaN4;GiI6VjWnmr>ovAZ%pM>~7nK|OBAf;}K{ zhds~6fxV!Qz`cf9gT0*uXT9m(h&ys;KfQ?Zw7kS3jJ&{dz`W5Bg1tyRK0WvPTRj^r zt-R$nCp$KY7&{7OG<=FTC(%hr2@&W4({j?z|0IuRWHqu{~knTRch#r#;V# z*FBlr_q^b=Ks?$GvAqMF6~0m-6}`20h&)(;p*>bIP`y6v#Jt!hfV|nh%Dfl3e7$-b zM!h7kNIj-FA3F%t#yc4KEj@G*GrZPb$GpwUjy#SxfITxWjJ=UR<-3Vbo;{@7ro3O| zxIDz4d^~`b7`Y5{488mTmc6m4emlBWfI7e=e>@IeIlWMUmA#e3!9B@C_B}%}0zMgi zOg&=eNIYsvi9M@S06o-rCcUTnxje%V4nF@I@ICIeb-YM_o;@Ewg1z*A^*kI#j6A{) zaJ*85#l6i)YP=wf4ZYM|FFjiv4ZL#h4ZLE=jXi2PT|9C{Up+-!a6R}p<0| z+B@WA%e*K~D!s=Ld%RoaNWF!bzB~(0FFmR`^u6Xr3clWm0=`IBT0JbdfIB56w>wy@ z553&wEIk%QU%h`|puMbyiMWFFZjaPdYi?#k_wsbv+9!mA$ri;5;uRc0G}#FFfhI^*kKTiapZn zm%WsCygbHx<2)1QMLSB3IK8?4Pdz&KCcItnSv{Tb$ULchLA{dd20hq5(Yz_Jnms5j z;yiP=WW2Ui0X?KE%sr;?8NCql*u0Ydy}LfD%De@jTRVc2Fgz|1&pm(k96h=lLOxd( zZ#;n&l)W{Dle={7Nj(4Q2t3>li@l42fIS$(D?SYpL_Egs0Y08dQ9Uy7DL%Ky1U>WI z@4UbyEj`Grjy!ybIXz~hkiFi_tGw}rj=Z$QDm|RwSG~~;_q|=7HNF3;Q@VEe^1V8} zsyui7j6Kbz{5yDv{Ji$5SH0N%QatTu=DhAKqP-ymmAgxQ@w+8NlsyZlsyo&ttG!WJ z;k+YK^}MXU4?L=S8NK7d_B)KBzP)4As=N?IfjpeU$G!Flt3CKZUpzKnqdjgjVZGq? z0lw$-!a61JXFc~58@-*-e>ue=qTguQP2 zFupj1`aInfvpgedK|NRR#QavCzh`fz3Fg!VPQ@z#9$h%Dx>%276k-QiHlf75CIX$L~!90)sD7}C061}A!CB1Iq@Vv$ex4gK=UA;BG z3%!f3LOt8VcRhl`r93V>$Gcu-TRqMzBE5RLCcQylJ-rsfD80jOYCSt8i@X)4B0c0- z-@K)Ai#^UJnLR&__dHaIEj=?ZY(3+Y|2!pQV7+d8rafiRnY}0&n7maY!@VrU)4XI{ zggpX7VLd)?fW3n?tUOo69lfUrsJ#_hx;_36EWPwSEIa@ihrOZkj=iI4ZM;9w zAiT7}Q@!PQPPyMi7(MH61-_kEzr6xBygV7kcD$!E7d=T5Ks|Um$UJ!L$~~+SCp~rw zgS{~uzdXWqvprJ77QK&xdb~&VX1%}9oxD(!i#tL$4!v)i5WV)}_B`1BqCDgal)FkH zQamxc&OLO-y1nE&=R9lbL_J~KyF6E9l|0}IX1z_+z&vipwmlB>2t8=JM7`pai#t!= zdOUtRfIJ)_PCYvkZM?d{p}JQz);#~dT01TShP;!c%ss4Ajy(UAPdp$jOTAqN7`@`( zYrFKQ#l3p({n!n>S>Bt2jjf<5wE&pWV7hdLb5DmtxYBfHZ-ojob4 zt-T(#KE0mw>b%k{K0WjbSiKrx{5=-2V7$w6sXU|h6+Tv4B0bJ8Gd=yKfxXGL)I4Q4 z;kk4OOT3~(@I0-%ki6z3tG#9QTD-zTfxV|!b3D)QVLjYyv^~i)vb_}@V?DZ8;5b^u)GVVC_O2?g}frzmbwM+th^`a9zEM;fIKSJ%srDKmA#wf^t&lJ9=%u7 z@w>}7B0E$rW;;KIjlIX7A-ljt{Jg;MAHMG$k33PEmpzyjxjYrWCcSZ2pFOh^#XB^c zExiwSh`iB`!@Ve>PB<*xYd!AUyu7YV4LnZKkUNLGMLnxKDB0Y>#usobB z@jV6@jlFC}cs#!I0lg6USvxzUhP~jt7(I^iCA?ztB)z|%uRHb2~Eik-UODoISLF%Drup z^}CI6@x6`Vpghhbo;(T%8lsCp}hpbG#NCcD<7lI6Nk!#5+R_U%fPH+B~++ zNIg{k%srh>xV)0q@V%us);#WZE4>o_?Y#I7ojoUvzCEtF$GZTTBfS!4oV_io9leP4 z*u5-FYCTrT>^+%MFg)V%#k`L@4?I%@>pa6NGrctqb-Whb-@WTDEb5j?tAf4gDa$-Vp=8odI}%Dp=(F}>J=_PUaTF+5yb zl|3}6MLhxM!@W2?&OL&;X}cuSnLRTLN4w;O8N9}O5uuDLv_EK|R3YQ$6TsRy|chs6B!YMmqiaq`IM?Dj*0lnLAi@jcTraiynZM%nz$h=3%kG;<%MmODPCxxM>rlD!@N8NG!XmpyN5_&gNUJw2F*Lp^WAoINfJ9X#So6us;k z&pi>y{yfs?xV;vTPdiU}0lj30t35j00=vjZO1(s(Oubg_5j}fWdOgN}!MqCzLp=6= zh`cy-M7<Vmus`@4Oiqn?3(tXuZ~Q z)V(2NSv?2aRXWT1ExjNqfIN{?+dOE!3q0yX$~}qoh&?U#(z>(S>pe{+g}p{qy1a_n z)jO~JM?8e#*gaHOSv~3Y7d_A=5Iy&zbG;3nEIpj3O1;c~guI3Gg1uEVuf3*HP(A!4 zygkhs{=DC@)V#ec0lhxkzP;8diM!=})w{3O8oV!*w7h{EgT2zy^wM589nz`*t|v}ay!p1oY;j=l5@n>}s^O*}NiKs=`Dfj!zwwmc|H zk36w5(>r)aV7(Gkw>|U4**s_gay>(j#5`0?XuW*}u)Up-e><~y9lM2rvpt)#WxOBp z);*HS$vmLB-8>fAbG(cLh`hZFRK3883%tvTU%U*VgS=mtb3EOLi@b#qUOmy*S-qfP z(>#$KUA@BbQoYGAG&}&bCOr^gxxBarhCN~dSv;m$1U=y0raKByWxQnSe!apl{=G^j zdcDQiZas24K)Y!>%Dm>`p*y(&gT3SrGd;lU0KM4tg1uH|Dn0;O>^!@o+dVS0Q@l4L zv%TCqk38aJJw0fb4!$-#=e+;9Grg9&ro5=*5Wd$1ygU`%6g`a;i98WBr93g}@VqEz zi@nj$pu6;Nv_0>n_PdI%!M!LNv%G#{g1m`TD!oq=v^);$DL$s1*1S35le{$2^1OXW ziaoceG`cXK-MoaUXFFY0(!GGl;5;alCOwa&A-zQF2E7`8Ks_Rn?mfO8lD!y9mOQRL zi#u3K9lfso5Ixn%(Y+*AyS#iiiaQOYFFhme#k|6;U_7I$0=*rP8od^8t3B;ausj16 zH@%Tlh`rbq)4hr$I6aW$rM)tW%RE;JmOXb}$UXig-Mk&(lf7@c;JwuQV7nRDtGr$J zj=V>B*}Dx@ay(FxojGeD>AQMJg*@R|sXd`=9z9H&tUN^4Aiaef%Du!IBRmDW>pTIu zN!8>ATM7<+` z5ItI*F}?DU0lvK4qB+g_E4_zE+r0PkvOQe`yu44{0z32vay(5bbiI@_)4I@G=e$t8 zN4!;6&bsyOwLBIwIJ~&<=RAd_)xA+PKD}@RfjT8sqq-~4pu9dJ)IF-(E4^>^^}L4c z`@4y5Ej?hMKt01`CcOw_t~;1nNj%~{a=qS3uQmpB54tG2jXWqx&^=T|NxY$uDLt!> zxIKF92)*CXQ@!TK-n`3NI6W}z&b*{)Lp`^xACSv<_2fINvLn!F&36up1iCB4B});tv}Up*Qx8ok>-h`nB=vb(TZ zk-Q*vZax2STD{#GBfetDroG~AjlI%Ly1mHu6g@Ws{XANhs=WzBay_Q&8$FS!SG}#T zF}-yY8@b$I1XT2*y3%x_{ue?#Ep*y9HtvkX0 zioFZx1irQPExl(~EImhAJ~_$mo4r57BRv#Mz`f0P|GPl8ExV&Fd%O>x3q2euzr533 z1->zyE4wUfi@blvZ9R<|zC8ZYq&>tnhCMlXAU#|QnLOS_{kwI|$vmy`JH1d2jlJ8G zLp}I2y*yqd5xhkl5WPuy)xC#Vs69wq5xq{s5pL?~Ej=s1%DmB$?mSzf7(Jzp zD?J|4R=s&07`zVPj=k(-;vOSQ#PB}B^AHDn?AH9yoZ#`&PDLDwYH$D1Q ziaH8xNxa_1aXs4HqCKEk$h{OePdyZAJG@m7r@Q4jTD+lvvb?gDEIr%mKs*lDJiHUz zLOmF#*t|9CM!na;3_X_vC%xW)(LCa8Cq3Wwjy!ie*tnJU!o4>Cr@h_}Dm*rH8a-X$ z^*TWJUp)XxJ3Pn~dOWhdoV{l*;5%*u=)7d{MZKd2T)fk0SUeQbPQBcRC%oIXnLP=C z551_?mp$99q`aXIQ#|Ceu)G4%3q1Y_%00eIL%pxis5~$ZkUh;HnY}^#<~;XyF1;lM zz&-JchCP#bm%TUb2s~(p2s{QfKE1Og6TDZB(K|E>w>(+oSUvh!n!S+>Z9G5fe7&sO zXg#2TBs*F#XT68!A-%PGe7q+vU%mEx9liFH06AWbqCJmn3A*p9wY^E9AH5XS9lR9i z1HJw#@4VDAggtXx{X8SXPCf6Gc)Vh;H9hH|BE6F3_d84oe?4Ju3_Vq1p*v8m3cYCE zB0UV?OTA{2{5&h5g}wa85WUISJH5-zpgbXRhr6ODT|2D#RXj`enLQpRy*noE@w|F? zK0I55Ydw!QmpzzVbUl4@20em0Lp|~bRXm838$0qo?Yqj|DZTJSvpRGra6O|R0=(ZC z%00QyT0P>NA3cF2i9H0gLOmVKXS}p!usi+mroD_PV?EBKp}oXP2fTk76FnHj%{$FO zH$BGRkv$Qj6}}izOFhhB@I3pF-@VGb5qCOu>Gcs+7_=R5b{ioNLx4n3=W0Xt~_Z7jXclD z(7e_pz`SPlGrPN>pFNf0#XIz0U%kNCFTJSwc082RCcNh~DLrMjKRrO=N<2Jp7ChB` zU_3Ydq`hp<=skA&CcPAjsJp-i?7So_#ys9`dp+lia=maZQoB6+6g}5kg}l}~P`nfe zd_7QKQN0Z=mb})OXFL5Q+PioSjlE5NBRph>z&*jS!o0_DroAlk$h{PS3R3x{=HGkq`lmPg*{_Md%J!`-ZEj>-ym^?QbalH5~HN78OhCJT&n7gK#GdmGl<~uQH>OEY{ zJ-srLfV@aY-#j}|B0Kp0ojv;>ioJ#<%{<&{D7|=+K0K*5oV>heWj)#Zdc1Ezl|AXK zPQBhhTD)OD4?H%y2R&E^Up;+Bm^_~P!n@w#47{E7TRlv+9=$~*j67+*#5?TA6Fw+# z&pjEF#68*QXgzmMu)RCiwml;*7d_rHAU(~%bvz~H@;yi&Ha$uIxIC=qM?LCN5Iq1g zFTH(Bvb-%lBf7UzV!iH)M7@dupuHEanY>f?`n|6@h&%&i={(s;X1xmCZaK7Rin&Rq zsl8t}fV{cdhP|;#Exe9Braj;E);+01i@jJ!dA+QAi#(HxYdo_-M7+&(0KTSKfIS9B znLSs=+&nk3?z|hRSUpEfgFJe!V7)x5HoW7pj8Rjl3~_)jLJ% zRXq*iF}!JuWIf1O;=IIc6+HmEvby##=)J*pqCMTXCp|2;gFQkKmOTGDmAkxA3F*LI=wu=(LG_u#=JaF={O2&Eki7zQ zG(6(0VZ3#5Gd()wAw9nvVm!5uh`m`>zB|#8tUNm;N4?LW*1QMDRJ{>i+`O(pIXk-z zPQ3XWVLkMTn7l*pGd&X`*Sw{PP`ylfZM^e(BE8n%n7zSLbG_3w**f<~ z0zD3U7rml+564#l0LApFHH-IlZq-PCf62J-uWv zyS7Cn9of;^jm`@D#dEj?L_2R#5rw!9dGn7x+_syuE=biGX|7Cia7DLq2P z!#%H)t~^8qH9Z@Fpu8C1$-UFHb3Ojs2Ry2SD!t6YnZ141vc1CvX}xGynY;zVGQ70= zt~?ZwPCXo+fV~GbzC41-)V;W-=sX+OoV;+ADm`(~$~>Xi^}PiW-a8#>#XK3`H9hYI z4ZcTiMLl<#H#=awCp|HCmp#@Gn!Uaatv%r#Bf9~5guVZqC_NglhP>_Y+Pg$CwLFV+ z=)9Dr$ULCF@VeW}uf4=UvOMc=kG)i;$vkf_F1+4d;=DBI-@Inco;@fgT)l};gF9B3 zI=$F)Av>P}io8Lk&OCkyN%16)UOQuQTD)i{j=iFI z13me-)IGHR(>#bhzrCP>zB`MlFT8@&dpyYV**&jaUOg)ff;<`HEj@v_Y`y8W?L0Cv z);#N9j=VH}Xgohq=e#lj@H$Q}13l07T|L{ZHas{Zy*<_(*St{f0X;(un!JS+UcD%* zN}|r@i2gj6J^O_dN8THodta2))T#lD*LpNj>T@qP_c8 z*uBb~wY=wxvpZmY47@;AsXfWUi9H1tianY0YCW9R^St^xm^+OUfW7ewkv$|y9Xzt0 z)4W!hB0b&ivb?o(Q@zvc%e)zX5j_B?6+T?@?!4Ar9KA5wDm=h0@jTO;lD!+qfW2A27`#oW zCp}{TR=pUD!M%pWp1d^|8okRim_7Y4BE4~?8az|{89ib=ioE$>pgk}7dA)$CFg>?z zSiLbWF+JxpN;}EdO1j7B0T^hAiarFBs{6;zLjJ*@tfV^^9pu7onXFbP!vApX|ojriIdcB6EOFPKr^SxRH6}@6P^*sZ5Y`bPv zm^`lj@4anF4!!tbygjpjPQB%qy1V~)8a(G=dcA<=F};TX`n%nmi9I1Ku)Hc}hdblW zjXeSJ0lmIBp*(w>Nj*1ADm_Xht-Ys(4m>%ycD*_kW<8J33B8nk_`I<%7(QCgNIkoc z4m=lOpt}HYqdm-J$-SU&2fJ&GZasdlSUk3>{5-CTalJ$^ue=gLCcOZ3{JqlEM7@+_ zzqx5wLp<3eV!i!vU@TfAm_Dm*(JB)wEkzdeniuDx~;YP_bdfxS|02t7Z0Mm-SEV7$>b zUp;(hmb@v{P%#l6?G*}M~! z6TS56F}Tf-)jW^e(!JVKXglu=!9BWh7d;n$M!g`*k3EpTpuD#YvOF{IsXg3}nmb?4 z(!DxaH9e8_Y&=39N<9lXiabWnyFDe%ZoSziV!W`(oIFo~AiWVT4?Wg;T|InDp1mrO z1U&>!2fhSB6TK+VgS~mYV!a9J>O6WVGCf@}tv%}cPQ6y~JiH6=uRLBW550Z|sXYK^ z@jNrBkUgPhmOKklzPtdezCDs2r@c!bX1#JP5WO)nTRl5s?7SZ)W4y-X(!79-nml&< zjJ!GQiM@?_XT6U49KA-On!QBhlf0RP!abL7y}c$1*F2$!B|dqb(Y;4ld%S2kro60A z<~`?y3OzIhfIahSYrCCrn!NZ&m^_V?8$B(-T|0$talJ;}`nxAt8@m>rjXdpG551#Z zH@y8okh^NKlf8RKMLaxAO}*@N?mV%?Dm^3JR6QDR9KCo zg}qd=i@k+Ics)d&8oV9r1wArku026CN4>GdV!gZxL_JlqQoRnpfV~T(bUnxH4n0l% z!@O^z_VD!XY~(7o5av^;MD9KFbl0z2Zeu)Io#wLLd)Kt0QV zNW3YXxVgM#vAyZm+B@7ws=X(B8$D|+h&|sVmpmEGc)W8T7Cg+XE4@LKNImxJ1U=_@ za6PYdp}opF3cMLBMm-i1@Vu!nAiV%S$h-GQg*@s6XFLplS-pes*S**xf4%31XFc?? zQoSAq6TR8JfjuA$fjtM2EWHW9KD`x#89d-?tv%*oxIFBL!98*KD?P{15j`M(4ZR{x z&b;BXmp!FK z3cWi-TD_&=^1BfsH9dyR=)K2k=)2mxG`&h+hCI03+dM55$h>hE*gE>6#JcVIo;_=c z$2^GqqP-z%9K9bq?md_phdeBmvb~Acusn)BJiTo1&b*&VWIgMm#xB9X$?!dp!u)cD+VVFFo&} z)Vt{g=erv^-aQjUGCeJ%M!i*KiamXEggqNLGrhw3Og+^T&^>0Wpgl=+1HI&|uf4>w zX1p1rro6e4$-9N)8$Fd}e!FK@d_7d|T|H%Kle(>_tUXNR{yc&}WIOXG;X2z^S$nyXgzJ) zk-Q9-@;r_Ys5_qzwLC5kracIoQ@rS$g1ryglRfX~Jw5R1Ts-}SX+11bn8@w!#>AWdo(Y-U86TPmgfjw^g=sYgGcR2;H zusjYZ!#(v$OTDPUS3NQYw!HzOIlZ4D5j}lu^1OJq06WcQPQ5l)lD%b43O-ob+C5D2 z?Yuv>1U%5zvOTYaSUtP{ zGQFvcwmh%sb-Ja4{5x~ zF}*MgGCg3-f;_BFv^ljg=)7mL486EuO})lu`#iMQCcHsw)VT;wl)F#4=e^X?^1C&9 zrMyHkPQ3h&guF@xwY}*@4!x}AHoZbAd_8wps65iQ<2?T*alNXtoxBCh^gSs7Sv~O0 z$~uQso4lERjlDZXMZ9G#pFG2Vy}f0b1igKq+&qeizdY45CcUETTRiI$B|Yc!fjxZN zusxXOMm@DlB)zBud%c_Vbi9v?%R4UYrM#C|!8qa@FT5f~3%yX1w>x*n^SgC%o;)oo zi9K<1HNCFZExl%l$2>s^2R(tlT)eD>d_7yw(LJ&xuRZD|7`<4P|2&1CIlV>f$Gq`j zfIRLWYrGP6#=NqZSG_k(I6Xi~s=Q)EK087=@4V!Y3%v?t**wTi61~|GM?AgLy*+{5 zBfL7ksl6j3rnv1oIlZVTw7pI#YCY)HA-#I;!o3G%hrRm*IlX}d%)4>4a6M@zTRnBn zc)izWp*+}g-90l3<2}O^Pd(y;>O9Nes6AbDpgpu!*}U(mcf2~SG(ABYQoXQGp}e;S z=DXhMR6XjQfxRO)em!ih_dK>(pS<+Pf;~U0r@f16*1X)WRXrRp_dK&6{Jc_SwLPaK z%RP)@0=}*=RARql|1}l z6urT<2|a?cpS*#Q6Fu6U@H;R{g1uuqEIkj7GCiqj!aX6iVm)1U8a*;VBRlI!IlLZy z1-z8=$-0}_YrU%Y?7cIwJi6Y?f<09#l)S1tioMB`r@gWvoIOS^f<23X<-8`oHayQm zAH58@wLO54O}xox8b0J*F+IczR=tR@D?ML?G`wHJX1s$l$33E30=P;8d^~5tO+B&O z3%$!2K0Uz`VQHh&>U;AH5sTwLP5cbiDow3ccu5yF9Q!e7wNCsXQbqZoP`6%RE)F527QI30 zLA{|^ro44}ojn#K3q2WS(mbKIq`d898$B~mp}pCOvpl^&v^{4n$-N(3qdceZZM&$y20a2Jk-P%DkG!$s=RD%~K|R@!O1z*w=RDjN#JolE z(!4$TI6Yuqj<^z7&pl+wi@gI5%DhL%wY@Kzy*q~IjlEimD7%M>hCPiA%)AgkB0U&a ze7gSL>^r`t#k{{R#**o66<~`#s zcRg<`raeh=0K9(`?K`RSQ9PSynmeE4dpycMz`f~FcRh~C={+t`2)z$fv^~(8DLr3H zJiG}Emc7BN)4Y|KL%bbLU%dimH@vJ^_&g`RR6Qt}w7r~AwLAygiMyZ8Z@qC5iM)X~ zB|NwMroFx?Z@DE&mpo@Nu02i#XubUo_q>sM9z7Zm9X+utT0MZ-ZaSU!@H-Z7g*`3G zVm%4;U%Sef0z7YtxIMkE2t8(11U)`GsJoJ)@4bPGXgz8~S3O&otGq$W4!!pqC%ozs z5XQ*1U`w^*z#2 z{k)vD0lOsE2)(bkTD_Dgi#^CEsl4stqdeNB13k}ZtUM|*PCdK4 zxjk3Zle<()+&#?GSG*|QD!p0?Gd!_j1U+O3bv@3jVm%l~N<9qg9la%^J-y)l0X@^3 zdOY*_UA>1^hCS-tr#x*}fV=`6fjuZ{wmcrs>pc)Rio9qVggrj|biIRi7QOGnV?8|^ zQoTTbFg;75raja4XT3m}3B7G7_q`@mLcR1LvO5DRay(kJpuK|kOg$iYH$BS_4n5UR zQ@s8_vb@bD@Vf@iiM`tW*1TDPQ$15r0KGDw)4M}tqdnnTjJ#b7Ej`ye2R*6)*u8Ho z;k;}$3q5q-kUbg05WG>buDlAigT0b~r9H%<(>$>SFFk%^7CoZE`8?V^ay_pifjd#i zt-UN@89f7y61{N1tva|XTs!uhExmT}m%ZV^H9NY55xpA=FFYqeoji>)?mIIkExdUU zSG+qmyF6m~dOc(NUcA(bAHD1ZQ9a{1RXnX&M7{arfW7dNx;?R@D?K#dqdYiHZoP`O zIK2aHH$22^xV%TcPdxNG5Iv=1ue{ZyjXPPI5xoScO}!h3m%Uk*ZaaKlemvgP3%*mw zCOxd=+`KeBHMygS`ox@j6fm627te{k@n7d_4E}sJ&*E1ic!KpFM-kp1ly-g*g}K5x!+SMZG{w z^Sw6^xxJD)n7z|LgFQvbqMQ9KY7ygdP@pFCj}6g>iY2R#8Xg*|atlR7p#b2}Z{ z8NGJmhCSP4j6Jtcf4wo0xV-f+%Dp%Y0zD{^9lhDwcD=nFHaco$#5Kj62vSNj>7SrD?O6@LcJ;&9KA$7nZ4U$ zUOoLcm%W9qVZEPL(me*DDZPg1`#inHx;^LvUp{nwLOt&Dm~{) zxV={47(D{WO+EBp5I)V=dD z#XVCvd%f$0uDw&;emn(gsyz5+Ry;^f0XiK#L_OwnXF7tL0Y1p5{5{~h-#sN5i9C$) zn7q?|Iz58IguUTQI6cHPm%SD&&b_~c=e*m-+&t%4u02z$SG?x){XA1^)jWmVRJ|QU zKRb8lmOXIkDLrX>WxX{nFT7PG06jN7kv-_%k30btK|F*NguOTEAiXnX`n*2-Gd*3S z+&wLD5WTxZq&%b6?L8~!XT4tIx;!N-AU!nLWjj;6i#_mKB)b+0Vm)m!Ts-cGeY~fv zggpvq!aE(LxjY$dy*yZuTRo+!ZaoB)YrMLJhP`w94?U1QtGw7Tl{{e(=DnDjxIEgIc05a% zj=huud%OHkUiR`Aw8&x4LxE&zr2nib3NAk zM7bj@n={y*ZmOW0Imb|7YhrNX-$viK$6}^$@@;rgHf;>??CcQmk7d@j- z%sfRPlD#R8k-a^zWIboMt~{`^s68!1p1rDBKfPSs2fM3Y!@Y2e5WL`s)x2!!vpj2} zOg*lw;5-^Mu)WT&SG}_=xjh11(>x3xA-xW)BEEXdOubk&iM=zcqrFgpfjx!+j5=l? z6TK?CpFJ+YLc9nkg1wA|N96kJ8WxPu}CB5U0 z*}b;aAH4$z7`@ROroGmA+`QI0n!Psg^gVK^WWB-9Ks_Ck485rj3%vqqmb>}Db-kC{ zow*5IOg&Ip$h{nxiagk2Z#@`)l)d*2n7wYZBfZZVxV$W1h`bU1*S%+M)jY3UalIx( zI6lq$3%%(-gS|-2-n;YXD?PJM>$+LNwLH1mM7%Nb^F32n+P%1-GChpQroGRWy*-A} z$UMINT0PXCt2~Fiuf2@W^t>($H@!jyQay-wn7u-?iM&{%gFX9AD?KP|pgb9CggpAR zK|LdJD!q$~2)%+kSv#L3Ydtbz5?mWP&oVz44sJxp|3_UI}?7TAs(7F(S_&l7Jjl9zGkvvNQo;`cvIy+=b zmAer1z&$bB$2@A9#=P7|jk|Q%?Yk8OpuKqhZanlday_F&#XMI9g1r!vL%q~`I6Y5q zMZL~DfV~x^!oAc2iM)29w7l5bzdM*vT)prP>AVm8YrQd&uRT|L@wkOtB|XuO2|Y-{ z@w`Amn>>w&2E7>7Pdk91hr1%8PYcfHH7v^~?0CA`N|puDu_3O#l6D?MIGh`seRdOdSb8$MLm#yvi80lhYpR=uvH zy}XqTO}v%#1-<;_w98wmnSA**)Wl zb-gl1U%hrwvb<^Ph&-?W<2ogc2R-+Emc3t&oV}r_n7tKUsXQjSWjulZt-TEp8NJ-p zp}knEyE{NjAUv|^V7(F=_&eB}xxKfzyS%%6G(0rZd%bv~xI7X?6}}n~8oaI~^SbUb zZ#~%jl0CQAE| zuD#P^#=YI%%RB|lm_4=+Grj+Qqdn~}xV^%&?mbU)j=gaQq`aKHq&(VtTs+4mBD`h; zmOO--06pM7Z9Q&6mpp1Eo4pQBD!s+U$vgDv1ikC16ui1+i@byL8odK=cf28DN4(dp zIlJW0?!2lRl)c%@ZoE&T7`-qo4nA*9@4Swv(7fKRj=h_oCcTTZhP`g*BRrfrq&?cw zygM)?gS|er2R(#TS#=Tjp;=6Z1Grb_{I6d_IxILbv_dJmP@jSic&%1WVZ#`^&&b!Vew><$z zF1;{lkG+0S>b$DxKD~88K0Q(n!#%#R4ZRROUA$s&z`fboEWL_ag*+!-E4`f@sy$6L zd_3wAue>?ycRX)WNIj~`eY~VAk3A|-PQ8#OT)hZ@OuaumV7<>uio70BLA(0X|vM#66=~YCY<+61|Tv0zRyjt39$**gF{DQ#>5Xh&v;0Wjit0FTJ2$ z2)!cyCq0@{vON}`=R79Exx9VQTs?t}o;-WS?mgT(+r9SdJw5!2IK3!!ZN1Brbv-Yn zH#}Kk4m%Oh7rh&V1v`5m9X(nERJ{_#b-gg$aJ*^RD7-xqoxDS9kUVo>`@F9;i9CxS z7ri>LEj_sVZ9V>fth^_~hCQ=AySz)|C%sG9xV)Z!j=e{?5WSqz8@y7-ggvCfT)hLA zfjt%dExj6NJiV4C1igCEjy;yhR6U3eVZG-Y#yT#2r@aEx?7X`!-@Q!PxI8g|ZoNO` zNxfTU_&o%SeY>e)H$5=)LOpGmR6SaFalOD!Fg>NE;<>wBoIPbm<2!J_BRzrBU%e9Z zS-P1)=sfZbm^%g^3_Tf5Ts^LT8ogQ*hP+AGG`)D6VZ8Jqv^(yG@w;tM+C3Op-8mt} zF1yLDusf?LeLV7iyEtF*mpoYcRlF#8Ej?JafIWZ#j=jv_mApT9emxMKh`V}W;5{Cr zW4+B9m8u)N;uVLWCj@jNiR#=Hn{g1qSs*F6!`t~~ZKQau%%O}(R`0z7XDWW0Q_g1y7t zx4gAChCSl_6udPieZ2ZoY`q_0l)dP23A|T28@&p0K|O?TRi7Ttv#q^B)x&D)4i=M1wGMxay>y4x4dW#jlAYo zl|6N`7rklD7rl@0&AiuG3cTGPfV#As1-*u3b36=5G`&1PyuE<9@H^u)RkoHoa^I!adyEQ9V^}M?B9lMm$XQYdj?iC_T|mOud%k zRy`xByFFZ-Exqk&;=SOVw!CWS>%4`$V>^Z=jk!?E620(XiamNQ)4Zy91-_We**(H} zF*_5tXuK>_V7+#=X*@P@f;~O^V7(;#YPw=9j67NuEIVd^D!qv@@V%lMBRl{*y1SGh zAw4|{WWC73EIpku`MkozoxQ!&AUt@QguTV1T)e<2qPr#cEq%|Gciee?6*5J-yC?bG#M|%{!b4OuQcRO+9y4$GY#&8$1>;e!axBpFH}A z$vlwesl0IU#JdK|20Uw(#66 z>%0JS7&+#M`@H|qtvxl5COsd5Q$1a4vOQuAtvs2}QM{8-$vk{K2fcrT?Y*a*bG-=} z6utH30zDylA3f+u&^yI}7`;Fx1wOJmGQ1yP+PmQMZ98W+BD^1`YQ5It>^=im2tDRCQa!Cmiaoa42|bmHBt7ey2)(GsvOHZCVZDOofW5alGQHn67(89G zIX#Cskv;6K&b|DMv%FItp}phQt-SanExl!EZawWmay{S^=Dgd{2R#^RwLPOSGCGFS zzP*-#FTB-Jq&&VsE^z&ETfH*q?Y*80 z)Vvm%DLwa)(7cRGLOh*Z9le=5Y`r(}(mmBDo;_I;r92+8O1+=Xzdg}p1-%dTO+BP4 z{5(Pom%W7M)jWi88odAF9z7zI%)Oqr#60Ss!n;kn2Rl7~A3b_a*u2iP!#%uNP`&9? zNIf<6jXYS02|PIQtUZY#!#rblkUQ(!@jG`vt~&taoxJ=w(!IMW+PeXt$GvXcemvM< z0=`;PKD|HmQaz9?VZBMlXT7czAv_J@#XKaazq&4uayuBWeLQZ-v%9Z7m%a3$z&kY- zLA;D>6TLJzyFA76>buE?F1-~tU%ko0ojpUXEIsiDNxM0-_q^Eq_dIO`7Q6!x#k==s zPCPsK%{|A}K0F%-PdoFuG`*RE)V&t#*}Q#$rM)PUxjcJD?7UiLgS`i@jXhF+8$C=g zlDx|0U_G|LXT3ayC%vg^d_6Z0Q@k1&DLoX0XTA2C$Gq?Uk-f`Y7(JKiKfMDsLp^)< zHN6V0J-s_6Ha+}&qCFdH&ph+4r#*I%guO-6+dYtt9lc-j<-BA|OFaP&WIf56`MVRD zbUQOp?Yy5;pu7!)slDtkl)b3a5xv=V8az;_KfN~aG(4I>WV}U0V7(oei#@wcRXveW zPQBQkNpZO2Vmy}jfIaW=U%e4-w!O#fK|Rc7ls%p)2tCWQ zNNjy6Q#=C!Lqq-$yYCO;({Ji*sg1i=8XFPA@&%FWqrMzp@6umq{BE6`tv%E{S zNxTkrnmy6z?7KSo!o3o{N<0r0kUI(^COs}RUp;Hk9lg0`?YlJb;k*}T&%A#Nkh>bD zpFG&XcfIJdl06)ipFP1(oIB_(m%Nny5WQbadA$Dl!@KkxPQ8T>n!QA(u)U3NP(91b z;k*V}7`#wK7(Ef91v_Ev>pNU@T)lRDLcFj#y*x|9tvonVK0Qmeo4o__v%I`5XFb|@ z!MroF^F6fbqP?4?V!OkIzde4}gS;`;U_D{> z8@%Bg&b+3#pFG`sV?FGKC_I>zg}oHyio6BSSG^~vH@&*j=)8-iCq3tk0lhYXEIhU` z$vr0@$-Ov1uRPXoCOvWTaJ;igvAqKEg*_Asg*_%FZM?mK=Db6}U%gS+&^>gHhCQ8M z553cJzC0Q~X1zqWP(5b7uDwA7ggqBZEWO8{#60Og)I8w!={#0#4?H8W*}W4VQN39o zP`x19%{<6PdA&O^89d^l7duT;GrYk__B#xdZ#`Q0lRS)8^So+?X*|O>IXy~Zjk>z3 z);t#vi94AxdA&30v^*b}&$|N=8@^d8{=6D-Dm|yf_PayBaJ>wkA3PheNV`h;2RzoL zth^O1K)rE#l)bw5nY{L^sy!{~R=rIg&%E`nb31XkoV@*qnmrv+EdJiUyM2|ZtN0lLKHnLVB= z1U?P30KS;cfV_IDM7;AMR=pGZWIc4xM7?gVO1;`#I=%W-@VlVTdc3|0TfO!w54_rb zPQBwITD{+G$GxDmR6Sfml|1Mpt-X~5qddWPp**=IUp_X%F1%m7(7niS zuDyQY8@(BOM?CbBF*`#azP(SoOFbx`4n1_&#l1!!TD=H%1idh&K0Vkavb=i-6FtLx z2tKbX6ulKjsJ#Z)7rqD#n>}11Jw0B45WSy*fxS61{JVRK8NF0KD82ZQPQ7|7BfZ?D z9K5DRO1uV~le}ddnmbvrNW8FE4858x!oBm`pS|#e$GlbAD!tICk-O${ki0$l+`QeD z;Jh)Da=jJ5W<4FxxV+I$fxQ-F_`J>8U_H>K1HF!*$vl#_vpq}-pSy~nkiGI-oII?u z^1N@ZcRhIIjlE<^iap+cBR!!pKkV-#c2xh&?4#ggfd% zf<1%ukiG2|BD`!vy*seVHoYc454`dPAH7^*w!9TtJH5L#hP{J_h`s%!w>?0J-Mrp) z9ldp6vc2_SvOGTm20W?_TfOgx4ZJ+}qC7Uumc3s#Exhop06mIXsXdL;4!oIPyuAK$ zXg#6KUOnfBM!j~(8N8RfQM(u3s=OSEf<21C$h~!{480ECSi9`3MLk6;jlI!4OTE>k zGCdI$jJ-KtwmoRIE;EABE6o6nmvjh zy1c>|!#%JFioI@-&AfbiNWF7sl|3`olfC&6S-p(GR6P5JkG!EQ$UDyvoxOrkzdYWw zMLj)56S+;PM7_WFlD!4W2R*fp^SfBAsJ*(cFueSC>pRm)!o59*P(223G`*=6kiAR1 z*E}K#i#=P77rjEg zU%iMr|2&_bg1nVkCA~&s#XTtVl)cpxpS_EWjy$>`N4V);p(?H9gYu)x6QsyuF8i>pE@v_q-a+ygl05wLSU&9z9}?db}&pr@YsHBD~iY zy*%0HnLWj*Y&|<@YCShC)jc;P%{zSvh&;p9JiJQUJH0())Vo(#1-uZ$<2|@@p*=U^ zs62tY4?Ap)8a(Y%7QND6fV}#O1wEnQLOpp^xIK1ALOnHiYCTNB13iWpHNC`IguD>U z96f)N`@5N(tGzh5s=Y6ke>^b0IK7HNSG@z|qC6t_7Ci(tl|3AINWD!3O1&5lh&<2O z13S@Y5uTjB)r)&yF6zFk3Hd$n7sbBZax3pf4sE| zq&>bXWxUhmpu7${l{^n%96cRGZ@lm;(Y-UflDvD-zCCPL&OI9~R=o(xl05v!1-*iNuDw9^rM+{~ z2R+=$1--CP_bBJH0x{1-u5k)x120oV-+~fjw}wJBfB?Jj6DNe(>%d?Y(4d>OuW-l@H^<{k3H*%4!zRsQ@!S_ zCOyA`1wE4#tUO~y5xr-zp*_K)?7Sd|QN77w-aXrBCcJFL8oZ51V!b)aHa)}H4m=J9 z<-9Rt7CcjeWjq|0oV|Yqk367J7d@8|+`Y7{u)SNe20cqc-95@gaXtJHcD&}S7`;7y zKt7l6F1O zkUYXTv^J{LpyC1mc7;(bG$L+JiLX<)IHM@usn!4Bt1tN z>N_=j-8?1t=Dk#qo;?b(z- znZ0K2tUDveh`pq*OFhI@PCW*^r9C=Un>$EE3_Vb)IQ@w^n%EIq{@8ohP)a=a48w>lNIFg-!9lf5rRa=nD=(7d%N7QINS%)5p_COyoq zw>$?9Aw6t-20rr^v_0T*kvy0KsXaSaHodY2gFT=>o4r;ntvwaOTfHJ^4m>e1hCDkh zHM`dnM7){BjXbFln7tW13O=R}Pd)dcjXj1Q$~~?@=DbYFEj`hg(>?nqUcGXm4LeTE z7Cn#v3qDB~;JpV4KfTE34Lsr@m%XbXZM{5Dq`js1{5!&RK|Lw7ian>^+dLg!ay^Q` z=RL^w}2V7;R|usuN_HobbSg}wJ|{X7`Iu{?DTIz9U-kGzW*O1}SaOFcA$y1lPZK|PaQH@($l*t{uO zian&I0KVL|HNE(RFg<^A;=Le+jy;i~QoMK*Nj;*&ggyGWn>}Cz(LCFc9X)7D;5?u8 z?7a@wvb+i=l|9wd+C1W~4!sogg*^%5D!q43QaqO+FTKw6=e-xFo;_XYRXxn*ay`_( zr@gNHMLkmoGCL0!!aSSL0zC2o?LFx5`Mo(evOR&c6}<(^;XL{MQ9abEE|2wjd zyE+33_dBhfj=T^@dOXRxO1qi#sy+LR06qiQox1|Els&)VvAh8`z`Lrt5j?fJ0lfp@ zf;|l-0lmSd9=x#R=DaK7w!BhV;5~Jd;ymvLYrJ67gF8?qN4?x>eLd8>^gK%hp}p73 zvphNKuDs01#k~8*t}m|uRJtO&N_Dn=R9HyJUzECroHpWnY!a`uslMK zNQoR1` zy1X66ojmytg*-+zBR&0*3_av{jXE$-$i3@OjJ!ztg}N>_kv%Ic!o8@kExiwI^}FadX+5$u$vb3kc)e!K-@PL;k-YvS?L60?S-nr$ z(>$M|fjl1uq&;JP&%C*&1iSSJC_MD(kUccuS-VdPsk`Ipmpr)cbG>|p_dN@d482_- zmb^NlwLDigH$2lsmb&w>o;eYAjy>i+Q9LIWWIQOaMZIqts67N({yaAf_PUZCoIHF( z_q>px%DuaBusw{oG`+sU4?U3&0lxLn=sSfIv%QbQbUZUda6RYhAG?npp}f#kO1&tr zusUa#3cU;PKRa9&S3SHIBs`prfjp=XguQPL_dSlVH@%zL%DjXcw>`9bk3D4?xjLgL zPdy3ZL_Pb-2|c)WguLyBay?1-BE38zDm_+mfV|U7wLOGV#l4MNqrEq&oxLK{P`vj! zEIR9VeLb6$(!Am#**mSiJiSLMN(i@c4FEj^0gsJ!3*@;h9VIlZ)L*t;4~g1vI&7P}7;gS+zF zN4zuzmA(9d`8zluH9UR4?YshutG!xoIX!=!lsyQLi9N8##Jl3Dzq(B={yANiB|Q{= zH@zq_UcK%#{kkkqPdg5WA--@(L_0Oelsz5dExgOgX}w7{iM*W%>^r9~gFU@1u08F) z+&qtzb3M|L9zLa$L_HG~h&|}-?mS>%io9VXwY%(44!lgQ5WR@w+Pu7LoxJ4gN4*bW zH$6?jcfAW;o4lD%BE13!7`=w7I6Y=-<-BT-v^>*Gq&y=%#ytgs(Y%J+aXqkabiKuI z1-@m*{5<0gUp?6Cy1jolyS*bkUA?o=FTLScVm+GzmA!c}AH6C_Rc!IXz(qu{~*QOFX_CQ@w|WcRYy#U%k-3XuYN89X&G2tUGDi1-(8J zmONZ+w7kSaVm!ndqr4F&r@I#mOud4@cs*XC1wF1HFFp5fK0KR&)w{(-`#oKnAU!%G z-n>_5Z#{-EK0Pe)3%#j0!#uDDcs*3)v%4gMyS>}wg1u!s=WTL&AoUE9X-1s$UB89D?NadIlYt?Ts^BQ(LBYXuD$DJ9lD}j zjyxE-$Gl~kwmWL3%RH((oxQuTuf6;IKs{HVX}r56C_LIH zQoY)O7rXPLq&yS&lfB_bBfW#3mAwaSy1cvcYduB;4!r}uzCA&KRXnM2t3AMS#5_FN zV?Cn9|2uJ2Wj(L!2EBP%FFjpW`aHTliM?O0eLYn*ti16Dg}p*3GCY7B={tNE-n>0$ zjXVoRxIESC487KOUA=K>YP}ScJU!mJqC5t0!o4q?(L5hHhrF9BojqxzMm>01*Sso# zI=x|_lDyHmGCitHJiRhUV7o_{<2xZbkUSxvJ-slTAHAfx6Fhtd**kbRH9a*alDr6s z^}X`nQ9Kf8DLoCnpgb37A-xiF*u1&>6+NzFm^}T|2OH96daD9zCu2m_5mj-?~k!CcWi?gFFKlA-t;B7`@q)20m9f4ZV!J z(YqG^wY$)6?mSaZzP#$sl|4Y3(z_z+oIJz6mA%EGP`!9BN<6O=RXx(%J-x)0$2`J_ zkv;p{J-j-Z%2MbO1wt5k37>VW4(4(3qALJhB~=% zB|RP`Y`wi!rM>Ics6C+=4Ze5B5Is$S?7XwfAHARiqdkU+MLld@6uMb&-Mi-JvkU1CT zdOW+BcRfzGeZ9jYsJ%2@hCO_*mAqba2|W5f^gT*Je>u5-A3X`Miandr$2_RdF+ICc zPdrL+tvuFO4!peH!@P{%JG_RxhrRjcfDS=p1sc&C%pulmAz+&FuaSE zSUiF6QoQg8+q{K z&pcq$yS$<&K0C543%%vZCp?=Yi#>6E`aKAgu08ktL_Hij6+N3$*gRE1VmvWI6us7k zG(BR1lsy}uuD$cM(Y){}o;tA9g}ubE2|fnAbiKHF8NJufh`j=%GQCJcEj`!hMLgwn z@4cUJg1u4JguSyxK)tXM7rVm(IJ^U{%se_NxI8^Kg+2Gl+&iccFTI94c)bg59X+)z zEWKV=eY~w=<-JGUFuiFh5xr6*sl9eF6+MT_J-pUn5WN4^$h-y|sy!}9xjc+LEIi%g z!#qXwn7#k>2)rjWfxMUnB|Ako(!3hzeZ2N&vAyLFpFA*>BR&4}BE2=<209P*TRm8< zKRw?_2)?;pls&LraXk$+k-Y5qGd%(_K)pUa*}Q%nRK54u_`Hdt*Spb)%sli|j=dyM z06txwMLonQPraH$}geJ3W$!2t97h&)CY zTszv{i@mg}uRN7wn!Llh|GU1O^u2AMNImu_{Jcgc_dO(@N5WI_#PdpD# z9zDMk;XLbjt~(n{s=Q3#{yUY?+dQ8}CB3e389emWO1&O9<~#Su5xs8@0zJ-_(!C@; z!aVuaz&cN3sy#9IA-w_p!Mwgl^gP1pdcACFQaufUhP#(sn!OfMYrUGv4ZEv_i#;^+ z5}??mArqIF}=Nbth`jUzP(Q9wY@j&7Cq*`v%E)& z>^qTzm^}7UIK4kqHod^NtvwY8XT0?P-@Txk%sn|tu)M8;eZ9vvb-YqbvO6_?0=-lE z*ge1T(7p10mOcKa^}CS5qdMDz1HFGz^gYrsN4*ZUQ#`{s9KDW5MZKDKCA_{)y1Y!f zJ3ahxAv;Y{gT0V(gT2i@l)PBWUOk$SEj?1AEWI$s5j=_d<-9u+kvpg%xV;H||2+Qd z0zLIR?LE9+8$133<2-O5mArrX(mmv!uRLrcsJ+gz6urFpkiEYwfjuue8$C}2L%sa! z2tMso6ullGOFg!2;XJ*`X}vl#5WSl5RJ~1b4!xlV2)#lW^*qTZ*1We(o;-on3cW=9 z;Jp#E553*8csv7l?7S-iC_C2DdpvIHcfHTo3%#{zL_OAJ`#sYR6+NW#(7oQXoIN0* zg}mfz3%>aE{k_pLP`tYmfW2cuK|TMvyu5#K&OIeWpgd;I&At3P3cc>I!@M^IhrB;L ztvzRNCp~oaT|H6Ts=M4m2Rm+URlSu{uDn6bBRje~A-(?fFTKrw2)s=>1igtNraWZQ zvAwbUOFjQ>$h~=_XFRtP2|WnLD7_I9QN0YP{5*db%smQg`#rY-7CZ>uI=vo*a6KSc zal2{jh`Yn4kiAot&%C-^fIN4sFFldtvAj9P=s29)&b*sn$-El|XuWxH2ELr8&phiO zWjwfSTRhx>n?3ioy1nS7ki23+4?V%w{k$reqCMus5xiN3t~?s1hC2nDWjze5E4^W( ztvy10Jw0OwP&~$4D80i#QoXoCLA}qkk~|l2&%B;l(maoke!Mo9-aWYXu{>;rl)Vi| zg1zBGp}VT8+C7#cq&y%7%e4!w|YOuYm(cD)o}bUjFL0Y1UukiBoBcD=CxdOce*0lsZw z$valDoW1?6^1b!2RyzSPs68Cwf4v}YVZGRt*1RSgpS`=`7ri{ICA=9K-n}F5&OD7d zNxf}$J-n8a0X@hVQaylqnmkrqv%MsXf<2(v*F7MH*E}eH#Jt4XuDh!6Jw5a%iM$5m zsyr)rA3PF?vAsITN4@#Fki3ZUBE4Zo>pk`xK0VeiYrX8kAv^cbu|4!2g1oEsBRd5l zu026y#XUb#3qE~B7d%SEy19DO2|gPUo4w}eMZE^|s=c}$Ydy!f4ZY5a$vrua1HMlp z5IhOc1il+5U%Q)dcD>>teLSYLQ9G#npgl;_2t9*{J-zZsKD{?VSv;c0FTFTcx;)NQ zFTFe8$UXU;Bfa$79z6@iRK4%*@;qeJ<2}K9xji!1wmpO%nL7*|sJ+~2nmkio5Ila7 zcs-6GLp@IV+`QfRj=WXBH$ArAls!m#jJygbqrIAa1wHguxVbDyIlXT~=)CQxKD;!? zO1#o2kh@Nc>b!Rlth}U`6FoRijJxOjFT8-=cD!=DzdMr-4ZVD;Xg!Jtg}grdlRQCT z-@VCM&^%5<<~_1{&Ahbvq&$Hys6FUXk~?<5u{}n}xjjrU5It%|nY|Exe>(|~nmsk< zsJ(Ap>bq63-a3M8Ej@%;4ZOL=5I#$x1w2$2Og$ztIlYXfraa;RZM>jEaXcF=YrM8a zHoe#zMZK;<96et_(>;u%t3A(PXgbI~yuJRns=c7e!adX%H9c;)8M~}6?7Sc_sXSi# zg1p3s2fkq0+dHjK6TKbSJUd7|P`#7t8NF`1dA+Xc20JCThrKMWN4?CV96g;3Q91ie zp1e{gCcPst@w`2amp#PyCA|PJ^SsFk#k?ns(mmVeLp_n;m^|UtjXiG}(LLBhKfF%K zP(7MBM7u6l<~)q0D7_=#9lh&8n!NPXJ-v8_RXn3&06s9_m%88Z#=LC$h`c=86+G>@ zM>`570X>M59X&j5{=4wsnY|~CnmzdH>AaAzP(6I6AU!swkUjk-&pg~w3cW<+t-QF1 zh&{h=eLbvIG`;v#m_5phr#xZozC6`lGQ0*YC%zc05IuiI6TB3+6}&zO=DmGsggoOQ zKE2X7FubtL=ez*H)w}}K1-)++<2>5|kG#&g9=w1`YrN`b;5#O=c)i-%oV?RwggxH; zQayatsJyZ}TD@QHhdk@?=e%m{6}q*BV!f6L$~qUdF}>9xRlAa9JUa#}@jO-3JUu53 zGd<@yzCCM1pS*lrHavT(k-IylpSugSu*gbo9Kt1mr ze?3u~alLS?h&{?hF1?lHEIe5yLcAy97`-2bGCe(4K0T!Vp}o>t&pezrqP$|6M!jMj zd^~g1BE1@!1wGopYP@H`2RlbU^}8=>guP3oq`Z_gqdPuA3e|Q(meq&th~sFl)XQSIK9-x_dHa3GCeuK z_B`!s9X-at3cG*GRXr8OgT1m}2|eCBl|3B&8oaH4kG+Ivmc2#bxk1iM^cNnms=?vph$Zl)O)eo4p}B0X>c%uRNL|<2#*pFg+qt&^b)L8F}!XByu6Yoti2Df*uC)&0z9TvKD(AyJ-yQ@OgkhM z5U0lmc^^1LMN-aHl0ZoQTahP~$1FgqL~o;ptRPd#{FslAzv4!srZ?Yo$OMLg*nSv+69cfBop>%CHg`8~Ju7dPQr$Gk4{l)cxQqdkN)UA;re zZ94~J1UvveQ@qOYlROXBh`sXj@Vg%LJH3Ou8a&K_s67LMn?0h^t34UMT|7pqu)TE| zJ3W}WQN4EENxhQF1HE@JPCc51g*|SuM7%xd2EModfxZ9b+`U`Z7Cfo#NfgSUe`I20d6Ml)QyVPQCg61UpfGs68?NFg<$90X;Z0iafiKP(0jt+&jn> z^t|zv1ij~*lRQB&UOnXGXFStl(mejrjJ>e*p1Vd76uttZK|QGN6g_h1BR#pCgFTp` z7d+%n);+s_D7_Elr@d|0G`w<%9XnnzjlG^>TRkgJ6+FUk(!3qCm%KI;#5_Gx2tC-M z$h*_wjJ&PrQoT-$Grc*KJv|Ls#yqp}fjqiG%DqKZ0=+ChZoPg;*E?V<{yeSR2E8Y3 zK|O*3`a4;yD!ilPGCh39s5@>CWIc&15x(K^v%9@Tp}l=_q>RlHe75WOlsdAvI)P(4IFnLNv6m_4CO7rQ0}p}iC5(>pXXnmd;d6Fs{2 z?Y*i+);-wl{5(l0#XW(**Svk?+dSB@Q9W4{rMyz+uD!{Kg*^(uiajw3NIkOIH9aj( z20c;tKfRk4jJ*!J6+KKACp{_wPdyR_AHB*#WIY75U%X*$WxVwi8$AJR4?UtQUOlhj z{5)gF;k(7LK0H-C6FdvMkUf^-gFRnGiM&mPy*KD{FG zGraSY3p;32H9cF)AG}kg0X=zyG`k*!0KGTj(LHOy?>vf1XS@JmQN0vV54_>v47@GK z8NIsRlDu7@d%Zj!8a=rEf;9#;XQt~NIl0|P7{2(;RK1B8j=i}x3q4J(U%bz)%sjtNT|HGbE4;p(NIHR)RXryG?K`Zos69@= zg*^kAfxQgTI=yUmyuEnQ3_H3=U%jm!lRYzFQ9XOT%)B)4dc0B}G`kIY(YnNCq`lfa z9Xo9i-#xjjoI8l3c0D{UGClvn8a*gqmp!m%lRc1aw>qa~+PtUTtvnS;Sv?D=ZoT*e zkG*KK`8*=bm^^bO6ug#-s60!nhBoV|V=u)OI#xV=L&(mahTNWF;1r@VG}uDul{96btzBE5P$2fa&hkiDu| zd%fiC2feZF&Ach^jlIRIb-k0rp}heQYrPb`pFIg75xZ9VV?B>xX+4(Vf4%<-iM>zp zz`WBsJw5sJC_NNwg}q36O*|6Mv%Kn5hrCQ=#5}hy`aJMCb32-z!9A}G8ohMa@jd9= zBt2oD={%BZ6TCq0XT2Hs6g`@w%)El60X{{tx;>q3)4j)%nY<_>ySzK_kGwN9>%1fu zn>z$CQ97~uUp*?_c0DjE9lh?)2fX?mMLkr#H@n)^0zF_CM!k^>1HMdQBfT`2&pcZb zI=vdDHoY539Xw`X20o}3$GF$fmp!Ttl|18)P&||-8@)K2NxZU16*~r(o;}lIuD$z% z9ljvio4h$&vOEA2$l0CVJYP`77JUnJMJiC9L z1HJMemA#i-m%ZdM$vp);;=6C%wY)Y=<~#`U3_bbBnmarCl)c8Ta6Qcp>b!-{Z9OpV zLA;>MV!W3k(LB7iGCWa_7`#*i>^wU|9Xx*m0KP3I48G=ae?7g>L_Lf#+&t0T9lao* z_d6F^D7{$iNIVPRK|S8~Y`o)`w7e(UpFPh=Dm~^pQ@vPKwmhX>JG}GZWxWWiy}iK? zTRi;%{Jh!k$-9bO2D~`3Cp}omIy??!@jO_Z)jVz&ggtm1=scM8W<1gkg1xCMExb$b zhCOW4r#-M(fjoxYkUX6Box6A)>pL+g%suhTGrRT!9KE={YP=oDMZGqiF+GZ4A-lF2 zBE1qtW4+HW7`)%FpS)ep@4Rby9X*&4DLk-C<~*vshP#W>;XGEdVLi$gd_A{< zlfAL2guJtPV!RsFFTLx?NW8(^Aw3b*m^~b@M7ve%|Ge+y zB0Qv(;=HspB0aSM5Iy{=Mm-`#u)Lhj%Dj|74!v-9p}nK(+q~aI<2*-%Ha)er*gYEk zV?BnjY`c6xA-xl{wLHlAKfS)2ggwMYyS(e7nLKwMj6F>23q8M-kG($*PrdL0o;*}U z&pY0d+`RRlQN8TD0ln?ttUajia6DmrmppAjq&+dL)jN3h)V+4?1-?w})V!koB|QM3 z_dWXzvpgV@T0G>_3q0bG{k%1`mAwquMZ79s<-HR<_dI(h1HI{br#iETD!sd#Jv_54 zAH8KgFFna?hP{BvN4*pLD7@Dgg*_I!Z#zyff4wM)U_55OFlE zzP!S-b35~*q`ZS5-M#5D3B5^6Dm+~#13c_2w!I&bHa+7{uQ`MuoV)DoCcGQP;=RAx ze7z{{1iHZH!917#L_9pcGdAf%cq`gQEsXV_Hb2|Za%)RwN9lbq!LOf3J~E~n7yf!y}fhd zQoY(V^}IKnJUuC94!uOB#=S94aXq_A@VjJdSv(92+q`pTIzE$0k-d7i>OAOp5&!^z z|9`!`-6lM=ietRl)`vYfFGoBMl4HBxoy|NbM<~78^$We4(!M=-^DMo%s0Y2Jm6N?= za5+2>rVBl=3?;p}T*$khXnefvkukh_?9jb6SF}A~C3rmmoCrNvUSB;ifl0kdtZ+TM zRFS4~@NBHG;fcD3!elY7M=`tgSq4N-7a z&eS{*fhasySOPpBp(8!)82>#Dn}fWzQhhzDaP>O@)4M#Lxe`4~_7J>rJ`+8ggo`~+4oNz*O+h`d6GuJzk3l_p4X8clf~`G=kdHkyN9w#Z{(U<%bS=HO z2_QWZQ<*){iFi5)Z=}5kju20wjI4t zBr&@SGj6?_NV2`LJ~TbL^e4R|XE(gWG8jE4QNTTgz6CvA=~un6bV$2#-5@>Mi-JAW zgqysdpPRf*m}0%fmjgaMN|ZfAABVgUxI;YvbcQ|qc>BDl z>#jY2J-|C*t0%lIB4R!ALU}#V`8~Yyt(d(P-O0Tju9-Zta!Wn;6%4(gMln5&(2zXy zX(_$idak`Opm#lA?zucCu-Co4x#GNCjov-=&qqB~LxVk1)A>Ak1fe`_fn7YDuH-xt zm#Dk~C0D)7B+EQc+rB+*t2{ks{js~YG)g_=95ub1?K-=53NSs{;Ti&~xRFS%M z=|Q`E<|I8-!|FW#${IcMT2Q?c_g*^$9p^p1sx>|KU06B|Q6xN_4j{eUx7)qV%-=i@ zrjWe>>#n_it0=v~!z?{dkU%}?`k1_-C%HSUpCh_{nZUfj=pDSmpYgpL)|$M}y2HJ| zkP1ESEh@b{d3`;cuv0ryPS`!LwEI0P@&P{5Igz`KFT}j1&<#D{$e2C#^OilL%UM0G zV|=}&zc;+7rVu?A#7exi;Ho`VD%3pj(@{DuDi}P#%7r`M%!@tM8K1pSgh@R>7qGi! zwk$nLWEng|3IM!>)a1H?E`vP<%51&LbMZW~I0?PHs0TbA9tXZ?bwfOp557BNV7R-p zyV1O^ox-~Lb&)-yd9Xa$2PZw$6NExCOl{r;fXe zR0O;g3Sm6dphi6s@iD#GZkN16r~|&F)Vn-KQx!dU-7vklKR`W_#hg5?Si8D5swh1q zS6V$gT!K9`Qpr3yg^|1>?Z&*5Bw9Srji$UMmz_IPXsoPJ0y0vf(Jbtk>sO#3^!MIt?lgSS20>m0nGXM#P-IbproU(vnR&%-=! z4huX+A@@DXtQ)P&xt+0?6p0sN@_g^SQI@6Zxg+GH-o$`wvD^@RJA={HA%dAr+2)>0y{lz7fU@+ zQmDO>rl~ts>wvpbvh|-z+`)Q2f1cOd!1s(3ZWm%bPq*-hI9Fdwabo$Q8W= z8G^kcZVx?$3naZVXf?eaDM~zW!Mr?QAcwmm=uQ=_}!TwlFB zihjN2O@cj^jzPVe$T_`jWPd%+p$0wyllna3P$9iKFY!DP#`nDeVi3D771lj}Sj^zT z%AdWe9_PEhanHP%Hu<^_uu43*qYJ&-KT^GfT^zlJtpUC>fl9r;i_5(A4lX@v>Fzyv zvW`76qNP1uyf(Y|#6dlbn}NLNXob8X7ri@m35h!(ivvCSV}w1JW4*fwhlf1lpWQv` zJ%&9q0l2;E#R!BO$-%rI{~o=>2rfOP0unxeC<{GVe>J`ILqI))nA1FF<%hihm<7@Y|6b}_f)+(fvG&M8VS8j+*iHJzIeT>YQDXV25t}*`7UjR}np_k9|Dg zMI^j}=_E4ChfY?qhPv<$?Cl94uib>{LDPDKgYeH zLB711)O9@7!y>)NXd^sU@;kjE$tXRHAvC+sZbv;PYjr(4CWbo8v^G2~435136feDP zO}#x;=czob#f!Z&Jg7ZiMe{rYL7hB0uhhJHbm_buB8xpBwEsLQLu9<4?TkF~>(#uW z9tk~onyb4=9Iw1~q6WU{q5{3JeDJ!zEjm4a$16N-U8p_A3UEAUaNE2RH?}y$8MC zJCD6%4%Rx$t9-nb<2^mh0KvU9f(JYKO`JWc)Mh=)Y@EGOMVUQwa38&MfvCKRp7x;?$Wz8F0Ieu%wZZqz%;y;{BKGjKdn z#*4iHyXibQppd-rXv91&JxIL}aA7=jYQH>|s5QM{1rxm6O-sGEpD(`ZtPMTub7#Gx zv}(O4CXl>)Uk|-%Cyc!*JHx!ve&;>fakstO9NN5%TcSOsFfBa2knTLdb4)z`?gzf9 z2%x;5lG@;7L6sM;yK9!@fMsuVKB>EhN2B zNWZ-!N@zRDN|HShvah@->X1F)BUyCiuM&#aq2Rp!2*QLnJ)4&XK(zy^1|1jPg5Mh?qTj#df?=WpzCc6Nf!?{iVIR zU8g;(PB^`7>VLgjIcq#%kQ%(Ga^TkGM~Izm~=fDh`2rZ$8S4? zr(nHbQBXX!sRX<^JcKuO zd!)AnN#H%A5&*q|28F#(ckMl{q_{lNLDRfG%mh7MeHFdqSg$-XH?}<~SoUz|O7?MJ%hFxE~mYRs5d>}{wlqA(lI?X z!=gN*x4*n{Dxy7$etNz4;fK7HUuwCc*<8H)ZS6dAwiG=N`O!W2)!@A=M>V{DA`m@? z8SXq1EaW_gt0FvVRad=w5&^xyaLv6n0iV4E5Q{zN ziY`2{U~@e2!pS_DJfJ&gB!a!om)<-=m1eybdVW2pWm~gw}5~MvvEd@QpPEtMAjlaDfxV1ZUgNr>v7<)YoK=HfC32eQUS@yk!3y3{u z^^-hf`r$kCsm8p3XlgxJJ}kVF4V5~n!s9(q$8$Y_R*gMbDKF`>PqlN-EM79u?^TNym;v@^XLU5mX+4g$Q(7>zxblw>^{S5Uo! zXidF!)o#3aw->u_*#$kkWDmS)BRIW;K;68ah9KK zkG#B>AW6OM{DQre2@XAmW#&A9-ETdGU41=wh@d_BkK#PjPWHQ&Q|3KpJUKn?Ro^@3 zL~6a#dE&fkR=GX3n{B+oUm`t@lz=@NwyQgs_!~XbOrt$80S~=OLNUFqs+2ue zLC!q+Spq#khHbt0P|-Uo;>5j0D$%|F4lF&)=77C#y$n7U%!)kAU=qA?JwUx;^?^Mt zFU36b%-1}bubDkC)lfY7#df`UW(d4|w;VkyRPR0YcAdRbOEA4VNzy!4yr;cE7YDr! z$&EahC;Pk+Ke#-q%(Fa~d^bJR2uwW%YEHd7f}%b5w->#*&U(EQ{Ybn-<(54Y^L;%xVxl~BJaamDm7qMYpJP2;fkoY{BXbZk2!veh!(yKhCoe4c|b78&Z%xgOpkJ&q; zkA^+FA>KXa4wt7j^;J7X1f0G7N~yfo3rM~9d5OLC z>yo`HJGMR8+mXG8LzO(Q#~e9-rZ_w^#_2ui!^b_N_iej&F<-rGPM^IAL(sh^M;bkh zm^nOAzsWt?a(%rF@TR=uW%WCsX@xz1Jt({hYS=wyjR-#EHV3?H;o3Te>!7@8&xbtj z6_CBQy>z`Y@8mnB)HgjSA@{pscO^a37q`3$xox}z-Lg9c(5fpYyr9*P*=qHkvzmF1);x z(a}6z%ep)L!Z*EGGn&1N-dDV&m({%XdTTwDWm!Fk+ZsOVC1}0G;I}>2oaQ|#2C=&% zDzrTPbRax*F!nqKm3h5miIlxn)tJ3xGL${fz{5O0k0?EA5#2j6_5V9EOf$TY093uz zjtjjAQk=amPozCkqjEio*y}vi>_t1;n2x*O`+_~Xovl2C&!@b8ft0+eNjf@onb*4t zTmHP_ERVf*Mf|+x?Ls>m4@^ApamKw3+seFK4_Ldts>;1Zj6^+z>Onm=Azi&*@3%ca zqM|*Mg}Xch>oUC!%7eXSMfp9D$=Q0%M`r{sK311si(c2)=j-ximW_6!a6;$4y`@HY>d0D5qdq7c;7ol_!m73 zdqKVAqZz$ZF$KNG0>nJEm6p6Kj)=VzgcrSOoq)a2>Gr%6;Ss$9?gPD*h@Cv3T28%- z>W4kD5aYb<<-I&XP5HcpXHvb~;J&?yzZ$)bLwf>Jwj zbzQx-f+Ri2&Y!$EWtzPCS+=_v;JQ8OPenz%g=IdZ(khWEVCAU-=vZ)?5$Xr4X$Fo?SvWkEfoX?;DA-QYaq z{{uc2lApa~P6EA31VcSiwXi+r(jB`|P#C?4sUp3HD9*jp{|mbeEe5-3%BX`z{WlGSl>HhpX9s1OIN&6)`Psk#lSiULw!9K)C9ia ze%L*EK_k6Kh_|_|A)35aif=u%;@i3uD0Vy-Lm)g&EP}m>s~x;>aeF)!>x#W|_td?) z0LeYpjru$hiE}+OEeyV_uwT3a8;LxmQ-!@ZJt{q^2beqG(*M1vRztjdGnG4;Ak(}d z0gpW?#YMcQR|UM>US+*0L!v#EOH7vbyYEC`zCzQRJ&dj~o2@E~9m5IDotjWE2-!wcRS86-r zA%?wBl(D@e>k+*1vz0wfGp@Wzht|B9vt7M{q6j== zS>n5ouV6enln^}=ay>luTI@Xy<|jSqG-$p4;66Q9oI$<62){g#-Df@M64E{T`XfEC z*jc?3AtJryEoi;2a|FJL^m9E2(o!C4yrzE}2D^ES9E=avlJ4(CF z4njTUxm7)uozA@lTpPS$=}tY5K_|VaQF%N=44*x-ikrPn(U80d7Bju}kEJ~mt&Y9w z`~yYo5#I&wV%4KtH!-T zM`yiSME^VlY#lvX7K}S~kE%TXk>$Mms>eKmn(Do63WmKGy|ukK(0sd?KSjNOsFb{) zGLyXJ;~qWVoN>KF9)&$0eI7lk@OQj+)Nj3SqJceCl?c5x=D$1cX;8dZp`ShTq#3ui3&ZBtE@Z!1MfW! zS{c2|^PRmZHa$H=>SDc93W2>d*_^%ZUM)Qp*jqbBZl%01)F(ag%ql$%AfLSHCDT2Q$QeB%p5HxWFBLsv zRx!MR5I{ZJd%e3d!KA$E)XqJ|J{dmnnXJ8nr{g^%`+~inX~I3nu}nQ4SB5-w^eR2n zL)^R&DRMpE6vn$urHs1Kz0bS{RzN*_=HgYaZ9}pf$Tis3w}NB|F=9>nE}1_ z9pt>?7qh!3R^7aJH%L8C>0~_%0wcZIKvX<8GATWt&YC>q^qoB~*XTWgs&YK)Jxsk- zsj$7kEf77-lr+4eSH`@@O&vXM(Q3U%sx7^d`Ut(fq(D8at%khpU4T6j4$VCvQp~(K zT_QZ6skS`MC?magJw826_`5vUE)qLaQWCu)Mua@3R{*?X%g#N6vnjmx>x4bla@ReL zRVclqcM&~c+Ht+duT#DM-GaT=mQuXYbG1BX9uU1r6vDkPpJ%)wePTQatsFj>2r)e! zIet8vya&B+7;8KMvn#wIKgqncwFteg4s^YN4^TaBgKE7l8BV=IB#FCJ8rr>3!#h0M z5_-MscB{R367#&OX576mPD(vMVo^Lt=T1GRD_yrJUoF=`m3m&|5 zcY!@r3W&X^n5{dYzO#Y^^)N z@U*OA?HDJB>9&0^b8#+A!Fy6cfsfxUsAm2R$#*aG_ zD}_BDr*XU%OJY5SbUVD7>QB6n&lEceVU9h+3#z*=XH7i<`T#wtQM^2ao}fI&rlq`I zl;=E%CY(DQ)p|X^D0IBV&SAYn*{eL;G$}e2&>cP1*gHL|ag04S!(qGqsvo&ch&KSL5UL!m( zGOj&oZNx)Fr&Q zLq|R7GK{@yWQx4!KPJ847XCad`>s7y4dlF{&bYmyOA0+5>uWuG?AyFF#Y;Wo+ipGY z8xp+*j4(Y5aoW52TdO)i9nrhO^(4KS-ao3H)-5|b;+nf)n|eJ^&g(qZ?6Iv=iEHn#WuW?svSKhPo}#i8ZBd=Q?NYsd2_qHQ_ek-CvLU^fc%D3NC|5j& zmoPmxeo(#Tt_ZzeId8 zDET{+r2{=l;nKbJQlq@4c#b_mMHapOPQJX?v7$Zs@*cfh{=vMgzfL`>Dg!=6xz#=A z4P?BR5l_A4?xj2Ph7djD1+Kh>eo?*GD`-7kgdaWj#bLcnhcG=D=m5Naj;cJ5N}WCE zOXNKCiT1p6*F(EZ2lhQb^3A*>KutU)M##N`u*|zj^=-YCx1qh%qjJ3+5#2mA5(z#2 zB}ct6;5NOhl&L*%>!Cc?v@E?^?Yh0)L4Cb6`I@_7V^6#VDOo+T3>dwEQ-nRQ1#rEC z9%#MX5Rtvb{JXsz`~|-C1C%>JVoUHU!OgZ;=sJ@g<3sy4kJAUP6Iv1Cx|@IH731tqB=d;Y1BOJL*+amGp)MD_ME&q zjZD2PmAk!crs}*jjjTNRyU#t_{pY>(6ZX8yKQg^Tk2<|v1v@>|GBUjSqhY+yB~ZOV zQZYU6BltYuA$dK^;?lkIuCTlsFq1rPoS{4gf-Ai|n`XT-3ADUgQjtA3q^mr*zz01< zvjM$!%!NFDYK}d;#u2?NrnWtGMD)9m!T&o`mp(j6_`f{`o#i}ARn9$IMxY)eHXJkE7N1nV|{V~15od-No-m^Ri z_b}LD5D~q#gD*TMu!_B&!x20Ipd~%& zCRRNgo@hPT;WE9aPRYF6t+_lLsdK$`H5a`T6s*0xM5;VkJi$B?_&>Z|dF?!e<~+T& zYnD9ckxxCdPU}0#o+LbCaB@9YO*B1hA@sXxN{&2d^%lKIG0!}G^{YKH6sNsom+`!H z(u+ML7UeyHrk6YwpP#&DOpQI;R}j6_4sAUi#5=rHp+`Nx{GdIErAEEfEfKvvlVrUs zF^xT*j(5F6jJ-Rp5y!iNJE=Vq+xWa`AwxPLN}s)4J+-TH(9B zjGDdh{E)rk3dcMrADKPa!^FLmiWWVMSUS93C#E}c?IFE}3~Ib;A%!eYD*1c*G1Y)QOyDOkOEVFbLQAZtCrms-5v=^s7w+||98jdeRxnV3D< z#F4xXISRbm-8wrzi4i=oND@47hD5zQREWE2Hb}kluw=W`LTo+jh{!yB+DJWprIkEY zr8GSoQINW_d;L6_oc_F8Ny$CSOxC(rhJwB89*De$H2Au#R9U^8s$D$8{GUAB7~MQ* ztf@UrKD@nFyui8&3bs8(Hv7Ew6A8V`=DfRdmV>*nYbZSo6urHxpmDs-t?|6^^cKDG zDBL_%z16!LMgKjz@-IEU3r4&@e_lLN%#1xh0^__?G^Rb=@)AAs1w6dbqS(Ay0!h8( z_-VbXQi{B*V`Dv?4^+L26#_k;wl}us1v*u%|uOA^yF!#S}XiDlxneA`m?rnajMWPO-aS zZ-%|%inhFn?bE#;cJjLt%St`fbGmX2LvU?K8Z3 zVO2e#AI-XGVQ0J_St32m`@cOH0D?R~HXb}q!3({kWHdd01|hmICyTvBgQz=l-v>P+ zg0el?03$ssl1)7%_-8%4?8v)i0)M=H^J=|1OKH4ia@9OK(WtyxAU(b6fdxG>Y#P1* zmcBeTp?JOS8&bU(-158{L^ZtM*kC=oW74_@zMZ^j=D!A&0!(WdFU5lL$SXQNg@}u2a45Y`nZMAp1Mo0kS*>R5ra&sXjdbpBBC1 zk1xC-=#xD(^o~6&YjnIo7)Cq{C=nE;8nerKma{Z(gVpFho7O>;S!_ zykgHJq%cKW>EuL`|LXpB8V@2EXa&y>9v!NKBN)WkgrbhH)plgjKz1bhJG#7}~t;A8@@4YKOcSZ#TV! zWLdo@1l~Lq%w;{nmA*ZSw;(-_+}OHC=@h(%E5W>nn-{)NIexq=yJfw6O#3_(os2!C z%_F^xh+MrI@s+%iaOpfWgaAE$(?C4iGNU}m4TL>R4Dq~!f{#6^My5O#l{39$-p0LE z^hZ416@EL|KWe>2^~=1b7bLv3SK>XUcBVYu)iAw1u{S*)q=!A6NfJqMm4UpIW}iG8k-$4Xh?hMvggCs<41~R{c_=(LY{usM*wVcU9esNMQ*)|WXrrp47)unHG{mX z6G^>CqMN+6e`!6f0rEQvy!$)}BM`l^<>)<;Mq#^J5wbi5caFR)M%RkuArJ)*ok$+W#=gf6|7CE~r3I`6$nSIj&&A{f2i zOvpUcHi$dzW{$g(s+hc>k(#_Lf9Sou35vap;)uLQ_nSRQKT$oK{2@NXA`3ljj)T3< zTX(#Fp-a5Ad%!(%b`!gICAvEb>32N2UFf{D#C1KpMle0tt3WylXqP>Q9F{#nvY)&m ziY7ZbkR844>=C`lEloXY1W!Fm1(H1%3G6(}`vg6>HYB|_Ix4-ctvS7Z#@jspn^(Q( zZMHkxzXUziJubXThK@Q+Ie)yVOJO`Cco{rLY#_ZwOy#{M{d~Pyu{*xpX_!4)?*_eh zp8ve7v6#KqT_U^)0jNE~n?pVEaeqA;lRP~q-*7!>^D{l{1gSmDk;J z+F(0ftJ^&3(%U=@JaarVG3-5y9!tH#$_+g?ypTQA1DL&?g6_QhEn+>WXe7N6>Nq_l zsSZA20GYi4J>ffSX^lN`LFK$E9ltyzhK#(pkU>2~;)}h!EcQLRZ}PlK%!j=kTqnIK z;u<_PH8{K)lxsYydg8k=UO~Jn_zS(gtQS4ru>U-14~4zW28=y*rGvb2blp9F^_aYo z*Bm{Nf;K!vQv1AB)ZjcJFrz*4pFzFExQIQ9zA(Kqs3*N|1&h4aSEapFplrP%2%@|{ zd15_?VNSf#%8R}6aMiqVZM8d##+AJe6EnT-d(phb9y2}MSQWeJRdhY{T^POeB6+>Z zB8a{AmNdK3ON=~zQU$)Vrk}hT3>7_cly|)|=GZ(Q7zw_h7MeU2C-*z~ue7~CqZT}a z*{?iPB?7)K$8WveX{0?y)pERm?u$K}2roTI_BXvsV~0I#tMI&2B%`~$106k-TJyXh z>oGl+>`A+7Z9BcQiNL(@KcT%twPn3JL*~6~V>3O0IX}H(EkHe3T?4&-fsnh+R-wFZ zVCg&*4`4kFQNcVRcL+XFzL&hd@z>qt3$;i7gkt98cE$=*C zSNS}A=+wPuFa^9o45&Po2aP@Io`}7L-x$4~04Y7;T>!g@!#h0W=QKPDC@;L3GlsfU z)qy=5W1T!t{5(COxgfoC?jpWF$4xy)Y(~9tyD~kUEebtL_CGzfMISx08A3d}{~Npk zSJ1rx@+du4hlV`9E494bK&L$sFDt$0+v_@w6Mek(dA_{=+_bzBdS$&3K!Ce6QmDK? zljFUc;K@6&_7A;v<4`JPnl zPN=<1WYxW8T*kXN&Oy9-YZSdVhNC=|V>Ues-5xy-t0ujY^s2px>%6;DI0HT63z|J* zCXPHflzzQu$lpA=>lD53_f9<*Y?nJ|mIgfwtfM^1o#Q-T=fJ#-n}fW`u8h5Xzc9UZ zi21!Rct$<6Y?nR$M2J1ftJ%C*qMyAmB>p`z&RGshqr7aumJJtHnJO428Vu6RAAc&rm(nQ#-m89DY3prxHFt zKvBI^2U$HnW12j$2a-JP>JL3Kjb*$9wOBm@M322hA_P4pfVI57#TPyE$NRjQyMeuL zgmgW4246kchH*XlNS;01jc+|!!cIDfEucMPiN?Jxl!iU#Y+F5oO{2T#cxyc|xP`sc zol-no+=RV7#09*JkEcDWn>D;Uk5N6~X2v>|I)%JYwaz``yk9%(t4}(`PlY|Bn1Ve` zCF8vNGnc(@>%+X`a%a79?<&3IJmfrzem=b*08c#!2rfP4V9LF!38=ktoUAo7b-N8&uQj@~@9v6H-Aq;frN zCTqJtrw6^n5GTFwak4z?DK0&S47$9XT*$iGy~91=YrVafST;QO8MnL~x0}2yOkX{W z1hqY#`CvUiJgPnS7P~ujXwN-HO5VI_T8Ta7fzrLxH?zD)o#VVW$Bn(9ffqa*WxPFZ z%67fU$CSNyNNhb#^^-ll07gBDqrkk3Q1-iwsiM6BEd@Q>CzL&SLu0*+6-GP(>ZQGp zXqGzzWwAV~zrH*#TRJ@zRDeCoAPzkl9+f?zk%+u7evLiH_M<%9O>?~|lE1r2^k=>N zgUUOl!9G1*u@^h#kC{BIyMsNNSjxLlzqmarwuL?Vn-;uy_*p##|k|(4n)0*2OYc;!*4p&SfIV9u8upHzpOm{ zt=zo(GK#!dQ6D`jCKNqiTadj*WZyg`ePcWXxKBOJFRD8|`GmZln~S{?KT^FsLwCIZ zGl9L&vsSzmkF34-Ff2WaY&g9NzK%VlhPXNu3^P4Y6)U|4qJzDX0GB<}9XGt1=-9i- zu`xY`#WK8G@}s?wAv8Uc?uS8M~1uzAGo};aCp5(WGOw& z@E1K+DSf^5SN=SCbGSSz_%J<3(<(j0hJU>Qc7?qyxpq9Zr{}#mV2`{iXs9~k{xQ7+ zmcqPG@o~K#)quJXxyZcqIGMb9Mg%>g-&s8=?r=SDaIHHtqk_C|lge&IZDKp;K5 ztCBqd4-Gw%=MlX%i`2ba;o?2Wi?zJCeP}&&87sYBoKifew8%Um-M+l=+EBgLV}m{8 z%2+*KlnT1H9)!Cq<{G_8-b_5f*i5~_awa{byAnO(;mJE_UWvW3)U!Pgbs0T>3kW^C zoaelLH0-^&X6L=fE)Kl*PvX2a69K(dRd&5SQ!l%!cdWX5 z_aZ#A!-c)96^uMeF_pbNVPm}?(SE!>rsTZL)Yi&Jb zk#9YsQ`x+ewI01v%9p*kk5#=K2n9QT1E0M4(WX2cIln!_wv9cF2I)INhsiy>Y3w}O zudO|y%D=tC1j;<|C_=s5gH%09u0XvcV{<)oSH8R{ohd!{M991CCA7U}TZp}-`#HV( z=B+&Wa;-fxERQ`r2Twh;mNz}Ibz!@ER1dv|SU0^%j3d3qBl|rP%+Wl=Pi;Ifr=~oR z@DV-5SsFTF-GIFRl^eZit^~cNq{6-68BIL|BY-_q(mlP>L)|?`Vh+7HzFEEXf!Dlp z`8>T2agaPF**m=o_WM1=xTZTrv#mW{Z;iYvNq;=Z7L7e@h!DL!H|;!UkFGs*>cYH$ z7k#}%8S_1tDp$Kyb=^G>-v7KUC!o7TCR4mw@WZ{25MsQ`lAygU7f-!l0Z+Zq)PTHQ zi$}bsZa)D?^&Py62Zuc^j{rSl1Mxgr`4PRg`7picW{JIKX#>4vU$8v` zgr7W7IT<~|L_ob`w2{3zPmR64V6;6V%rd=gcvrm{3Mss*90oj( zo7B5zdx$+)V70xuqL;n!g~q*ZaJ{==8<4%=?wmc_H>^B$C38JUP7S-mzlpr9jp{tgGvYh5fFj z#;ZM9+&MjEv#GnUa3Z{~0gb(wt(Co4_uakQh)}#%GRM11xfng3fj~UA@tnPYdT%_R z9_u_#OrpF$is?KfM4i2Nd5%4vBL6(uUo$st*AWMjYhpKZ1K9Y zv8B7+)6+dCzDB((VXr)R!tcDM!&y5zrsTU@N=m$k(Y(46N)0_X^1Z#d5E4BPj}g62 z?$Et(>l-~|f&;w$3d_7h=7YV;MR`503opFAnx8!^5tcofcjP>+{pP*ZCw)ATkuE(& zC`G-O-6B1AsY<2vQVzZCHN3o}NR+)hoG`t_G0MFiSO-0! z=$XBtAuPS0AfG$-zKuK_uzJ0kvIjlr?e#s;aA&=Kawa_5)`GpGAs@TBjElWy`TjgH z>cu=4I;uVD9+W&Y!5TgPEjT@|3m3i!=w-d9Ao)8mp4K?9*sQx$I`ur%5rsRN%ci}$ zSm3%uz?nSkG<-d@ZN$8FuVp$ET>(BjY34jU!(_bsb^pA+kVicru1P(`y_h^h$uK<{ z3!OafFseLWTME7WMHW4Vjb6R*x9h!KfdD<@zGA%wfKa?%76H9nvst|Pht9hR$vZsa z_sTmUqCLH9NKd_M%^y9WKuA3fcCo$ZPk1~LGwi)J(OkXdFMd6{&bmB~UjMvrUyHp& znBzNBID$M+o}ax>k;^;(Oq9G<3nd3W=q^dm4@wU7n z9)dj&@|e7In3TO844FJ~Cs{pvsY|_Ed#=58Hif-oVsbr^4;MU&Sc1LtD`dUBXumwV z4w<~$+~_>n8W_D6(+<5?!o)om%8EUgdbK^ccK5t8dt<#f7HU10VTij7SrwiPSuZ28z6-CKThWTw3b z=19H53}ih>4KF>{@xeT(S46$%pw>N;>4LqgF;P7d+^)Ppd566tBGWxDC-^+&lW)DE zZmzqJ5gW=pr!71NFPlAmUlu(f7-GGAwROF_<|RGtejmMTw-LP={+ByjMG-wL zkAl2sV;w!&Tra&i;G4U$ZK}McBp5wd>{Prx#@)Po{7k*+gxNg4O^LcKI|V&cp5Q$M zx=6kM3ZlL0+o8P_093s}N+i7VeonkWLB+h(t|z)sm#@4wm}k8~`0YKGI=MWrX6n4k zCo#PgCKx=I&|$hUFQ7eRy(PQ9;J7`o0fW5Dz0kc`)rGtUEl52U)~7rNuw^}V#Kb+6 zY^pt<4URp=xGKC=CPTfWPC7k&VP3o&ZR)(0YD_(hclSJ2&wo82ZACrRk9NJPt?N9= zAQe4p`8B-It#pGiDe$3Z;)K3qFSIGR0SwU|9XIWs*jCc->{%n!X~KSMsaDEd4*w*fn+MRPr5 zv536{-^@IErRY3bws}4BE80B0Ox`^husA)jtpB~F{ku9m0^htTz)-!cF7&;cz7o3v zl!d)LBeXngt5v%I0>eBa1Gzl%h+928A&xzGJafE>L|VLVUPe7dKnA`Hxx+lsdxAUq z$xysLqfouai7P$I&4WE{gq^)hKb}2`x&gk-d15{8TeQ6s4q-iVA4fYIFCsnIyp%nZ z)(AVdmxVpwH6OexQZc=4k|Dk3cw#*qNA5kDw2r+XsF*xPJW0K-Tz9%ekCD17#z8zG zW{17AbqhR4df7ckIjKGRlrOzNZPqGkZg)Iup9DRA0Mb30z(BnP zEy6vdM8rKc2{*l@n0vjO-jBT1q@TMHdr3WoYwJ9KyNkRpN5H+pakV?vFtEM2|0lll z^xixv#zDQb=f%8*a%H`w9;v;fscpNXpCG#{|&RxC9$22{) zRW&?=|M9$eFi1V%LsPvahv7Ux7Q;O`F);7Iaq^&z~rBXccoT|J-ag)3&3JN_I zcGx{jXzM(+93#C2OZK?|jqf~R6pXzf6yH2~j+Z-OF{izJHxE3-FXcVT4V652f^58D zXN0^WAeKA;;n6(qR|3Ay*y+8wIO)6~W8l1(Ytp<*6~R4VR!%+O5 zMisqC>OZ~dxthJZ#N0dC&)q!s?VvqcC(k?q7K**ygzCIaPtm=KNAbL+WRJWAwZyza zKdrm??xDIL+rzt?m~6eTwjRB*E0VqY`FlL)uIjuTq^P|`#$~)RBUU|&d}TdN2PD0K zMXfyrJAu8Rm9ss(C=NZS+?zS$#rr(>7n!@#*MhuE##cS_S`j>xzXQGGVMjfOzW2IN zWof;74o^L=?aV!%BdxnX$+bO`fKI&*LrXoV4;DQV7Jxig1lheAVwvp8kr6x)6Mnq2+<&}4 zY#zLYojtt-D-t}ZS8ctbmwmncjhQpi_L+^D@H ziH*Ev6$U)yw6#1*w17RSUz|NpyGA`JGbKH18??O+@frC8d2!}l) z)g-xd3>&?C*U~)GZWTRq`a!+9BL+P=6RbQSBLO`rXPv#JDn-3$5UIQ(Ew{YKLL9xn zR=2%rq8vSdK>j?4u**D{?*2SvjfXw&L>j%bMTR{{N`F0~<9$88b!HFG*Kw0yn%*MPn3R!}_{HfB99 zqBlJxA~(H>aJ{=z5K22`QvJN}V7I(VVJJPeDz-g`Ja@f`*g`!6FKs<|`jxxHrAWOR zN~ArTt0ui0=A=Bif^fZ9 z1qQh|WK}y8=&?M@{>43Vp>92G>IlA5dJH{+PS3kcexW|oeyHCAV3{<7TuSzMMMmi$uKQq*gl-tv0^v z66ib$G6}mSz$PYa02XVaZ`Lds;mH@s7N_=zF`EY~j7zelk38rldWNwxc}?k%_%!8cDs)d;YsBM~}Tp zeM>!5E7v;`4)wiPlz%&*1CG6`e%e_26M}NI=NtitrG}pYXzl6JjYEr!B(@Q<~HAB3V2?jl5)Y3hAh+aHo zn~OV*rs6z(K8HLB<_bQ>ZNoj!;_y5N#iBj_){;Hns5QM2epNjPvNOE#K$g9-w%a^Y zOtQWA4*0zMPlY_M%a1(chH1UnA{)GK++LX%fAr9i5H3EPscgHKQWrgI?5(=S`Mo`8ojX0xO=3LDGAup3RN}gn6)!ubj!C`&d+|Gj zPfWc%6-T}Qn7X-%^gBGSdI!8cS)#hzj1Io-i}^f#OR>EeAY42)h!H% zxEj6IpZC35GhaOvfStXIB0oKW0H?e}9MnBBo3Xv`b+WurX&F6GvunKrm#4f`VrRXV zc?`Ych$+3{K^Z+58^}EVFJZjmSw+1{%1S+|Cn`O}Rkyr=7l1q-AN9JGZ*aXltpU6k ztW3S|Bc#0I24+1moQ*udTqwQ$!*9G&c!<4C)jvJMF2Fn%&RM*^9N|0^B5Ay>-3~se z;)Aj-^;w78J4|)U6wr@*+k1-!Hs0JF7kC-GRNul#x7q0FFKCB#b>K^bft9 zPu)Cw$s9dWCX>B}g0t`IJ#IHNbt}Z>qXDmJo<(WOnW4AocI0?Oz z#8ExAR7SizKSaH{x`b z{-M1gS+hOt+&jG)%@V!svw=NaJ$$^5#bZ2sLUX+y0o=SQlm9!3*Oxt&IwQPNI)}XI zTY$aL`mnu8^?|)r>Z7{2$O*ke@n^kTF3UWZN0hw0Ixjs10X;lwL`c1I4JEvB%Mrb^ zrg6RYFm$~(vg^FgnAAM3F48;*s@A&i;uyRsZx23R945MXc;&obBLBSj%BVe3x`sR= zs*Akxv?jfiE?&K*O7A+I?U22tOaZ(y@&CFkcQrll%~L%$bcek@C8oS|poG1uugg4J zm>NA{WG=ni^pd-eUx)wh40tLOk{UyEjZ)-f*CsMl<(_TB^3{pKe1us1w@(w&>^18iwZX>;ILIFKU zvuQm?qM*Ha&NIyI_{L;M< zYredk6ra8HF%i8fv&6f#H&i{Y{NKB5|4zLLL#w@bUUa)07>+!f*>OC)E>Jx0jwHPZ zjygJyz{)+xcCNb*%}hO-Pbj?vyKp@dB!D|#45_^@AXYsPa$7xScFsJ+)>1n4H54k-$98{RzD{@o>8c8=1Yt8JE3kPAt0_9#}m;2nxJF@QA&FZ&tnClnT87zH7a} zHvBwyy*E8@3#>eQurs~NW0AdW+s?cru9H0@FSb3H@5Q`ANbJ3L2GKlm@4dVXLCifd zTxY%IDTcig5c@pALCQU=-8;J~;tD;3st!H;(~dnmm8?8_QO3O0Fatcec6_}*gJQgd zCLz77wxPWJoa4Ot{jWXYg#kP%C5XM6N(?=^tz5lqhHboZOA^zx%)gx=YTv7Qjt9&UboB+M9*$TZ3iS9g+f|tDCROz|-v4uVKg&#bIEnq#03VFR;#3?;CxsW|OW5Ycb z=nTBLer!EXWMw@g77;yF+?qX%1qnNe&w;&o*pfYQU3R@g?Grm8EWf)26$rlev(P-O z3$Q&K$0i*!9Y z{tCVTK3BcV6@@!0qx3w~nIOCz4c5Ixa>6_$eyP0dC;$?-)Fc=r29o!XJtKukmbBaf(Si~JqkSr`vN_3a)rF!2nD;u z2Q0mJTZlZJZN)r(bhkU^L-)K9GLO9;Hn%;`8EL$)+j6~s*oiz0x>3DWq#!*y#_zmX zeHlF-ff2oYRSi8$E)YI?95+1zKYYDk%)`BmOQ*ablY2d9QnWpM07kt`7LtB&e2KhcPD{Pw949?7)hoRl&Mv;Zl>j~ZQ1iXn<3BwjXG}edCm%eq zhR(dm;|RSK>lQr@R{^|qU`xE4f8@M%jCVa!!>v4S@F_j}^)$Sk4&Xgp!nr)*A%Q%6 zq;S25ivA8b7Q+@w8*hc7*mgDJa8#-BScFKIkO4uU)tMSnf= zEPcK081uVZI*&c;@*X`xO$I&8p7grw_yfL1qzgR{ET=qe+UYwMd(EkJCAUCd56YH%+~*ck4TdSwOuSdxE{Ki(9=uu7^AmF~B_g**?8%s@*-@ z2}wQ9iO9Soz6!ox<}5w5>qtG0R2;qq)w;cM&c{5M)~dX(cvQTh3I;p-ql-NLE(E={ zU;R8UR0TXp+0{H_^Z7h5LBKn8gj_tY>ta3Z-(Nh~`8&Ng2GYCCL!vzLDv3P+w8K1? zA347CB}F~GE{Z);xOzP#SUtV+B_h3hA%MNm;Gw(fzo@%>TsXW4LMuGLEnd9!1b009 zS7EzWv8KGed9}SB{GPq8DT2F_SeLpGp}xD*JPbVKXyv@D8q7N$!Ee0@vJE|>JDEKX zF9*KAM=!nEcs4z@h5^0(UK z?WsKi2q`_Oma07VNwYmBb~HVokW0Py;fcK|=3lzuSIxYFxt=|YKxeyzq9Hv~dXT-p z&wRW0*CoAi{a?KLu=+gov06P`GLpR}r6RkS+OIr1+=9EJ+|0Ye)$}|$D^0pXFsHqf zz*{`ZB;&f?w-fB>_<6mLUzfeA<{&*?v~s;+U_U)0$fdm)W@EjdvL-$5YvH|%Fnc_tE7!bAo3uP* z$-O)Ued4^3kBB`ahCn=E zJ{G(+|N1-#W~aO#t~9)P_guYHj21i(OLM)g?;1V0=_WpDPCGq&r;NS1n}oUu&5S+b z9+bQB=9E0OrJTH#XX!l;=8Zjqp=vDv@AVN6v{m=J(0V@Ikvn=p}4$N zgY!MW=np+)&gHy>6qh}M$WXlhUNJpVM7%sHM`}B%${0NhQ=&WxcbmNnfTO*AjGevw z@(#WX{(8OZ*e$(ia#+3ZJWst%5s|#3>|ed*t(Lw1uMa&c2kyM>n!!Ds-8j9DxD~uA zJ)69tKa9LZ@W#C`z85;T(o4O*FKE3SPGr0p!csl<(6YUH5k$Q@ar!)`NMXH;wXwZ} zk=ndph*`Z~Q-wU=BzwJ$SVuhhw$VM=tOLC*5r@46&yhR|EvCGI7R5bP0#iLmN3%Vu zvM4=v=?^_q3!}YgbErKEEe*VoPLe$TI)gp(NBq3X(!IP->-Ic81-L!CtPnjv5Ia25 z8hpL892Y#0`-{B>aa=tdEM~p#h{8O+LRUR{njpMD+~hoH&;>nU#F#vb42C?!VZJ;j z3P-&bGv~b$q?x^#W=lO3D=0lH;BdR{A3D8{UAertRo6W7`3t>TOL;pR(x1J9yqLXn z21vcf$tXLYQ%^k(8IwF-*vdR68X7&vUr;>kJET3T4pKa?>E}FseP+EWVaq+qYf`-x zRK`5t01rK!xd}e&W7E4^M>f4&pc1=Mg&{ms2b;YA>7~4A<83-JdVRf#1=GCdX!N@> z{vJJbOus$Nf=s*$kvBahks7;62Z_CDm5;p$p%1;t${f8_A?LlmtkpZ2P;ouTrhL64 zC|SLmL5{n(kPyB#fycc~CpbM}h%vi$7;QVGonJjX_r1ITpQF7>7w^2;c@n+29h5ya z6N0@z@>;vOvP3by+>{2gf`urHH&WnGe0-NmD%@ z&xyU|>n1%~Tn@dZnc}?VDsa92uOqtw)|R|c`3F7a+j~4!zi_-%_m{l(NGClI*ay8? ziD*3@U6s5DkjK5G$f>v_QSx*k`@GW*j?f>x#Vzy&b(i6_P!~q~pC3 zHSj#aGI+i9RuDV|r(C_OX(c^k2aUaSPs>d3sD)SNw-BAmR>a>6{Hm%lyzh@U+h*MmKe-U&Q#T~R%O9*?~1k*PfG zvtK=s$~`^4Jn_3&D`CBsF9*JMYlyu_EV4Yks}wx6MWeh;#<#pvB4NFDEyKMieB-=0 zVu`)qUdOyt9?89ir{z1CsA0QUTiUx6rm#J}Jo!9j8ezSvX<@v`{6;-hs8&3Qt?4_e zVW+x=@0&fdYs)?CQFgrmtgOA@lzzS1=Tf|9B4|C(5TLz2vOv9VDL%cqYYjaRdAz-M zX}&v?P=!6AnvA=#$F;ob?pM7i%q+dx8~r`Ic{jbm?>s#-YNDLN_j*0dYmB`I z`zE_h_hLLj8JE2}P!+wQEbqL)5S~2`n*=@O6@t9UPs%*%&*Z&h#F0G!9!Wi;tHC|8 zU;{k}dR#qyG`2k{OZ+{pSI|B5)4;ri8aTZm+!wu!+mXGBdg#5kFFHL9SPwklFxovT zo-e&_sgt}fCuqDbl{vka65Tyq=UKf#PIo*T>zuoef4jY^y`VgapPIbF=*+$ENq0TI z-zhz5`x?Cn5J$Z+O=!ImUID$>gylS87%x3y=dC;<-+(>A;Lf};MQXhtEdag$IvG9i zj=MZRp*ub5z1%&ILW{X~MCQEbNz6SYMwUH&^{PG6pdmc4m&h@-w}7 z-CDba>zOMNGYQ0OCC2VirA9&>TI6RRBJc3~fDR6?Q%T z_z}H{CuqHC;k~^o{}w$*-=w@;-kCikE{wgnVm~^#RBpV&bHcsHf|)wifnmK-Hx0cD1_wQm%U!*#K*c6qv2MRq1#8W+>R02I^C0f0+{og!j{XaWeMK3!i z5s1CVIr}{8oOHbieG9$U!F@bn^jSHzhta%_&^J9xg(kega8$kbnB=@d-CI4MHGsTx zei%H{qO84D&6B+-u3@~C3h%rtL8rTH^q)Kvz?3^&zluC8XGXp9!kawbC!xBeLC3ta z?en~_plH27EJ!^Qe7QXaeHXo8SG~RO9*w<;nlL^EGQB)$4mmwI=;=LBx}m(~{N1~B zCI38~70$h$Y>z#2PZ_n}a|2Q@rx`mjBv9^X4p3R%3TnjO7wGQT{b*0nqJrp`Pz>0`ZnIT5{l!f`#_ z$!a{l_!c}cYl1vrcZ`ig!Dc0o^^Lw0*lzLZiDZBbvPKfQCFjtPQ>V z7W}*>`6av$cR)Sp?wviICSbdD@Uc7{A&9-etx7!=845iW;4D3}+`+xka=pC?G^{*h z9V@*z>IgnJQPR9$lsUbHU*tQq^TE;u~Bqu4wQC6T(8 zFBm;wf>FJlw8Xm(qeVU38nitSQi;5M?lL^b(!;#=lnuP-akISRVnn?ZFta@K#MZr4 zd5^q#Xx=^9yth3|Jx;wx^i#d!Fv2{U?{+=;oY^}}fq1=7sAari#W=kUV6nX!_CGr4 zrf0j*qn-M&3{NYy-c_pZGuO$583 z#hSfe&-grpJB2*NQ^&nZq1`(mnH@Z_2m?9uJOjQQtJ^$t%!NJcmgzikhsC@iYb`tr z|5m+fK9M_&iGw}EXqY^>%Lu%?3vj#^x-z|(+?%@<)B(N;gULN8nH#-EdfK}+)&Rbh zYcjnaH`_c>a)CWREd9GSkPW>ma*RE=SOvY!mu9`3^=>_ncMrV%k~usYvn{;~t_3~r zPu#shM?byP;%vQ4;y*o~P58Q>O@=)a$VNR|rk*{g@5jAZ2UxpSs;52Ba1lEPNTfX5 zwJ|-qkqJIY1~ohsaCSZD9K5_SGxojzRPa1m)%`qz(`Y?;(15)3yiGikSOY$eLSH>G zz=S%9&CNX)hXK57`tiIj+eN-tz7V{kiJiG1d{n&%BAC6e#b&)^{g}Nr`C>gMH_^Pu zaYMYL$(uYNA>ceO*1Wu7bfP_q8JxXi!3MlIoRPhZka|5y|C2idGFLpB*Pp#0Sv@>B zki9*d^FF;}{B%4)i;TU3tj@eqe=)u6n=ZYKM!h^2Awa!z;^13o;7s+YWE7Wq68zIeU#nrysAA7mV-TkgOOmaPInUOs`!Q7wK!m+brP;k&<2$_s`@cQ0sq?&H z3qL%_{D(Wk*JQk?J{G>B_^iFKT0XsxdNMn&B1OG*giJlG8(BTvwhX1iPF4^m4dycc)d9?3Ua-K=kGdV2M9ewHAlOgE<(KR8=<@ax*$Cdlc+sP zaA&<$_6)oLHNQQ_**rai)pI-}$6-B�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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 0.5).astype(np.bool_) + data = tensor(raw_data) + mask = tensor(raw_mask) + answer = 1.0 - raw_data[raw_mask].sum() + with optim.record(): + loss = net(data, mask).sum() + optim.backward(loss) + optim.step() + np.testing.assert_almost_equal(net.a.numpy(), np.array([answer]).astype(np.float32)) + + +def test_advance_indexing_with_subtensor(): + net = Simple2() + + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + dshape = (2, 3, 4, 3, 4, 2) + raw_data = np.arange(576).reshape(dshape).astype(np.float32) + data = tensor(raw_data) + answer = 1.0 - raw_data[1, ..., :, 0:4:2, 0:2].sum() + with optim.record(): + loss = net(data).sum() + optim.backward(loss) + optim.step() + np.testing.assert_almost_equal(net.a.numpy(), np.array([answer]).astype(np.float32)) diff --git a/imperative/python/test/integration/test_ai.py b/imperative/python/test/integration/test_ai.py new file mode 100644 index 00000000..3e40bac9 --- /dev/null +++ b/imperative/python/test/integration/test_ai.py @@ -0,0 +1,41 @@ +# -*- 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 +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.module import Module + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.0, dtype=np.float32) + + def forward(self, x): + x = x[:, 0] * self.a + return x + + +def test_ai(): + net = Simple() + + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + dshape = (10, 10) + data = tensor(np.ones(dshape).astype(np.float32)) + with optim.record(): + loss = net(data).sum() + optim.backward(loss) + optim.step() + np.testing.assert_almost_equal( + net.a.numpy(), np.array([1.0 - dshape[0]]).astype(np.float32) + ) diff --git a/imperative/python/test/integration/test_bn.py b/imperative/python/test/integration/test_bn.py new file mode 100644 index 00000000..779b2ef9 --- /dev/null +++ b/imperative/python/test/integration/test_bn.py @@ -0,0 +1,87 @@ +# -*- 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 +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.module import BatchNorm2d + + +def test_frozen_bn(): + nchannel = 3 + m = BatchNorm2d(nchannel, freeze=True) + + saved_var = m.running_var.numpy() + saved_mean = m.running_mean.numpy() + saved_wt = m.weight.numpy() + saved_bias = m.bias.numpy() + + optim = optimizer.SGD(m.parameters(), lr=1.0) + optim.zero_grad() + + data = np.random.random((6, nchannel, 2, 2)).astype("float32") + with optim.record(): + loss = m(data).mean() + optim.backward(loss) + optim.step() + + np.testing.assert_equal(m.running_var.numpy(), saved_var) + np.testing.assert_equal(m.running_mean.numpy(), saved_mean) + np.testing.assert_equal(m.weight.numpy(), saved_wt) + np.testing.assert_equal(m.bias.numpy(), saved_bias) + np.testing.assert_almost_equal(loss.numpy(), data.mean(), 5) + + +def test_bn_no_track_stat(): + nchannel = 3 + m = BatchNorm2d(nchannel, track_running_stats=False) + + optim = optimizer.SGD(m.parameters(), lr=1.0) + optim.zero_grad() + + data = np.random.random((6, nchannel, 2, 2)).astype("float32") + with optim.record(): + loss = m(data).sum() + optim.backward(loss) + optim.step() + + +def test_bn_no_track_stat2(): + nchannel = 3 + m = BatchNorm2d(nchannel) # Init with track_running_stat = True + m.track_running_stats = False + + # m.running_var and m.running_mean created during init time + saved_var = m.running_var.numpy() + assert saved_var is not None + saved_mean = m.running_mean.numpy() + assert saved_mean is not None + + optim = optimizer.SGD(m.parameters(), lr=1.0) + optim.zero_grad() + + data = np.random.random((6, nchannel, 2, 2)).astype("float32") + with optim.record(): + loss = m(data).sum() + optim.backward(loss) + optim.step() + + np.testing.assert_equal(m.running_var.numpy(), saved_var) + np.testing.assert_equal(m.running_mean.numpy(), saved_mean) + + +def test_bn_no_track_stat3(): + nchannel = 3 + m = BatchNorm2d(nchannel, track_running_stats=False) + m.track_running_stats = True + data = np.random.random((6, nchannel, 2, 2)).astype("float32") + with pytest.raises(Exception): + m(data) diff --git a/imperative/python/test/integration/test_converge.py b/imperative/python/test/integration/test_converge.py new file mode 100644 index 00000000..7778c6a9 --- /dev/null +++ b/imperative/python/test/integration/test_converge.py @@ -0,0 +1,114 @@ +# -*- 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 +import megengine.functional as F +from megengine import Tensor +from megengine.module import Linear, Module +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 = F.tanh(x) + x = self.fc1(x) + x = F.tanh(x) + x = self.fc2(x) + return x + + +def test_training_converge(): + net = XORNet() + opt = SGD( + net.parameters(requires_grad=True), lr=0.01, momentum=0.9, weight_decay=5e-4 + ) + + def train(data, label): + with opt.record(): + pred = net(data) + loss = F.cross_entropy_with_softmax(pred, label) + opt.backward(loss) + return loss + + def infer(data): + return net(data) + + train_dataset = minibatch_generator() + losses = [] + + for data, label in itertools.islice(train_dataset, 2000): + data = Tensor(data, dtype=np.float32) + label = Tensor(label, dtype=np.int32) + opt.zero_grad() + loss = train(data, label) + 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() + precision = calculate_precision(data, pred) + assert precision == 1.0, "Test precision must be high enough, get {}".format( + precision + ) diff --git a/imperative/python/test/integration/test_correctness.py b/imperative/python/test/integration/test_correctness.py new file mode 100644 index 00000000..73d3fbed --- /dev/null +++ b/imperative/python/test/integration/test_correctness.py @@ -0,0 +1,194 @@ +# -*- 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 pytest + +import megengine as mge +import megengine.functional as F +from megengine.functional.debug_param import set_conv_execution_strategy +from megengine.module import AvgPool2d, BatchNorm2d, Conv2d, Linear, Module +from megengine.optimizer import SGD +from megengine.tensor import Tensor +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): + with opt.record(): + 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(checkpoint["data"], dtype=np.float32) + label = Tensor(checkpoint["label"], dtype=np.int32) + + 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(checkpoint["data"], dtype=np.float32) + label = Tensor(checkpoint["label"], dtype=np.int32) + + 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, max_err=1e-5) + # 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/imperative/python/test/integration/test_detach.py b/imperative/python/test/integration/test_detach.py new file mode 100644 index 00000000..0d0b3d5c --- /dev/null +++ b/imperative/python/test/integration/test_detach.py @@ -0,0 +1,44 @@ +# -*- 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 +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.module import Module + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.0, dtype=np.float32) + self.b = Parameter(1.0, dtype=np.float32) + + def forward(self, x): + x = x * self.a + x = x.detach() * self.b + return x + + +def test_detach(): + net = Simple() + + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + dshape = (10, 10) + data = tensor(np.ones(dshape).astype(np.float32)) + with optim.record(): + loss = net(data).sum() + optim.backward(loss) + optim.step() + np.testing.assert_equal(net.a.numpy(), np.array([1.0]).astype(np.float32)) + np.testing.assert_equal( + net.b.numpy(), np.array([1.0 - 10.0 * 10.0]).astype(np.float32) + ) diff --git a/imperative/python/test/integration/test_dp_correctness.py b/imperative/python/test/integration/test_dp_correctness.py new file mode 100644 index 00000000..57191369 --- /dev/null +++ b/imperative/python/test/integration/test_dp_correctness.py @@ -0,0 +1,203 @@ +# -*- 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 os +import re +import subprocess +import sys +from math import ceil + +import numpy as np +import pytest + +import megengine as mge +import megengine.distributed as dist +import megengine.functional as F +from megengine.device import get_default_device, set_default_device +from megengine.functional.debug_param import set_conv_execution_strategy +from megengine.module import AvgPool2d, BatchNorm2d, Conv2d, Linear, Module +from megengine.optimizer import SGD +from megengine.tensor import Tensor +from megengine.test import assertTensorClose + +p_num = 4 + + +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=True): + 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): + with opt.record(): + 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(checkpoint["data"], dtype=np.float32) + label = Tensor(checkpoint["label"], dtype=np.int32) + + 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.serialization.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. + + """ + checkpoint = mge.load(model_path) + data = checkpoint["data"] + label = checkpoint["label"] + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, max_err): + dist.init_process_group("localhost", port, p_num, rank, rank) + set_default_device(device="gpu{}".format(dist.get_rank())) + net = MnistNet(has_bn=True) + net.load_state_dict(checkpoint["net_init"]) + lr = checkpoint["sgd_lr"] + opt = SGD(net.parameters(), reduce_method="mean", lr=lr) + + # use same data and label for all gpu's + # such that the result does not depend on number of gpu + data_train = Tensor(data) + label_train = Tensor(label) + + train_func = train + + opt.zero_grad() + loss = train_func(data_train, label_train, net=net, opt=opt) + opt.step() + + print("{} loss {}".format(get_default_device(), loss.numpy()[0])) + assertTensorClose(loss.numpy(), checkpoint["loss"], max_err=max_err) + + if dist.get_rank(): + return + 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) + + procs = [] + for rank in range(p_num): + p = mp.Process(target=worker, args=(rank, max_err,)) + p.start() + procs.append(p) + + for p in procs: + p.join(20) + assert p.exitcode == 0 + + +@pytest.mark.isolated_distributed +def test_dp_correctness(): + model_name = "mnist_model_with_test.mge" + model_path = os.path.join(os.path.dirname(__file__), model_name) + set_conv_execution_strategy("HEURISTIC_REPRODUCIBLE") + run_test(model_path, False, False, max_err=1e-5) diff --git a/imperative/python/test/integration/test_hello_world.py b/imperative/python/test/integration/test_hello_world.py new file mode 100644 index 00000000..033d2854 --- /dev/null +++ b/imperative/python/test/integration/test_hello_world.py @@ -0,0 +1,43 @@ +# -*- 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 subprocess + +import numpy as np +import pytest + +import megengine +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.module import Module + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.23, dtype=np.float32) + + def forward(self, x): + x = x * self.a + return x + + +def test_hello_world(): + net = Simple() + + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + data = tensor([2.34]) + with optim.record(): + loss = net(data) + optim.backward(loss) + optim.step() + np.testing.assert_almost_equal( + net.a.numpy(), np.array([1.23 - 2.34]).astype(np.float32) + ) diff --git a/imperative/python/test/integration/test_lr_scheduler.py b/imperative/python/test/integration/test_lr_scheduler.py new file mode 100644 index 00000000..a0f788f6 --- /dev/null +++ b/imperative/python/test/integration/test_lr_scheduler.py @@ -0,0 +1,40 @@ +# -*- 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 bisect import bisect_right + +import numpy as np + +from megengine import Parameter, tensor +from megengine.module import Module +from megengine.optimizer import SGD, MultiStepLR + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.23, dtype=np.float32) + + def forward(self, x): + x = x * self.a + return x + + +def test_multi_step_lr(): + net = Simple() + opt = SGD(net.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: + np.testing.assert_almost_equal( + np.array(group["lr"], dtype=np.float32), + (lr * 0.1 ** bisect_right([3, 6, 8], i)).astype(np.float32), + ) + scheduler.step() diff --git a/imperative/python/test/integration/test_optimizer.py b/imperative/python/test/integration/test_optimizer.py new file mode 100644 index 00000000..388a8814 --- /dev/null +++ b/imperative/python/test/integration/test_optimizer.py @@ -0,0 +1,206 @@ +# -*- 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 Parameter, optimizer +from megengine.module import Linear, Module +from megengine.tensor import TensorDict, tensor + + +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 + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.23, dtype=np.float32) + + def forward(self, x): + x = x * self.a + return x + + +def _test_optimizer(opt_str, test_case, check_class, update_lr=False): + iter_num = 3 + net = Simple() + opt = getattr(optimizer, opt_str)(net.parameters(), **test_case) + check_func = check_class(net, **test_case) + + step = 0 + data_shape = (2, 28) + + 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 = tensor(np.random.random(data_shape).astype(np.float32)) + + opt.zero_grad() + with opt.record(): + pred = net(data) + loss = pred.sum() + 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) + + +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 + np.testing.assert_almost_equal(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 + ) + np.testing.assert_almost_equal( + 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)) + np.testing.assert_almost_equal(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 + np.testing.assert_almost_equal(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/imperative/python/test/integration/test_save_load.py b/imperative/python/test/integration/test_save_load.py new file mode 100644 index 00000000..11bbcf58 --- /dev/null +++ b/imperative/python/test/integration/test_save_load.py @@ -0,0 +1,58 @@ +import numpy as np + +import megengine as mge +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.core.tensor.raw_tensor import RawTensor +from megengine.module import Module + + +class Simple(Module): + def __init__(self): + self.a = Parameter(1.23, dtype=np.float32) + + def forward(self, x): + x = x * self.a + return x + + +def test_save_load(): + net = Simple() + + optim = optimizer.SGD(net.parameters(), lr=1.0, momentum=0.9) + optim.zero_grad() + + data = tensor([2.34]) + + with optim.record(): + loss = net(data) + optim.backward(loss) + + optim.step() + + model_name = "simple.pkl" + print("save to {}".format(model_name)) + + mge.save( + { + "name": "simple", + "state_dict": net.state_dict(), + "opt_state": optim.state_dict(), + }, + model_name, + ) + + # Load param to cpu + checkpoint = mge.load(model_name, map_location="cpu0") + mge.set_default_device("cpu0") + net = Simple() + net.load_state_dict(checkpoint["state_dict"]) + optim = optimizer.SGD(net.parameters(), lr=1.0, momentum=0.9) + optim.load_state_dict(checkpoint["opt_state"]) + print("load done") + + with optim.record(): + loss = net([1.23]) + optim.backward(loss) + + optim.step() diff --git a/imperative/python/test/integration/test_sgd_momentum.py b/imperative/python/test/integration/test_sgd_momentum.py new file mode 100644 index 00000000..33944150 --- /dev/null +++ b/imperative/python/test/integration/test_sgd_momentum.py @@ -0,0 +1,59 @@ +# -*- 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 +import megengine.optimizer as optimizer +from megengine import Parameter, tensor +from megengine.module import Module + + +class Simple(Module): + def __init__(self): + super().__init__() + self.a = Parameter(1.23, dtype=np.float32) + + def forward(self, x): + x = x * self.a + return x + + +def test_sgd_momentum(): + net = Simple() + + optim = optimizer.SGD(net.parameters(), lr=1.0, momentum=0.9) + optim.zero_grad() + + data = tensor([2.34]) + + # do a step of train + with optim.record(): + loss = net(data) + optim.backward(loss) + optim.step() + + np.testing.assert_almost_equal(optim._state[net.a]["momentum_buffer"].numpy(), 2.34) + + # do a step of infer + loss = net(data) + np.testing.assert_almost_equal(loss.numpy(), 2.34 * (1.23 - 2.34), 5) + + np.testing.assert_almost_equal(optim._state[net.a]["momentum_buffer"].numpy(), 2.34) + + # do a step of train + optim.zero_grad() + with optim.record(): + loss = net(data) + optim.backward(loss) + optim.step() + + np.testing.assert_almost_equal(loss.numpy(), 2.34 * (1.23 - 2.34), 5) + np.testing.assert_almost_equal( + optim._state[net.a]["momentum_buffer"].numpy(), 0.9 * 2.34 + 2.34 + ) diff --git a/imperative/python/test/pytest.ini b/imperative/python/test/pytest.ini new file mode 100644 index 00000000..da914aaa --- /dev/null +++ b/imperative/python/test/pytest.ini @@ -0,0 +1,12 @@ +# -*- 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. +[pytest] +markers = + isolated_distributed: marks distributed tests that should runs without cuda use + in main thread (deselect with '-m "not "isolated_distributed"') diff --git a/imperative/python/test/unit/functional/__init__.py b/imperative/python/test/unit/functional/__init__.py new file mode 100644 index 00000000..1207b5d9 --- /dev/null +++ b/imperative/python/test/unit/functional/__init__.py @@ -0,0 +1,8 @@ +# -*- 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. diff --git a/imperative/python/test/unit/functional/test_distributed.py b/imperative/python/test/unit/functional/test_distributed.py new file mode 100644 index 00000000..9ff20319 --- /dev/null +++ b/imperative/python/test/unit/functional/test_distributed.py @@ -0,0 +1,463 @@ +# -*- 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 import Parameter, Tensor, tensor +from megengine.functional.distributed import ( + all_gather, + all_reduce_max, + all_reduce_min, + all_reduce_sum, + all_to_all, + broadcast, + gather, + reduce_scatter_sum, + reduce_sum, + remote_recv, + remote_send, + scatter, +) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = reduce_sum(inp) + if rank == 0: + assert np.allclose(output.numpy(), expect) + else: + assert np.allclose(output.numpy(), 0) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, None, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = broadcast(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + x = np.random.rand(*shape).astype("float32") + y = x + 1 + p0 = mp.Process(target=worker, args=(0, x, x, port)) + p1 = mp.Process(target=worker, args=(1, y, x, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = all_gather(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, z, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = reduce_scatter_sum(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, z[: shape[0] // 2], port)) + p1 = mp.Process(target=worker, args=(1, y, z[shape[0] // 2 :], port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = all_reduce_sum(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, z, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = all_reduce_max(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, z, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = all_reduce_min(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, z, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = gather(inp) + if rank == 0: + assert np.allclose(output.numpy(), expect) + else: + assert np.allclose(output.numpy(), 0) + + def check(shape): + 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, z, port)) + p1 = mp.Process(target=worker, args=(1, y, None, port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = scatter(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + x = np.random.rand(*shape).astype("float32") + y = x + 1 + p0 = mp.Process(target=worker, args=(0, x, x[: shape[0] // 2], port)) + p1 = mp.Process(target=worker, args=(1, y, x[shape[0] // 2 :], port)) + + 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)]: + check(shape) + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, data, expect, port): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + inp = tensor(data) + output = all_to_all(inp) + assert np.allclose(output.numpy(), expect) + + def check(shape): + 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, a, port)) + p1 = mp.Process(target=worker, args=(1, y, b, port)) + + 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)]: + check(shape) + + +@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_io_remote(): + world_size = 2 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + val = np.random.rand(4, 5).astype(np.float32) + + def worker(rank): + if mge.get_device_count("gpu") < world_size: + return + if rank == 0: # remote send + dist.init_process_group("localhost", port, world_size, rank, rank) + x = Tensor(val, device="gpu0") + y = remote_send(x, 1) + assert y.numpy()[0] == 0 + else: # remote recv + dist.init_process_group("localhost", port, world_size, rank, rank) + y = remote_recv(0, val.shape, val.dtype, cn="gpu1") + np.testing.assert_almost_equal(val, y.numpy()) + + procs = [] + for rank in range(world_size): + p = mp.Process(target=worker, args=(rank,)) + p.start() + procs.append(p) + + for p in procs: + p.join(10) + assert p.exitcode == 0 diff --git a/imperative/python/test/unit/functional/test_elemwise.py b/imperative/python/test/unit/functional/test_elemwise.py new file mode 100644 index 00000000..75d6874d --- /dev/null +++ b/imperative/python/test/unit/functional/test_elemwise.py @@ -0,0 +1,139 @@ +# -*- 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.mul(-3.0, -4.0), np.multiply(np.float32(-3.0), np.float32(-4.0)) + # ) + + assertTensorClose( + F.mul(tensor([3.0, 4.0]), 4.0).numpy(), + np.multiply(np.array([3.0, 4.0], dtype=np.float32), 4.0), + ) + + assertTensorClose( + F.mul(4.0, tensor([3.0, 4.0])).numpy(), + np.multiply(4.0, np.array([3.0, 4.0], dtype=np.float32)), + ) + + assertTensorClose( + F.mul(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)).numpy(), np.isinf(case).astype("uint8")) + + +def test_cosh(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = np.cosh(x) + y_mge = F.cosh(tensor(x)).numpy() + np.testing.assert_allclose(y_np, y_mge, rtol=1e-5) + + +def test_sinh(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = np.sinh(x) + y_mge = F.sinh(tensor(x)).numpy() + np.testing.assert_allclose(y_np, y_mge, rtol=1e-5) + + +def test_asinh(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = np.arcsinh(x) + y_mge = F.asinh(tensor(x)).numpy() + np.testing.assert_almost_equal(y_np, y_mge, decimal=5) + + +def test_acosh(): + x = np.arange(0, 10000).astype("float32") / 100 + 1 + y_np = np.arccosh(x) + y_mge = F.acosh(tensor(x)).numpy() + np.testing.assert_almost_equal(y_np, y_mge, decimal=6) + + +def test_atanh(): + np.random.seed(42) + x = np.random.rand(100).astype("float32") * 2 - 1 + y_np = np.arctanh(x) + y_mge = F.atanh(tensor(x)).numpy() + np.testing.assert_almost_equal(y_np, y_mge, decimal=5) + + +def test_fast_tanh(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = x * (27.0 + x * x) / (27.0 + 9.0 * x * x) + y_mge = F.fast_tanh(tensor(x)).numpy() + np.testing.assert_almost_equal(y_np, y_mge, decimal=6) + + +def test_hswish(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = x * np.minimum(np.maximum(x + 3, 0), 6) / 6 + y_mge = F.hswish(tensor(x)).numpy() + np.testing.assert_almost_equal(y_np, y_mge, decimal=6) + + +def test_hsigmoid(): + np.random.seed(42) + x = np.random.randn(100).astype("float32") + y_np = np.minimum(np.maximum(x + 3, 0), 6) / 6 + y_mge = F.hsigmoid(tensor(x)).numpy() + np.testing.assert_equal(y_np, y_mge) + + +def test_logical_oprs(): + x = np.array([[True, False], [False, True]]) + y = np.array([[True, True], [False, False]]) + xx = tensor(x) + yy = tensor(y) + np.testing.assert_equal(~x, (F.logical_not(xx)).numpy()) + np.testing.assert_equal(x & y, F.logical_and(xx, yy).numpy()) + np.testing.assert_equal(x | y, F.logical_or(xx, yy).numpy()) + np.testing.assert_equal(x ^ y, F.logical_xor(xx, yy).numpy()) diff --git a/imperative/python/test/unit/functional/test_functional.py b/imperative/python/test/unit/functional/test_functional.py new file mode 100644 index 00000000..beaff648 --- /dev/null +++ b/imperative/python/test/unit/functional/test_functional.py @@ -0,0 +1,623 @@ +# -*- 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.core.tensor.dtype as dtype +import megengine.functional as F +from megengine import Buffer, Parameter, is_cuda_available, tensor +from megengine.core.autodiff.grad import Grad +from megengine.test import assertTensorClose + + +def _default_compare_fn(x, y): + assertTensorClose(x.numpy(), y) + + +def opr_test(cases, func, compare_fn=_default_compare_fn, ref_fn=None, **kwargs): + """ + 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, list)): + results = (results,) + for r, e in zip(results, expected): + compare_fn(r, e) + + 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, (tuple, list)): + inp = (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, (tuple, list)): + outp = (outp,) + + return inp, outp + + if len(cases) == 0: + raise ValueError("should give one case at least") + + if not callable(func): + raise ValueError("the input func should be callable") + + inp, outp = get_param(cases, 0) + inp_tensor = [tensor(inpi) for inpi in inp] + + results = func(*inp_tensor, **kwargs) + check_results(results, outp) + + +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_matmul(): + shape1 = 3 + shape2 = 3 + shape3 = (3, 5) + shape4 = (5, 6) + data1 = np.random.random(shape1).astype("float32") + data2 = np.random.random(shape2).astype("float32") + data3 = np.random.random(shape3).astype("float32") + data4 = np.random.random(shape4).astype("float32") + + cases = [ + {"input": [data1, data2]}, + {"input": [data2, data3]}, + {"input": [data3, data4]}, + ] + opr_test(cases, F.matmul, ref_fn=np.matmul) + + batch_size = 10 + shape1 = (batch_size, 2, 3) + shape2 = (batch_size, 3, 4) + shape3 = (batch_size, 10, 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.matmul, + compare_fn=compare_fn, + ref_fn=lambda x, y: np.matmul(x[i, ...], y[i, ...]), + ) + + +def test_interpolate(): + def 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 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 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 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 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") + + linear_interpolate() + many_batch_interpolate() + assign_corner_interpolate() + error_shape_linear_interpolate() + inappropriate_scale_linear_interpolate() + + +def _save_to(self, name="grad"): + def callback(tensor, grad): + setattr(self, name, grad) + + return callback + + +def _gen_roi_inp(): + inp_feat = np.random.randn(2, 32, 256, 256) + rois = np.zeros((4, 5)) + rois[:, 0] = [0, 0, 1, 1] + rois[:, 1:3] = np.random.rand(4, 2) * 100 + rois[:, 3:] = np.random.rand(4, 2) * 100 + 150 + + inp_feat = tensor(inp_feat) + rois = tensor(rois) + return inp_feat, rois + + +def test_roi_align(): + inp_feat, rois = _gen_roi_inp() + grad = Grad().wrt(inp_feat, callback=_save_to(inp_feat)) + + output_shape = (7, 7) + out_feat = F.roi_align( + inp_feat, + rois, + output_shape=output_shape, + mode="average", + spatial_scale=1.0 / 4, + sample_points=2, + aligned=True, + ) + assert out_feat.shape == (rois.shape[0], inp_feat.shape[1], *output_shape) + + grad(out_feat, tensor(F.ones_like(out_feat))) + assert inp_feat.grad.shape == inp_feat.shape + + +def test_roi_pooling(): + inp_feat, rois = _gen_roi_inp() + grad = Grad().wrt(inp_feat, callback=_save_to(inp_feat)) + output_shape = (7, 7) + out_feat = F.roi_pooling( + inp_feat, rois, output_shape=output_shape, mode="max", scale=1.0 / 4, + ) + assert out_feat.shape == (rois.shape[0], inp_feat.shape[1], *output_shape) + + grad(out_feat, tensor(F.ones_like(out_feat))) + assert inp_feat.grad.shape == inp_feat.shape + + +# def test_one_hot(): +# def 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 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]) + +# onehot_low_dimension() +# onehot_high_dimension() + + +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=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.numpy(), 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.float32) - 1 + expect = np.clip(0, np.inf, 1 - data * label).sum(axis=1).mean() + cases.append({"input": [data, label], "output": 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.float32) - 1 + expect = ((np.clip(0, np.inf, 1 - data * label) ** 2).sum(axis=1)).mean() + cases.append({"input": [data, label], "output": 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_nms(): + x = np.array( + [ + [0, 0, 100, 100], + [10, 10, 100, 100], + [50, 50, 100, 100], + [100, 100, 150, 150], + ], + dtype=np.float32, + ) + inp = tensor(x) + scores = tensor([0.5, 0.8, 0.9, 0.6], dtype=np.float32) + result = F.nms(inp, iou_thresh=0.5, scores=scores) + np.testing.assert_equal(result.numpy(), np.array([2, 1, 3], dtype=np.int32)) + + +def test_batched_nms(): + x = np.array( + [ + [0, 0, 100, 100], + [0.5, 0.5, 1.5, 1.5], + [20, 20, 100, 100], + [0.5, 0.5, 1.0, 1.0], + [10, 10, 100, 100], + [0.5, 0.5, 1.0, 1.0], + ], + dtype=np.float32, + ) + inp = tensor(x) + scores = tensor([0.6, 0.9, 0.5, 0.6, 0.8, 0.7], dtype=np.float32) + idxs = tensor([0, 1, 0, 1, 0, 1], dtype=np.int32) + results = F.batched_nms(inp, iou_thresh=0.5, idxs=idxs, scores=scores) + np.testing.assert_equal(results.numpy(), np.array([1, 4, 5], dtype=np.int32)) + + +# 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) + + +def test_conv_bias(): + inp_scale = 1.5 + w_scale = 2.5 + outp_scale = 1.5 + inp_dtype = dtype.qint8(inp_scale) + w_dtype = dtype.qint8(w_scale) + b_dtype = dtype.qint32(inp_scale * w_scale) + out_dtype = 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 = dtype.get_scale(inp_dtype) + w_scale = dtype.get_scale(w_dtype) + b_scale = dtype.get_scale(b_dtype) + + inpv = dtype.convert_to_qint8(inp_v * inp_scale, inp_dtype) + wv = dtype.convert_to_qint8(w_v * w_scale, w_dtype) + bv = 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") + + def convert_to_nchw4(var): + var = F.reshape( + var, (var.shape[0], var.shape[1] // 4, 4, var.shape[2], var.shape[3]) + ) + var = F.dimshuffle(var, (0, 1, 3, 4, 2)) + return var + + 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 + + def run_conv_bias(inp, w, b, format="NCHW"): + b = b if has_bias else Parameter(np.zeros_like(b.numpy())) + if format == "NCHW4": + inp = convert_to_nchw4(inp) + w = convert_to_nchw4(w) + b = convert_to_nchw4(b) + return F.conv_bias_activation( + inp, + w, + b, + stride=(SH, SW), + padding=(PH, PW), + format=format, + 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 = F.dimshuffle(result, (0, 1, 4, 2, 3)) + expected = F.flatten(expected) + result = F.flatten(result) + assertTensorClose(result.numpy(), expected.numpy(), max_err=outp_scale) + + 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) + + +def test_condtake(): + x = np.array([[1, 2, 3], [4, 5, 6]]) + y = np.array([[True, False, True], [False, True, True]]) + xx = tensor(x) + yy = tensor(y) + val, idx = F.cond_take(yy, xx) + np.testing.assert_equal(val.numpy(), x[y]) + np.testing.assert_equal(idx.numpy(), np.where(y.reshape(-1))[0]) diff --git a/imperative/python/test/unit/functional/test_math.py b/imperative/python/test/unit/functional/test_math.py new file mode 100644 index 00000000..d693f36b --- /dev/null +++ b/imperative/python/test/unit/functional/test_math.py @@ -0,0 +1,258 @@ +# -*- 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 + +import megengine.functional as F +from megengine import tensor +from megengine.test import assertTensorClose + +# from helpers import opr_test + + +def _default_compare_fn(x, y): + assertTensorClose(x.numpy(), y) + + +def opr_test(cases, func, compare_fn=_default_compare_fn, ref_fn=None, **kwargs): + """ + 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_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 len(cases) == 0: + raise ValueError("should give one case at least") + + if not callable(func): + raise ValueError("the input func should be callable") + + inp, outp = get_param(cases, 0) + inp_tensor = [tensor(inpi) for inpi in inp] + + results = func(*inp_tensor, **kwargs) + check_results(results, outp) + + +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_var(): + common_test_reduce(opr=F.var, ref_opr=np.var) + + +def test_std(): + common_test_reduce(opr=F.std, ref_opr=np.std) + + +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_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_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/imperative/python/test/unit/functional/test_tensor.py b/imperative/python/test/unit/functional/test_tensor.py new file mode 100644 index 00000000..018871a2 --- /dev/null +++ b/imperative/python/test/unit/functional/test_tensor.py @@ -0,0 +1,313 @@ +# -*- 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 Buffer, Parameter, is_cuda_available, tensor +from megengine.core.tensor.utils import astensor1d +from megengine.test import assertTensorClose + + +def _default_compare_fn(x, y): + assertTensorClose(x.numpy(), y) + + +def opr_test(cases, func, compare_fn=_default_compare_fn, ref_fn=None, **kwargs): + """ + 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_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 len(cases) == 0: + raise ValueError("should give one case at least") + + if not callable(func): + raise ValueError("the input func should be callable") + + inp, outp = get_param(cases, 0) + inp_tensor = [tensor(inpi) for inpi in inp] + + results = func(*inp_tensor, **kwargs) + check_results(results, outp) + + +def test_eye(): + dtype = np.float32 + cases = [{"input": [10, 20]}, {"input": [20, 30]}] + for case in cases: + assertTensorClose( + F.eye(case["input"], dtype=dtype).numpy(), + np.eye(*case["input"]).astype(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_stack(): + data1 = np.random.random((3, 2, 2)).astype("float32") + data2 = np.random.random((3, 2, 2)).astype("float32") + data3 = np.random.random((3, 2, 2)).astype("float32") + + cases = [{"input": [data1, data2]}, {"input": [data1, data3]}] + for ai in range(3): + + def run(data1, data2): + return F.stack([data1, data2], axis=ai) + + opr_test(cases, run, ref_fn=lambda x, y: np.stack([x, y], axis=ai)) + + +def test_split(): + data = np.random.random((2, 3, 4, 5)).astype(np.float32) + mge_out1 = F.split(tensor(data), 2, axis=3) + mge_out2 = F.split(tensor(data), [3, 5], axis=3) + + np_out = np.split(data, [3, 5], axis=3) + + np.testing.assert_equal(mge_out1[0].numpy(), mge_out2[0].numpy()) + np.testing.assert_equal(mge_out1[0].numpy(), np_out[0]) + + +def test_reshape(): + x = np.arange(6, dtype="float32") + xx = tensor(x) + y = x.reshape(1, 2, 3) + + for shape in [ + (1, 2, 3), + (1, -1, 3), + (1, tensor(-1), 3), + np.array([1, -1, 3], dtype="int32"), + tensor([1, -1, 3]), + ]: + yy = F.reshape(xx, shape) + np.testing.assert_equal(yy.numpy(), y) + + +def test_squeeze(): + x = np.arange(6, dtype="float32").reshape(1, 2, 3, 1) + xx = tensor(x) + + for axis in [None, 3, -4, (3, -4)]: + y = np.squeeze(x, axis) + yy = F.squeeze(xx, axis) + np.testing.assert_equal(y, yy.numpy()) + + +def test_expand_dims(): + x = np.arange(6, dtype="float32").reshape(2, 3) + xx = tensor(x) + + for axis in [2, -3, (3, -4), (1, -4)]: + y = np.expand_dims(x, axis) + yy = F.expand_dims(xx, axis) + np.testing.assert_equal(y, yy.numpy()) + + +def test_elemwise_dtype_promotion(): + x = np.random.rand(2, 3).astype("float32") + y = np.random.rand(1, 3).astype("float16") + xx = tensor(x) + yy = tensor(y) + z = xx * yy + np.testing.assert_equal(z.numpy(), x * y) + + z = xx + y + np.testing.assert_equal(z.numpy(), x + y) + + z = x - yy + np.testing.assert_equal(z.numpy(), x - y) + + +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_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(): + 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, compare_fn=compare_fn) + + +def test_utils_astensor1d(): + reference = tensor(0) + + # literal + x = [1, 2, 3] + for dtype in [None, "float32"]: + xx = astensor1d(x, reference, dtype=dtype) + assert type(xx) is tensor + np.testing.assert_equal(xx.numpy(), x) + + # numpy array + x = np.asarray([1, 2, 3], dtype="int32") + for dtype in [None, "float32"]: + xx = astensor1d(x, reference, dtype=dtype) + assert type(xx) is tensor + np.testing.assert_equal(xx.numpy(), x.astype(dtype) if dtype else x) + + # tensor + x = tensor([1, 2, 3], dtype="int32") + for dtype in [None, "float32"]: + xx = astensor1d(x, reference, dtype=dtype) + assert type(xx) is tensor + np.testing.assert_equal(xx.numpy(), x.numpy()) + + # mixed + x = [1, tensor(2), 3] + for dtype in [None, "float32"]: + xx = astensor1d(x, reference, dtype=dtype) + assert type(xx) is tensor + np.testing.assert_equal(xx.numpy(), [1, 2, 3]) + + +def test_device(): + x = tensor([1, 2, 3], dtype="float32") + + y1 = F.eye(x.shape, dtype="float32") + y2 = F.eye(x.shape, dtype="float32", device=None) + np.testing.assert_almost_equal(y1.numpy(), y2.numpy()) + + y3 = F.eye(x.shape, dtype="float32", device="xpux") + y4 = F.eye(x.shape, dtype="float32", device=x.device.to_c()) + np.testing.assert_almost_equal(y3.numpy(), y4.numpy()) + + y5 = F.full((3, 2), 4, device=x.device) + y6 = F.full((3, 2), 4, device="xpux") + np.testing.assert_almost_equal(y5.numpy(), y6.numpy()) diff --git a/imperative/python/test/unit/quantization/quantize.py b/imperative/python/test/unit/quantization/quantize.py new file mode 100644 index 00000000..236ef9e1 --- /dev/null +++ b/imperative/python/test/unit/quantization/quantize.py @@ -0,0 +1,80 @@ +# 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/imperative/python/test/unit/quantization/test_fake_quant.py b/imperative/python/test/unit/quantization/test_fake_quant.py new file mode 100644 index 00000000..ff999b75 --- /dev/null +++ b/imperative/python/test/unit/quantization/test_fake_quant.py @@ -0,0 +1,77 @@ +# -*- 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 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_np = np.random.random((4, 3)).astype("float32") + b_np = np.random.random((1)).astype("float32") + a = tensor(a_np) + b = tensor(b_np) + check_inp(a, b, b, a_np, b_np, b_np) + + diff --git a/imperative/python/test/unit/test_autodiff.py b/imperative/python/test/unit/test_autodiff.py new file mode 100644 index 00000000..929e967c --- /dev/null +++ b/imperative/python/test/unit/test_autodiff.py @@ -0,0 +1,227 @@ +# -*- 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 weakref + +import numpy as np +import pytest + +import megengine as mge +import megengine.distributed as dist +from megengine.core._imperative_rt import TensorAttr, imperative +from megengine.core._imperative_rt.imperative import sync +from megengine.core.autodiff.grad import Grad +from megengine.core.ops.builtin import Elemwise +from megengine.core.tensor.raw_tensor import as_raw_tensor +from megengine.core.tensor.tensor import Tensor, apply +from megengine.core.tensor.tensor_wrapper import TensorWrapper +from megengine.functional.distributed import remote_recv, remote_send + + +def _elwise(mode): + op = Elemwise(mode=mode) + + def f(*args): + (result,) = apply(op, *args) + return result + + return f + + +add = _elwise("add") +mul = _elwise("mul") +cos = _elwise("cos") +relu = _elwise("relu") + + +def as_tensor(x): + return Tensor(as_raw_tensor(x, device=mge.device.get_default_device())) + + +def save_to(self, name="grad"): + def callback(tensor, grad): + setattr(self, name, grad) + + return callback + + +@pytest.mark.isolated_distributed +def test_dist_grad(): + world_size = 2 + x_np = np.random.rand(10).astype("float32") + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker0(): + dist.init_process_group("localhost", port, world_size, 0, 0) + mge.device.set_default_device("gpu0") + grad = Grad() + + x = as_tensor(x_np) + grad.wrt(x, callback=save_to(x)) + # need a placeholder to trace operator + send_x = remote_send(x, 1) + recv_x = remote_recv(1, x_np.shape, x_np.dtype, "gpu0") + y = recv_x * recv_x + + grad([y], [as_tensor(np.ones_like(x_np))]) + np.testing.assert_almost_equal(x.grad.numpy(), x.numpy() * 2) + + def worker1(): + dist.init_process_group("localhost", port, world_size, 1, 1) + mge.device.set_default_device("gpu1") + grad = Grad() + + recv_x = remote_recv(0, x_np.shape, x_np.dtype, "gpu1") + send_x = remote_send(recv_x, 0) + + grad([], []) + + # sync because grad has a send operator + sync() + send_x.device._cn._sync_all() + + import multiprocessing as mp + + p0 = mp.Process(target=worker0) + p1 = mp.Process(target=worker1) + p0.start() + p1.start() + p0.join(10) + p1.join(10) + assert p0.exitcode == 0 and p1.exitcode == 0 + + +def test_grad(): + x_np = np.random.rand(10).astype("float32") + x = as_tensor(x_np) + + grad = Grad().wrt(x, callback=save_to(x)) + + y = cos(x) + + grad(y, as_tensor(np.ones_like(x_np))) + np.testing.assert_almost_equal(x.grad.numpy(), -np.sin(x_np)) + + +def test_grad_2(): + x_np = np.random.rand(10).astype("float32") + x = as_tensor(x_np) + + grad = Grad().wrt(x, callback=save_to(x)) + + y = mul(x, x) + y = mul(y, y) + + grad(y, as_tensor(np.ones_like(x_np))) + np.testing.assert_almost_equal(x.grad.numpy(), 4 * x_np ** 3, decimal=6) + + +@pytest.mark.skip(reason="high order gradient was not implemented yet") +def test_2nd_grad(): + x_np = np.random.rand(10).astype("float32") + x = as_tensor(x_np) + ones = as_tensor(np.ones_like(x_np)) + + grad = Grad().wrt(x, callback=save_to(x)) + grad2 = Grad().wrt(x, callback=save_to(x)) + + y = cos(x) + + grad(y, ones) + np.testing.assert_almost_equal(x.grad.numpy(), -np.sin(x_np), decimal=5) + + grad2(x.grad, ones) + np.testing.assert_almost_equal(x.grad.numpy(), -np.cos(x_np)) + + +def test_grad_with_tensor_wrapper(): + x_np = np.random.rand(10).astype("float32") + x = TensorWrapper(x_np) + + grad = Grad().wrt(x, callback=save_to(x)) + + y = mul(x, x) + y = mul(y, y) + + grad(y, TensorWrapper(np.ones_like(x_np))) + np.testing.assert_almost_equal(x.grad.numpy(), 4 * x_np ** 3, decimal=6) + + +def test_grad_inplace(): + x_np = np.random.rand(10).astype("float32") + x = TensorWrapper(x_np) + + grad = Grad().wrt(x, callback=save_to(x)) + + y = mul(x, x) + y *= y + + grad(y, TensorWrapper(np.ones_like(x_np))) + np.testing.assert_almost_equal(x.grad.numpy(), 4 * x_np ** 3, decimal=6) + + +def test_elemwise_add(): + x_np = np.random.rand(10).astype("float32") + y_np = np.random.rand(10, 10).astype("float32") + dz_np = np.random.rand(10, 10).astype("float32") + x = TensorWrapper(x_np) + y = TensorWrapper(y_np) + dz = TensorWrapper(dz_np) + + refs = {} + + def f(x, y): + x = x * 2 + refs["x"] = weakref.ref(x.__wrapped__) + refs["y"] = weakref.ref(y.__wrapped__) + return x + y + + grad = Grad().wrt(x, callback=save_to(x)) + + z = f(x, y) + del y + + for k, r in refs.items(): + assert r() is None + + grad(z, dz) + np.testing.assert_almost_equal(x.grad.numpy(), dz_np.sum(0) * 2, decimal=5) + + +def test_elemwise_relu(): + x_np = [1.0, -1.0] + dz_np = [1.0] + x = TensorWrapper(x_np) + dz = TensorWrapper(dz_np) + + refs = {} + + def f(x): + x = x * 2 + refs["x"] = weakref.ref(x.__wrapped__) + return relu(x) + + grad = Grad().wrt(x, callback=save_to(x)) + + z = f(x) + + assert refs["x"]() is None + + grad(z, dz) + np.testing.assert_almost_equal(x.grad.numpy(), [2.0, 0]) + + +def test_elemwise_relu_backward_fn(): + op = Elemwise(mode="relu").to_c() + attr = TensorAttr() + attr.dtype = "float32" + attr.comp_node = "xpux" + result = imperative.make_backward_graph(op, [attr], [True], [True]) + backward_graph, save_for_backward_mask, input_has_grad = result + assert save_for_backward_mask == [False, True, True], save_for_backward_mask diff --git a/imperative/python/test/unit/test_distributed.py b/imperative/python/test/unit/test_distributed.py new file mode 100644 index 00000000..70692eb9 --- /dev/null +++ b/imperative/python/test/unit/test_distributed.py @@ -0,0 +1,193 @@ +# -*- 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 queue + +import pytest + +import megengine as mge +import megengine.distributed as dist + + +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 + + +@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 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, backend): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank, backend) + assert dist.is_distributed() == True + assert dist.get_rank() == rank + assert dist.get_world_size() == world_size + assert dist.get_backend() == backend + + py_server_addr = dist.get_py_server_addr() + assert py_server_addr[0] == "localhost" + assert py_server_addr[1] == port + + mm_server_addr = dist.get_mm_server_addr() + assert mm_server_addr[0] == "localhost" + assert mm_server_addr[1] > 0 + + assert isinstance(dist.get_client(), dist.Client) + + def check(backend): + procs = [] + for rank in range(world_size): + p = mp.Process(target=worker, args=(rank, backend)) + p.start() + procs.append(p) + + for p in procs: + p.join(20) + assert p.exitcode == 0 + + check("nccl") + check("ucx") + + +@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_new_group(): + world_size = 3 + ranks = [2, 0] + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + if rank in ranks: + group = dist.new_group(ranks) + assert group.size == 2 + assert group.key == "2,0" + assert group.rank == ranks.index(rank) + assert group.comp_node == "gpu{}:2".format(rank) + + procs = [] + for rank in range(world_size): + p = mp.Process(target=worker, args=(rank,)) + p.start() + procs.append(p) + + for p in procs: + p.join(20) + 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_group_barrier(): + world_size = 2 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + def worker(rank, q): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + 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() + procs = [] + for rank in range(world_size): + p = mp.Process(target=worker, args=(rank, Q)) + p.start() + procs.append(p) + + for p in procs: + p.join(20) + 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_synchronized(): + world_size = 2 + port = dist.get_free_ports(1)[0] + server = dist.Server(port) + + @dist.synchronized + def func(rank, q): + q.put(rank) + + def worker(rank, q): + if mge.get_device_count("gpu") < world_size: + return + dist.init_process_group("localhost", port, world_size, rank, rank) + 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() + procs = [] + for rank in range(world_size): + p = mp.Process(target=worker, args=(rank, Q)) + p.start() + procs.append(p) + + for p in procs: + p.join(20) + assert p.exitcode == 0 diff --git a/imperative/python/test/unit/test_function.py b/imperative/python/test/unit/test_function.py new file mode 100644 index 00000000..8d46e26e --- /dev/null +++ b/imperative/python/test/unit/test_function.py @@ -0,0 +1,128 @@ +# 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.optimizer as optimizer +from megengine import Parameter +from megengine import Tensor as tensor +from megengine import tensor +from megengine.core.tensor.function import Function +from megengine.module import Module + + +def test_single_input(): + data_shape = (9, 2, 6) + av = np.random.random(data_shape).astype(np.float32) + + class MulFunc(Function): + def forward(self, a): + self.a = a + return a * 10 + + def backward(self, grad_o): + return grad_o * 10 + + class Simple(Module): + def __init__(self, a): + super().__init__() + self.a = Parameter(a, dtype=np.float32) + self.layer1 = MulFunc() + + def forward(self): + x = self.layer1(self.a) + return x + + net = Simple(av) + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + with optim.record(): + loss = net() + optim.backward(loss.sum()) + optim.step() + + np.testing.assert_almost_equal(loss.numpy(), (av * 10)) + np.testing.assert_almost_equal(net.a.numpy(), (av - 10)) + + +def test_multi_input(): + data_shape = (9, 2, 6) + av = np.random.random(data_shape).astype(np.float32) + bv = np.random.random(data_shape).astype(np.float32) + + class MulFunc(Function): + def forward(self, a, b): + self.a = a + self.b = b + return a * b + + def backward(self, grad_o): + return grad_o * self.b * 2, grad_o * self.a * 3 + + class Simple(Module): + def __init__(self, a, b): + super().__init__() + self.a = Parameter(a, dtype=np.float32) + self.b = Parameter(b, dtype=np.float32) + self.layer1 = MulFunc() + + def forward(self): + x = self.layer1(self.a, self.b) + return x + + net = Simple(av, bv) + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + with optim.record(): + loss = net() + optim.backward(loss.sum()) + optim.step() + + np.testing.assert_almost_equal(loss.numpy(), (av * bv)) + np.testing.assert_almost_equal(net.a.numpy(), (av - 2 * bv)) + np.testing.assert_almost_equal(net.b.numpy(), (bv - 3 * av)) + + +def test_multi_output(): + data_shape = (9, 2, 6) + av = np.random.random(data_shape).astype(np.float32) + bv = np.random.random(data_shape).astype(np.float32) + + class MulFunc(Function): + def forward(self, a, b): + self.a = a + self.b = b + return a * b, a + b + + def backward(self, grad_1, grad_2): + return grad_1 * (self.b + 1), grad_2 * (self.a + 1) + + class Simple(Module): + def __init__(self, a, b): + super().__init__() + self.a = Parameter(a, dtype=np.float32) + self.b = Parameter(b, dtype=np.float32) + self.layer1 = MulFunc() + + def forward(self): + x, y = self.layer1(self.a, self.b) + return x + y + + net = Simple(av, bv) + optim = optimizer.SGD(net.parameters(), lr=1.0) + optim.zero_grad() + + with optim.record(): + loss = net() + optim.backward(loss.sum()) + optim.step() + + np.testing.assert_almost_equal(loss.numpy(), (av * bv + av + bv), decimal=6) + np.testing.assert_almost_equal(net.a.numpy(), (av - bv - 1), decimal=6) + np.testing.assert_almost_equal(net.b.numpy(), (bv - av - 1), decimal=6) diff --git a/imperative/python/test/unit/test_imperative_rt.py b/imperative/python/test/unit/test_imperative_rt.py new file mode 100644 index 00000000..959a08c4 --- /dev/null +++ b/imperative/python/test/unit/test_imperative_rt.py @@ -0,0 +1,70 @@ +# -*- 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.core.tensor.raw_tensor +from megengine.core.tensor.core import apply + + +def elemwise(*args, mode): + from megengine.core.ops.builtin import Elemwise + from megengine.core._imperative_rt.imperative import apply_op + + return apply_op(Elemwise(mode=mode).to_c(), args) + + +def test_basic_interface(): + cf = megengine.core._imperative_rt.OperatorNodeConfig() + cf.name = "megengine.core" + cf.dtype = "float32" + cf.comp_node_arr = ["xpux"] + print(cf.name) + print(cf.dtype) + print(cf.comp_node_arr) + print(cf.comp_node) + cf.comp_node_arr = ["xpux", "xpux:1"] + with pytest.raises(ValueError): + cf.comp_node + + +def test_opr_attr(): + from megengine.core.ops.builtin import Elemwise + + assert Elemwise(mode="add") == Elemwise(mode="add") + + +def test_simple_arith(): + x = np.random.rand(10).astype("float32") + xx = megengine.core._imperative_rt.put(x) + (yy,) = elemwise(xx, xx, mode="mul") + np.testing.assert_allclose(x * x, megengine.core._imperative_rt.get_value(yy)) + megengine.core._imperative_rt.delete(xx) + megengine.core._imperative_rt.delete(yy) + + +def test_tensor_on_device(): + device = megengine.core._imperative_rt.CompNode("cpu0:1") + x = np.random.rand(10).astype("float32") + xx = megengine.core._imperative_rt.put(x, device=device) + assert str(megengine.core._imperative_rt.get_device(xx)) == "cpu0:1" + np.testing.assert_equal(x, megengine.core._imperative_rt.get_value(xx)) + megengine.core._imperative_rt.delete(xx) + + +def test_raw_tensor(): + from megengine.core.tensor.raw_tensor import as_raw_tensor + from megengine.core.ops.builtin import Elemwise + + x = np.random.rand(10).astype("float32") + xx = as_raw_tensor(x) + (yy,) = apply(Elemwise(mode="mul"), xx, xx) + np.testing.assert_allclose(x * x, yy.numpy()) + (yy,) = apply(Elemwise(mode="mul"), xx, xx) + np.testing.assert_allclose(x * x, yy.numpy()) diff --git a/imperative/python/test/unit/test_indexing_op.py b/imperative/python/test/unit/test_indexing_op.py new file mode 100644 index 00000000..70b2911f --- /dev/null +++ b/imperative/python/test/unit/test_indexing_op.py @@ -0,0 +1,546 @@ +# -*- 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 +import pytest + +import megengine.core.ops.builtin +import megengine.core.tensor.raw_tensor +from megengine.core.ops._internal import all_ops +from megengine.core.tensor import Tensor +from megengine.core.tensor.core import apply +from megengine.core.tensor.raw_tensor import RawTensor, as_raw_tensor + + +def cvt_to_shape_desc(val, inpvar, config=None): + def as_tensor(val, device): + assert device is not None, "can not infer device" + # TODO: should copy to appropriate device + val = as_raw_tensor(val, device=device) + return val + + device = None + if inpvar is not None: + assert isinstance(inpvar, RawTensor) + device = device or inpvar.device + + if config is not None: + device = device or config.device + + if isinstance(val, RawTensor): + return as_tensor(val, device) + + if not isinstance(val, collections.Iterable): + val = [val] + + components = [] + on_host = True + for i in val: + if isinstance(i, RawTensor): + on_host = False + device = device or i.device + else: + assert isinstance(i, int), ( + "shape desc could contain either int or Tensor, got {}" + " actually".format(repr(i)) + ) + components.append(i) + assert components, "shape desc could not be empty" + + if on_host: + shape = np.ascontiguousarray(components, dtype=np.int32) + assert np.all(shape == components), "failed to convert to shape: {}".format( + components + ) + return as_tensor(shape, device) + + for idx, v in enumerate(components): + if not isinstance(v, RawTensor): + vi = int(v) + assert vi == v, "could not convert {} to int".format(v) + v = vi + components[idx] = as_tensor(v, device) + + return invoke_op(all_oprs.Concat(axis=0), components) + + +def canonize_reshape(inputs, *, config): + src, tshape = inputs + tshape = cvt_to_shape_desc(tshape, src, config) + return src, tshape + + +def canonize_inputs(inputs, *, 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 + """ + + 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, RawTensor): + return [inputs] + + old_inputs = inputs + inputs = [] + get_comp_node = None + need_cvt = False + for i in old_inputs: + if isinstance(i, RawTensor): + get_comp_node = lambda cn=i.device.to_c(): cn + else: + need_cvt = True + inputs.append(i) + if not need_cvt: + return inputs + + if get_comp_node is None: + + def get_comp_node(): + return config.comp_node + + for idx, var in enumerate(inputs): + if not isinstance(var, RawTensor): + var = as_raw_tensor(var) + inputs[idx] = var + return inputs + + +def invoke_op(op, inputs_, cvt_inputs=canonize_inputs): + inputs = cvt_inputs( + inputs_, config=megengine.core._imperative_rt.OperatorNodeConfig() + ) + return apply(op, *inputs) + + +def unpack_getitem(inp, tuple_val, *, allow_newaxis=True): + assert isinstance(inp, RawTensor) + if not isinstance(tuple_val, tuple): + tuple_val = (tuple_val,) + + def as_tensor(v): + if not isinstance(v, RawTensor): + vi = np.ascontiguousarray(v, dtype=np.int32) + assert np.abs(vi - v).max() == 0, "bad index: {!r}".format(v) + v = as_raw_tensor(vi) + return v + + new_axes = [] + tensors = [] + items = [] + 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 + + item = [ + cur_axis, + ] + + def push(v, item, tensors): + if v is None: + item.append(False) + else: + item.append(True) + tensors.append(as_tensor(v)) + + if isinstance(i, slice): + if i.start is None and i.stop is None and i.step is None: + continue + push(i.start, item, tensors) + push(i.stop, item, tensors) + push(i.step, item, tensors) + item.append(False) # idx + else: + item += [False,] * 3 # begin, end, stop + push(i, item, tensors) + assert len(item) == 5 + items.append(item) + if new_axes: + raise IndexError("newaxis is not allowed here") + return inp, tensors, items + + +def dimshuffle(*args, **kwargs): + op = all_ops.Dimshuffle(**kwargs).to_c() + return invoke_op(op, args) + + +def broadcast(input, tshape): + op = all_ops.Broadcast().to_c() + return invoke_op(op, (input, tshape), canonize_reshape) + + +def subtensor(input, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.Subtensor(items).to_c() + return invoke_op(op, (input, *tensors)) + + +def set_subtensor(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.SetSubtensor(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def incr_subtensor(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.IncrSubtensor(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def advance_indexing(input, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.IndexingMultiAxisVec(items).to_c() + return invoke_op(op, (input, *tensors)) + + +def set_advance_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.IndexingSetMultiAxisVec(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def incr_advance_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.IndexingIncrMultiAxisVec(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def mesh_indexing(input, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.MeshIndexing(items).to_c() + return invoke_op(op, (input, *tensors)) + + +def set_mesh_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.SetMeshIndexing(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def incr_mesh_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.IncrMeshIndexing(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def batched_mesh_indexing(input, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.BatchedMeshIndexing(items).to_c() + return invoke_op(op, (input, *tensors)) + + +def batched_set_mesh_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.BatchedSetMeshIndexing(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def batched_incr_mesh_indexing(input, value, tuple_val): + input, tensors, items = unpack_getitem(input, tuple_val) + op = all_ops.BatchedIncrMeshIndexing(items).to_c() + return invoke_op(op, (input, value, *tensors)) + + +def test_dimshuffle(): + x = np.arange(10).reshape(2, 5).astype("int32") + xx = as_raw_tensor(x) + (yy,) = dimshuffle(xx, pattern="1x0") + np.testing.assert_equal(np.expand_dims(x.transpose(), axis=1), yy.numpy()) + + +def test_broadcast(): + x = np.arange(10).reshape(1, 10).astype("int32") + xx = as_raw_tensor(x) + (yy,) = broadcast(xx, (10, 10)) + np.testing.assert_equal(np.repeat(x, 10, 0), yy.numpy()) + + +def test_subtensor(): + x = np.arange(25).reshape(5, 5).astype("int32") + d = np.arange(2).astype("int32") + xx = as_raw_tensor(x) + (yy0,) = subtensor(xx, (slice(0, 4, 2), 3)) + (yy1,) = set_subtensor(xx, d, (slice(0, 4, 2), 3)) + (yy2,) = incr_subtensor(xx, d, (slice(0, 4, 2), 3)) + + np.testing.assert_equal(x[0:4:2, 3], yy0.numpy()) + + x_ = x.copy() + x_[0:4:2, 3] = d + np.testing.assert_equal(x_, yy1.numpy()) + + x_ = x.copy() + x_[0:4:2, 3] += d + np.testing.assert_equal(x_, yy2.numpy()) + + +def test_advance_indexing(): + x = np.arange(25).reshape(5, 5).astype("int32") + d = np.arange(15).reshape(3, 5).astype("int32") + xx = as_raw_tensor(x) + (yy0,) = advance_indexing(xx, ((0, 4, 2), slice(None, None, None))) + (yy1,) = set_advance_indexing(xx, d, ((0, 4, 2), slice(None, None, None))) + (yy2,) = incr_advance_indexing(xx, d, ((0, 4, 2), slice(None, None, None))) + + np.testing.assert_equal(x[(0, 4, 2), :], yy0.numpy()) + + x_ = x.copy() + x_[(0, 4, 2), :] = d + np.testing.assert_equal(x_, yy1.numpy()) + + x_ = x.copy() + x_[(0, 4, 2), :] += d + np.testing.assert_equal(x_, yy2.numpy()) + + +def test_mesh_indexing(): + x = np.arange(25).reshape(5, 5).astype("int32") + d = np.arange(6).reshape(3, 2).astype("int32") + xx = as_raw_tensor(x) + (yy0,) = mesh_indexing(xx, (slice(0, 5, 2), (1, 3))) + (yy1,) = set_mesh_indexing(xx, d, (slice(0, 5, 2), (1, 3))) + (yy2,) = incr_mesh_indexing(xx, d, (slice(0, 5, 2), (1, 3))) + + r = np.ndarray(shape=(3, 2), dtype="int32") + for i0, i1 in enumerate(range(0, 5, 2)): + for j0, j1 in enumerate((1, 3)): + r[i0, j0] = x[i1, j1] + np.testing.assert_equal(r, yy0.numpy()) + + r = x.copy() + for i0, i1 in enumerate(range(0, 5, 2)): + for j0, j1 in enumerate((1, 3)): + r[i1, j1] = d[i0, j0] + np.testing.assert_equal(r, yy1.numpy()) + + r = x.copy() + for i0, i1 in enumerate(range(0, 5, 2)): + for j0, j1 in enumerate((1, 3)): + r[i1, j1] += d[i0, j0] + np.testing.assert_equal(r, yy2.numpy()) + + +def test_batched_mesh_indexing(): + x = np.arange(24).reshape(2, 3, 4).astype("int32") + d = np.arange(12).reshape(2, 2, 3).astype("int32") + xx = as_raw_tensor(x) + s = [(0, 1, 2), (1, 2, 3)] + (yy0,) = batched_mesh_indexing(xx, (slice(None, None, None), [(0, 2)] * 2, s)) + (yy1,) = batched_set_mesh_indexing( + xx, d, (slice(None, None, None), [(0, 2)] * 2, s) + ) + (yy2,) = batched_incr_mesh_indexing( + xx, d, (slice(None, None, None), [(0, 2)] * 2, s) + ) + + r = np.ndarray(shape=(2, 2, 3), dtype="int32") + for i in range(2): + for j0, j1 in enumerate((0, 2)): + for k0, k1 in enumerate(s[i]): + r[i, j0, k0] = x[i, j1, k1] + np.testing.assert_equal(r, yy0.numpy()) + + r = x.copy() + for i in range(2): + for j0, j1 in enumerate((0, 2)): + for k0, k1 in enumerate(s[i]): + r[i, j1, k1] = d[i, j0, k0] + np.testing.assert_equal(r, yy1.numpy()) + + r = x.copy() + for i in range(2): + for j0, j1 in enumerate((0, 2)): + for k0, k1 in enumerate(s[i]): + r[i, j1, k1] += d[i, j0, k0] + np.testing.assert_equal(r, yy2.numpy()) + + +# high level + + +def test_advance_indexing_high_level(): + x = np.arange(25).reshape(5, 5).astype("int32") + d = np.arange(15).reshape(3, 5).astype("int32") + xx = Tensor(x) + + np.testing.assert_equal(x[1, :], xx[1, :].numpy()) + np.testing.assert_equal(x[:, 1], xx[:, 1].numpy()) + np.testing.assert_equal(x[1:3, :], xx[1:3, :].numpy()) + + np.testing.assert_equal(x[:, :], xx[:, :].numpy()) + np.testing.assert_equal(x[1, 1], xx[1, 1].numpy()) + yy = xx[(0, 4, 2), :] + np.testing.assert_equal(x[(0, 4, 2), :], yy.numpy()) + + x_ = x.copy() + x_[(0, 4, 2), :] = d + xx_ = Tensor(xx) + xx_[(0, 4, 2), :] = d + np.testing.assert_equal(x_, xx_.numpy()) + + x = np.arange(27).reshape(3, 3, 3).astype("int32") + xx = Tensor(x) + + np.testing.assert_equal(x[1, :, :], xx[1, :, :].numpy()) + np.testing.assert_equal(x[1, :, 1], xx[1, :, 1].numpy()) + np.testing.assert_equal(x[1, 0:1, :], xx[1, 0:1, :].numpy()) + np.testing.assert_equal(x[0:1, 1, 1], xx[0:1, 1, 1].numpy()) + np.testing.assert_equal(x[:, 1, 1], xx[:, 1, 1].numpy()) + np.testing.assert_equal(x[:, 1], xx[:, 1].numpy()) + np.testing.assert_equal(x[1, 1:2], xx[1, 1:2].numpy()) + + x_ = x.copy() + x_[1, 1, 1] = -1 + xx[1, 1, 1] = -1 + np.testing.assert_equal(x_, xx.numpy()) + + x_[:, 1, 1] = -2 + xx[:, 1, 1] = x_[:, 1, 1] + np.testing.assert_equal(x_, xx.numpy()) + + x_[0:1, :, 1] = -3 + xx[0:1, :, 1] = x_[0:1, :, 1] + np.testing.assert_equal(x_, xx.numpy()) + + x_[0:1, :, 1] = -4 + y = Tensor(x_) + xx[0:1, :, 1] = y[0:1, :, 1] + np.testing.assert_equal(y.numpy(), xx.numpy()) + + x[:] = 1 + xx[:] = 1 + np.testing.assert_equal(x, xx.numpy()) + + x = np.arange(9).reshape(3, 3).astype("int32") + xx = Tensor(x) + y = np.array([1, 2]) + yy = Tensor(y) + np.testing.assert_equal(x[:, y[0]], xx[:, y[0]].numpy()) + # np.testing.assert_equal(x[:, y[0]], xx[:, yy[0]].numpy()) # FIXME + np.testing.assert_equal(x[:, y], xx[:, y].numpy()) + np.testing.assert_equal(x[:, y], xx[:, yy].numpy()) + + x_ = x.copy() + x_[:, y[0]] = -1 + xx_ = Tensor(x_) + xx[:, yy[0]] = xx_[:, yy[0]] + np.testing.assert_equal(x_, xx.numpy()) + + x_[:, y] = -1 + xx_ = Tensor(x_) + xx[:, yy] = xx_[:, yy] + np.testing.assert_equal(x_, xx.numpy()) + + x = np.arange(9).reshape(3, 3).astype("int32") + xx = Tensor(x) + y = np.array([1]) + yy = Tensor(y) + np.testing.assert_equal(x[:, y[0]], xx[:, y[0]].numpy()) + # np.testing.assert_equal(x[:, y[0]], xx[:, yy[0]].numpy()) # FIXME + np.testing.assert_equal(x[:, y], xx[:, y].numpy()) + + # XXX: no way to tell whether yy is scalar or ndim=1 array + np.testing.assert_equal(x[:, y], xx[:, yy].numpy()) + + x = np.arange(9).reshape(3, 3).astype("int32") + xx = Tensor(x) + np.testing.assert_equal(x[[0, 1], 0], xx[[0, 1], 0].numpy()) + np.testing.assert_equal(x[0:2, 0], xx[0:2, 0].numpy()) + + +def test_advance_indexing_with_bool(): + a = np.arange(9).reshape(3, 3).astype(np.float32) + b = np.array([1, 2, 3]) + c = np.array([1, 2, 3]) + aa = Tensor(a) + bb = Tensor(b) + cc = Tensor(c) + np.testing.assert_equal(a[b == 1, c == 2], aa[bb == 1, cc == 2].numpy()) + a[b == 1, c == 2] = -1.0 + aa[bb == 1, cc == 2] = -1.0 + np.testing.assert_equal(a, aa.numpy()) + + a = np.arange(9).reshape(3, 3).astype(np.float32) + b = np.array([False, True, True]) + c = np.array([2, 0]).astype(np.int32) + aa = Tensor(a) + bb = Tensor(b) + cc = Tensor(c) + np.testing.assert_equal(a[b, c], aa[bb, cc].numpy()) + a[b, c] = -1.0 + aa[bb, cc] = -1.0 + np.testing.assert_equal(a, aa.numpy()) + d = np.array([-1, -2], dtype=np.float32) + dd = Tensor(d) + a[b, c] = d + aa[bb, cc] = dd + np.testing.assert_equal(a, aa.numpy()) + + a = np.ones((2, 2)) + b = np.array([[True, False], [False, True]]) + aa = Tensor(a) + bb = Tensor(b) + np.testing.assert_equal(a[b], aa[bb].numpy()) + b[:] = True + bb[:] = True + np.testing.assert_equal(a[b], aa[bb].numpy()) + np.testing.assert_equal(a[:, [True, False]], aa[:, [True, False]].numpy()) + + a = np.ones((2, 2), dtype=np.int32) + b = np.array([[False, False], [False, False]]) + aa = Tensor(a) + bb = Tensor(b) + np.testing.assert_equal(a[b], aa[bb].numpy()) + + b = np.array([False, False]) + bb = Tensor(b) + np.testing.assert_equal(a[b], aa[bb].numpy().reshape(a[b].shape)) # FIXME + + a = np.arange(576).reshape(2, 3, 4, 3, 4, 2).astype("int32") + aa = Tensor(a) + + b = (np.random.sample((2, 3, 4)) > 0.5).astype("bool") + bb = Tensor(b) + np.testing.assert_equal(a[b, :, 0:4:2], aa[bb, :, 0:4:2].numpy()) + + b = (np.random.sample((4, 3, 4)) > 0.5).astype("bool") + bb = Tensor(b) + np.testing.assert_equal(a[..., b, 0:2], aa[..., bb, 0:2].numpy()) + + b = (np.random.sample((3, 4, 3)) > 0.5).astype("bool") + bb = Tensor(b) + np.testing.assert_equal( + a[:, b, 0:2, [True, False]], aa[:, bb, 0:2, [True, False]].numpy() + ) diff --git a/imperative/python/test/unit/test_jit.py b/imperative/python/test/unit/test_jit.py new file mode 100644 index 00000000..4bc9c2f1 --- /dev/null +++ b/imperative/python/test/unit/test_jit.py @@ -0,0 +1,29 @@ +# -*- 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.core import Tensor + +# from megengine.core.interpreter.hints import function + + +@pytest.mark.skip(reason="under rewrite") +def test_1(): + @function + def f(x, p): + x = x + 1 + if p: + return x * x + return x * 2 + + x = Tensor(0) + + for _ in range(5): + assert f(x, 0).numpy() == 2 + assert f(x, 1).numpy() == 1 diff --git a/imperative/python/test/unit/test_loss.py b/imperative/python/test/unit/test_loss.py new file mode 100644 index 00000000..c4abbd68 --- /dev/null +++ b/imperative/python/test/unit/test_loss.py @@ -0,0 +1,20 @@ +# -*- 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 + + +# XXX need to test label_smooth +def test_cross_entropy_with_softmax(): + data = tensor([1, 100]).astype(np.float32).reshape((1, 2)) + label = tensor([1]).astype(np.int32) + loss = F.cross_entropy_with_softmax(data, label) + np.testing.assert_allclose(loss.numpy(), 0.0) diff --git a/imperative/python/test/unit/test_megbrain_graph.py b/imperative/python/test/unit/test_megbrain_graph.py new file mode 100644 index 00000000..3fb6a9de --- /dev/null +++ b/imperative/python/test/unit/test_megbrain_graph.py @@ -0,0 +1,85 @@ +# -*- 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 concurrent.futures import Future + +import numpy as np + +import megengine.functional as F +from megengine.core._imperative_rt import DeviceTensorND +from megengine.core.tensor import megbrain_graph as mgb_graph +from megengine.core.tensor.raw_tensor import as_raw_tensor + + +def make_dev_tensor(value, dtype=None, device=None): + return as_raw_tensor(value, dtype=dtype, device=device)._dev_tensor() + + +def test_io(): + g = mgb_graph.Graph() + x = make_dev_tensor(np.random.randn(3).astype("float32"), device="xpux") + vx, _ = mgb_graph.input_callback( + lambda: x, device=x.comp_node, dtype=x.dtype, graph=g + ) + y = Future() + v = mgb_graph.output_callback(y.set_result, vx) + f = g.compile(v) + f() + + np.testing.assert_equal(x.numpy(), y.result().numpy()) + + +def test_io2(): + g = mgb_graph.Graph() + g.options.async_exec_level = 0b100 + dtype, device = "float32", "xpux" + px = mgb_graph.InputNode(device=device, dtype=dtype, graph=g) + py = mgb_graph.OutputNode(px.outputs[0]) + f = g.compile(py.outputs[0]) + + for _ in range(3): + f.execute() + x = make_dev_tensor(np.random.randn(10).astype(dtype), device=device) + px.set_value(x) + y = py.get_value() + np.testing.assert_equal(x.numpy(), y.numpy()) + f.wait() + + +def test_attr_output(): + g = mgb_graph.Graph() + g.options.async_exec_level = 0b100 + dtype, device = "float32", "xpux" + px = mgb_graph.InputNode(device=device, dtype=dtype, graph=g) + py = mgb_graph.AttrOutputNode(px.outputs[0]) + f = g.compile(py.outputs[0]) + + for shape in [(2,), (3,), (5,)]: + f.execute() + x = make_dev_tensor(np.random.randn(*shape).astype(dtype), device=device) + px.set_value(x) + ay = py.get_value() + assert ay.shape == shape + assert ay.dtype == np.dtype(dtype) + assert ay.device == device + f.wait() + + +def test_op(): + g = mgb_graph.Graph() + x = make_dev_tensor(np.random.randn(10).astype("float32"), device="xpux") + v, _ = mgb_graph.input_callback( + lambda: x, device=x.comp_node, dtype=x.dtype, graph=g + ) + v = F.neg(v) + y = Future() + v = mgb_graph.output_callback(y.set_result, v) + f = g.compile(v) + f() + + np.testing.assert_equal(x.numpy(), -y.result().numpy()) diff --git a/imperative/python/test/unit/test_module.py b/imperative/python/test/unit/test_module.py new file mode 100644 index 00000000..5de497ed --- /dev/null +++ b/imperative/python/test/unit/test_module.py @@ -0,0 +1,108 @@ +# -*- 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 pytest + + +@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(): + import numpy as np + import multiprocessing as mp + from megengine.distributed.group import Server + + nr_chan = 8 + nr_ranks = 4 + data_shape = (3, nr_chan, 4, nr_ranks * 8) + 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 + server = Server(0) + port = server.py_server_port + + def worker(rank, data, yv_expect, running_mean, running_var): + import megengine as mge + import megengine.distributed as dist + from megengine import tensor + from megengine.module import SyncBatchNorm + from megengine.distributed.group import Group + from megengine.test import assertTensorClose + + if mge.get_device_count("gpu") < nr_ranks: + return + dist.init_process_group("localhost", port, nr_ranks, rank, rank) + group = Group([i for i in range(nr_ranks)]) + bn = SyncBatchNorm(nr_chan, eps=eps, momentum=momentum, group=group) + data_tensor = None + for i in range(steps): + if data_tensor is None: + data_tensor = tensor(data[i], device=f"gpu{rank}:0") + else: + 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_module_conv2d(): + from megengine.module.conv import Conv2d + + conv = Conv2d(2, 3, 1) diff --git a/imperative/python/test/unit/test_raw_tensor.py b/imperative/python/test/unit/test_raw_tensor.py new file mode 100644 index 00000000..0f4ae7ec --- /dev/null +++ b/imperative/python/test/unit/test_raw_tensor.py @@ -0,0 +1,30 @@ +# -*- 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.core.tensor.raw_tensor import as_raw_tensor + + +def test_as_raw_tensor(): + x = np.arange(6, dtype="float32").reshape(2, 3) + xx = as_raw_tensor(x, device="xpux") + yy = F.add(xx, 1).numpy() + assert xx.dtype == np.float32 + assert xx.device == "xpux" + np.testing.assert_almost_equal(yy, x + 1) + + +def test_as_raw_tensor_from_int64(): + x = np.arange(6, dtype="int64").reshape(2, 3) + xx = as_raw_tensor(x, dtype="float32", device="xpux") + yy = F.add(xx, 1).numpy() + assert xx.dtype == np.float32 + assert xx.device == "xpux" + np.testing.assert_almost_equal(yy, x.astype("float32") + 1) diff --git a/imperative/python/test/unit/test_serialization.py b/imperative/python/test/unit/test_serialization.py new file mode 100644 index 00000000..5fa19bd4 --- /dev/null +++ b/imperative/python/test/unit/test_serialization.py @@ -0,0 +1,69 @@ +# -*- 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 + +import megengine as mge +from megengine import Buffer, Parameter, tensor + + +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 + np.testing.assert_equal(a.numpy(), b.numpy()) + + 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) + np.testing.assert_equal(a.numpy(), b.numpy()) + + 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) + np.testing.assert_equal(a.numpy(), b.numpy()) + + 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) + np.testing.assert_equal(a.numpy(), b.numpy()) + + with TemporaryFile() as f: + a = Buffer(np.random.random(size=(2, 233)).astype(np.float32)) + mge.save(a, f) + f.seek(0) + b = mge.load(f, map_location="cpux") + assert isinstance(b, Buffer) + assert "cpu" in str(b.device) + np.testing.assert_equal(a.numpy(), b.numpy()) + + with TemporaryFile() as f: + if mge.is_cuda_available(): + device_org = mge.get_default_device() + a = Buffer(np.random.random(size=(2, 233)).astype(np.float32)) + mge.save(a, f) + f.seek(0) + mge.set_default_device("cpux") + b = mge.load(f, map_location={"gpu0": "cpu0"}) + assert isinstance(b, Buffer) + assert "cpu0" in str(b.device) + np.testing.assert_equal(a.numpy(), b.numpy()) + mge.set_default_device(device_org) diff --git a/imperative/python/test/unit/test_tensor_wrapper.py b/imperative/python/test/unit/test_tensor_wrapper.py new file mode 100644 index 00000000..92dc1c25 --- /dev/null +++ b/imperative/python/test/unit/test_tensor_wrapper.py @@ -0,0 +1,52 @@ +# -*- 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.core.tensor.tensor_wrapper import TensorWrapper + + +def test_basic(): + x_np = np.random.rand(10).astype("float32") + x = TensorWrapper(x_np) + y = x * x + y_np = y.numpy() + np.testing.assert_almost_equal(y_np, x_np * x_np) + + +def test_literal_arith(): + x_np = np.random.rand(10).astype("float32") + x = TensorWrapper(x_np) + y = x * 2 + y_np = y.numpy() + np.testing.assert_almost_equal(y_np, x_np * 2) + + +def test_matmul(): + A = TensorWrapper(np.random.rand(5, 7).astype("float32")) + B = TensorWrapper(np.random.rand(7, 10).astype("float32")) + C = A @ B + np.testing.assert_almost_equal(C.numpy(), A.numpy() @ B.numpy(), decimal=6) + + +def test_reduce(): + for m in ["sum", "prod", "min", "max", "mean"]: + x_np = np.random.rand(10).astype("float32") + x = TensorWrapper(x_np) + y = getattr(x, m)(-1) + np.testing.assert_almost_equal(y.numpy(), getattr(x_np, m)(-1), decimal=6) + + +def test_set_subtensor(): + x = TensorWrapper([1, 2, 3]) + x[:] = [1, 1, 1] + np.testing.assert_almost_equal(x.numpy(), [1, 1, 1], decimal=6) + x[[0, 2]] = [3, 2] + np.testing.assert_almost_equal(x.numpy(), [3, 1, 2], decimal=6) + x[1:3] = [4, 5] + np.testing.assert_almost_equal(x.numpy(), [3, 4, 5], decimal=6) diff --git a/imperative/python/test/unit/test_util.py b/imperative/python/test/unit/test_util.py new file mode 100644 index 00000000..414dbd21 --- /dev/null +++ b/imperative/python/test/unit/test_util.py @@ -0,0 +1,15 @@ +# -*- 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.core._imperative_rt import Logger + + +def test_logger(): + orig_level = Logger().set_log_level(Logger.LogLevel.Info) + assert Logger().set_log_level(Logger.LogLevel.Info) == Logger.LogLevel.Info + Logger().set_log_level(orig_level) diff --git a/imperative/python/tools/gen_op_defs.py b/imperative/python/tools/gen_op_defs.py new file mode 100755 index 00000000..e892a0f5 --- /dev/null +++ b/imperative/python/tools/gen_op_defs.py @@ -0,0 +1,504 @@ +# -*- 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 textwrap +import os +import hashlib +import struct + +class member_defs: + """contain classes to define members of an opr param""" + + Dtype = collections.namedtuple('Dtype', ['cname', 'pycvt', 'pyfmt', + 'cppjson', 'cname_attr']) + Dtype.__new__.__defaults__ = ('', ) + uint32 = Dtype('uint32_t', 'int', 'I', 'NumberInt') + uint64 = Dtype('uint64_t', 'int', 'Q', 'NumberInt', + 'alignas(sizeof(uint64_t)) ') + int32 = Dtype('int32_t', 'int', 'i', 'NumberInt') + float32 = Dtype('float', 'float', 'f', 'Number') + float64 = Dtype('double', 'float', 'd', 'Number') + dtype = Dtype('DTypeEnum', '_as_dtype_num', 'I', 'Number') + bool = Dtype('bool', 'bool', '?', 'Bool') + + class Base: + pass + + + class Doc: + """wrap an identifier to associate document + + note: if the doc starts with a linebreak, it would not be reforamtted. + """ + __slots__ = ['id', 'doc'] + + def __init__(self, id_, doc): + assert isinstance(id_, str) and isinstance(doc, str), (id_, doc) + self.id = id_ + self.doc = doc + + @property + def no_reformat(self): + """whether reformat is disallowed for this doc string""" + return self.doc.startswith('\n') + + @property + def raw_lines(self): + """the doc lines when ``no_format`` is true""" + ret = self.doc.split('\n') + assert not ret[0] + return ret[1:] + + @classmethod + def make(cls, v): + """make doc object from str or doc""" + if isinstance(v, cls): + return v + assert isinstance(v, str) + return cls(v, '') + + def __str__(self): + return self.id + + def __eq__(self, rhs): + if isinstance(rhs, str): + return self.id == rhs + return (isinstance(rhs, Doc) and + (self.id, self.doc) == (rhs.id, rhs.doc)) + + + class Enum(Base): + """define an enum; the result would contain both an enum class def and its + corresponding data field + + :param default: index of default member value + + :attr name_field: name of the data field of this enum in the param + struct + :attr member_alias: list of (member, alias) pairs + """ + __slots__ = ['name', 'name_field', 'members', 'default', + 'member_alias'] + + all_enums = {} + """(param_name, name) => enum""" + + def __init__(self, param_name, name, name_field, members, default, + member_alias): + name = member_defs.Doc.make(name) + assert name.id[0].isupper() + members = tuple(map(member_defs.Doc.make, members)) + if isinstance(default, str): + if default not in name_field: + raise ValueError( + "Default value '{}' does not exist.".format(default)) + default = name_field.index(default) + assert isinstance(default, int) + self.name = name + self.name_field = self.get_name_field(name.id, name_field) + self.members = members + self.default = default + + self.all_enums[(param_name, name.id)] = self + + assert isinstance(member_alias, list) + self.member_alias = member_alias + + @classmethod + def get_name_field(cls, name, name_field): + if name_field is None: + name_field = name[0].lower() + name[1:] + assert isinstance(name_field, str) + return name_field + + class Field(Base): + """define a normal data field""" + __slots__ = ['name', 'dtype', 'default'] + + def __init__(self, name, dtype, default): + assert isinstance(dtype, member_defs.Dtype) + self.name = member_defs.Doc.make(name) + self.dtype = dtype + self.default = default + + class Const(Base): + """define a const data field""" + __slots__ = ['name', 'dtype', 'default'] + + def __init__(self, name, dtype, default): + assert isinstance(dtype, member_defs.Dtype) + self.name = member_defs.Doc.make(name) + self.dtype = dtype + self.default = default + + class EnumAlias(Base): + """alias of enum type from another param""" + __slots__ = ['name', 'name_field', 'src_class', 'src_name', 'default'] + + def __init__(self, name, name_field, src_class, src_name, default): + self.name = name + self.name_field = member_defs.Enum.get_name_field(name, name_field) + self.src_class = src_class + if src_name is None: + src_name = name + self.src_name = src_name + self.default = default + + @property + def src_enum(self): + """source Enum class""" + return member_defs.Enum.all_enums[(self.src_class, self.src_name)] + + def get_default(self): + """get default index; fallback to src index if default is not + set""" + if self.default is None: + return self.src_enum.default + return self.default + + +class ParamDef: + """""" + __all_tags = set() + all_param_defs = [] + + __slots__ = ['name', 'members', 'tag', 'is_legacy'] + + def __init__(self, name, doc='', *, version=0, is_legacy=False): + self.members = [] + self.all_param_defs.append(self) + h = hashlib.sha256(name.encode('utf-8')) + if version: + h.update(struct.pack(' 0: + self._indent() + + +class PyWriter(IndentWriterBase): + + _static_members = None + _non_static_members = None + _enums = None + _enum_map = None + + def __call__(self, fout, defs): + super().__call__(fout) + self._enum_map = {} + self._write('// %s', self._get_header()) + self._write('#include "megbrain/imperative/opdef/all.h"') + self._write('') + self._write('using namespace mgb::imperative;') + self._write('') + self._process(defs) + + def _on_param_begin(self, p): + self._enums = [] + self._non_static_members = [] + self._static_members = [] + + def _reg_enum_single(self, cur_def, e): + alias = None + if isinstance(e, member_defs.Enum): + src = e + else: + assert isinstance(e, member_defs.EnumAlias) + src = e.src_enum + alias = e + + src_py_name = self._enum_map.get(src, None) + if src_py_name is not None: + py_name = '{}{}Enum'.format(cur_def, src.name if alias is None else alias.name) + self._write('m.attr("{}") = m.attr("{}");\n'.format(py_name, src_py_name)) + return + + if alias is None: + enum_name = str(src.name) + else: + enum_name = str(alias.name) + c_name = 'opdef::{}::{}'.format(cur_def, enum_name) + py_name = '{}{}Enum'.format(cur_def, enum_name) + self._write('py::enum_<{}>(m, "{}")'.format(c_name, py_name), indent=1) + for i in src.members: + self._write('.value("{0}", {1}::{0})'.format(i, c_name)) + self._write(';\n', indent=-1) + self._enum_map[src] = py_name + + def _on_param_end(self, p): + cur_def = '{}Def'.format(p.name) + for e in self._enums: + self._reg_enum_single(cur_def, e) + self._write('py::class_(m, "{0}")'.format(cur_def), indent=1) + # TODO: use ctor with given default value + self._write('.def(py::init<>())') + for i in self._static_members: + assert isinstance(i, member_defs.Const) + self._write('.def_property_readonly_static("{0}", []() {{ return opdef::{1}::{0}; }})'.format(i.name, cur_def)) + for i in self._non_static_members: + fname = None + if isinstance(i, member_defs.Field): + fname = i.name + else: + assert isinstance(i, (member_defs.Enum, member_defs.EnumAlias)) + fname = i.name_field + self._write('.def_readwrite("{0}", &opdef::{1}::{0})'.format(fname, cur_def)) + self._write(';\n', indent=-1) + + + def _on_member_enum(self, e,): + self._enums.append(e) + self._non_static_members.append(e) + + def _on_member_enum_alias(self, e): + self._enums.append(e) + self._non_static_members.append(e) + + def _on_member_field(self, f): + self._non_static_members.append(f) + + def _on_const_field(self, f): + self._static_members.append(f) + + +class CPPWriter(IndentWriterBase): + _param_namespace = 'opdef' + + _ctor_args = None + """list of (text in func param, var name); func param name must be var name + appended by an underscore""" + _non_static_members = None + + def __call__(self, fout, defs): + super().__call__(fout) + self._write('// %s', self._get_header()) + self._write('#pragma once') + self._write('#include "megdnn.h"') + # which defined in megbrain/tools/param_defs/mgb_opr_param_defs.py + self._write('#include "megbrain/opr/param_defs.h"') + self._write('#include ') + self._write('namespace mgb {') + self._write('namespace imperative {') + self._write('namespace %s {', self._param_namespace) + self._write('namespace {') + self._write('#include "megdnn/dtype.h"') + self._write('using DTypeEnum = megdnn::DTypeEnum;') + self._write('} // anonymous namespace') + self._process(defs) + self._write('} // namespace %s', self._param_namespace) + self._write('} // namespace imperative') + self._write('} // namespace mgb') + self._write('// vim: syntax=cpp.doxygen') + + def _on_param_begin(self, p): + self._write('struct %sDef {', p.name, indent=1) + self._ctor_args = [] + self._non_static_members = [] + + def _add_ctor_args(self, typename, default, varname): + self._ctor_args.append(( + '{} {}_={}'.format(typename, varname, default), + varname)) + + def _on_param_end(self, p): + ''' + MegDNN param structures are not packed and we need to initialize the structure + paddings to zero or it would break MegBrain hash system. We do memset(0) in default + ctor and use a trick, wrapping non-static members in a anonymous union which would + copy the object representation in its default copy/move ctor, for copy/move ctor. + > The implicitly-defined copy/move constructor for a non-union class X performs + > a memberwise copy/move of its bases and members. [class.copy.ctor 14] + > The implicitly-defined copy/move constructor for a union X copies the object + > representation (6.9) of X. [class.copy.ctor 15] + ''' + if self._non_static_members: + self._write('union { struct {') + for i in self._non_static_members: + if isinstance(i, member_defs.Field): + self._write('%s%s %s;', i.dtype.cname_attr, i.dtype.cname, i.name) + else: + assert isinstance(i, (member_defs.Enum, member_defs.EnumAlias)) + self._write('%s %s;', i.name, i.name_field) + self._write('}; };') + param_list = [] + if self._ctor_args: + pdefs, varnames = zip(*self._ctor_args) + self._write('%sDef(%s) {', p.name, ', '.join(pdefs), indent=1) + self._write('memset(this, 0, sizeof(*this));') + for var in varnames: + self._write('this->%s = %s_;', var, var) + param_list.append(str(var)) + self._write('}', indent=-1) + self._write('megdnn::param::%s param() {', self._cur_class, indent=1) + self._write('return {%s};', ','.join(param_list)) + self._write('}', indent=-1) + self._write('};\n', indent=-1) + + + def __on_member_enum(self, e, default_value): + self._write('using %s = megdnn::param::%s::%s;', e.name, self._cur_class, e.name) + self._non_static_members.append(e) + self._add_ctor_args(e.name, default_value, e.name_field) + + def _on_member_enum(self, e,): + self.__on_member_enum(e, '{}::{}'.format(e.name, e.members[e.default])) + + def _on_member_enum_alias(self, e): + self.__on_member_enum(e, '{}::{}'.format(e.name, e.src_enum.members[e.get_default()])) + + def _on_member_field(self, f): + self._non_static_members.append(f) + self._add_ctor_args(f.dtype.cname, f.default, f.name) + + def _on_const_field(self, f): + if 'int' in f.dtype.cname: + self._write('static constexpr %s%s %s = %s;', f.dtype.cname_attr, f.dtype.cname, f.name, f.default) + else: + self._write('static const %s%s %s = %s;', f.dtype.cname_attr, f.dtype.cname, f.name, f.default) + +def main(): + parser = argparse.ArgumentParser( + 'generate opr param defs from description file') + parser.add_argument('-t', '--type', choices=['c++', 'py'], default='c++', + help='output type') + parser.add_argument('input') + parser.add_argument('output') + args = parser.parse_args() + + with open(args.input) as fin: + inputs = fin.read() + exec(inputs, {'pdef': ParamDef, 'Doc': member_defs.Doc}) + input_hash = hashlib.sha256() + input_hash.update(inputs.encode(encoding='UTF-8')) + input_hash = input_hash.hexdigest() + + if args.type == 'py': + writer = PyWriter() + else: + writer = CPPWriter() + + with open(args.output, 'w') as fout: + writer.set_input_hash(input_hash)(fout, ParamDef.all_param_defs) + +if __name__ == '__main__': + main() diff --git a/imperative/python/tools/gen_ops.py b/imperative/python/tools/gen_ops.py new file mode 100755 index 00000000..059efc6c --- /dev/null +++ b/imperative/python/tools/gen_ops.py @@ -0,0 +1,276 @@ +# -*- 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 StringIO +import re +import argparse +import subprocess +import os +import textwrap +import inspect + + +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() + + +def caller_lineno(level=1): + f = inspect.stack()[level+1] + return '%s:%d' % (f.filename, f.lineno) + + +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 Context: + fout = None + + def __init__(self): + self.fout = StringIO() + self.indent = 0 + self.generated = [] + self.skipped = [] + + def write(self, text, *fmt, indent=0): + text = textwrap.dedent(text) + text = textwrap.indent(text, ' '*4*(self.indent + indent)) + text = text % fmt + if not text.endswith('\n'): + text += '\n' + self.fout.write(text) + + def _gen_signature(self, params, *, have_config=True, + has_out_dtype=False): + sig = ['self', '*'] + + for i, _ in params: + sig.append('{}=None'.format(i)) + + if have_config: + sig.extend(['name=None', 'comp_node=None', 'config=None']) + if has_out_dtype: + sig.append('dtype=None') + + if params: + sig.append('**kwargs') + + if sig[-1] == '*': + sig.pop() + return ', '.join(sig) + + def _write_canonize_inputs(self, inputs, convert_inputs, + convert_inputs_args=None, + has_out_dtype=False): + self._write_gen_config(has_out_dtype) + inputs = list(map(str, inputs)) + if convert_inputs_args is None: + if inputs[0][0] == '*': + arg = inputs[0][1:] + else: + arg = '[{}]'.format(', '.join(inputs)) + else: + arg = convert_inputs_args + self.write('inputs = helper.%s(%s, config=config)', + convert_inputs, arg) + + def _write_gen_config(self, has_out_dtype=False): + self.write('''\ + config = config or Config() + if name: + config.name = name + if comp_node: + config.comp_node = comp_node + ''') + if has_out_dtype: + self.write('''\ + if dtype: + config.dtype = dtype + ''') + self.write('self.config = config') + + def _write_make_params(self, params): + for pname, ptype in params: + self.write('self.%s = helper.make_param(%s, param_defs.%s, kwargs)', + pname, pname, ptype) + self.write('assert not kwargs, "extra kwargs: {}".format(kwargs)') + + 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:`.Tensor`' + 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.') + + self.write('"""') + + def _write_return(self, name, outputs): + self.write('opdef = helper.PodOpVisitor("%s", config, params)', name) + self.write('outputs = helper.create_op(opdef, inputs)') + if outputs: + self.write('outputs = [outputs[i] for i in %s]', + list(map(int, outputs))) + self.write('return helper.convert_outputs(outputs)') + + def decl_opr(self, name, *, inputs, params, desc=None, pyname=None, + canonize_input_vars=None, + canonize_input_vars_args=None, body=None, + 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 body: + self.skipped.append(name) + return + + body = body or [] + if isinstance(params, str): + params = [('param', params)] + assert params + + self.write('# %s', caller_lineno()) + self.write('class %s(PodOpVisitor):', name) + self.indent += 1 + + param_names, _ = zip(*params) + self.write('param_names = (%s,)', ', '.join(map('"{}"'.format, param_names))) + self.write('name = "%s"', '{}V{}'.format(name, version) if version else name) + self.write('\n') + + self.write('def __init__(%s):', + self._gen_signature(params, + has_out_dtype=has_out_dtype)) + self.indent += 1 + + self._write_gen_config(has_out_dtype=has_out_dtype) + self.write('\n') + + self._write_make_params(params) + + self.write('\n') + self.indent -= 2 + + self.generated.append(name) + + def decl_raw_opr(self, name, *, inputs, inputs_cvt=[], body=None, + desc=None, local_defs=[], have_config=True): + self.skipped.append(name) + + def get_str(self): + return self.fout.getvalue() + + def all_list(self): + buf = StringIO() + print( + '[', + *(' "%s",' % i for i in self.generated), + ']', + sep='\n', + file=buf + ) + return buf.getvalue() + + +def main(): + parser = argparse.ArgumentParser( + description='generate operator function def code from decl file') + parser.add_argument('inputs', nargs='+') + parser.add_argument('--output', '-o') + args = parser.parse_args() + + gen = Context() + 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 ops from {}'.format(i)) + with open(i) as fin: + exec(compile(fin.read(), i, 'exec'), exec_globals) + + try: + git_commit = subprocess.check_output( + ['git', 'rev-parse', 'HEAD'], universal_newlines=True, + cwd=os.path.dirname(os.path.realpath(__file__))).strip() + except: + git_commit = 'NOT_A_GIT_REPO' + + def relpath(*args): + d = os.path.dirname(__file__) + return os.path.join(d, *args) + + with open(relpath('ops.tpl.py')) as fin: + with open(args.output, 'w') as fout: + fout.write(fin.read() + .replace('{%all%}', gen.all_list()) + .replace('{%body%}', gen.get_str()) + .replace('{%git_commit%}', git_commit)) + + print('Skipped:') + print(*gen.skipped, sep='\n') + +if __name__ == '__main__': + main() diff --git a/imperative/python/tools/ops.tpl.py b/imperative/python/tools/ops.tpl.py new file mode 100644 index 00000000..f91004b1 --- /dev/null +++ b/imperative/python/tools/ops.tpl.py @@ -0,0 +1,40 @@ +# -*- 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. +"""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')) +""" + +__git_commit__ = "{%git_commit%}" + +import collections + +from . import helper +from .helper import PodOpVisitor +from . import param_defs +from ..._imperative_rt import OperatorNodeConfig as Config + +__all__ = {%all%} + +{%body%} diff --git a/imperative/src/impl/blob_manager_impl.cpp b/imperative/src/impl/blob_manager_impl.cpp new file mode 100644 index 00000000..3fa3c531 --- /dev/null +++ b/imperative/src/impl/blob_manager_impl.cpp @@ -0,0 +1,162 @@ +/** + * \file src/core/impl/imperative/physical_tensor.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./blob_manager_impl.h" +#include "megbrain/utils/arith_helper.h" +#include + +namespace mgb { +namespace imperative { + +BlobManagerImpl::BlobData::BlobData(Blob* in_blob){ + blob = in_blob; + DeviceTensorStorage d_storage; + d_storage.reset(blob->m_comp_node, blob->m_size, blob->m_storage); + + h_storage = HostTensorStorage(blob->m_comp_node); + + h_storage.ensure_size(blob->m_size); + + h_storage.copy_from(const_cast(d_storage), blob->m_size); +} + +void BlobManagerImpl::register_blob(Blob* blob) { + // add blob into the comp2blobs map + MGB_LOCK_GUARD(m_mtx); + mgb_assert(m_comp2blobs_map[blob->m_comp_node].insert(blob)); +} + +void BlobManagerImpl::unregister_blob(Blob* blob) { + // erase blob into the comp2blobs map + MGB_LOCK_GUARD(m_mtx); + mgb_assert(1 == m_comp2blobs_map[blob->m_comp_node].erase(blob)); +} + +void BlobManagerImpl::alloc_with_defrag(Blob* blob, size_t size) { + if (!m_enable) { + alloc_direct(blob, size); + } else { + // // debug + // defrag(blob->m_comp_node); + // alloc_direct(blob, storage, size); + + // try alloc + MGB_TRY { alloc_direct(blob, size); } + // if fail, try defrag, alloc again + MGB_CATCH(MemAllocError&, { + mgb_log_warn("memory allocation failed for blob; try defragmenting"); + defrag(blob->m_comp_node); + alloc_direct(blob, size); + }); + } +} + + +void BlobManagerImpl::alloc_direct(Blob* blob, size_t size) { + DeviceTensorStorage storage(blob->m_comp_node); + mgb_assert(blob->m_comp_node.valid()); + storage.ensure_size(size); + blob->m_storage = storage.raw_storage(); +} + +void BlobManagerImpl::defrag(const CompNode& cn) { + BlobSetWithMux* blobs_set_ptr; + { + MGB_LOCK_GUARD(m_mtx); + blobs_set_ptr = &m_comp2blobs_map[cn]; + } + MGB_LOCK_GUARD(blobs_set_ptr->mtx); + std::vector blob_data_arrary; + std::set storage_set; + + auto alignment = cn.get_mem_addr_alignment(); + size_t tot_sz = 0; + + // copy to HostTensorStorage, and release + for (auto i : blobs_set_ptr->blobs_set) { + // skip if blob do not have m_storage + if (!i->m_storage) continue; + + // skip if ues_count() > 1 + if (i->m_storage.use_count() > 1) continue; + + // two blobs can't share same storage + mgb_assert(storage_set.insert(i->m_storage).second); + + tot_sz += get_aligned_power2(i -> m_size, alignment); + BlobData blob_data(i); + blob_data_arrary.push_back(blob_data); + i -> m_storage.reset(); + } + // clear all, make sure m_storage will be release + storage_set.clear(); + + // skip if no blob to defrag + if (!blob_data_arrary.size()) return; + + // wait all other comp nodes to avoid moved var being read; note that + // ExecEnv has been paused, so no new task would not be dispatched + CompNode::sync_all(); + CompNode::try_coalesce_all_free_memory(); + + // try free all + MGB_TRY{cn.free_device(cn.alloc_device(tot_sz));} + MGB_CATCH(MemAllocError&, {}) + + // allocate for each storage + for (auto i : blob_data_arrary) { + DeviceTensorStorage d_storage = DeviceTensorStorage(cn); + d_storage.ensure_size(i.blob -> m_size); + d_storage.copy_from(i.h_storage, i.blob -> m_size); + i.blob -> m_storage = d_storage.raw_storage(); + } + + // wait copy finish before destructing host values + cn.sync(); +} + +void BlobManagerImpl::set_enable(bool flag) { + m_enable = flag; +} + +struct BlobManagerStub : BlobManager { + void alloc_with_defrag(Blob* blob, size_t size) { + mgb_assert(0, "prohibited after global variable destruction"); + }; + void register_blob(Blob* blob) { + mgb_assert(0, "prohibited after global variable destruction"); + }; + void unregister_blob(Blob* blob) {}; + void set_enable(bool flag) { + mgb_assert(0, "prohibited after global variable destruction"); + }; + void defrag(const CompNode& cn) { + mgb_assert(0, "prohibited after global variable destruction"); + }; +}; + +BlobManager* BlobManager::inst() { + static std::aligned_union_t<0, BlobManagerImpl, BlobManagerStub> storage; + + struct Keeper { + Keeper() { + new(&storage) BlobManagerImpl(); + } + ~Keeper() { + reinterpret_cast(&storage)->~BlobManager(); + new(&storage) BlobManagerStub(); + } + }; + static Keeper _; + + return reinterpret_cast(&storage); +} + +} // namespace imperative +} // namespace mgb diff --git a/imperative/src/impl/blob_manager_impl.h b/imperative/src/impl/blob_manager_impl.h new file mode 100644 index 00000000..32ee2879 --- /dev/null +++ b/imperative/src/impl/blob_manager_impl.h @@ -0,0 +1,59 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/blob_manager.h" + +namespace mgb { +namespace imperative { + +class BlobManagerImpl final: public BlobManager { + + struct BlobSetWithMux { + std::mutex mtx; + ThinHashSet blobs_set; + bool insert(Blob* blob) { + MGB_LOCK_GUARD(mtx); + return blobs_set.insert(blob).second; + } + size_t erase(Blob* blob) { + MGB_LOCK_GUARD(mtx); + return blobs_set.erase(blob); + } + }; + + struct BlobData { + Blob* blob; + HostTensorStorage h_storage; + BlobData(Blob* in_blob); + }; + + std::mutex m_mtx; + CompNode::UnorderedMap m_comp2blobs_map; + bool m_enable; + + void defrag(const CompNode& cn) override; + + void alloc_direct(Blob* blob, size_t size); + +public: + static BlobManager* inst(); + + void alloc_with_defrag(Blob* blob, size_t size) override; + + void register_blob(Blob* blob) override; + + void unregister_blob(Blob* blob) override; + + void set_enable(bool flag) override; +}; + +} // namespace imperative +} // namespace mgb diff --git a/imperative/src/impl/dnn_op_helper.h b/imperative/src/impl/dnn_op_helper.h new file mode 100644 index 00000000..17017854 --- /dev/null +++ b/imperative/src/impl/dnn_op_helper.h @@ -0,0 +1,54 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/comp_node_env.h" +#include "megbrain/comp_node.h" + +using namespace megdnn; + +namespace mgb { +namespace imperative { + +/*! + * \brief A struct for safely calling DNN oprs + * In some cases, op may be released before the complete of the execution + * This destructor will prevent this + */ +template +struct DnnOprCaller { + CompNode cn; + DeviceTensorND dev_tensor; + Workspace workspace; + std::unique_ptr op; + + DnnOprCaller(CompNode cn): cn(cn) { + auto&& handle = MegDNNHandle::get( + CompNodeEnv::from_comp_node(cn)).handle(); + op = handle->create_operator(); + } + + megdnn::Workspace create_workspace(TensorLayout layout) { + dev_tensor = Tensor::make(layout, cn)->dev_tensor(); + workspace = megdnn::Workspace(dev_tensor.raw_ptr(), + dev_tensor.storage().size()); + return workspace; + } + + ~DnnOprCaller() { + using DT = CompNode::DeviceType; + if (cn.device_type() == DT::CPU && cn != CompNode::default_cpu()) { + CompNodeEnv::from_comp_node(cn).cpu_env().dispatch( + [p = op.release()] { delete p; } + ); + } + } +}; + +} // namespace imperative +} // namespace mgb \ No newline at end of file diff --git a/imperative/src/impl/interpreter_impl.cpp b/imperative/src/impl/interpreter_impl.cpp new file mode 100644 index 00000000..297976a8 --- /dev/null +++ b/imperative/src/impl/interpreter_impl.cpp @@ -0,0 +1,213 @@ +#include "./interpreter_impl.h" + + +using namespace mgb; +using namespace imperative; +using namespace interpreter; +using namespace interpreter::intl; + + +std::unique_ptr InterpreterImpl::create_channel() { + return std::make_unique(); +} + +Interpreter& Interpreter::inst() { + static InterpreterImpl inst_; + return inst_; +} + +void* ChannelImpl::put(const HostTensorND& value) { + auto info = alloc(); + info->desc.layout = value.layout(); + info->desc.comp_node = value.comp_node(); + info->desc.value = value.proxy_to_default_cpu(); + m_valid_handle.insert(info); + m_worker.add_task(Put{info, value}); + return info; +} + +void ChannelImpl::del(void* handle) { + mgb_assert(m_valid_handle.erase(handle), "invalid handle: %p", handle); + m_worker.add_task(Del{reinterpret_cast(handle)}); +} + +SmallVector ChannelImpl::apply_op( + std::shared_ptr op, + const SmallVector& inputs) { + SmallVector input_descs; + input_descs.reserve(inputs.size()); + for (auto h : inputs) { + auto info = reinterpret_cast(h); + input_descs.push_back(info->desc); + } + auto output_descs = OpDef::infer_output_attrs_fallible(*op, input_descs); + ApplyOp cmd{std::move(op)}; + cmd.inputs.reserve(inputs.size()); + for (auto i : inputs) { + cmd.inputs.push_back(reinterpret_cast(i)); + } + cmd.outputs.reserve(output_descs.size()); + SmallVector outputs; + for (auto&& desc : output_descs) { + auto info = alloc(); + info->desc = desc; + m_valid_handle.insert(info); + cmd.outputs.push_back(info); + outputs.push_back(info); + } + m_worker.add_task(std::move(cmd)); + return outputs; +} + +HostTensorND ChannelImpl::get_value(void* handle) { + mgb_assert(m_valid_handle.find(handle) != m_valid_handle.end(), + "invalid handle: %p", handle); + auto info = reinterpret_cast(handle); + std::unique_lock lock(m_mutex); + mgb_assert(!m_waitee); + if (!info->value_fetched) { + m_waitee = info; + m_worker.add_task(GetValue{info}); + m_cv.wait(lock, [&]() { + check_worker_exc_unsafe(); + return info->value_fetched; + }); + m_waitee = nullptr; + } + mgb_assert(info->ptr->value_fetched()); + return info->ptr->get_value(); +} + +TensorShape ChannelImpl::get_shape(void* handle) { + mgb_assert(m_valid_handle.find(handle) != m_valid_handle.end(), + "invalid handle: %p", handle); + auto info = reinterpret_cast(handle); + if (info->desc.layout.ndim != 0) { + return info->desc.layout; + } + std::unique_lock lock(m_mutex); + mgb_assert(!m_waitee); + m_waitee = info; + m_cv.wait(lock, [&]() { + check_worker_exc_unsafe(); + return bool(info->ptr); + }); + m_waitee = nullptr; + TensorShape ret = info->ptr->layout(); + mgb_assert(ret.ndim != 0); + return ret; +} + +DType ChannelImpl::get_dtype(void* handle) { + mgb_assert(m_valid_handle.find(handle) != m_valid_handle.end(), + "invalid handle: %p", handle); + auto info = reinterpret_cast(handle); + auto ret = info->desc.layout.dtype; + mgb_assert(ret.valid()); + return ret; +} + +CompNode ChannelImpl::get_device(void* handle) { + mgb_assert(m_valid_handle.find(handle) != m_valid_handle.end(), + "invalid handle: %p", handle); + auto info = reinterpret_cast(handle); + auto ret = info->desc.comp_node; + mgb_assert(ret.valid()); + return ret; +} + +DeviceTensorND ChannelImpl::get_dev_tensor(void* handle) { + mgb_assert(m_valid_handle.find(handle) != m_valid_handle.end(), + "invalid handle: %p", handle); + auto info = reinterpret_cast(handle); + std::unique_lock lock(m_mutex); + mgb_assert(!m_waitee); + m_waitee = info; + m_cv.wait(lock, [&]() { + check_worker_exc_unsafe(); + return bool(info->ptr); + }); + m_waitee = nullptr; + return info->ptr->dev_tensor(); +} + +void ChannelImpl::sync() { + m_worker.wait_all_task_finish(); + MGB_LOCK_GUARD(m_mutex); + check_worker_exc_unsafe(); +} + +void ChannelImpl::close() { + sync(); +} + +void ChannelImpl::config_async_level(int level) { + mgb_assert(0); +} + +TensorInfo* ChannelImpl::alloc() { + MGB_LOCK_GUARD(m_mutex); + return m_pool.alloc(); +} + +void ChannelImpl::free(TensorInfo* ptr) { + MGB_LOCK_GUARD(m_mutex); + m_pool.free(ptr); +} + +ChannelImpl::~ChannelImpl() {} + +void ChannelImpl::produce_tensor(TensorInfo* dest, TensorPtr ptr) { + MGB_LOCK_GUARD(m_mutex); + dest->value_fetched = ptr->value_fetched(); + dest->ptr = std::move(ptr); + if (m_waitee == dest) { + m_cv.notify_all(); + } +} + +void ChannelImpl::process_one_task(Command& cmd) { + std::visit([this](auto& cmd) { + using T = std::remove_reference_t; + try { + if constexpr (std::is_same_v) { + produce_tensor(cmd.dest, Tensor::make(cmd.value)); + } else if constexpr (std::is_same_v) { + SmallVector tensor_inputs; + tensor_inputs.reserve(cmd.inputs.size()); + for (auto i : cmd.inputs) { + tensor_inputs.push_back(i->ptr); + } + auto tensor_outputs = OpDef::apply_on_physical_tensor(*cmd.op, tensor_inputs); + mgb_assert(tensor_outputs.size() == cmd.outputs.size()); + for (size_t i = 0; i < tensor_outputs.size(); ++i) { + produce_tensor(cmd.outputs[i], std::move(tensor_outputs[i])); + } + } else if constexpr (std::is_same_v) { + free(cmd.dest); + } else if constexpr (std::is_same_v) { + cmd.dest->ptr->fetch_value(); + MGB_LOCK_GUARD(m_mutex); + cmd.dest->value_fetched = true; + if (m_waitee == cmd.dest) { + m_cv.notify_all(); + } + } else { + static_assert(!std::is_same_v); + } + } catch (...) { + MGB_LOCK_GUARD(m_mutex); + m_worker_exc = std::current_exception(); + m_cv.notify_all(); + } + }, cmd); +} + + +void ChannelImpl::check_worker_exc_unsafe() { + if (m_worker_exc) { + std::exception_ptr exc; + std::swap(exc, m_worker_exc); + std::rethrow_exception(exc); + } +} diff --git a/imperative/src/impl/interpreter_impl.h b/imperative/src/impl/interpreter_impl.h new file mode 100644 index 00000000..fae21995 --- /dev/null +++ b/imperative/src/impl/interpreter_impl.h @@ -0,0 +1,95 @@ +#include +#include + +#include "megbrain/utils/mempool.h" +#include "megbrain/imperative/interpreter.h" + + +namespace mgb::imperative::interpreter::intl { + +using Handle = Interpreter::Handle; + +struct InterpreterImpl : Interpreter { + std::unique_ptr create_channel() override; +}; + +struct TensorInfo { + TensorPtr ptr; + LogicalTensorDesc desc; + bool value_fetched = false; +}; + +struct Put { + TensorInfo* dest; + HostTensorND value; +}; +struct ApplyOp { + std::shared_ptr op; + SmallVector inputs; + SmallVector outputs; +}; +struct Del { + TensorInfo* dest; +}; +struct GetValue { + TensorInfo* dest; +}; +using Command = std::variant; + +struct ChannelImpl : Interpreter::Channel { + ChannelImpl() : m_worker(this) {} + ~ChannelImpl() override; + + Handle put(const HostTensorND& value) override; + + void del(Handle) override; + + SmallVector apply_op( + std::shared_ptr op, + const SmallVector& inputs) override; + + HostTensorND get_value(Handle) override; + TensorShape get_shape(Handle) override; + DType get_dtype(Handle) override; + CompNode get_device(Handle) override; + + DeviceTensorND get_dev_tensor(Handle) override; + + void sync() override; + void close() override; + + void config_async_level(int level) override; + +private: + TensorInfo* alloc(); + void free(TensorInfo*); + + void process_one_task(Command&); + + void check_worker_exc_unsafe(); + + void produce_tensor(TensorInfo* dest, TensorPtr ptr); + + std::mutex m_mutex; + std::condition_variable m_cv; + MemPool m_pool; + std::unordered_set m_valid_handle; + TensorInfo* m_waitee = nullptr; + std::exception_ptr m_worker_exc; + + struct WorkQueue : AsyncQueueSC { + WorkQueue(ChannelImpl* owner) : m_owner(owner) {} + void process_one_task(Command& cmd) { + m_owner->process_one_task(cmd); + } + private: + ChannelImpl* m_owner; + } m_worker; + + int m_async_level = 2; +}; + +} // namespace mgb::imperative::interpreter::intl diff --git a/imperative/src/impl/op_def.cpp b/imperative/src/impl/op_def.cpp new file mode 100644 index 00000000..cd1d1c39 --- /dev/null +++ b/imperative/src/impl/op_def.cpp @@ -0,0 +1,82 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/op_def.h" +#include "megbrain/imperative/ops/opr_attr.h" + +#include "./op_trait.h" + +namespace mgb { +namespace imperative { + +std::shared_ptr OpDef::make_from_op_node( + cg::OperatorNodeBase* node) { + OpTrait* trait; + trait = OpTrait::find_by_typeinfo(node->dyn_typeinfo()); + if (!trait) { + // TODO: register `make_from_op_node` for each OperatorNode + // instead of forwarding to OprAttr + trait = OpTrait::find_by_typeinfo(OprAttr::typeinfo()); + } + mgb_assert(trait); + return trait->make_from_op_node(node); +} + +SmallVector OpDef::apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs) { + return def.trait()->apply_on_physical_tensor(def, inputs); +} + +void OpDef::exec( + const OpDef& def, + const SmallVector& inputs, + const SmallVector& outputs) { + def.trait()->exec(def, inputs, outputs); +} + +cg::OperatorNodeBase* OpDef::apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs) { + return def.trait()->apply_on_var_node(def, inputs); +} + +SmallVector OpDef::infer_output_attrs_fallible( + const OpDef& def, + const SmallVector& inputs) { + return def.trait()->infer_output_attrs_fallible(def, inputs); +} + +SmallVector OpDef::infer_output_attrs( + const OpDef& def, + const SmallVector& inputs) { + return def.trait()->infer_output_attrs(def, inputs); +} + +BackwardGraphResult OpDef::make_backward_graph( + const OpDef& def, + const SmallVector& inputs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad) { + return def.trait()->make_backward_graph(def, inputs, input_requires_grad, output_has_grad); +} + +const OpTrait* OpDef::trait() const { + if (!m_trait) { + m_trait = OpTrait::find_by_typeinfo(dyn_typeinfo()); + mgb_throw_if(!m_trait, MegBrainError, + "can not find op_trait by %s", dyn_typeinfo()->name); + } + return m_trait; +} + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/op_trait.cpp b/imperative/src/impl/op_trait.cpp new file mode 100644 index 00000000..06163296 --- /dev/null +++ b/imperative/src/impl/op_trait.cpp @@ -0,0 +1,160 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include + +#include "megbrain/imperative/ops/opr_attr.h" + +#include "./op_trait.h" +#include "./proxy_graph_detail.h" + +namespace mgb { +namespace imperative { + +namespace detail { + +struct StaticData { + std::list registries; + std::unordered_map name2reg; + std::unordered_map type2reg; +}; + +// use "Construct On First Use" to prevent "static initialization order fiasco" +// (i.e., ensure global registry was initialized before calling opr registration) +StaticData& static_data() { + static StaticData data; + return data; +} + +template +struct __not_implementation__; + +template +struct __not_implementation__ { + static RType raise(Args ...) { + mgb_throw(MegBrainError, "Not Implemented"); + } +}; + +} // detail + +OpTrait::OpTrait(const char* name_): name(name_) {} + +OpTrait* OpTrait::find_by_typeinfo(Typeinfo* type) { + auto&& type2reg = detail::static_data().type2reg; + auto iter = type2reg.find(type); + if (iter == type2reg.end()) { + return nullptr; + } + return iter->second; +} + +OpTrait* OpTrait::find_by_name(const char* name) { + auto&& name2reg = detail::static_data().name2reg; + auto iter = name2reg.find(name); + if (iter == name2reg.find(name)) { + return nullptr; + } + return iter->second; +} + +void OpTrait::for_each_trait(thin_function visitor){ + for(auto& trait: detail::static_data().registries){ + visitor(trait); + } +} + +OpTraitRegistry& OpTraitRegistry::finalize() { + std::ostringstream msg; + #define CHECK(field) if (!trait->field) { \ + msg << ", " #field; \ + trait->field = \ + detail::__not_implementation__::raise; \ + } + CHECK(make_from_op_node); + CHECK(apply_on_physical_tensor); + CHECK(exec); + CHECK(apply_on_var_node); + CHECK(infer_output_attrs_fallible); + CHECK(infer_output_attrs); + CHECK(make_backward_graph); + #undef CHECK + if (msg.tellp() > 0) { + mgb_log_warn( + "%s op trait missing: %s", + trait->name ? trait->name : "(anonymous)", + msg.str().c_str() + 2 /* skip first ", " */); + } + return *this; +} + +SmallVector fallback_apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs) { + auto desc = OpDef::infer_output_attrs(def, inputs); + SmallVector outputs; + for (auto&& i : desc) { + outputs.push_back(Tensor::make(i.layout, i.comp_node)); + } + OpDef::exec(def, inputs, outputs); + return outputs; +} + +SmallVector fallback_infer_output_attrs(const OpDef& def, + const SmallVector& inputs){ + SmallVector input_descs; + for(auto&& input: inputs){ + input_descs.push_back({input->layout(), input->comp_node()}); + } + return input_descs; +} + +OpTraitRegistry& OpTraitRegistry::fallback() { + if (!trait->exec && trait->apply_on_var_node) { + trait->exec = proxy_graph_detail::exec; + } + if (!trait->infer_output_attrs && trait->apply_on_var_node) { + trait->infer_output_attrs = proxy_graph_detail::infer_output_attrs; + } + if (!trait->infer_output_attrs_fallible && trait->apply_on_var_node) { + trait->infer_output_attrs_fallible = proxy_graph_detail::infer_output_attrs_fallible; + } + if (!trait->make_backward_graph && trait->apply_on_var_node) { + trait->make_backward_graph = proxy_graph_detail::make_backward_graph; + } + if (!trait->apply_on_physical_tensor && trait->infer_output_attrs && trait->exec) { + trait->apply_on_physical_tensor = fallback_apply_on_physical_tensor; + } + if(!trait->infer_output_attrs && trait->infer_output_attrs_fallible){ + trait->infer_output_attrs = fallback_infer_output_attrs; + } + return *this; +} + +void OpTraitRegistry::do_insert(Typeinfo* type) { + auto&& sd = detail::static_data(); + mgb_assert(sd.type2reg.emplace(type, trait).second); +} + +OpTraitRegistry OpTraitRegistry::do_insert(const char* name) { + auto&& sd = detail::static_data(); + if (name) { + mgb_assert(!sd.name2reg.count(name), + "duplicated opr trait %s", name); + } + sd.registries.emplace_back(name); + auto ret = &sd.registries.back(); + sd.name2reg.emplace(name, ret); + return {ret}; +} + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/op_trait.h b/imperative/src/impl/op_trait.h new file mode 100644 index 00000000..bf92bab2 --- /dev/null +++ b/imperative/src/impl/op_trait.h @@ -0,0 +1,119 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { + +using OpDefMaker = thin_function< + decltype(OpDef::make_from_op_node)>; +using ApplyOnPhysicalTensor = thin_function< + decltype(OpDef::apply_on_physical_tensor)>; +using PhysicalTensorExecutor = thin_function< + decltype(OpDef::exec)>; +using ApplyOnVarNode = thin_function< + decltype(OpDef::apply_on_var_node)>; +using InferOutputAttrsFallible = thin_function< + decltype(OpDef::infer_output_attrs_fallible)>; +using InferOutputAttrs = thin_function< + decltype(OpDef::infer_output_attrs)>; +using GradMaker = thin_function< + decltype(OpDef::make_backward_graph)>; + +struct OpTrait { + const char* name; + OpDefMaker make_from_op_node; + ApplyOnPhysicalTensor apply_on_physical_tensor; + PhysicalTensorExecutor exec; + ApplyOnVarNode apply_on_var_node; + InferOutputAttrsFallible infer_output_attrs_fallible; + InferOutputAttrs infer_output_attrs; + GradMaker make_backward_graph; + OpTrait(const char* name); + static OpTrait* find_by_name(const char* name); + static OpTrait* find_by_typeinfo(Typeinfo* type); + static void for_each_trait(thin_function visitor); +}; + +struct OpTraitRegistry { + OpTrait* trait; + OpTraitRegistry& make_from_op_node(OpDefMaker f) { + trait->make_from_op_node = f; + return *this; + } + OpTraitRegistry& apply_on_physical_tensor(ApplyOnPhysicalTensor f) { + trait->apply_on_physical_tensor = f; + return *this; + } + OpTraitRegistry& physical_tensor_executor(PhysicalTensorExecutor f) { + trait->exec = f; + return *this; + } + OpTraitRegistry& apply_on_var_node(ApplyOnVarNode f) { + trait->apply_on_var_node = f; + return *this; + } + OpTraitRegistry& infer_output_attrs_fallible(InferOutputAttrsFallible f) { + trait->infer_output_attrs_fallible = f; + return *this; + } + OpTraitRegistry& infer_output_attrs(InferOutputAttrs f) { + trait->infer_output_attrs = f; + return *this; + } + OpTraitRegistry& grad_maker(GradMaker f) { + trait->make_backward_graph = f; + return *this; + } + OpTraitRegistry& fallback(); + OpTraitRegistry& finalize(); + + template + void insert() { + do_insert(T::typeinfo()); + } + + template + void insert() { + insert(); + insert(); + } + + template + static OpTraitRegistry insert(const char* name) { + auto&& ret = do_insert(name); + ret.insert(); + return ret; + } + + void do_insert(Typeinfo* type); + + static OpTraitRegistry do_insert(const char* name); +}; + +namespace detail { +struct _RegisterHelper { + OpTraitRegistry registry; + ~_RegisterHelper() { + registry.finalize(); + } +}; +} // namespace detail + +} // namespace imperative +} // namespace mgb + +#define OP_TRAIT_REG(name, ...) \ + static OpTraitRegistry __##name##_global_registry__ = \ + detail::_RegisterHelper{OpTraitRegistry::insert<__VA_ARGS__>(#name)}.registry + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/opr_utility.cpp b/imperative/src/impl/opr_utility.cpp new file mode 100644 index 00000000..a39f6566 --- /dev/null +++ b/imperative/src/impl/opr_utility.cpp @@ -0,0 +1,185 @@ +/** + * \file src/core/impl/imperative/opr_utility.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/opr_utility.h" + +// FIXME; setup_config_cn is copied from src/opr/impl/utility.cpp +namespace { +mgb::OperatorNodeConfig setup_config_cn(const mgb::OperatorNodeConfig& config_, + const mgb::CompNode& cn) { + auto prev_cn = config_.get_single_comp_node(); + mgb_assert(!prev_cn.valid() || cn == prev_cn); + auto config = config_; + config.comp_node(cn); + return config; +} +} // namespace +namespace mgb { +namespace opr { + +/* ================ InputCallback ================== */ + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(InputCallback); + +InputCallback::InputCallback(cg::ComputingGraph& graph, callback_t callback, + const VarNodeArray& inputs, + const OperatorNodeConfig& config) + : Super(&graph, config, "input_callback", inputs), + m_callback(callback) { + for (VarNode* i : inputs) { + add_input({i}); + } + DType dt = config.output_dtype(); + mgb_assert(dt.valid()); + add_output(None)->add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC).dtype(dt); + add_output(None) + ->add_flag(VarNode::Flag::ALLOW_EMPTY_SHAPE) + .add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC) + .dtype(DType::from_enum(DTypeEnum::Byte)); +} + +SymbolVarArray InputCallback::make(cg::ComputingGraph& graph, + callback_t callback, CompNode comp_node, + DType dtype, const SymbolVarArray& inputs) { + mgb_assert(comp_node.valid()); + mgb_assert(dtype.valid()); + OperatorNodeConfig config; + config.comp_node(comp_node); + config.output_dtype(dtype); + auto vinputs = to_var_node_array(inputs); + auto opr = graph.insert_opr( + std::make_unique(graph, callback, vinputs, config)); + return to_symbol_var_array(opr->output()); +} + +void InputCallback::init_output_static_infer_desc() {} + +cg::OperatorNodeBase::NodeProp* InputCallback::do_make_node_prop() const { + NodeProp* prop = Super::do_make_node_prop(); + prop->add_flag(NodeProp::Flag::NO_AUTOMATIC_DUP); + SmallVector dep_types(input().size(), + NodeProp::DepType::DEV_COMP_ORDER); + prop->reset_dep_type(input(), dep_types); + return prop; +} + +void InputCallback::scn_do_execute() { + auto dev_tensor = m_callback(); + output(0)->reset_dev_tensor_from_tensor(dev_tensor); +} + +/* ================ OutputCallback ================== */ + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(OutputCallback); + +OutputCallback::OutputCallback(Param param, const VarNodeArray& inputs, + const OperatorNodeConfig& config) + : Super(inputs[0]->owner_graph(), + setup_config_cn(config, inputs[0]->comp_node()), + "output_callback", inputs), + m_param(std::move(param)) { + for (VarNode* i : inputs) { + add_input({i}); + } + if (!m_param.borrow) { + input(0)->add_flag(VarNode::Flag::NO_SYS_STATIC_MEM_ALLOC); + } + add_output(None) + ->add_flag(VarNode::Flag::ALLOW_EMPTY_SHAPE) + .add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC) + .dtype(DType::from_enum(DTypeEnum::Byte)); +} + +SymbolVar OutputCallback::make(Param param, const SymbolVarArray& inputs) { + mgb_assert(inputs.size() >= 1); + auto vinputs = to_var_node_array(inputs); + OperatorNodeConfig config; + return inputs[0].insert_single_output_opr(std::move(param), + vinputs, config); +} + +void OutputCallback::init_output_static_infer_desc() {} + +cg::OperatorNodeBase::NodeProp* OutputCallback::do_make_node_prop() const { + NodeProp* prop = Super::do_make_node_prop(); + prop->add_flag(NodeProp::Flag::NO_AUTOMATIC_DUP); + SmallVector dep_types(input().size(), + NodeProp::DepType::DEV_COMP_ORDER); + dep_types[0] = NodeProp::DepType::DEV_VALUE; + prop->reset_dep_type(input(), dep_types); + return prop; +} + +void OutputCallback::scn_do_execute() { + m_param.callback(input(0)->dev_tensor()); +} + +/* ================ NopCallback ================== */ + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(NopCallback); + +NopCallback::NopCallback(cg::ComputingGraph& graph, callback_t callback, + const VarNodeArray& inputs, + const OperatorNodeConfig& config) + : Super(&graph, config, "nop_callback", inputs), m_callback(callback) { + for (VarNode* i : inputs) { + add_input({i}); + } + add_output(None) + ->add_flag(VarNode::Flag::ALLOW_EMPTY_SHAPE) + .add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC) + .dtype(DType::from_enum(DTypeEnum::Byte)); +} + +SymbolVar NopCallback::make(cg::ComputingGraph& graph, callback_t callback, + CompNode comp_node, const SymbolVarArray& inputs) { + mgb_assert(comp_node.valid()); + OperatorNodeConfig config; + config.comp_node(comp_node); + auto vinputs = to_var_node_array(inputs); + auto opr = graph.insert_opr( + std::make_unique(graph, callback, vinputs, config)); + return opr->output(0); +} + +void NopCallback::init_output_static_infer_desc() {} +void NopCallback::on_output_comp_node_stream_changed() {} + +void NopCallback::init_output_comp_node() { + auto cn = config().get_single_comp_node(); + mgb_assert(cn.valid()); + output(0)->comp_node(cn); +} + +cg::OperatorNodeBase::NodeProp* NopCallback::do_make_node_prop() const { + NodeProp* prop = Super::do_make_node_prop(); + SmallVector dep_types(input().size(), + NodeProp::DepType::DEV_COMP_ORDER); + prop->reset_dep_type(input(), dep_types); + prop->add_flag( + cg::OperatorNodeBase::NodeProp::Flag::CROSS_COMP_NODE_MEMORY); + return prop; +} + +void NopCallback::do_execute(ExecEnv& env) { + auto cn = output(0)->comp_node(); + auto runner = [this, cn] { + owner_graph()->event().signal_inplace(this, + cn); + cn.activate(); + m_callback(); + owner_graph()->event().signal_inplace(this, cn); + }; + env.dispatch_on_comp_node(cn, runner); +} + +} // namespace opr +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/ops/backward_graph.cpp b/imperative/src/impl/ops/backward_graph.cpp new file mode 100644 index 00000000..d34068d8 --- /dev/null +++ b/imperative/src/impl/ops/backward_graph.cpp @@ -0,0 +1,113 @@ +/** + * \file src/core/impl/imperative/physical_tensor.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/ops/backward_graph.h" +#include "../op_trait.h" + +namespace mgb { +namespace imperative { + +SmallVector +BackwardGraph::InternalGraph::apply( + const SmallVector& inputs) const { + ThinHashMap node2tensor; + auto&& input_nodes = this->inputs; + mgb_assert(inputs.size() == input_nodes.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + node2tensor[input_nodes[i]] = inputs[i]; + } + for (auto &&i : constants) { + node2tensor[i.first] = i.second; + } + for (size_t i = 0; i < exprs.size(); ++ i) { + auto&& expr = exprs[i]; + SmallVector inputs; + for (auto &&in : std::get<1>(expr)) { + inputs.push_back(node2tensor.at(in)); + } + auto outputs = OpDef::apply_on_physical_tensor( + *std::get<0>(expr), inputs); + auto output_nodes = std::get<2>(expr); + mgb_assert(outputs.size() == output_nodes.size()); + for (size_t i = 0; i < outputs.size(); ++ i) { + node2tensor[output_nodes[i]] = outputs[i]; + } + } + SmallVector ret; + for (auto &&i : outputs) { + ret.push_back(node2tensor.at(i)); + } + return ret; +} + +SmallVector +BackwardGraph::InternalGraph::infer_attrs( + const SmallVector& inputs) const { + using TensorAttr = LogicalTensorDesc; + ThinHashMap node2attr; + auto&& input_nodes = this->inputs; + mgb_assert(inputs.size() == input_nodes.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + node2attr[input_nodes[i]] = inputs[i]; + } + for (auto &&i : constants) { + auto* value = i.second->try_get_value(); + mgb_assert(value); + node2attr[i.first] = TensorAttr{ + i.second->layout(), i.second->comp_node(), + value->proxy_to_default_cpu()}; + } + for (size_t i = 0; i < exprs.size(); ++ i) { + auto&& expr = exprs[i]; + SmallVector inputs; + for (auto &&in : std::get<1>(expr)) { + inputs.push_back(node2attr.at(in)); + } + auto outputs = OpDef::infer_output_attrs_fallible( + *std::get<0>(expr), inputs); + auto output_nodes = std::get<2>(expr); + mgb_assert(outputs.size() == output_nodes.size()); + for (size_t i = 0; i < outputs.size(); ++ i) { + node2attr[output_nodes[i]] = outputs[i]; + } + } + SmallVector ret; + for (auto &&i : outputs) { + ret.push_back(node2attr.at(i)); + } + return ret; +} + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(BackwardGraph); + +namespace { +SmallVector backward_impl( + const OpDef& backward_graph, + const SmallVector& tensors) { + return backward_graph.cast_final_safe() + .graph().apply(tensors); +} + +SmallVector infer_tensor_attrs( + const OpDef& backward_graph, + const SmallVector inputs) { + return backward_graph.cast_final_safe() + .graph().infer_attrs(inputs); +} + +OP_TRAIT_REG(BackwardGraph, BackwardGraph) + .apply_on_physical_tensor(backward_impl) + .infer_output_attrs_fallible(infer_tensor_attrs) + .fallback(); +} // anonymous namespace + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/ops/collective_comm.cpp b/imperative/src/impl/ops/collective_comm.cpp new file mode 100644 index 00000000..35eca804 --- /dev/null +++ b/imperative/src/impl/ops/collective_comm.cpp @@ -0,0 +1,59 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ +#include "megbrain_build_config.h" + +#if MGB_ENABLE_OPR_MM +#include "../op_trait.h" +#include "../proxy_graph_detail.h" +#include "megbrain/opr/mm_handler.h" +#endif // MGB_ENABLE_OPR_MM + +#include "megbrain/imperative/ops/collective_comm.h" + +namespace mgb { +namespace imperative { + +#if MGB_ENABLE_OPR_MM +namespace { +cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs) { + auto&& comm = def.cast_final_safe(); + auto group_client = std::make_shared( + ssprintf("%s:%d", comm.addr.data(), comm.port)); + SmallVector> dev_buffer_arr(1, nullptr); + auto disable = std::make_shared(); + disable->set(0); + + cg::OperatorNodeConfig config; + if (comm.comp_node.size() > 0) { + config.comp_node(CompNode::load(comm.comp_node)); + } + + mgb_assert(inputs.size() == 1, "exactly one input expected"); + auto&& graph = inputs[0]->owner_graph(); + + return graph->insert_opr(std::make_unique( + inputs, graph, comm.key, comm.nr_devices, comm.is_root, comm.rank, + comm.local_grad, group_client, comm.mode, comm.dtype, comm.backend, + dev_buffer_arr, config, disable)); +} + +OP_TRAIT_REG(CollectiveComm, CollectiveComm, opr::CollectiveComm) + .apply_on_var_node(apply_on_var_node) + .fallback(); +} // anonymous namespace +#endif // MGB_ENABLE_OPR_MM + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(CollectiveComm); + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/ops/cond_take.cpp b/imperative/src/impl/ops/cond_take.cpp new file mode 100644 index 00000000..de4cd0fb --- /dev/null +++ b/imperative/src/impl/ops/cond_take.cpp @@ -0,0 +1,118 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/ops/cond_take.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/opr/misc.h" +#include "../dnn_op_helper.h" +#include "../op_trait.h" + +using namespace megdnn; + +namespace mgb::imperative { + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(CondTake); + +namespace { + +class MegDNNDynOutMallocImpl final: public megdnn::DynOutMallocPolicy { + using Output = std::array; + + CompNode m_cn; + Output m_out; + + public: + MegDNNDynOutMallocImpl(CompNode cn): m_cn{cn} {} + + megdnn::TensorND alloc_output( + size_t id, DType dtype, const TensorShape &shape, + void *user_data) override; + + void* alloc_workspace(size_t sz, void *user_data) override; + void free_workspace(void *ptr, void *user_data) override; + TensorPtr at(size_t id); +}; + +megdnn::TensorND MegDNNDynOutMallocImpl::alloc_output( + size_t id, DType dtype, const TensorShape &shape, + void * /*user_data*/) { + TensorLayout m_layout(shape, dtype); + m_out[id] = Tensor::make(m_layout, m_cn); + return m_out[id]->dev_tensor().as_megdnn(); +} + +void* MegDNNDynOutMallocImpl::alloc_workspace(size_t sz, void * /*user_data*/) { + return m_cn.alloc_device(sz); +} + +void MegDNNDynOutMallocImpl::free_workspace(void *ptr, void * /*user_data*/) { + m_cn.free_device(ptr); +} + +TensorPtr MegDNNDynOutMallocImpl::at(size_t id) { + return m_out[id]; +} + +cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs) { + def.cast_final_safe(); + auto&& graph = inputs[0]->owner_graph(); + + opr::CondTake::Param param; + param.val = 1; + cg::OperatorNodeConfig config; + cg::OperatorNodeBase* opr = graph->insert_opr( + std::make_unique( + inputs[0], inputs[1], param, config)); + return opr; +} + +SmallVector apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs) { + auto opr = def.cast_final_safe(); + mgb_assert(opr.same_type()); + mgb_assert(inputs.size() == 2, "CondTake take 2 inputs, got %lu", + inputs.size()); + + auto&& inp = inputs[0]; + auto&& msk = inputs[1]; + mgb_assert(inp->layout().eq_shape(msk->layout()), + "input shape does not match mask shape"); + mgb_assert(msk->get_value().dtype().enumv() == DTypeEnum::Bool, + "mask dtype must be bool"); + DnnOprCaller dnn_op(inp->comp_node()); + dnn_op.op->param().val = 1; + + TensorLayout m_layout({dnn_op.op->get_workspace_in_bytes(inp->layout())}, + dtype::Byte()); + + auto dnn_workspace = dnn_op.create_workspace(m_layout); + MegDNNDynOutMallocImpl policy{inp->comp_node()}; + + dnn_op.op->exec(inp->dev_tensor().as_megdnn(), + msk->dev_tensor().as_megdnn(), + dnn_workspace, + &policy); + + SmallVector out; + out.push_back(policy.at(0)); + out.push_back(policy.at(1)); + return out; +} + +OP_TRAIT_REG(CondTake, CondTake, opr::CondTake) + .apply_on_var_node(apply_on_var_node) + .apply_on_physical_tensor(apply_on_physical_tensor) + .fallback(); + +} // namespace + +} // namespace mgb::imperative \ No newline at end of file diff --git a/imperative/src/impl/ops/io_remote.cpp b/imperative/src/impl/ops/io_remote.cpp new file mode 100644 index 00000000..7d737573 --- /dev/null +++ b/imperative/src/impl/ops/io_remote.cpp @@ -0,0 +1,64 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ +#include "megbrain_build_config.h" + +#if MGB_ENABLE_OPR_MM +#include "../op_trait.h" +#include "../proxy_graph_detail.h" +#include "megbrain/opr/io_remote.h" +#include "megbrain/opr/mm_handler.h" +#endif // MGB_ENABLE_OPR_MM + +#include "megbrain/imperative/ops/io_remote.h" + +namespace mgb { +namespace imperative { + +#if MGB_ENABLE_OPR_MM +namespace { +cg::OperatorNodeBase* apply_on_var_node_remote_send( + const OpDef& def, const VarNodeArray& inputs) { + auto&& send = def.cast_final_safe(); + auto group_client = std::make_shared( + ssprintf("%s:%d", send.addr.data(), send.port)); + auto&& graph = inputs[0]->owner_graph(); + + cg::OperatorNodeConfig config; + cg::OperatorNodeBase* opr = + graph->insert_opr(std::make_unique( + send.key, inputs[0], group_client, true, config)); + return opr; +} + +cg::OperatorNodeBase* apply_on_var_node_remote_recv( + const OpDef& def, const VarNodeArray& inputs) { + auto&& recv = def.cast_final_safe(); + auto group_client = std::make_shared( + ssprintf("%s:%d", recv.addr.data(), recv.port)); + auto&& graph = inputs[0]->owner_graph(); + return graph->insert_opr(std::make_unique( + recv.key, *graph, group_client, OperatorNodeConfig{recv.cn}, + recv.shape, recv.dtype)); +} + +OP_TRAIT_REG(RemoteSend, RemoteSend, mgb::opr::RemoteSend) + .apply_on_var_node(apply_on_var_node_remote_send) + .fallback(); + +OP_TRAIT_REG(RemoteRecv, RemoteRecv, mgb::opr::RemoteRecv) + .apply_on_var_node(apply_on_var_node_remote_recv) + .fallback(); +} // anonymous namespace +#endif // MGB_ENABLE_OPR_MM + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(RemoteSend); +MGB_DYN_TYPE_OBJ_FINAL_IMPL(RemoteRecv); + +} // namespace imperative +} // namespace mgb diff --git a/imperative/src/impl/ops/nms.cpp b/imperative/src/impl/ops/nms.cpp new file mode 100644 index 00000000..3c34c87a --- /dev/null +++ b/imperative/src/impl/ops/nms.cpp @@ -0,0 +1,42 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ +#include "../op_trait.h" + +#include "megbrain/imperative/ops/nms.h" +#include "megbrain/opr/standalone/nms_opr.h" + +namespace mgb { +namespace imperative { + +using NMSKeepOpr = opr::standalone::NMSKeep; + +namespace { +cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs) { + auto&& nms_keep = def.cast_final_safe(); + + NMSKeepOpr::Param param; + param.iou_thresh = nms_keep.iou_thresh; + param.max_output = nms_keep.max_output; + + return NMSKeepOpr::make(inputs[0], param).node()->owner_opr(); +} + +OP_TRAIT_REG(NMSKeep, NMSKeep, NMSKeepOpr) + .apply_on_var_node(apply_on_var_node) + .fallback(); +} // anonymous namespace + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(NMSKeep); + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/ops/opr_attr.cpp b/imperative/src/impl/ops/opr_attr.cpp new file mode 100644 index 00000000..feb52c76 --- /dev/null +++ b/imperative/src/impl/ops/opr_attr.cpp @@ -0,0 +1,123 @@ +/** + * \file src/core/impl/imperative/physical_tensor.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/serialization/opr_load_dump.h" + +#include "../op_trait.h" +#include "../proxy_graph_detail.h" + +namespace mgb { +namespace imperative { + +namespace { +class OprParamsLoadContext final: public serialization::OprLoadContextRawPOD { + const OprAttr::Param& m_param; + size_t m_pos = 0; + ComputingGraph *m_graph; + + void read_raw(void *dest, size_t size) override final { + mgb_assert(m_pos + size <= m_param.size(), "too many bytes requested"); + memcpy(dest, m_param.data() + m_pos, size); + m_pos += size; + } + + 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(const OprAttr::Param& param, + ComputingGraph *graph): + serialization::OprLoadContextRawPOD(false), m_param(param), m_graph(graph) + {} + + ~OprParamsLoadContext() { + mgb_assert(m_pos == m_param.size(), "param not fully consumed"); + } + + ComputingGraph& graph() override { + return *m_graph; + } +}; + +class OprParamsDumpContext final: public serialization::OprDumpContextRawPOD { +public: + OprAttr::Param m_param; + OprParamsDumpContext() : serialization::OprDumpContextRawPOD(false) {} + void write_raw(const void *data, size_t size) { + const char* src = static_cast(data); + m_param.insert(m_param.end(), src, src + size); + } + void dump_tensor( + const std::string &name, + const HostTensorND &tensor, + TensorWriteMethod method) { + mgb_assert(0); + } + const serialization::GraphDumpConfig& config() const { + mgb_assert(0); + } +}; + +cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, const VarNodeArray& inputs) { + auto&& attr = def.cast_final_safe(); + mgb_assert(!inputs.empty()); + auto registry = serialization::OprRegistry::find_by_name(attr.type); + mgb_assert(registry, "operator %s not found", attr.type.c_str()); + OprParamsLoadContext ctx{attr.param, inputs[0]->owner_graph()}; + return registry->loader(ctx, inputs, attr.config); +} + +std::shared_ptr make_from_op_node(cg::OperatorNodeBase* opr) { + OprParamsDumpContext ctx; + auto registry = serialization::OprRegistry::find_by_type(opr->dyn_typeinfo()); + mgb_assert(registry, "operator %s not found", opr->dyn_typeinfo()->name); + mgb_assert(registry->dumper, "operator %s cannot be serialized", opr->dyn_typeinfo()->name); + registry->dumper(ctx, *opr); + return OprAttr::make(registry->name, std::move(ctx.m_param), opr->config()); +} + +OP_TRAIT_REG(OprAttr, OprAttr) + .make_from_op_node(make_from_op_node) + .apply_on_var_node(apply_on_var_node) + .fallback(); + +} // anonymous namespace + +bool OprAttr::is_same_st(const Hashable& rhs_) const { + auto&& rhs = static_cast(rhs_); + return type == rhs.type && param == rhs.param + && config.comp_node() == rhs.config.comp_node() + && config.output_dtype() == rhs.config.output_dtype(); +} + +size_t OprAttr::hash() const { + return hash_pair_combine( + hash_pair_combine( + mgb::hash(type), + mgb::hash(static_cast>(param))), + config.hash()); +} + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(OprAttr); + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/ops/tensor_manip.cpp b/imperative/src/impl/ops/tensor_manip.cpp new file mode 100644 index 00000000..e8a84e69 --- /dev/null +++ b/imperative/src/impl/ops/tensor_manip.cpp @@ -0,0 +1,145 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/ops/tensor_manip.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/opr/tensor_manip.h" +#include "../op_trait.h" + +namespace mgb::imperative { +namespace { + +cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs) { + def.cast_final_safe(); + return opr::GetVarShape::make(inputs).node()->owner_opr(); +} + +SmallVector apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs) { + def.cast_final_safe(); + mgb_assert(inputs.size() == 1, "GetVarShape take 1 input, got %lu", inputs.size()); + auto&& inp = inputs[0]; + auto&& shp = inp->layout(); + mgb_assert(shp.ndim != 0, "input shape invalid"); + HostTensorND hv(inp->comp_node(), {shp.ndim}, dtype::Int32()); + auto* ptr = hv.ptr(); + for (size_t i = 0; i < shp.ndim; ++i) { + ptr[i] = shp.shape[i]; + } + return {Tensor::make(std::move(hv))}; +} + +SmallVector infer_output_attrs_fallible( + const OpDef& def, + const SmallVector& inputs) { + def.cast_final_safe(); + mgb_assert(inputs.size() == 1, "GetVarShape take 1 input, got %lu", inputs.size()); + auto&& desc = inputs[0]; + if (!desc.layout.ndim) { + return {{TensorLayout(dtype::Int32()), desc.comp_node}}; + } + DeviceTensorND value(CompNode::default_cpu(), {desc.layout.ndim}, dtype::Int32()); + auto* ptr = value.ptr(); + for (size_t i = 0; i < desc.layout.ndim; ++i) { + ptr[i] = desc.layout[i]; + } + return {{value.layout(), desc.comp_node, std::move(value)}}; +} + +std::shared_ptr make_from_op_node(cg::OperatorNodeBase* node_) { + auto* node = &node_->cast_final_safe(); + if (node->config().comp_node().size() || + node->config().output_dtype().valid() || + node->param().axis != opr::GetVarShape::Param::INVALID_AXIS) { + mgb_log_warn("weird GetVarShape"); + return OpTrait::find_by_typeinfo(OprAttr::typeinfo())->make_from_op_node(node); + } + return GetVarShape::make(); +} + +OP_TRAIT_REG(GetVarShape, GetVarShape, opr::GetVarShape) + .make_from_op_node(make_from_op_node) + .infer_output_attrs_fallible(infer_output_attrs_fallible) + .apply_on_var_node(apply_on_var_node) + .apply_on_physical_tensor(apply_on_physical_tensor) + .fallback(); + +TensorShapeArray get_shapes(const std::vector>& shapes) { + TensorShapeArray ret; + for (auto&& i:shapes) { + SmallVector shape(i.begin(), i.end()); + TensorShape shp(shape); + ret.push_back(shp); + } + return ret; +} + +cg::OperatorNodeBase* param_pack_split_apply_on_var_node( + const OpDef& def, const VarNodeArray& inputs) { + auto&& param = def.cast_final_safe(); + auto&& graph = inputs[0]->owner_graph(); + + auto&& shapes = get_shapes(param.shapes); + cg::OperatorNodeConfig config; + cg::OperatorNodeBase* opr = + graph->insert_opr(std::make_unique( + inputs[0], param.offsets, shapes, config)); + return opr; +} + +SmallVector param_pack_split_apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs) { + auto param = def.cast_final_safe(); + mgb_assert(inputs.size() == 1, "ParamPackSplit take 1 input, got %lu", inputs.size()); + auto&& inp = inputs[0]; + auto&& shp = inp->layout(); + mgb_assert(shp.ndim == 1, "ParamPackSplit input shape invalid, ndim should be 1"); + mgb_assert(param.shapes.size() * 2 == param.offsets.size()); + SmallVector ret; + auto&& shapes = get_shapes(param.shapes); + size_t dtype_size = inputs[0]->layout().dtype.size(); + for (size_t i = 0; i < shapes.size(); ++i) { + ret.push_back( + inputs[0]->sub(param.offsets[i * 2] * dtype_size, shapes[i])); + } + return ret; +} + +OP_TRAIT_REG(ParamPackSplit, ParamPackSplit, mgb::opr::ParamPackSplit) + .apply_on_var_node(param_pack_split_apply_on_var_node) + .apply_on_physical_tensor(param_pack_split_apply_on_physical_tensor) + .fallback(); + +cg::OperatorNodeBase* param_pack_concat_apply_on_var_node( + const OpDef& def, const VarNodeArray& inputs) { + auto&& param = def.cast_final_safe(); + auto&& graph = inputs[0]->owner_graph(); + + VarNodeArray inps(inputs.begin(), inputs.end() - 1); + cg::OperatorNodeConfig config; + cg::OperatorNodeBase* opr = + graph->insert_opr(std::make_unique( + inps, inputs.back(), param.offsets, config)); + return opr; +} + +OP_TRAIT_REG(ParamPackConcat, ParamPackConcat, mgb::opr::ParamPackConcat) + .apply_on_var_node(param_pack_concat_apply_on_var_node) + .fallback(); +} // namespace + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(GetVarShape); +MGB_DYN_TYPE_OBJ_FINAL_IMPL(ParamPackSplit); +MGB_DYN_TYPE_OBJ_FINAL_IMPL(ParamPackConcat); + +} // namespace mgb::imperative diff --git a/imperative/src/impl/physical_tensor.cpp b/imperative/src/impl/physical_tensor.cpp new file mode 100644 index 00000000..268b6d24 --- /dev/null +++ b/imperative/src/impl/physical_tensor.cpp @@ -0,0 +1,425 @@ +/** + * \file src/core/impl/imperative/physical_tensor.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative.h" +#include "megbrain/imperative/blob_manager.h" +#include + +namespace mgb { +namespace imperative { + +namespace { + +class EventPool : CompNodeDepedentObject { + CompNode::UnorderedMap m_cn2pool; + Spinlock m_lock; + + EventPool() = default; +public: + static EventPool& inst() { + static Spinlock lock; + static std::unique_ptr ptr; + MGB_LOCK_GUARD(lock); + if (!ptr || ptr->is_finalized()) { + ptr.reset(new EventPool()); + } + return *ptr; + } + CompNode::Event* alloc(CompNode cn) { + CompNode::EventPool *pool; + { + MGB_LOCK_GUARD(m_lock); + auto iter = m_cn2pool.find(cn); + if (iter == m_cn2pool.end()) { + iter = m_cn2pool.emplace( + std::piecewise_construct, + std::forward_as_tuple(cn), + std::forward_as_tuple(cn)).first; + } + pool = &iter->second; + } + return pool->alloc(); + } + void free(CompNode::Event* event) { + CompNode::EventPool* pool; + { + MGB_LOCK_GUARD(m_lock); + pool = &m_cn2pool.at(event->comp_node()); + } + pool->free(event); + } + std::shared_ptr on_comp_node_finalize() override { + MGB_LOCK_GUARD(m_lock); + for (auto&& i : m_cn2pool) { + i.second.assert_all_freed(); + } + return {}; + } + ~EventPool() { + for (auto&& i : m_cn2pool) { + i.second.assert_all_freed(); + } + } +}; + +class AsyncReleaser : public CompNodeDepedentObject { + struct WaiterParam { + CompNode cn; + CompNode::Event *event; + BlobPtr blob; + HostTensorStorage::RawStorage storage; + }; + class Waiter final: public AsyncQueueSC { + AsyncReleaser *m_par_releaser; + + public: + Waiter(AsyncReleaser *releaser): + m_par_releaser(releaser) + { + } + + void process_one_task(WaiterParam ¶m) { + if (param.event->finished()) { + param.blob.reset(); + param.storage.reset(); + EventPool::inst().free(param.event); + return; + } + + using namespace std::literals; + std::this_thread::sleep_for(1us); + add_task(std::move(param)); + } + }; + Waiter m_waiter{this}; + +protected: + std::shared_ptr on_comp_node_finalize() override { + m_waiter.wait_task_queue_empty(); + return {}; + } + +public: + static AsyncReleaser* inst() { + static AsyncReleaser releaser; + return &releaser; + } + + ~AsyncReleaser() { + m_waiter.wait_task_queue_empty(); + } + + void add(BlobPtr blob, CompNode cn) { + add(cn, std::move(blob), {}); + } + + void add(const HostTensorND& hv) { + add(hv.comp_node(), {}, hv.storage().raw_storage()); + } + + void add(CompNode cn, BlobPtr blob, HostTensorStorage::RawStorage storage = {}) { + auto event = EventPool::inst().alloc(cn); + event->record(); + m_waiter.add_task({cn, event, std::move(blob), std::move(storage)}); + } +}; + +class CompNodeSyncManager : public CompNodeDepedentObject { + ThinHashMap> m_blob2event; + std::mutex m_mtx; +private: + static CompNodeSyncManager mgr; +public: + std::shared_ptr on_comp_node_finalize() override { + MGB_LOCK_GUARD(m_mtx); + m_blob2event.clear(); + return {}; + } + + static CompNodeSyncManager* inst() { + return &mgr; + } + + CompNode::Event* get_or_create_event(Blob* blob) { + mgb_assert(!is_finalized()); + MGB_LOCK_GUARD(m_mtx); + auto&& e = m_blob2event[blob]; + if (!e) { + e = blob->comp_node().create_event(); + } + return e.get(); + } + + void remove(Blob* blob) { + MGB_LOCK_GUARD(m_mtx); + m_blob2event.erase(blob); + } +}; +CompNodeSyncManager CompNodeSyncManager::mgr; + +// Cache for small blobs +// 1. A blob has to be seen twice (within a window) to be eligible for cache +// 2. Cache eviction occurs when cache size reaches a threshold, in least frequently used order +class ConstTensorCache { +public: + struct Entry { + size_t hitcnt = 0; + std::unique_ptr data; + size_t size; + BlobPtr blob; + + Entry(const dt_byte* ptr, size_t size_, BlobPtr blob_) + : data(new dt_byte[size_]), size(size_), blob(blob_) { + memcpy(data.get(), ptr, size); + } + + // does not check input + bool match(const HostTensorND& hv) { + return 0 == memcmp(data.get(), hv.raw_ptr(), hv.layout().span().high_byte); + } + }; + + bool check(const HostTensorND& hv) { + auto&& layout = hv.layout(); + auto&& span = layout.span(); + return hv.format().is_default() && !hv.empty() && + layout.is_contiguous() && span.low_byte == 0 && + span.high_byte <= max_bytes; + } + + // hash storage; does not check input + static uint64_t hash(const HostTensorND& hv) { + auto&& span = hv.layout().span(); + return XXHash{} + .update(hv.raw_ptr(), span.high_byte) + .digest(); + } + + BlobPtr lookup(const HostTensorND& hv) { + if (!check(hv)) { + return {}; + } + auto h = hash(hv); + MGB_LOCK_GUARD(mtx); + // lookup in g1 + auto it = g1.find(h); + if (it != g1.end()) { + if (!it->second.match(hv)) { + mgb_log_warn("hash collision in const tensor cache"); + return {}; + } + it->second.hitcnt += 1; + return it->second.blob; + } + // lookup in g0 + if (!g0.extract(h) && !g0b.extract(h)) { + maybe_collect_g0(); + g0.emplace(h); + return {}; + } + // add new entry to g1 + maybe_collect_g1(); + Entry entry(hv.raw_ptr(), hv.layout().span().high_byte, Tensor(hv).blob()); + it = g1.emplace_hint(it, h, std::move(entry)); + it->second.hitcnt += 1; + return it->second.blob; + } + + void clear() { + MGB_LOCK_GUARD(mtx); + g0.clear(); + g0b.clear(); + g1.clear(); + } + + std::mutex mtx; + size_t hwm = 1024, lwm = 512, max_bytes = TensorShape::MAX_NDIM * 8, window = 65536; + +private: + void maybe_collect_g0() { + if (g0.size() > window) { + std::swap(g0, g0b); + g0.clear(); + } + } + void maybe_collect_g1() { + if (g1.size() <= hwm) return; + + using KV = std::pair; + std::vector tmp; + tmp.reserve(g1.size()); + for (auto&& kv : g1) { + tmp.emplace_back(kv.first, std::move(kv.second)); + } + std::nth_element(tmp.begin(), tmp.begin() + lwm, tmp.end(), [](const KV& lhs, const KV& rhs) { + return lhs.second.hitcnt > rhs.second.hitcnt; + }); + g1.clear(); + for (auto&& kv : tmp) { + kv.second.hitcnt = 0; + g1.emplace(std::move(kv)); + } + } + std::unordered_set g0, g0b; + std::unordered_map g1; +}; + +struct MultiCNConstTensorCache : CompNodeDepedentObject { + std::mutex mtx; + CompNode::UnorderedMap cn2cache; + + std::shared_ptr on_comp_node_finalize() { + MGB_LOCK_GUARD(mtx); + cn2cache.clear(); + return {}; + } + + BlobPtr lookup(const HostTensorND& hv) { + MGB_LOCK_GUARD(mtx); + return cn2cache[hv.comp_node()].lookup(hv); + } +}; + +MultiCNConstTensorCache const_tensor_cache; + +} // namespace + +void EventDeleter::operator()(CompNode::Event* event) { + EventPool::inst().free(event); +} + +Blob::Blob(const DeviceTensorStorage& s): + m_comp_node{s.comp_node()}, m_storage{s.raw_storage()}, + m_size{s.size()} { + BlobManager::inst()->register_blob(this); +} + +Blob::Blob(CompNode cn, size_t sz): + m_comp_node{cn}, m_storage{}, m_size{sz} { + BlobManager::inst()->register_blob(this); +} + +Blob::~Blob() { + BlobManager::inst()->unregister_blob(this); + CompNodeSyncManager::inst()->remove(this); +} + +const Blob::RawStorage& Blob::storage() { + if (!m_storage) { + BlobManager::inst()->alloc_with_defrag(this, m_size); + } + return m_storage; +} + +Tensor::Tensor(BlobPtr blob, const TensorLayout& layout, size_t offset, const HostTensorND& hv) + : m_layout(layout), m_blob(std::move(blob)), m_offset(offset), m_value(hv) { +} + +Tensor::Tensor(const HostTensorND &hv) + : Tensor(hv.layout(), hv.comp_node()) { + m_value = hv; + dev_tensor().copy_from_fixlayout(hv); + // even though hv is saved in m_value, Tensor itself could be + // released before copy completes + AsyncReleaser::inst()->add(hv); +} + +Tensor::Tensor(const DeviceTensorND &dv, const HostTensorND& hv) { + if (!hv.empty()) { + mgb_assert(dv.comp_node() == hv.comp_node()); + mgb_assert(dv.dtype() == hv.dtype()); + mgb_assert(dv.shape().eq_shape(hv.shape())); + m_value = hv; + } + m_layout = dv.layout(); + m_blob = Blob::make(dv.storage()); + m_offset = 0; +} + +Tensor::Tensor(const TensorLayout& layout, const CompNode& cn) + : m_layout{layout}, m_blob{Blob::make(cn, layout.dtype.size(layout.total_nr_elems()))}, + m_offset{0} {} + +Tensor::Tensor(const BlobPtr blob, const size_t offset, const TensorLayout& layout) + : m_layout{layout}, m_blob{blob}, m_offset{offset} {} + +TensorPtr Tensor::make(const HostTensorND& hv) { + auto&& blob = const_tensor_cache.lookup(hv); + if (blob) { + return make(std::forward(blob), hv.layout(), hv); + } + return std::make_shared(hv); +} + +DeviceTensorND Tensor::dev_tensor() { + mgb_assert(m_blob, "uninitialized tensor."); + DeviceTensorStorage storage; + storage.reset(m_blob->comp_node(), m_blob->size(), m_blob->storage()); + storage = storage.sub(m_offset); + DeviceTensorND ret; + ret.reset(storage, m_layout); + return ret; +} + +void Tensor::fetch_value() { + MGB_LOCK_GUARD(m_mtx); + if (m_value.empty()) { + m_value.copy_from(dev_tensor()); + m_value_ready.reset(EventPool::inst().alloc(comp_node())); + m_value_ready->record(); + } +} + +bool Tensor::value_fetched() { + MGB_LOCK_GUARD(m_mtx); + return m_value.layout().ndim != 0; +} + +const HostTensorND& Tensor::get_value() { + fetch_value(); + if (m_value_ready) { + m_value_ready->host_wait(); + } + return m_value; +} + +const HostTensorND* Tensor::try_get_value() { + MGB_LOCK_GUARD(m_mtx); + if (!m_value.empty() && (!m_value_ready || m_value_ready->finished())) { + return &m_value; + } + return nullptr; +} + +TensorPtr Tensor::make_scalar(DTypeScalar value, CompNode cn) { + HostTensorND hv{cn, value.dtype()}; + hv.resize({1}); + memcpy(hv.raw_ptr(), value.storage(), value.dtype().size(1)); + return make(hv); +} + +TensorPtr Tensor::sub(size_t offset, TensorShape shape) { + TensorLayout layout(shape, m_layout.dtype); + return Tensor::make(m_blob, offset + m_offset, layout); +} + +void Tensor::add_release_callback(CompNode cn) { + AsyncReleaser::inst()->add(m_blob, cn); +} + +CompNode::Event* Tensor::get_or_create_event() { + auto e = CompNodeSyncManager::inst()->get_or_create_event(m_blob.get()); + e->record(); + return e; +} + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/profiler.cpp b/imperative/src/impl/profiler.cpp new file mode 100644 index 00000000..f35f5b3c --- /dev/null +++ b/imperative/src/impl/profiler.cpp @@ -0,0 +1,214 @@ +/** + * \file src/core/impl/imperative/profiler.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/profiler.h" + +#include +#include + +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/imperative/physical_tensor.h" + +#include "./op_trait.h" + +namespace mgb { + +namespace imperative { + +class OpDefInfo{ +public: + size_t id; + std::string name; +}; + +class ProfilerEntry { +public: + ProfilerEntry(size_t index, Profiler::EventKind type, std::unique_ptr device) + : index{index}, type{type}, device{std::move(device)}{ + } + ProfilerEntry(size_t index, Profiler::EventKind type, double host): index{index}, type{type}, host{host}{ + } + size_t index; + Profiler::EventKind type; + std::unique_ptr device = nullptr; + double host = 0; +}; + +class ProfilerPrivate { +public: + std::vector op_list; + std::vector entry_list; + std::vector> event_list; + std::vector>> + hook_list; + ThinHashMap> + comp_node_begin_map; + ThinHashMap comp_node_end_map; + RealTimer timer; + size_t dump_count = 0; + bool enabled = false; + std::string path; +}; + +namespace { +CompNode::UnorderedSet collect_comp_nodes( + const OpDef& def, const SmallVector& inputs) { + CompNode::UnorderedSet comp_nodes; + for (auto&& input : inputs) { + comp_nodes.insert(input->comp_node()); + } + for (auto&& output_attr : def.infer_output_attrs(def, inputs)) { + comp_nodes.insert(output_attr.comp_node); + } + return comp_nodes; +} +} // namespace + +std::unique_ptr Profiler::create_event(CompNode comp_node){ + auto event = comp_node.create_event(CompNode::Event::NEED_TIMER); + event->record(); + auto& [begin, time] = m_private->comp_node_begin_map[comp_node]; + if (begin == nullptr) { + begin = event.get(); + time = m_private->timer.get_msecs(); + } + return event; +} + +double Profiler::get_host_time_now(){ + return m_private->timer.get_msecs(); +} + +double Profiler::get_device_time(CompNode::Event& event) { + auto [base_event, host_time] = + m_private->comp_node_begin_map[event.comp_node()]; + if (base_event == &event) { + return host_time; + } else { + return host_time + base_event->elapsed_time_until(event) * 1000; + } +} + +size_t Profiler::get_dump_count(){ + return m_private->dump_count; +} + +Profiler::Profiler() { + m_private = std::make_unique(); +} + +Profiler::Profiler(const std::string& path): Profiler() { + m_private->path = path; +} + +void Profiler::enable() { + m_private->enabled = true; + CompNode::sync_all(); + OpTrait::for_each_trait([this](OpTrait& trait) { + auto backup = std::make_unique( + std::move(trait.apply_on_physical_tensor)); + trait.apply_on_physical_tensor = + [this, backup = backup.get()] ( + const OpDef& def, + const SmallVector& inputs){ + size_t index = m_private->op_list.size(); + std::string name = "[" + std::to_string(index) + "]" + print_op(def); + m_private->op_list.push_back({reinterpret_cast(&def), name}); + m_private->entry_list.emplace_back(index, OprBegin, get_host_time_now()); + auto&& comp_nodes = collect_comp_nodes(def, inputs); + for (auto&& comp_node : comp_nodes) { + m_private->entry_list.emplace_back(index, OprBegin, create_event(comp_node)); + } + auto output = (*backup)(def, inputs); + for (auto&& comp_node : comp_nodes) { + m_private->entry_list.emplace_back(index, OprEnd, create_event(comp_node)); + } + m_private->entry_list.emplace_back(index, OprEnd, get_host_time_now()); + return output; + }; + m_private->hook_list.push_back({&trait, std::move(backup)}); + }); +} + +void Profiler::disable() { + for (auto&& hook : m_private->hook_list) { + std::get<0>(hook)->apply_on_physical_tensor = + std::move(*std::get<1>(hook)); + } + m_private->hook_list.clear(); + m_private->enabled = false; +} + +Profiler::~Profiler() { +} + +void Profiler::dump(){ + dump(m_private->path); +} + +void Profiler::dump(const std::string& path) { + using namespace json; + auto obj = json::Object::make(); + if (!(*obj)["traceEvents"]) { + (*obj)["traceEvents"] = Array::make(); + } + auto& trace_events = (*obj)["traceEvents"]->cast_final(); + for (auto&& entry : m_private->entry_list) { + auto trace_event_ptr = Object::make(); + auto& trace_event = *trace_event_ptr; + std::string name; + size_t id; + int pid; + std::string tid; + double ts; + const char* ph; + name = m_private->op_list[entry.index].name; + id = entry.index; + pid = getpid(); + if (entry.device) { + entry.device->host_wait(); + ts = get_device_time(*entry.device); + tid = entry.device->comp_node().to_string(); + } else { + ts = entry.host; + tid = "host"; + } + switch (entry.type) { + case OprBegin: { + ph = "B"; + break; + } + case OprEnd: { + ph = "E"; + break; + } + } + trace_event["name"] = String::make(name); + trace_event["id"] = Number::make(id); + trace_event["pid"] = Number::make(pid); + trace_event["tid"] = String::make(tid); + trace_event["ts"] = Number::make(ts * 1000); + trace_event["ph"] = String::make(ph); + trace_events.add(std::move(trace_event_ptr)); + } + obj->writeto_fpath(path.empty() ? path : m_private->path); + m_private->dump_count++; +} + +std::string Profiler::print_op(const OpDef& def){ + auto* opr_attr = def.try_cast_final(); + if(opr_attr){ + return std::string("OprAttr:") + opr_attr->type; + } + return def.dyn_typeinfo()->name; +} + +} // namespace imperative + +} // namespace mgb diff --git a/imperative/src/impl/proxy_graph.cpp b/imperative/src/impl/proxy_graph.cpp new file mode 100644 index 00000000..b750749f --- /dev/null +++ b/imperative/src/impl/proxy_graph.cpp @@ -0,0 +1,850 @@ +/** + * \file src/core/impl/imperative/proxy_graph.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./blob_manager_impl.h" +#include "./proxy_graph.h" +#include "megbrain/graph/static_infer.h" +#include "megbrain/graph/operator_node.h" +#include "megbrain/opr/io.h" +#include "megbrain/opr/utility.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/imperative/ops/backward_graph.h" + +namespace mgb { +namespace imperative { + +using cg::OperatorNodeBase; + +template +constexpr auto&& select(T&& t, F&& f) { + if constexpr (p) { + return std::forward(t); + } else { + return std::forward(f); + } +} + +MGB_DEFINE_OPR_CLASS( + ProxyGraph::InputPlaceholder, + cg::OperatorNodeBase) // { + + void on_output_comp_node_stream_changed() override { + mgb_assert(0); + } + // TODO: consider implement following initialization method, + // so InputPlaceholder can be initialized correctly during + // operator insertion + void init_output_comp_node() override { + } + void init_output_format() override { + } + void init_output_dtype() override { + } + void init_output_static_infer_desc() override { + } + void init_output_mem_plan(bool dynamic) override { + MGB_MARK_USED_VAR(dynamic); + mgb_assert(0); + } + void do_execute(ExecEnv &env) override { + mgb_assert(0); + } + +public: + Tensor* m_tensor; + + InputPlaceholder(ComputingGraph& graph, Tensor* tensor = nullptr, + const DeviceTensorND& static_infer_value = {}) + : Super(&graph, {}, "device_value", {}), m_tensor(tensor), + m_static_infer_value(static_infer_value) { + mgb_assert(m_static_infer_value.empty() || + m_static_infer_value.comp_node() == CompNode::default_cpu()); + add_output(None)->add_flag(VarNode::Flag::NO_SYS_MEM_ALLOC); + // never dedup + add_equivalence_component>(this); + } + + static SymbolVar make(ComputingGraph& graph, Tensor& tensor) { + auto opr = graph.insert_opr( + std::make_unique(graph, &tensor)); + auto var = opr->output(0); + auto&& dev_tensor = tensor.dev_tensor(); + var->m_comp_node = dev_tensor.comp_node(); + var->m_shape = dev_tensor.shape(); + var->m_dev_tensor = dev_tensor; + var->reset_dev_tensor_from_tensor(dev_tensor); + return var; + } + + static SymbolVar make(ComputingGraph& graph, const LogicalTensorDesc& desc) { + auto opr = graph.insert_opr( + std::make_unique(graph, nullptr, desc.value)); + auto var = opr->output(0); + var->m_comp_node = desc.comp_node; + var->m_shape = desc.layout; + var->m_dev_tensor.reset({}, TensorLayout(desc.layout.dtype)); + return var; + } + + const DeviceTensorND* get_static_infer_value(bool may_sync) { + if (!m_static_infer_value.empty()) { + return &m_static_infer_value; + } + if (m_tensor && (may_sync || m_tensor->try_get_value())) { + auto&& hv = m_tensor->get_value(); + mgb_assert(!hv.empty()); + m_static_infer_value = hv.proxy_to_default_cpu(); + // steal ownership from shared_ptr + using SP = std::shared_ptr; + auto& sp = const_cast(m_static_infer_value.storage().raw_storage()); + static auto dummy = std::make_shared(); + sp = SP(dummy, sp.get()); + return &m_static_infer_value; + } + return nullptr; + } + +private: + DeviceTensorND m_static_infer_value; +}; +MGB_DYN_TYPE_OBJ_FINAL_IMPL( + ProxyGraph::InputPlaceholder); + +class ProxyGraph::ExecEnv final : public cg::GraphExecutable::ExecEnv { + +public: + void dispatch_on_comp_node(CompNode, Task&& task) override { + task(); + } + + void dispatch_on_comp_node_with_mask(CompNode, Task&& task, + cg::ExecutionMask* mask) override { + mgb_throw_if(mask, GraphError, + "ExecutionMask not supported in imperative mode"); + task(); + } + + void pause_exec() override {} + + void resume_exec() override {} +}; + +class ProxyGraph::StaticInferManager : public cg::static_infer::StaticInferManager { +public: + using Tag = cg::static_infer::Tag; + using ShapeInferDesc = cg::static_infer::ShapeInferDesc; + using ValueInferDesc = cg::static_infer::ValueInferDesc; + using InferType = cg::static_infer::InferType; + using DepVal = cg::static_infer::DepVal; + using DepElement = cg::static_infer::DepElement; + using DepType = cg::static_infer::DepType; + using InpElement = cg::static_infer::InpElement; + + struct Result { + TensorShape shape; + DeviceTensorND value; + }; + + ProxyGraph* owner; + cg::OperatorNodeBase* cur_opr = nullptr; + std::vector> shape_descs; + std::vector> value_descs; + std::vector inferred_outputs; + + StaticInferManager(ProxyGraph* owner_) : owner(owner_) {} + + size_t locate_output(VarNode* var) { + mgb_assert(cur_opr); + auto&& output_vars = cur_opr->output(); + mgb_assert(shape_descs.size() == output_vars.size()); + auto&& it = std::find(output_vars.begin(), output_vars.end(), var); + mgb_assert(it != output_vars.end()); + return it - output_vars.begin(); + } + + void register_shape_infer(Tag dest, const ShapeInferDesc &desc) override { + auto i = locate_output(dest); + mgb_assert(!shape_descs[i]); + shape_descs[i].emplace(desc); + } + + void register_value_infer(Tag dest, const ValueInferDesc &desc) override { + auto i = locate_output(dest); + mgb_assert(!value_descs[i]); + value_descs[i].emplace(desc); + } + + InferType get_infer_type(Tag var) override { + // may be called during get_proxy_opr or make_backward_graph + + // don't let opr apply any immediate optimization + return {InferType::MISSING_INP, InferType::MISSING_INP}; + + if (auto opr = var->owner_opr()->try_cast_final()) { + return {var->shape().ndim ? InferType::CONST : InferType::MISSING_INP, + opr->m_tensor ? InferType::CONST : InferType::MISSING_INP}; + } + if (cur_opr) { + auto&& outputs = cur_opr->output(); + auto&& it = std::find(outputs.begin(), outputs.end(), var); + if (it != outputs.end()) { + return {infer_shape_fallible(var) ? InferType::CONST : InferType::MISSING_INP, + // value inference could be expensive + InferType::MISSING_INP}; + } + } + return {InferType::MISSING_INP, InferType::MISSING_INP}; + } + + void update() { + if (cur_opr != owner->m_cur_opr) { + clear(); + cur_opr = owner->m_cur_opr; + if (cur_opr) { + auto nout = cur_opr->output().size(); + shape_descs.resize(nout); + value_descs.resize(nout); + inferred_outputs.resize(nout); + cur_opr->init_output_static_infer_desc(); + } + } + } + + void clear() { + cur_opr = nullptr; + shape_descs.clear(); + value_descs.clear(); + inferred_outputs.clear(); + } + + template + auto do_infer(Tag dest, bool may_sync) + -> const std::conditional_t* { + // Some infer_func does not use InpVal passed to them, but + // call infer_* on their inputs instead, so dest could be an input. + // It is also possible that an opr call infer_* on its inputs before it + // is inserted + if (auto opr = dest->owner_opr()->try_cast_final()) { + if constexpr (is_shape) { + auto* shp = &dest->shape(); + return shp->ndim ? shp : nullptr; + } else { + return opr->get_static_infer_value(may_sync); + } + } + + mgb_assert(cur_opr); + mgb_assert(cur_opr->output().size() == shape_descs.size()); + + // dest must be an output now + auto i = locate_output(dest); + auto& result = inferred_outputs[i]; + auto& desc = select(shape_descs[i], value_descs[i]); + + // return if no need to call infer_func + if constexpr (is_shape) { + if (result.shape.ndim != 0) { + return &result.shape; + } + } else { + if (!result.value.empty()) { + return &result.value; + } + } + if (!desc) { + return nullptr; + } + + // fill args for infer_func + cg::static_infer::InpVal args{1}; + args.val.reserve(desc->deps.size()); + auto push_shape = [&args](const TensorShape* shape) { + args.val.emplace_back(); + args.val.back().m_shape = shape; + }; + auto push_value = [&args](const DeviceTensorND* value) { + args.val.emplace_back(); + args.val.back().m_value = value; + }; + + for (auto&& dep : desc->deps) { + if (auto opr = dep.dest->owner_opr()->template try_cast_final()) { + if (dep.type == DepType::SHAPE) { + if (dep.dest->shape().ndim) { + push_shape(&dep.dest->shape()); + } else { + return nullptr; + } + } else { + if (auto* p = opr->get_static_infer_value(may_sync)) { + push_value(p); + } else { + return nullptr; + } + } + continue; + } + + // dep must be an output + if (dep.type == DepType::SHAPE) { + if (auto* p = do_infer(dep.dest, may_sync)) { + push_shape(p); + } else { + return nullptr; + } + } else { + if (auto* p = do_infer(dep.dest, may_sync)) { + push_value(p); + } else { + return nullptr; + } + } + } + + // call infer_func + if constexpr (is_shape) { + if (!desc->infer_func(result.shape, args)) { + mgb_log_warn("something is missing for shape inference of %s", + cur_opr->dyn_typeinfo()->name); + return nullptr; + } + return &result.shape; + } else { + if (!desc->infer_func(result.value, args)) { + mgb_log_warn("something is missing for value inference of %s", + cur_opr->dyn_typeinfo()->name); + return nullptr; + } + return &result.value; + } + } + + const TensorShape& infer_shape(Tag var) override { + auto* p = do_infer(var, true); + mgb_assert(p, "failed to infer shape for %s", var->name().c_str()); + return *p; + } + const TensorShape* infer_shape_fallible(Tag var) override { + return do_infer(var, false); + } + const DeviceTensorND& infer_value(Tag var) override { + auto* p = do_infer(var, true); + mgb_assert(p, "failed to infer value for %s", var->name().c_str()); + return *p; + } + const DeviceTensorND* infer_value_fallible(Tag var) override { + return do_infer(var, false); + } + + DepVal get_rt_static_source_deps(const DepElement&) override {mgb_assert(0);} +}; + +class ProxyGraph::SeqCompNodeOptimizer : public cg::SeqCompNodeOptimizer { + void register_stream_var(VarNode*, StreamPropType) override {} + void register_propagate_function(VarNode*, PropFunction) override {} + StreamPropType stream_prop_type(VarNode*) override {mgb_assert(0);} +}; + +class ProxyGraph::ProxyGraphImpl : public cg::ComputingGraph { + static std::atomic m_node_id; + ProxyGraph* m_owner; + MemPool m_var_node_pool; + std::vector> m_opr_refkeeper; + CompNode::UnorderedSet m_used_comp_node; + VarReceiverInfo m_var_receiver_info; +public: + ~ProxyGraphImpl() { + mgb_assert(!m_owner->m_cur_opr); + if (is_finalized()) return; + for (auto&& i : m_used_comp_node) { + if (i.device_type() == CompNode::DeviceType::CUDA) continue; + i.sync(); + } + } + + ProxyGraphImpl(ProxyGraph* owner) : m_owner(owner) { + options().imperative_proxy_graph = true; + options().log_level = 0; + m_var_receiver_info.dev_value = 1; + m_var_receiver_info.allow_empty_value = 1; + } + + static std::unique_ptr make(ProxyGraph* owner) { + return std::make_unique(owner); + } + + void add_used_comp_node(CompNode cn) { + m_used_comp_node.insert(cn); + } + + bool invalid() const { + return is_finalized() || nr_oprs_in_graph() > m_owner->m_max_op_cnt; + } + + size_t next_node_id() override { + return m_node_id.fetch_add(1); + } + + void* alloc_varnode_storage() override { + return m_var_node_pool.alloc_raw(); + } + + void free_varnode_storage(void* ptr) override { + m_var_node_pool.free_raw(ptr); + } + + OperatorNodeBase* insert_opr(std::unique_ptr opr_uniqp) override { + mgb_assert(!is_finalized()); + auto opr = opr_uniqp.get(); + + if (!opr->inserted_in_graph()) { + m_opr_refkeeper.emplace_back(std::move(opr_uniqp)); + opr->set_inserted_in_graph(); + opr->init_output_comp_node(); + opr->init_output_dtype(); + opr->init_output_format(); + } + return opr; + } + + cg::static_infer::StaticInferManager& static_infer_manager() override { + return *m_owner->m_static_infer_manager; + } + + cg::SeqCompNodeOptimizer& seq_comp_node_optimizer() override { + return *m_owner->m_seq_comp_node_optimizer; + } + + std::shared_ptr on_comp_node_finalize() override { + // FIXME: mutex + mgb_assert(!m_owner->m_cur_opr); + // finalize would do sync first + m_opr_refkeeper.clear(); + return {}; + } + + const VarReceiverInfo& var_receiver_in_current_comp_seq( + const VarNode *var) const override { + return m_var_receiver_info; + } + + size_t nr_oprs_in_graph() const override {return m_opr_refkeeper.size();} + + std::unique_ptr compile(const OutputSpec &out_spec) override {mgb_assert(0);} + SmallVector> compile_multi_part( + const SmallVector& out_specs) override {mgb_assert(0);} + cg::AsyncExecutable* current_comp_seq() override {mgb_assert(0);} + std::string get_mem_allocation_info() const override {mgb_assert(0);} + VarNode* find_var_by_id(size_t id) const override {mgb_assert(0);} + void share_device_memory_with(ComputingGraph &other) override {mgb_assert(0);} + void set_device_memory_allocator( + std::shared_ptr allocator) override {mgb_assert(0);} + size_t get_device_memory_size(CompNode cn) override {mgb_assert(0);} + size_t clear_device_memory() override {mgb_assert(0);} + void set_as_subgraph(ComputingGraph &par_graph) override {mgb_assert(0);} + void record_async_error(std::unique_ptr async_exc) override {mgb_assert(0);} +}; + +std::atomic ProxyGraph::ProxyGraphImpl::m_node_id = 0; + +ProxyGraph::ProxyGraph() : + m_graph(ProxyGraphImpl::make(this)), + m_env{new ExecEnv}, + m_static_infer_manager(new StaticInferManager(this)), + m_seq_comp_node_optimizer(new SeqCompNodeOptimizer()) { +} + +void ProxyGraph::reset() { + mgb_assert(!m_cur_opr); + m_graph = ProxyGraphImpl::make(this); +} + +ProxyGraph* ProxyGraph::get_default_graph() { + static thread_local ProxyGraph inst; + if (inst.m_graph->invalid()) { + inst.reset(); + } + return &inst; +} + +class ProxyGraph::CurOprGuard { +public: + CurOprGuard(ProxyGraph* owner, OperatorNodeBase* opr) : m_owner(owner) { + mgb_assert(!owner->m_cur_opr); + owner->m_cur_opr = opr; + } + CurOprGuard(const CurOprGuard&) = delete; + ~CurOprGuard() { + m_owner->cleanup(); + } +private: + ProxyGraph* m_owner; +}; + +#define CUR_OPR_GUARD(opr) CurOprGuard MGB_TOKENPASTE2(__cur_opr_guard_, __LINE__)(this, opr) + +/*********************** Physical Tensor Impl ***********************/ + +SmallVector ProxyGraph::infer_output_attrs( + const OpDef& opdef, + const SmallVector& inputs) { + SmallVector ret; + CUR_OPR_GUARD(get_proxy_opr(opdef, inputs)); + do_shape_infer(true); + for (auto&& i: m_cur_opr->usable_output()) { + mgb_assert(i->dtype().valid() && i->comp_node().valid()); + mgb_assert(i->shape().ndim || i->contain_flag(VarNode::Flag::NO_SYS_MEM_ALLOC)); + ret.push_back({{i->shape(), i->dtype()}, i->comp_node()}); + } + return ret; +} + +void ProxyGraph::invoke_op(const OpDef& opdef, + const SmallVector& inputs, + const SmallVector& outputs) { + CUR_OPR_GUARD(get_proxy_opr(opdef, inputs)); + init_output_tensor(outputs); + for (auto oup : m_cur_opr->output()) { + m_graph->add_used_comp_node(oup->comp_node()); + } + m_cur_opr->execute(*m_env); +} + +void ProxyGraph::cleanup() { + if (m_cur_opr) { + for (auto&& i : m_cur_opr->input()) { + i->m_dev_tensor.storage({}); + } + for (auto&& i : m_cur_opr->output()) { + i->m_dev_tensor.storage({}); + } + m_static_infer_manager->clear(); + } + m_cur_opr = nullptr; +} + +void ProxyGraph::init_output_tensor(const SmallVector& outputs) { + // get proxy opr + auto proxy = m_cur_opr; + + do_shape_infer(true); + + size_t j = 0; + for (auto&& var : proxy->output()) { + auto &&chk = var->m_mem_plan.reset_from_owner_var().chunk(); + if (var->contain_flag(VarNode::Flag::VOLATILE_CONTENT)) { + // alloc workspace + TensorLayout layout{var->shape(), var->dtype(), var->format()}; + DeviceTensorStorage storage; + storage.comp_node(var->comp_node()) + .ensure_size(layout.dtype.size(layout.total_nr_elems())); + var->m_dev_tensor.reset(storage, layout); + } else { + mgb_assert(j < outputs.size()); + auto &&tensor = outputs[j]; + auto &&layout = tensor->layout(); + mgb_assert(var->comp_node() == tensor->comp_node() && + var->shape().eq_shape(layout) && + var->dtype() == layout.dtype); + var->assign_dev_tensor_from_tensor(tensor->dev_tensor()); + ++ j; + } + chk.mem_alloc_status.set_from_owner_var(); + } + mgb_assert(j == outputs.size()); + + // Memory forwarding was bypassed in megbrain with graph option + // imerative_proxy_graph on, here we call mem_plan_fwd_in2out_readonly + // to initialize some opr(e.g. Subtensor)'s internal state + // TODO: implement memory forwarding + proxy->mem_plan_fwd_in2out_readonly(); + { + // some opr (e.g. Reduce) rely on on_mem_status_changed to set + // input/output tensor corretly, since we bypass var_node_mem_mgr + // on_mem_status_changed should be called here + auto&& cb = proxy->get_opr_event_callback().on_mem_status_changed; + if (cb.valid()) { + cb.val()(); + } + } +} + +cg::OperatorNodeBase* ProxyGraph::get_proxy_opr( + const OpDef& opdef, + const SmallVector& inputs) { + VarNodeArray vinputs(inputs.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + vinputs[i] = InputPlaceholder::make(*m_graph, *inputs[i]).node(); + } + auto opr = OpDef::apply_on_var_node(opdef, vinputs); + mgb_assert(opr->dyn_typeinfo() != InputPlaceholder::typeinfo()); + for (auto &&i : opr->input()) { + mgb_assert(i->owner_opr()->dyn_typeinfo() == + InputPlaceholder::typeinfo()); + } + return opr; +} + +/*********************** Logical Tensor Impl ***********************/ + +size_t ProxyGraph::get_opr_output_size(const OpDef& opdef, + const SmallVector& inputs) { + return get_proxy_opr(opdef, inputs)->usable_output().size(); +} + +SmallVector ProxyGraph::infer_output_attrs_fallible( + const OpDef& opdef, + const SmallVector& inputs) { + auto opr = get_proxy_opr(opdef, inputs); + CUR_OPR_GUARD(opr); + do_shape_infer(false); + SmallVector ret; + for (auto&& i : opr->usable_output()) { + ret.push_back({{i->shape(), i->dtype()}, i->comp_node()}); + } + return ret; +} + +struct ProxyGraph::GradGraph { + cg::VarNodeArray inputs; + cg::VarNodeArray outputs; + cg::VarNodeArray output_grads; + cg::VarNode* grad; +}; + +BackwardGraphResult +ProxyGraph::make_backward_graph( + const OpDef& opdef, + const SmallVector& input_descs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad) { + ThinHashMap var2idx; + auto push = [&var2idx, cnt=0](VarNode* var) mutable { + auto&& ret = var2idx.emplace(var, cnt ++); + mgb_assert(ret.second, "var %s has been already inserted", var->cname()); + return ret.first->second; + }; + auto inputs = make_input_place_holders(input_descs); + auto fwd = OpDef::apply_on_var_node(opdef, inputs); + auto&& outputs = fwd->usable_output(); + SmallVector output_descs; + for (auto&& i : outputs) { + output_descs.push_back({TensorLayout{i->dtype()}, i->comp_node()}); + } + auto output_grads = make_input_place_holders(output_descs); + mgb_assert(output_grads.size() == output_has_grad.size()); + bool any_input_has_grad = false; + for (size_t i = 0; i < output_grads.size(); ++ i) { + if (!output_has_grad[i]) { + output_grads[i] = nullptr; + } else { + any_input_has_grad = true; + } + } + if (!any_input_has_grad) { + return {}; + } + auto* gfunc = cg::lookup_grad_func(fwd->dyn_typeinfo()); + + BackwardGraphResult result; + auto&& backward = BackwardGraph::make(); + auto&& igraph = backward->cast_final_safe().graph(); + + size_t nr_backward_graph_inputs = 0; + auto gen_expr = [this, &var2idx, &igraph, &push, &fwd, + &nr_backward_graph_inputs](cg::OperatorNodeBase* op) { + if (auto t = as_tensor(op)) { + mgb_assert(op->output().size() == 1); + igraph.constants.emplace_back(push(op->output(0)), std::move(t)); + } else if (op->same_type()) { + ++ nr_backward_graph_inputs; + push(op->output(0)); + } else { + std::vector inputs, outputs; + for (auto &&i : op->input()) { + if (i->owner_opr() == fwd) { + if (var2idx.find(i) == var2idx.end()) { + ++ nr_backward_graph_inputs; + push(i); + } + } + inputs.push_back(var2idx.at(i)); + } + for (auto &&i : op->usable_output()) { + outputs.push_back(push(i)); + } + igraph.exprs.emplace_back(OpDef::make_from_op_node(op), inputs, outputs); + } + }; + + // set backward graph outputs + cg::DepOprIter iter{gen_expr}; + iter.set_visited(fwd); + result.input_has_grad.resize(inputs.size()); + + VarNodeArray output_grads_with_unused_var; + { + auto iter = output_grads.begin(); + for (auto&& i : fwd->output()) { + if (i->contain_flag(VarNode::Flag::VOLATILE_CONTENT)) { + // the var node with VOLATILE_CONTENT(e.g. workspace + // or an empty var) would not be considered as a normal + // output, so its grad is always NULL + output_grads_with_unused_var.push_back(nullptr); + } else { + output_grads_with_unused_var.push_back(*iter); + ++ iter; + } + } + mgb_assert(iter == output_grads.end()); + } + + Maybe grad_results; + for (size_t i = 0; i < inputs.size(); ++ i) { + VarNode* grad; + if (grad_results.valid()) { + grad = grad_results.val()[i]; + } else { + auto res = (*gfunc)(fwd, i, output_grads_with_unused_var); + if (res.from_single()) { + grad = res.single(); + } else { + grad_results.emplace(res.all(fwd)); + grad = grad_results.val()[i]; + } + } + if (grad && !grad->owner_opr()->same_type() + && input_requires_grad[i]) { + mgb_assert(!grad->owner_opr()->same_type(), + "gradient of operator %s w.r.t. input #%lu is " + "either not well defined or not implemented", + fwd->dyn_typeinfo()->name, i); + iter.add(grad); + igraph.outputs.push_back(var2idx.at(grad)); + result.input_has_grad[i] = true; + } else { + result.input_has_grad[i] = false; + } + } + if (igraph.outputs.empty()) { + return {}; + } + + // set backward graph inputs + igraph.inputs.reserve(nr_backward_graph_inputs); + result.save_for_backward.reserve(nr_backward_graph_inputs); + auto write_inputs = [&igraph, &var2idx, &result](const VarNodeArray& vars) { + for (auto&& i: vars) { + auto&& iter = var2idx.find(i); + if (iter != var2idx.end()) { + igraph.inputs.push_back(iter->second); + result.save_for_backward.push_back(true); + } else { + result.save_for_backward.push_back(false); + } + } + }; + write_inputs(inputs); + write_inputs(outputs); + write_inputs(output_grads); + mgb_assert(igraph.inputs.size() == nr_backward_graph_inputs); + + auto treat_as_single = [](auto&& igraph) { + if (igraph.exprs.size() != 1) + return false; + auto&& expr = igraph.exprs[0]; + auto&& expr_inputs = std::get<1>(expr); + if (expr_inputs.size() != igraph.inputs.size()) { + return false; + } + for (size_t i = 0; i < expr_inputs.size(); ++ i) { + if (igraph.inputs[i] != expr_inputs[i]) { + return false; + } + } + auto&& expr_outputs = std::get<2>(expr); + if (expr_outputs.size() != igraph.outputs.size()) { + return false; + } + for (size_t i = 0; i < expr_outputs.size(); ++ i) { + if (igraph.outputs[i] != expr_outputs[i]) { + return false; + } + } + return true; + }; + if (treat_as_single(igraph)) { + result.backward = std::get<0>(igraph.exprs[0]); + } else { + result.backward = backward; + } + return result; +} + +cg::OperatorNodeBase* ProxyGraph::get_proxy_opr(const OpDef& opdef, + const SmallVector& inputs) { + mgb_assert(!m_cur_opr); + auto vinputs = make_input_place_holders(inputs); + return OpDef::apply_on_var_node(opdef, vinputs); +} + +VarNodeArray ProxyGraph::make_input_place_holders(const SmallVector& inputs) { + VarNodeArray vinputs(inputs.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + vinputs[i] = InputPlaceholder::make(*m_graph, inputs[i]).node(); + } + return vinputs; +} + +/*********************** Common Impl ***********************/ + +void ProxyGraph::do_shape_infer(bool sync_value) { + m_static_infer_manager->update(); + + for (auto* var : m_cur_opr->output()) { + if (sync_value) { + var->shape(m_static_infer_manager->infer_shape(var)); + } else if (auto* shape = m_static_infer_manager->infer_shape_fallible(var)) { + var->shape(*shape); + } + } +} + +TensorPtr ProxyGraph::as_tensor(cg::OperatorNodeBase* opr, bool share) { + // TODO : maybe some tensor should copy value from origin opr rather than + // share the RawStorage + mgb_assert(share, "can't share memory with opr %s", opr->cname()); + if (opr->same_type()) { + auto&& dv = opr->cast_final_safe().value(); + HostTensorND hv(dv.comp_node(), dv.shape(), dv.dtype()); + const DeviceTensorND* cpu_value; + // get host value + if (opr->owner_graph() == m_graph.get()) { + CUR_OPR_GUARD(opr); + m_static_infer_manager->update(); + cpu_value = m_static_infer_manager->infer_value_fallible(opr->output(0)); + } else { + cpu_value = opr->owner_graph()->static_infer_manager().infer_value_fallible(opr->output(0)); + } + mgb_assert(cpu_value); + mgb_assert(cpu_value->comp_node() == CompNode::default_cpu()); + // default_cpu is synchronous with respect to caller + hv.proxy_to_default_cpu().copy_from_fixlayout(*cpu_value); + return Tensor::make(dv, hv); + } else if (opr->same_type()) { + return Tensor::make(opr->cast_final_safe().get_dev_tensor()); + } else { + return {}; + } +} + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/proxy_graph.h b/imperative/src/impl/proxy_graph.h new file mode 100644 index 00000000..c26cc32f --- /dev/null +++ b/imperative/src/impl/proxy_graph.h @@ -0,0 +1,104 @@ +/** + * \file src/core/impl/imperative/proxy_graph.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative.h" +#include "megbrain/graph/cg.h" +#include "megbrain/graph/grad_impl.h" +#include "megbrain/comp_node.h" + +#include "megbrain/imperative/ops/backward_graph.h" + +namespace mgb { +namespace imperative { + +class ProxyGraph : public NonCopyableObj { +public: + static ProxyGraph* get_default_graph(); + + /********************** Physical Tensor API **********************/ + + SmallVector infer_output_attrs( + const OpDef& opdef, + const SmallVector& inputs); + + void invoke_op( + const OpDef& opdef, + const SmallVector& inputs, + const SmallVector& outputs); + + BackwardGraphResult make_backward_graph( + const OpDef& opdef, + const SmallVector& input_descs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad); + + /********************** Logical Tensor API **********************/ + + size_t get_opr_output_size( + const OpDef& opdef, + const SmallVector& inputs); + + SmallVector infer_output_attrs_fallible( + const OpDef& opdef, + const SmallVector& inputs); + +private: + ProxyGraph(); + + class ProxyGraphImpl; + class ExecEnv; + class StaticInferManager; + class SeqCompNodeOptimizer; + class InputPlaceholder; + struct ProxyGraphInst; + struct GradGraph; + struct CurOprGuard; + + void reset(); + + /********************** Physical Tensor Helper **********************/ + + void cleanup(); + + void init_output_tensor( + const SmallVector& outputs); + + cg::OperatorNodeBase* get_proxy_opr( + const OpDef& opdef, + const SmallVector& inputs); + + /********************** Logical Tensor Helper **********************/ + + cg::OperatorNodeBase* get_proxy_opr( + const OpDef& opdef, + const SmallVector& inputs); + + cg::VarNodeArray make_input_place_holders( + const SmallVector& inputs); + + /********************** Common Helper **********************/ + + void do_shape_infer(bool sync_value); + + TensorPtr as_tensor(cg::OperatorNodeBase* opr, bool share=true); + + cg::OperatorNodeBase* m_cur_opr = nullptr; + std::unique_ptr m_graph; + size_t m_max_op_cnt = 1000; + std::unique_ptr m_env; + std::unique_ptr m_static_infer_manager; + std::unique_ptr m_seq_comp_node_optimizer; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/impl/proxy_graph_detail.cpp b/imperative/src/impl/proxy_graph_detail.cpp new file mode 100644 index 00000000..3fa962cf --- /dev/null +++ b/imperative/src/impl/proxy_graph_detail.cpp @@ -0,0 +1,124 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./proxy_graph.h" +#include "./proxy_graph_detail.h" + +namespace mgb { +namespace imperative { +namespace proxy_graph_detail { + +namespace { +SmallVector to_raw_ptr_array( + const SmallVector& inputs, + bool ensure_storage=true) { + SmallVector ret; + for (auto&& i : inputs) { + mgb_assert(i); + ret.push_back(i.get()); + if (ensure_storage) { + // apply lazy allocation + i->blob()->storage(); + } + } + return ret; +} +} // anonymous namespace + +void exec(const OpDef& def, + const SmallVector& inputs_, + const SmallVector& outputs_) { + auto&& graph = ProxyGraph::get_default_graph(); + auto inputs = to_raw_ptr_array(inputs_), + outputs = to_raw_ptr_array(outputs_); + CompNode::UnorderedSet used_cns; + for (auto&& out: outputs) { + auto cn = out->comp_node(); + if (used_cns.insert(cn).second) { + for (auto&& in: inputs) { + if (in->comp_node() != cn) { + auto&& e = in->get_or_create_event(); + e->device_wait_by(cn); + } + } + } + } + graph->invoke_op(def, inputs, outputs); + for (auto&& cn: used_cns) { + for (auto&& in: inputs) { + if (in->comp_node() != cn) { + in->add_release_callback(cn); + } + } + } +} + +SmallVector infer_output_attrs(const OpDef& def, + const SmallVector& inputs) { + auto&& graph = ProxyGraph::get_default_graph(); + return graph->infer_output_attrs(def, to_raw_ptr_array(inputs)); +} + +SmallVector +infer_output_attrs_fallible(const OpDef& def, + const SmallVector& inputs) { + auto&& graph = ProxyGraph::get_default_graph(); + return graph->infer_output_attrs_fallible(def, inputs); +} + +namespace { + +size_t get_backward_graph_hash_key(const OpDef& def, + const SmallVector& inputs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad) { + XXHash state; + size_t length = 0, data[3 + 2 * inputs.size()]; + data[length ++] = def.hash(); + for (auto &&i : inputs) { + data[length ++] = mgb::hash(i.layout.dtype.handle()); + data[length ++] = mgb::hash(i.comp_node); + } + data[length ++] = mgb::hash(input_requires_grad); + data[length ++] = mgb::hash(output_has_grad); + mgb_assert(length == 3 + 2 * inputs.size()); + state.update(data, length * sizeof(size_t)); + return state.digest(); +} + +struct BackwardGraphCache : std::unordered_map, CompNodeDepedentObject { + std::shared_ptr on_comp_node_finalize() override { + clear(); + return {}; + } +} backward_graph_cache; + +} // anonymous namespace + +BackwardGraphResult +make_backward_graph(const OpDef& def, + const SmallVector& inputs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad) { + auto&& graph = ProxyGraph::get_default_graph(); + auto hash_key = get_backward_graph_hash_key(def, inputs, input_requires_grad, output_has_grad); + auto&& iter = backward_graph_cache.find(hash_key); + if (iter != backward_graph_cache.end()) { + return iter->second; + } + auto res = graph->make_backward_graph(def, inputs, input_requires_grad, output_has_grad); + backward_graph_cache.emplace(hash_key, res); + return res; +} + +} // namespace proxy_graph_detail +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} \ No newline at end of file diff --git a/imperative/src/impl/proxy_graph_detail.h b/imperative/src/impl/proxy_graph_detail.h new file mode 100644 index 00000000..16c05a6e --- /dev/null +++ b/imperative/src/impl/proxy_graph_detail.h @@ -0,0 +1,39 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { +namespace proxy_graph_detail { + +void exec(const OpDef& def, + const SmallVector& inputs_, + const SmallVector& outputs_); + +SmallVector infer_output_attrs(const OpDef& def, + const SmallVector& inputs); + +SmallVector +infer_output_attrs_fallible(const OpDef& def, + const SmallVector& inputs); + +BackwardGraphResult +make_backward_graph(const OpDef& def, + const SmallVector& inputs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad); + +} // namespace proxy_graph_detail +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} \ No newline at end of file diff --git a/imperative/src/include/megbrain/imperative.h b/imperative/src/include/megbrain/imperative.h new file mode 100644 index 00000000..ac3dceda --- /dev/null +++ b/imperative/src/include/megbrain/imperative.h @@ -0,0 +1,16 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/physical_tensor.h" +#include "megbrain/imperative/op_def.h" +#include "megbrain/imperative/opdef/all.h" + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/blob_manager.h b/imperative/src/include/megbrain/imperative/blob_manager.h new file mode 100644 index 00000000..61dbd540 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/blob_manager.h @@ -0,0 +1,35 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/physical_tensor.h" + +namespace mgb { +namespace imperative { + +class BlobManager : public NonCopyableObj { +public: + virtual ~BlobManager() = default; + + static BlobManager* inst(); + + virtual void alloc_with_defrag(Blob* blob, size_t size) = 0; + + virtual void register_blob(Blob* blob) = 0; + + virtual void unregister_blob(Blob* blob) = 0; + + virtual void set_enable(bool flag) = 0; + + virtual void defrag(const CompNode& cn) = 0; +}; + +} // namespace imperative +} // namespace mgb diff --git a/imperative/src/include/megbrain/imperative/interpreter.h b/imperative/src/include/megbrain/imperative/interpreter.h new file mode 100644 index 00000000..c9124a0c --- /dev/null +++ b/imperative/src/include/megbrain/imperative/interpreter.h @@ -0,0 +1,39 @@ +#include + +#include "megbrain/imperative/op_def.h" + +namespace mgb::imperative::interpreter { + +struct Interpreter { + using Handle = void*; + + struct Channel { + virtual ~Channel() = default; + + virtual Handle put(const HostTensorND& value) = 0; + + virtual void del(Handle) = 0; + + virtual SmallVector apply_op( + std::shared_ptr op, + const SmallVector& inputs) = 0; + + virtual HostTensorND get_value(Handle) = 0; + virtual TensorShape get_shape(Handle) = 0; + virtual DType get_dtype(Handle) = 0; + virtual CompNode get_device(Handle) = 0; + + virtual DeviceTensorND get_dev_tensor(Handle) = 0; + + virtual void sync() = 0; + virtual void close() = 0; + + virtual void config_async_level(int level) = 0; + }; + + virtual std::unique_ptr create_channel() = 0; + + static Interpreter& inst(); +}; + +} // namespace mgb::imperative::interpreter diff --git a/imperative/src/include/megbrain/imperative/op_def.h b/imperative/src/include/megbrain/imperative/op_def.h new file mode 100644 index 00000000..f742fc6b --- /dev/null +++ b/imperative/src/include/megbrain/imperative/op_def.h @@ -0,0 +1,91 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/graph.h" +#include "megbrain/imperative/physical_tensor.h" + +namespace mgb { +namespace imperative { + +class OpDef; +struct OpTrait; + +struct BackwardGraphResult { + std::shared_ptr backward; + std::vector save_for_backward; + std::vector input_has_grad; +}; + +class OpDef : public Hashable { + mutable const OpTrait* m_trait = nullptr; +public: + virtual ~OpDef() = default; + + virtual std::shared_ptr copy() const = 0; + + static std::shared_ptr make_from_op_node( + cg::OperatorNodeBase* node); + + static SmallVector apply_on_physical_tensor( + const OpDef& def, + const SmallVector& inputs); + + static void exec( + const OpDef& def, + const SmallVector& inputs, + const SmallVector& outputs); + + static cg::OperatorNodeBase* apply_on_var_node( + const OpDef& def, + const VarNodeArray& inputs); + + static SmallVector infer_output_attrs_fallible( + const OpDef& def, + const SmallVector& inputs); + + static SmallVector infer_output_attrs( + const OpDef& def, + const SmallVector& inputs); + + static BackwardGraphResult make_backward_graph( + const OpDef& def, + const SmallVector& inputs, + const SmallVector& input_requires_grad, + const SmallVector& output_has_grad); + + const OpTrait* trait() const; + + virtual size_t hash() const { + mgb_throw(MegBrainError, "not implemented"); + } + + virtual bool is_same_st(const Hashable&) const { + mgb_throw(MegBrainError, "not implemented"); + } +}; + +template +class OpDefImplBase : public OpDef { +public: + virtual std::shared_ptr copy() const override { + return std::shared_ptr(new T(this->cast_final_safe())); + } + + template + static std::shared_ptr make(const Args& ...args) { + return std::shared_ptr(new T(args...)); + } +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/opr_utility.h b/imperative/src/include/megbrain/imperative/opr_utility.h new file mode 100644 index 00000000..f2c94dfe --- /dev/null +++ b/imperative/src/include/megbrain/imperative/opr_utility.h @@ -0,0 +1,95 @@ +/** + * \file src/core/include/megbrain/opr_utility.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/graph.h" +#include "megbrain/graph/event.h" +#include "megbrain/opr/internal/identical_fwd.h" +#include "megbrain/opr/internal/param_tag_defs.h" +#include "megbrain/opr/internal/megdnn_opr_wrapper.h" +#include "megbrain/opr/param_defs.h" + +#include "megdnn/oprs/utils.h" + +namespace mgb { +namespace opr { +/* + * InputCallback, OutputCallback, NopCallback + * Intended for runtime data exchange with Python. + */ + +MGB_DEFINE_OPR_CLASS(InputCallback, cg::SingleCNOperatorNodeBase) // { +public: + using callback_t = thin_function; + InputCallback(cg::ComputingGraph& graph, + callback_t callback, + const VarNodeArray& inputs, + const OperatorNodeConfig &config); + static SymbolVarArray make(cg::ComputingGraph& graph, + callback_t callback, + CompNode comp_node, + DType dtype, + const SymbolVarArray& inputs = {}); +protected: + void scn_do_execute() override; + void init_output_static_infer_desc() override; + NodeProp* do_make_node_prop() const override; +private: + callback_t m_callback; +}; + +MGB_DEFINE_OPR_CLASS(OutputCallback, cg::SingleCNOperatorNodeBase) // { +public: + using callback_t = thin_function; + struct Param { + callback_t callback; + bool borrow = false; + }; + OutputCallback(Param param, + const VarNodeArray& inputs, + const OperatorNodeConfig &config); + static SymbolVar make(Param param, + const SymbolVarArray& inputs); + static SymbolVar make(Param param, + SymbolVar input) { + return make(std::move(param), SymbolVarArray{input}); + } +protected: + void scn_do_execute() override; + void init_output_static_infer_desc() override; + NodeProp* do_make_node_prop() const override; +private: + Param m_param; +}; + +MGB_DEFINE_OPR_CLASS(NopCallback, cg::OperatorNodeBase) // { +public: + using callback_t = thin_function; + NopCallback(cg::ComputingGraph& graph, + callback_t callback, + const VarNodeArray& inputs, + const OperatorNodeConfig &config); + static SymbolVar make(cg::ComputingGraph& graph, + callback_t callback, + CompNode comp_node, + const SymbolVarArray& inputs = {}); +protected: + void do_execute(ExecEnv &env) override; + void init_output_static_infer_desc() override; + void init_output_comp_node() override; + void on_output_comp_node_stream_changed() override; + NodeProp* do_make_node_prop() const override; +private: + callback_t m_callback; +}; +} // namespace opr +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/ops/backward_graph.h b/imperative/src/include/megbrain/imperative/ops/backward_graph.h new file mode 100644 index 00000000..4f5124f1 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/backward_graph.h @@ -0,0 +1,58 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { + +// a special OpDef used for taking gradient on physical tensor +struct BackwardGraph final : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; +public: + struct InternalGraph { + // op, inputs, outputs + using Expr = std::tuple, + std::vector, std::vector>; + std::vector exprs; + + // index array of input nodes + std::vector inputs; + + // index array of output nodes + std::vector outputs; + + // pair of (node index, correspending constant) + std::vector> constants; + + SmallVector + apply(const SmallVector& inputs) const; + + SmallVector + infer_attrs(const SmallVector& inputs) const; + }; + + const InternalGraph& graph() const { + return m_graph; + } + + InternalGraph& graph() { + return m_graph; + } + +private: + InternalGraph m_graph; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/ops/collective_comm.h b/imperative/src/include/megbrain/imperative/ops/collective_comm.h new file mode 100644 index 00000000..4d6c515b --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/collective_comm.h @@ -0,0 +1,56 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" +#include "megbrain/opr/param_defs.h" + +namespace mgb { +namespace imperative { + +class CollectiveComm : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; + +public: + CollectiveComm() = default; + CollectiveComm(const std::string& key_, size_t nr_devices_, + uint32_t rank_, bool is_root_, bool local_grad_, + const std::string& addr_, uint32_t port_, + const megdnn::param::CollectiveComm::Mode& mode_, + const DType& dtype_, const std::string& backend_, + const std::string& comp_node_) + : key(key_), + nr_devices(nr_devices_), + rank(rank_), + is_root(is_root_), + local_grad(local_grad_), + addr(addr_), + port(port_), + mode(mode_), + dtype(dtype_), + backend(backend_), + comp_node(comp_node_) {} + std::string key; + size_t nr_devices; + uint32_t rank; + bool is_root; + bool local_grad; + std::string addr; + uint32_t port; + megdnn::param::CollectiveComm::Mode mode; + DType dtype; + std::string backend; + std::string comp_node; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/ops/cond_take.h b/imperative/src/include/megbrain/imperative/ops/cond_take.h new file mode 100644 index 00000000..64cdce0e --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/cond_take.h @@ -0,0 +1,22 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb::imperative { + +class CondTake : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; +public: + CondTake() = default; +}; + +} // namespace mgb::imperative diff --git a/imperative/src/include/megbrain/imperative/ops/io_remote.h b/imperative/src/include/megbrain/imperative/ops/io_remote.h new file mode 100644 index 00000000..83e58673 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/io_remote.h @@ -0,0 +1,61 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { + +class RemoteSend : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; + +public: + RemoteSend() = default; + RemoteSend(const std::string& key_, const std::string& addr_, + uint32_t port_, uint32_t rank_to_) + : key(key_), + addr(addr_), + port(port_), + rank_to(rank_to_) {} + std::string key; + std::string addr; + uint32_t port; + uint32_t rank_to; +}; + +class RemoteRecv : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; + +public: + RemoteRecv() = default; + RemoteRecv(const std::string& key_, const std::string& addr_, + uint32_t port_, uint32_t rank_from_, TensorShape shape_, + CompNode cn_, const DType& dtype_) + : key(key_), + addr(addr_), + port(port_), + rank_from(rank_from_), + cn(cn_), + shape(shape_), + dtype(dtype_) {} + std::string key; + std::string addr; + uint32_t port; + uint32_t rank_from; + CompNode cn; + TensorShape shape; + DType dtype; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/ops/nms.h b/imperative/src/include/megbrain/imperative/ops/nms.h new file mode 100644 index 00000000..80fcc642 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/nms.h @@ -0,0 +1,26 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb::imperative { + +class NMSKeep : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; +public: + float iou_thresh; //!< IoU threshold for overlapping + uint32_t max_output; //!< max number of output boxes per batch + NMSKeep() = default; + NMSKeep(float iou_thresh_, uint32_t max_output_): + iou_thresh(iou_thresh_), max_output(max_output_) {} +}; + +} // namespace mgb::imperative diff --git a/imperative/src/include/megbrain/imperative/ops/opr_attr.h b/imperative/src/include/megbrain/imperative/ops/opr_attr.h new file mode 100644 index 00000000..5c8aa03a --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/opr_attr.h @@ -0,0 +1,53 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { + +struct OprAttr : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; +public: + using Type = std::string; + struct Param : public std::vector { + template + void write_pod(const T& data) { + static_assert(!std::is_pointer::value && is_location_invariant::value); + const char* ptr = static_cast(static_cast(&data)); + insert(end(), ptr, ptr + sizeof(T)); + } + template + void write_pod(const T& data, const Args& ...args) { + write_pod(data); + write_pod(args...); + } + }; + + Type type; + Param param; + cg::OperatorNodeConfig config; + + OprAttr() = default; + OprAttr(const Type& t): type(t){} + OprAttr(const Type& t, const Param& p, const cg::OperatorNodeConfig& c): + type(t), param(p), config(c) {} + + std::string repr() const; + + bool is_same_st(const Hashable& rhs) const; + size_t hash() const; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/ops/tensor_manip.h b/imperative/src/include/megbrain/imperative/ops/tensor_manip.h new file mode 100644 index 00000000..c559df1c --- /dev/null +++ b/imperative/src/include/megbrain/imperative/ops/tensor_manip.h @@ -0,0 +1,56 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/imperative/op_def.h" + +namespace mgb::imperative { + +class GetVarShape : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; +public: + GetVarShape() = default; + + size_t hash() const override { + return reinterpret_cast(dyn_typeinfo()); + } + + bool is_same_st(const Hashable& rhs) const override { + return rhs.dyn_typeinfo() == dyn_typeinfo(); + } +}; + +class ParamPackSplit : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; + +public: + ParamPackSplit() = default; + + ParamPackSplit(std::vector& offsets_, + std::vector>& shapes_) + : offsets(offsets_), shapes(shapes_) {} + + std::vector offsets; + std::vector> shapes; +}; + +class ParamPackConcat : public OpDefImplBase { + MGB_DYN_TYPE_OBJ_FINAL_DECL; + +public: + ParamPackConcat() = default; + + ParamPackConcat(std::vector& offsets_) + : offsets(offsets_) {} + + std::vector offsets; +}; + +} // namespace mgb::imperative diff --git a/imperative/src/include/megbrain/imperative/physical_tensor.h b/imperative/src/include/megbrain/imperative/physical_tensor.h new file mode 100644 index 00000000..757b8455 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/physical_tensor.h @@ -0,0 +1,138 @@ +/** + * \file src/core/include/megbrain/imperative.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include +#include + +#include "megbrain/tensor.h" + +namespace mgb { +namespace imperative { + +/************************** Tensor *****************************/ +class Blob; +using BlobPtr = std::shared_ptr; + +class BlobManagerImpl; + +class Blob : public NonCopyableObj { +public: + Blob(const DeviceTensorStorage& s); + Blob(CompNode cn, size_t sz); + ~Blob(); + + template + static BlobPtr make(Args&& ...args) { + return std::make_shared(std::forward(args)...); + } + + using RawStorage = DeviceTensorStorage::RawStorage; + const RawStorage& storage(); + + const CompNode& comp_node() const { + return m_comp_node; + } + + size_t size() const { + return m_size; + } +private: + friend class BlobManagerImpl; + CompNode m_comp_node; + mutable RawStorage m_storage; + size_t m_size = 0; +}; + +struct EventDeleter { + void operator()(CompNode::Event*); +}; +using EventPtr = std::unique_ptr; + +class Tensor; +using TensorPtr = std::shared_ptr; +class Tensor : public NonCopyableObj { +public: + Tensor() = default; + Tensor(BlobPtr blob, const TensorLayout& layout, size_t offset = 0, const HostTensorND& hv = {}); + Tensor(BlobPtr blob, const TensorLayout& layout, const HostTensorND& hv = {}) + : Tensor(std::move(blob), layout, 0, hv) {}; + Tensor(const HostTensorND &hv); + Tensor(const DeviceTensorND &dv, const HostTensorND& hv = {}); + Tensor(const TensorLayout& layout, const CompNode& cn); + Tensor(const BlobPtr blob, const size_t offset, const TensorLayout& layout); + + static TensorPtr make(const HostTensorND& hv); + + template, HostTensorND>>> + static TensorPtr make(T&& hv) { + TensorPtr (*f)(const HostTensorND&) = &make; + return f(std::forward(hv)); + }; + + template + static TensorPtr make(Args&& ...args) { + return std::make_shared(std::forward(args)...); + } + + CompNode comp_node() const { + mgb_assert(m_blob, "uninitialized tensor."); + return m_blob->comp_node(); + } + + TensorLayout layout() const { + return m_layout; + } + + DeviceTensorND dev_tensor(); + + static TensorPtr make_scalar(DTypeScalar value, CompNode cn); + + TensorPtr make_scalar(DTypeScalar value) const { + mgb_assert(m_blob, "uninitialized tensor."); + return make_scalar(value, m_blob->comp_node()); + } + + BlobPtr& blob() { + return m_blob; + } + + void fetch_value(); + bool value_fetched(); + TensorPtr sub(size_t offset, TensorShape shape); + + // m_value is set once readonly afterwards + // so the return value is thread safe + const HostTensorND& get_value(); + // return a pointer instead of a reference to ensure thread safety + const HostTensorND* try_get_value(); + + void add_release_callback(CompNode cn); + CompNode::Event* get_or_create_event(); +private: + + TensorLayout m_layout; + BlobPtr m_blob; + size_t m_offset; + std::mutex m_mtx; + HostTensorND m_value; + EventPtr m_value_ready = nullptr; +}; + +struct LogicalTensorDesc { + TensorLayout layout; + CompNode comp_node; + DeviceTensorND value; // cpu:default +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/include/megbrain/imperative/profiler.h b/imperative/src/include/megbrain/imperative/profiler.h new file mode 100644 index 00000000..a223ab37 --- /dev/null +++ b/imperative/src/include/megbrain/imperative/profiler.h @@ -0,0 +1,52 @@ +/** + * \file src/core/include/megbrain/profiler.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include "megbrain/comp_node.h" +#include "megbrain/graph/event.h" +#include "megbrain/utils/json.h" +#include "megbrain/utils/timer.h" + +#include "megbrain/imperative/op_def.h" + +namespace mgb { +namespace imperative { + +class ProfilerPrivate; + +using OpDefPrinter = thin_function; + +class Profiler { +private: + std::unique_ptr m_private; + +public: + enum EventKind { OprBegin, OprEnd }; + +public: + Profiler(); + Profiler(const std::string& path); + ~Profiler(); + void enable(); + void disable(); + void dump(); + void dump(const std::string& path); + void record_host(size_t id, std::string name, EventKind type, + double host_time); + void record_device(size_t id, std::string name, EventKind type, + double host_time, CompNode comp_node); + double get_device_time(CompNode::Event& event); + size_t get_dump_count(); + std::unique_ptr create_event(CompNode comp_node); + double get_host_time_now(); + std::string print_op(const OpDef& def); +}; +} // namespace imperative +} // namespace mgb diff --git a/imperative/src/test/backward_graph.cpp b/imperative/src/test/backward_graph.cpp new file mode 100644 index 00000000..f83058fc --- /dev/null +++ b/imperative/src/test/backward_graph.cpp @@ -0,0 +1,145 @@ +/** + * \file imperative/src/test/backward_graph.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./helper.h" +#include "megbrain/opr/basic_arith.h" +#include "megbrain/opr/dnn/batch_norm.h" +#include "megbrain/imperative/ops/opr_attr.h" + +using namespace mgb; +using namespace cg; +using namespace imperative; + +TEST(TestImperative, BackwardGraphBasic) { + HostTensorGenerator<> gen; + SmallVector hvs; + SmallVector inputs; + for(size_t i = 0; i < 2; ++ i) { + hvs.push_back(*gen({42})); + inputs.push_back(Tensor::make(hvs.back())); + } + + using Param = opr::Elemwise::Param; + Param param{Param::Mode::MUL}; + OprAttr attr{"Elemwise", {}, {}}; + attr.param.write_pod(param); + + SmallVector input_descs; + for (auto&& i : inputs) { + input_descs.push_back({i->layout(), i->comp_node()}); + } + auto result = OpDef::make_backward_graph(attr, input_descs, {true, true}, {true}); + auto&& save_for_backward = result.save_for_backward; + auto&& input_has_grad = result.input_has_grad; + + auto outputs = OpDef::apply_on_physical_tensor(attr, inputs); + inputs.push_back(outputs[0]); + hvs.push_back(*gen({42})); + inputs.push_back(Tensor::make(hvs.back())); + mgb_assert(save_for_backward.size() == inputs.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + if (!save_for_backward[i]) { + inputs[i].reset(); // drop unused tensor + } + } + SmallVector backward_graph_inputs; + for (auto&& i : inputs) { + if (i) { + backward_graph_inputs.push_back(i); + } + } + inputs.clear(); + auto input_grads = OpDef::apply_on_physical_tensor(*(result.backward), backward_graph_inputs); + mgb_assert(input_grads.size() == input_has_grad.size()); + for (size_t i = 0; i < input_has_grad.size(); ++ i) { + mgb_assert(input_has_grad[i] == static_cast(input_grads[i])); + } + + SmallVector res; + for (auto&& i : input_grads) { + res.emplace_back(); + res.back().copy_from(i->dev_tensor()).sync(); + } + for (size_t i = 0; i < 42; ++ i) { + for (size_t j = 0; j < 1; ++ j) { + ASSERT_EQ(hvs[2].ptr()[i] * hvs[j].ptr()[i], res[j ^ 1].ptr()[i]); + } + } +} + +TEST(TestImperative, BackwardGraphIdentity) { + HostTensorGenerator<> gen; + auto host_a = gen({42}), host_dc = gen({42}); + auto a = Tensor::make(*host_a), dc = Tensor::make(*host_dc); + SmallVector inputs; + inputs.push_back(a); + + OprAttr attr{"Identity", {}, {}}; + attr.param.write_pod({}); + + SmallVector input_descs; + input_descs.push_back({a->layout(), a->comp_node()}); + auto result = OpDef::make_backward_graph(attr, input_descs, {true}, {true}); + auto&& save_for_backward = result.save_for_backward; + auto&& input_has_grad = result.input_has_grad; + + auto outputs = OpDef::apply_on_physical_tensor(attr, inputs); + inputs.push_back(outputs[0]); + inputs.push_back(dc); + mgb_assert(save_for_backward.size() == inputs.size()); + for (size_t i = 0; i < inputs.size(); ++ i) { + if (!save_for_backward[i]) { + inputs[i].reset(); // drop unused tensor + } + } + SmallVector backward_graph_inputs; + for (auto&& i : inputs) { + if (i) { + backward_graph_inputs.push_back(i); + } + } + inputs.clear(); + auto input_grads = OpDef::apply_on_physical_tensor(*(result.backward), backward_graph_inputs); + mgb_assert(input_grads.size() == input_has_grad.size()); + for (size_t i = 0; i < input_has_grad.size(); ++ i) { + mgb_assert(input_has_grad[i] == static_cast(input_grads[i])); + } + + HostTensorND hv; + hv.copy_from(input_grads[0]->dev_tensor()).sync(); + for (size_t i = 0; i < 42; ++ i) { + ASSERT_EQ(host_dc->ptr()[i], hv.ptr()[i]); + } +} + +TEST(TestImperative, BatchNormGrad) { + auto cn = CompNode::load("xpux"); + using Param = opr::BatchNorm::Param; + size_t N=2, C=3, H=5, W=5; + LogicalTensorDesc inp{TensorLayout{{N, C, H, W}, dtype::Float32()}, cn}; + LogicalTensorDesc stat{TensorLayout{{C}, dtype::Float32()}, cn}; + { + auto op = OprAttr::make("BatchNorm"); + auto&& attr = op->cast_final_safe(); + Param param; + param.fwd_mode = Param::FwdMode::TRAINING; + attr.param.write_pod(param); + OpDef::make_backward_graph(attr, {inp, stat, stat, stat, stat}, + {true, true ,true, false, false}, {false, false, false, false, true}); + } + { + auto op = OprAttr::make("BatchNorm"); + auto&& attr = op->cast_final_safe(); + Param param; + param.fwd_mode = Param::FwdMode::TRAINING; + attr.param.write_pod(param); + OpDef::make_backward_graph(attr, {inp, stat, stat}, + {true, true ,true}, {false, false, true}); + } +} diff --git a/imperative/src/test/collective_comm.cpp b/imperative/src/test/collective_comm.cpp new file mode 100644 index 00000000..b1a1c9ad --- /dev/null +++ b/imperative/src/test/collective_comm.cpp @@ -0,0 +1,51 @@ +/** + * \file imperative/src/test/imperative.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./helper.h" +#include "megbrain/imperative/ops/collective_comm.h" +#include "megbrain/opr/mm_handler.h" + +using namespace mgb; +using namespace imperative; + +TEST(TestImperative, AllReduceBasic) { + REQUIRE_GPU(2); + const char* server_addr = "127.0.0.1"; + uint32_t port = 3456; + mgb_assert(create_zmqrpc_server(server_addr, port) > 0); + HostTensorGenerator<> gen; + CompNode cn0 = CompNode::load("gpu0"), + cn1 = CompNode::load("gpu1"); + + auto host_x = gen({233}, cn0), host_y = gen({233}, cn1); + auto expect = gen({233}); + for (size_t i = 0; i < 233; ++ i) { + expect->ptr()[i] = host_x->ptr()[i] + host_y->ptr()[i]; + } + + auto run = [&](std::shared_ptr hnd, uint32_t idx) { + imperative::CollectiveComm + def{"all_reduce", 2, idx, idx==0, false, server_addr, port, + megdnn::param::CollectiveComm::Mode::ALL_REDUCE_SUM, + dtype::Float32(), "nccl", ""}; + auto inp = Tensor::make(*hnd); + auto oup = OpDef::apply_on_physical_tensor(def, {inp}); + HostTensorND host_v; + host_v.copy_from(oup[0]->dev_tensor()).sync(); + MGB_ASSERT_TENSOR_NEAR(*expect, host_v, 1e-6); + }; + + std::thread t0(std::bind(run, host_x, 0)); + std::thread t1(std::bind(run, host_y, 1)); + + t0.join(); + t1.join(); +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/test/cond_take.cpp b/imperative/src/test/cond_take.cpp new file mode 100644 index 00000000..dad18671 --- /dev/null +++ b/imperative/src/test/cond_take.cpp @@ -0,0 +1,22 @@ +/** + * \file imperative/src/test/imperative.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./helper.h" +#include "megbrain/imperative/ops/cond_take.h" + +using namespace mgb; +using namespace imperative; + +TEST(TestImperative, CondTake) { + auto op = imperative::CondTake::make(); + auto msk = HostTensorGenerator()({42}); + OprChecker(op).run({TensorShape{42}, *msk}); +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/test/helper.cpp b/imperative/src/test/helper.cpp new file mode 100644 index 00000000..5fb3119b --- /dev/null +++ b/imperative/src/test/helper.cpp @@ -0,0 +1,164 @@ +/** + * \file imperative/src/test/helper.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "helper.h" +#include "megbrain/graph.h" +#include "megbrain/opr/io.h" + +#include +#include +#include + +namespace py = pybind11; + +namespace mgb { +namespace imperative { + +namespace { + +#define XSTR(s) STR(s) +#define STR(s) #s +#define CONCAT(a, b) a##b +#define PYINIT(name) CONCAT(PyInit_, name) +#define pyinit PYINIT(MODULE_NAME) + +#define UNUSED __attribute__((unused)) + +extern "C" PyObject* pyinit(); + +class PyEnv { + static std::unique_ptr m_instance; + std::unique_ptr m_interpreter; + PyEnv(); +public: + static PyEnv& instance(); + static py::module get(); +}; + +std::unique_ptr PyEnv::m_instance = nullptr; + +PyEnv::PyEnv() { + mgb_assert(!m_instance); + auto err = PyImport_AppendInittab(XSTR(MODULE_NAME), &pyinit); + mgb_assert(!err); + m_interpreter.reset(new py::scoped_interpreter()); +} + +PyEnv& PyEnv::instance() { + if (!m_instance) { + m_instance.reset(new PyEnv()); + } + return *m_instance; +} + +py::module PyEnv::get() { + instance(); + return py::module::import(XSTR(MODULE_NAME)); +} + +py::array array(const Tensor& x) { + PyEnv::get(); + return py::cast(x).attr("numpy")(); +} + +py::array array(const HostTensorND& x) { + return array(*Tensor::make(x)); +} + +py::array array(const DeviceTensorND& x) { + return array(*Tensor::make(x)); +} + +UNUSED void print(const Tensor& x) { + return print(array(x)); +} + +UNUSED void print(const HostTensorND& x) { + return print(array(x)); +} + +UNUSED void print(const DeviceTensorND& x) { + return print(array(x)); +} + +UNUSED void print(const char* s) { + PyEnv::instance(); + py::print(s); +} + +} // anonymous namespace + +OprChecker::OprChecker(std::shared_ptr opdef) + : m_op(opdef) {} + +void OprChecker::run(std::vector inp_keys) { + HostTensorGenerator<> gen; + size_t nr_inps = inp_keys.size(); + SmallVector host_inp(nr_inps); + VarNodeArray sym_inp(nr_inps); + auto graph = ComputingGraph::make(); + graph->options().graph_opt_level = 0; + for (size_t i = 0; i < nr_inps; ++ i) { + host_inp[i] = std::visit([&gen](auto&& arg) -> HostTensorND { + using T = std::decay_t; + if constexpr (std::is_same_v) { + return *gen(arg); + } else { + static_assert(std::is_same_v); + return arg; + } + }, inp_keys[i]); + sym_inp[i] = opr::SharedDeviceTensor::make(*graph, host_inp[i]).node(); + } + auto sym_oup = OpDef::apply_on_var_node(*m_op, sym_inp)->usable_output(); + size_t nr_oups = sym_oup.size(); + ComputingGraph::OutputSpec oup_spec(nr_oups); + SmallVector host_sym_oup(nr_oups); + for (size_t i = 0; i < nr_oups; ++ i) { + oup_spec[i] = make_callback_copy(sym_oup[i], host_sym_oup[i]); + } + auto func = graph->compile(oup_spec); + + SmallVector imp_physical_inp(nr_inps); + for (size_t i = 0; i < nr_inps; ++ i) { + imp_physical_inp[i] = Tensor::make(host_inp[i]); + } + + auto imp_oup = OpDef::apply_on_physical_tensor(*m_op, imp_physical_inp); + mgb_assert(imp_oup.size() == nr_oups); + + // check input not modified + for (size_t i = 0; i < imp_physical_inp.size(); ++i) { + HostTensorND hv; + hv.copy_from(imp_physical_inp[i]->dev_tensor()).sync(); + MGB_ASSERT_TENSOR_EQ(hv, host_inp[i]); + } + + SmallVector host_imp_oup(nr_oups); + for (size_t i = 0; i < nr_oups; ++ i) { + host_imp_oup[i].copy_from(imp_oup[i]->dev_tensor()).sync(); + } + + func->execute().wait(); // run last because it may contain inplace operations + + for(size_t i = 0; i < nr_oups; ++ i) { + MGB_ASSERT_TENSOR_EQ(host_sym_oup[i], host_imp_oup[i]); + } +} + +TEST(TestHelper, PyModule) { + py::module m = PyEnv::get(); + py::print(m); + py::print(py::cast(DeviceTensorND())); +} + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/test/helper.h b/imperative/src/test/helper.h new file mode 100644 index 00000000..ad172f21 --- /dev/null +++ b/imperative/src/test/helper.h @@ -0,0 +1,32 @@ +/** + * \file imperative/src/test/helper.h + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#pragma once + +#include + +#include "megbrain/imperative.h" +#include "megbrain/test/helper.h" + +namespace mgb { +namespace imperative { + +class OprChecker { +public: + using InputSpec = std::variant; + OprChecker(std::shared_ptr opdef); + void run(std::vector inp_shapes); +private: + std::shared_ptr m_op; +}; + +} // namespace imperative +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/test/imperative.cpp b/imperative/src/test/imperative.cpp new file mode 100644 index 00000000..84072ae9 --- /dev/null +++ b/imperative/src/test/imperative.cpp @@ -0,0 +1,181 @@ +/** + * \file imperative/src/test/imperative.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./helper.h" +#include "megbrain/opr/basic_arith.h" +#include "megbrain/opr/basic_arith_wrapper.h" +#include "megbrain/opr/dnn/convolution.h" +#include "megbrain/opr/tensor_manip.h" +#include "megbrain/opr/dnn/batch_norm.h" +#include "megbrain/opr/utility.h" +#include "megbrain/imperative/blob_manager.h" +#include "megbrain/imperative/ops/opr_attr.h" +#include "megbrain/comp_node_env.h" + + +using namespace mgb; +using namespace cg; +using namespace imperative; + +TEST(TestImperative, APlusB) { + auto op = OprAttr::make("Elemwise"); + auto&& attr = op->cast_final_safe(); + using Param = opr::Elemwise::Param; + Param param{Param::Mode::ADD}; + attr.param.write_pod(param); + OprChecker(op).run({TensorShape{42}, TensorShape{42}}); +} + +TEST(TestImperative, Convolution) { + auto op = OprAttr::make("ConvolutionV1"); + auto&& attr = op->cast_final_safe(); + using Param = opr::Convolution::Param; + using Policy = opr::Convolution::ExecutionPolicy; + Param param{Param::Mode::CONVOLUTION}; + Policy policy{Policy::Strategy::HEURISTIC}; + attr.param.write_pod(param); + attr.param.write_pod(policy); + size_t N = 4, IC = 3, OC = 8, FH = 3, FW = 3, IH = 16, IW = 16; + OprChecker(op).run({TensorShape{N, IC, IH, IW}, TensorShape{OC, IC, FH, FW}}); +} + +TEST(TestImperative, Reduce) { + auto op = OprAttr::make("ReduceV2"); + auto&& attr = op->cast_final_safe(); + using Param = opr::Reduce::Param; + Param param{Param::Mode::SUM_SQR}; + attr.param.write_pod(param); + HostTensorND one{CompNode::load("xpu0"), {{1}, dtype::Int32()}}; + one.ptr()[0] = 1; + OprChecker(op).run({TensorShape{2, 3, 4}, one}); +} + +TEST(TestImperative, BatchNorm) { + auto op = OprAttr::make("BatchNorm"); + auto&& attr = op->cast_final_safe(); + using Param = opr::BatchNorm::Param; + Param param; + param.param_dim = Param::ParamDim::DIM_1C11; + param.avg_factor = 0.999; + attr.param.write_pod(param); + size_t N=2, C=3, H=5, W=5; + OprChecker(op).run({ + TensorShape{N, C, H, W}, + TensorShape{1, C, 1, 1}, + TensorShape{1, C, 1, 1}, + TensorShape{1, C, 1, 1}, + TensorShape{1, C, 1, 1} + }); +} + +TEST(TestImperative, Concat) { + OprAttr::Param param; + param.write_pod(megdnn::param::Axis(0)); + OperatorNodeConfig config{CompNode::load("xpu1")}; + OprChecker(OprAttr::make("Concat", param, config)) + .run({TensorShape{200, 300}, TensorShape{300, 300}}); +} + +TEST(TestImperative, Split) { + OprAttr::Param param; + param.write_pod(megdnn::param::Axis(0)); + auto op = OprAttr::make("Split", param, OperatorNodeConfig{}); + auto cn = CompNode::load("xpu0"); + HostTensorND s1{cn, {{1}, dtype::Int32()}}; + s1.ptr()[0] = 20; + HostTensorND s2{cn, {{1}, dtype::Int32()}}; + s2.ptr()[0] = 80; + OprChecker(op).run({TensorShape{100}, s1, s2}); +} + +#if MGB_CUDA && MGB_ENABLE_EXCEPTION +void run_graph(size_t mem_reserved, bool enable_defrag) { + CompNode::try_coalesce_all_free_memory(); + CompNode::finalize(); + + auto cn = CompNode::load("gpux"); + cn.sync(); // wait for async init to finish + + BlobManager::inst() -> set_enable(enable_defrag); + + HostTensorGenerator<> gen; + using TensorPtr = std::shared_ptr; + TensorPtr ptr_a[100]; + + size_t unit_size = mem_reserved / (100.5 * 4); + auto host_a = gen({unit_size}); + for(int i = 0; i < 100; ++i) { + ptr_a[i] = Tensor::make(*host_a); + } + + // free half + for(int i = 0; i < 100; i += 2) { + ptr_a[i].reset(); + } + + auto op = OprAttr::make("Elemwise"); + auto&& attr = op->cast_final_safe(); + using Param = opr::Elemwise::Param; + Param param{Param::Mode::MUL}; + attr.param.write_pod(param); + + auto out = OpDef::apply_on_physical_tensor(*op, {ptr_a[1], ptr_a[99]}).at(0); + + // value before defrag + HostTensorND host_out_before; + host_out_before.copy_from(out->dev_tensor()).sync(); + + // make defrag work + auto e = Tensor::make(*gen({unit_size * 10})); + + // value after defrag + HostTensorND host_out_after; + host_out_after.copy_from(out->dev_tensor()).sync(); + + // make sure defragment do not change the value + for (size_t i = 0; i < unit_size; ++ i) { + ASSERT_EQ(host_out_before.ptr()[i], host_out_after.ptr()[i]); + } +} + +TEST(TestImperative, Defragment) { + REQUIRE_GPU(1); + CompNode::load("gpux").activate(); + size_t reserve; + { + size_t free, tot; + MGB_CUDA_CHECK(cudaMemGetInfo(&free, &tot)); + reserve = free * 0.92; + } + auto reserve_setting = ssprintf("b:%zu", reserve); + + auto do_run = [reserve]() { + ASSERT_THROW(run_graph(reserve, false), MemAllocError); + run_graph(reserve, true); + }; + + // reserve memory explicitly to avoid uncontrollable factors + constexpr const char* KEY = "MGB_CUDA_RESERVE_MEMORY"; + auto old_value = getenv(KEY); + setenv(KEY, reserve_setting.c_str(), 1); + MGB_TRY { + do_run(); + } MGB_FINALLY( + if (old_value) { + setenv(KEY, old_value, 1); + } else { + unsetenv(KEY); + } + CompNode::try_coalesce_all_free_memory(); + CompNode::finalize(); + ); +} +#endif // MGB_CUDA && MGB_ENABLE_EXCEPTION + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/test/io_remote.cpp b/imperative/src/test/io_remote.cpp new file mode 100644 index 00000000..a4d91413 --- /dev/null +++ b/imperative/src/test/io_remote.cpp @@ -0,0 +1,66 @@ +/** + * \file imperative/src/test/imperative.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "./helper.h" +#include "megbrain/imperative/ops/io_remote.h" +#include "megbrain/opr/mm_handler.h" + +using namespace mgb; +using namespace imperative; + +TEST(TestImperative, IORemote) { + REQUIRE_GPU(2); + const char* server_addr = "127.0.0.1"; + uint32_t port = 4567; + mgb_assert(create_zmqrpc_server(server_addr, port) > 0); + HostTensorGenerator<> gen; + CompNode cn0 = CompNode::load("gpu0"), cn1 = CompNode::load("gpu1"); + + size_t vector_size = 233; + auto host_x = gen({vector_size}, cn0), host_y = gen({vector_size}, cn1); + + auto expect = gen({vector_size}); + for (size_t i = 0; i < vector_size; ++i) { + expect->ptr()[i] = host_x->ptr()[i]; + } + + auto run_send = [&](std::shared_ptr hnd) { + imperative::RemoteSend def{"io_remote_test", server_addr, port, 1}; + auto inp = Tensor::make(*hnd); + auto oup = OpDef::apply_on_physical_tensor(def, {inp}); + }; + + auto run_recv = [&](std::shared_ptr hnd) { + // auto&& shape = std::initializer_list{vector_size}; + imperative::RemoteRecv def{"io_remote_test", + server_addr, + port, + 0, + { + vector_size, + }, + CompNode::load("gpu1"), + dtype::Float32()}; + auto inp = Tensor::make(*hnd); + auto oup = OpDef::apply_on_physical_tensor(def, {inp}); + HostTensorND host_v; + host_v.copy_from(oup[0]->dev_tensor()).sync(); + MGB_ASSERT_TENSOR_NEAR(*expect, host_v, 1e-6); + }; + + std::thread t0(std::bind(run_send, host_x)); + std::thread t1(std::bind(run_recv, host_y)); + + t0.join(); + t1.join(); +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} + +// ./imperative_test --gtest_filter TestIORemote diff --git a/imperative/src/test/opr_utility.cpp b/imperative/src/test/opr_utility.cpp new file mode 100644 index 00000000..3fcf22c1 --- /dev/null +++ b/imperative/src/test/opr_utility.cpp @@ -0,0 +1,138 @@ +/** + * \file imperative/src/test/opr_utility.cpp + * + * This file is part of MegBrain, a deep learning framework developed by Megvii. + * + * \copyright Copyright (c) 2014-2019 Megvii Inc. All rights reserved. + * + */ + +#include "megbrain/imperative/opr_utility.h" +#include "megbrain/opr/io.h" +#include "megbrain/opr/basic_arith.h" +#include "megbrain/opr/utility.h" +#include "megbrain/test/helper.h" + +using namespace mgb; +using namespace opr; + +TEST(TestOprUtility, InputCallback) { + HostTensorGenerator<> gen; + DeviceTensorND dv; + auto hv = gen({2, 3}); + dv.copy_from(*hv).sync(); + auto graph = ComputingGraph::make(); + auto callback = [dv]() {return dv;}; + auto outputs = opr::InputCallback::make(*graph, callback, dv.comp_node(), dv.dtype()); + + HostTensorND hout; + ComputingGraph::OutputSpec outspec{make_callback_copy(outputs[0], hout)}; + auto func = graph->compile(outspec); + func->execute(); + MGB_ASSERT_TENSOR_EQ(hout, *hv); +} + +TEST(TestOprUtility, OutputCallback) { + HostTensorGenerator<> gen; + auto hx = gen({2, 3}); + auto graph = ComputingGraph::make(); + auto x = opr::Host2DeviceCopy::make(*graph, hx); + HostTensorND hy; + auto callback = [&hy](DeviceTensorND dv) {hy.copy_from(dv);}; + auto dummy = opr::OutputCallback::make({callback}, x); + auto y = opr::VirtualDep::make({x, dummy}); + + ComputingGraph::OutputSpec outspec{{y, [](DeviceTensorND&){}}}; + auto func = graph->compile(outspec); + func->execute(); + MGB_ASSERT_TENSOR_EQ(hy, *hx); +} + +TEST(TestOprUtility, NopCallback) { + HostTensorGenerator<> gen; + auto hx = gen({2, 3}); + auto graph = ComputingGraph::make(); + auto x = opr::Host2DeviceCopy::make(*graph, hx); + bool fired = false; + auto callback = [&fired]() {fired = true;}; + auto dummy = opr::NopCallback::make(*graph, callback, x.node()->comp_node(), {x}); + auto y = opr::VirtualDep::make({x, dummy}); + + ComputingGraph::OutputSpec outspec{{y, [](DeviceTensorND&){}}}; + auto func = graph->compile(outspec); + func->execute(); + ASSERT_TRUE(fired); +} + +TEST(TestOprUtility, NopCallbackMixedInput) { + auto graph = ComputingGraph::make(); + auto x0 = opr::Host2DeviceCopy::make(*graph, HostTensorGenerator()({2, 3}), OperatorNodeConfig(CompNode::load("xpu0"))); + auto x1 = opr::Host2DeviceCopy::make(*graph, HostTensorGenerator()({2, 3}), OperatorNodeConfig(CompNode::load("xpu1"))); + + bool fired = false; + auto callback = [&fired]() {fired = true;}; + auto dummy = opr::NopCallback::make(*graph, callback, CompNode::load("xpux"), {x0, x1}); + auto y = opr::VirtualDep::make({x0, dummy}); + + ComputingGraph::OutputSpec outspec{{y, [](DeviceTensorND&){}}}; + auto func = graph->compile(outspec); + func->execute(); + ASSERT_TRUE(fired); +} + +TEST(TestOprUtility, CallbackChain) { + auto graph = ComputingGraph::make(); + graph->options().graph_opt_level = 0; + HostTensorGenerator gen; + SymbolVar x, dummy; + DeviceTensorND dev_x, dev_y; + auto host_x = gen({2, 3}); + dev_x.copy_from(*host_x).sync(); + auto cn = dev_x.comp_node(); + auto dev_x_weakptr = std::weak_ptr(dev_x.storage().raw_storage()); + + { + auto callback = [&dev_x]() { + DeviceTensorND ret = dev_x; + dev_x.storage({}); + return ret; + }; + auto out = opr::InputCallback::make(*graph, callback, cn, dev_x.dtype()); + x = out[0]; + dummy = out[1]; + } + + { + x = opr::TypeCvt::make(x, dtype::Int32()); + x = opr::TypeCvt::make(x, dtype::Int16()); + auto callback = [&](DeviceTensorND y) { + // dev_x.storage has been reset in InputCallback + mgb_assert(!dev_x.storage().comp_node_valid()); + dev_y = y; + }; + dummy = opr::OutputCallback::make({callback}, {x, dummy}); + } + + bool fired = false; + { + auto callback = [&]() { + fired = true; + ASSERT_FALSE(dev_x_weakptr.lock()); + }; + dummy = opr::NopCallback::make(*graph, callback, cn, {dummy}); + } + + { + auto out = opr::VirtualDep::make({x.make_scalar(0), dummy}); + ComputingGraph::OutputSpec outspec{{out, [](DeviceTensorND&){}}}; + auto func = graph->compile(outspec); + func->execute(); + } + + ASSERT_TRUE(fired); + HostTensorND host_y; + host_y.copy_from(dev_y).sync(); + MGB_ASSERT_TENSOR_EQ(host_y, *host_x); +} + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/imperative/src/version.ld b/imperative/src/version.ld new file mode 100644 index 00000000..19c7cde5 --- /dev/null +++ b/imperative/src/version.ld @@ -0,0 +1,17 @@ +{ +global: + MGB_VSYM_*; + MEGDNN_VSYM_*; + mgb_get_extern_c_opr_api_versioned; + PyInit__imperative_rt; + extern "C++" { + *mgb::*; + *megdnn::*; + *megcore::*; + megcore*; + }; + megcore*; + +local: + *; +}; diff --git a/imperative/test/CMakeLists.txt b/imperative/test/CMakeLists.txt new file mode 100644 index 00000000..6b766cdd --- /dev/null +++ b/imperative/test/CMakeLists.txt @@ -0,0 +1,45 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") +set(MGB_TEST_DIR ${PROJECT_SOURCE_DIR}/test/src) + +file(GLOB_RECURSE SOURCES ../src/test/*.cpp ../src/impl/*.cpp ${MGB_TEST_DIR}/*.cpp) + +# disable distributed tests +if(NOT MGE_WITH_DISTRIBUTED) + list(FILTER SOURCES EXCLUDE REGEX ".*test/collective_comm.cpp") + list(FILTER SOURCES EXCLUDE REGEX ".*test/io_remote.cpp") +endif() + +# TODO: turn python binding into a static/object library +add_executable(imperative_test ${SOURCES} ${SRCS}) +target_include_directories(imperative_test PRIVATE ${MGB_TEST_DIR}/include ../src/include) + +# Python binding +target_include_directories(imperative_test PRIVATE ${MODULE_SRC_INCLUDE} ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) +target_compile_definitions(imperative_test PRIVATE MODULE_NAME=C) +target_compile_options(imperative_test PRIVATE -Wno-unused-parameter) + +set(LINK_LIBS megbrain megdnn gtest pybind11::embed gen_op_def) +if(MGE_WITH_CUDA) + list(APPEND LINK_LIBS cudart) +endif() + +if(MGE_WITH_DISTRIBUTED) + list(APPEND LINK_LIBS megray) +endif() + +target_link_libraries(imperative_test ${LINK_LIBS}) +if(CXX_SUPPORT_WCLASS_MEMACCESS) + if(MGE_WITH_CUDA) + target_compile_options(imperative_test PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" + "$<$>:-Wno-class-memaccess>") + else() + target_compile_options(imperative_test PRIVATE "-Wno-class-memaccess") + endif() +endif() + +if(UNIX) + target_link_libraries(imperative_test dl rt) +endif() + + +install(TARGETS imperative_test RUNTIME DESTINATION test) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b3eeba4..895919a4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -168,25 +168,28 @@ if(ANDROID) target_link_libraries(megbrain PUBLIC log) endif() -if(NOT MGE_BUILD_IMPERATIVE_RT) - # Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF - add_library(megengine) - target_link_libraries(megengine PUBLIC megbrain megdnn) - if (UNIX AND NOT APPLE) - # TODO: Use target_link_options after upgrading to CMake 3.13 - # FIXME; Please use right directory for mgb or imperative - target_link_options(megengine PRIVATE -Wl,--no-undefined -Wl,--version-script=${PROJECT_SOURCE_DIR}/python_module/src/version.ld) - endif() - set_target_properties(megengine PROPERTIES CXX_VISIBILITY_PRESET default) - set_target_properties(megengine PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) - # Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready - # for this. - install(TARGETS megengine - EXPORT ${MGE_EXPORT_TARGETS} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(MGE_BUILD_IMPERATIVE_RT) + set (_VER_FILE ${PROJECT_SOURCE_DIR}/python_module/src/version.ld) +else() + set (_VER_FILE ${PROJECT_SOURCE_DIR}/imperative/src/version.ld) endif() +# Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF +add_library(megengine) +target_link_libraries(megengine PUBLIC megbrain megdnn) +if (UNIX AND NOT APPLE) + # TODO: Use target_link_options after upgrading to CMake 3.13 + target_link_options(megengine PRIVATE -Wl,--no-undefined -Wl,--version-script=${_VER_FILE}) +endif() +set_target_properties(megengine PROPERTIES CXX_VISIBILITY_PRESET default) +set_target_properties(megengine PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +# Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready +# for this. +install(TARGETS megengine + EXPORT ${MGE_EXPORT_TARGETS} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + if (NOT MGE_WITH_DISTRIBUTED) install(TARGETS megbrain EXPORT ${MGE_EXPORT_TARGETS} diff --git a/src/opr/impl/standalone/nms_cpu.cpp b/src/opr/impl/standalone/nms_cpu.cpp new file mode 100644 index 00000000..21dc9c9e --- /dev/null +++ b/src/opr/impl/standalone/nms_cpu.cpp @@ -0,0 +1,60 @@ +#include "./nms_cpu.h" + +#include +#include + +namespace { +struct Box { + float x0, y0, x1, y1; +}; + +bool box_iou(Box a, Box b, float thresh) { + using std::max; + using std::min; + float left = max(a.x0, b.x0), right = min(a.x1, b.x1); + float top = max(a.y0, b.y0), bottom = min(a.y1, b.y1); + float width = max(right - left, 0.f), + height = max(bottom - top, 0.f); + float interS = width * height; + float Sa = (a.x1 - a.x0) * (a.y1 - a.y0); + float Sb = (b.x1 - b.x0) * (b.y1 - b.y0); + return interS > (Sa + Sb - interS) * thresh; +} +} // anonymous namespace + +size_t mgb::opr::standalone::nms::cpu_kern_workspace(size_t nr_boxes) { + return (((nr_boxes - 1) / sizeof(size_t)) + 1) * sizeof(size_t); +} + +void mgb::opr::standalone::nms::cpu_kern(size_t nr_boxes, size_t max_output, + float overlap_thresh, + const float* boxes, uint32_t* out_idx, + uint32_t* out_size, void* workspace) { + size_t out_pos = 0, last_out = 0; + auto boxes_bptr = reinterpret_cast(boxes); + auto kept_mask = static_cast(workspace); + memset(kept_mask, 0, cpu_kern_workspace(nr_boxes)); + for (size_t i = 0; i < nr_boxes; ++i) { + bool supressed = false; + auto ibox = boxes_bptr[i]; + for (size_t j = 0; j < i; ++j) { + bool j_kept = + (kept_mask[j / sizeof(size_t)] >> (j % sizeof(size_t))) & 1; + if (j_kept && box_iou(ibox, boxes_bptr[j], overlap_thresh)) { + supressed = true; + break; + } + } + if (!supressed) { + kept_mask[i / sizeof(size_t)] |= size_t(1) << (i % sizeof(size_t)); + last_out = i; + out_idx[out_pos++] = i; + if (out_pos == max_output) + break; + } + } + *out_size = out_pos; + while (out_pos < max_output) { + out_idx[out_pos++] = last_out; + } +} diff --git a/src/opr/impl/standalone/nms_cpu.h b/src/opr/impl/standalone/nms_cpu.h new file mode 100644 index 00000000..918a2330 --- /dev/null +++ b/src/opr/impl/standalone/nms_cpu.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include + +namespace mgb { +namespace opr { +namespace standalone { +namespace nms { + +/*! + * \brief CPU single-batch nms kernel + * + * See nms_kern.cuh for explanation on the parameters. + */ +void cpu_kern(size_t nr_boxes, size_t max_output, float overlap_thresh, + const float* boxes, uint32_t* out_idx, uint32_t* out_size, + void* workspace); + +size_t cpu_kern_workspace(size_t nr_boxes); + +} // namespace nms +} // namespace standalone +} // namespace opr +} // namespace mgb diff --git a/src/opr/impl/standalone/nms_kern.cu b/src/opr/impl/standalone/nms_kern.cu new file mode 100644 index 00000000..1c5e70fe --- /dev/null +++ b/src/opr/impl/standalone/nms_kern.cu @@ -0,0 +1,216 @@ +#include "nms_kern.cuh" + +#include +#include + +namespace { + +// each thread computs one bit +const int THREADS_PER_BLOCK = 64; + +const int WARP_SIZE = 32; + +// use aligned structure for large memory transaction +struct __align__(16) Box { + float x0, y0, x1, y1; +}; + +//! return whether IoU(a, b) > thresh +__device__ __forceinline__ bool box_iou(Box a, Box b, float thresh) { + float left = max(a.x0, b.x0), right = min(a.x1, b.x1); + float top = max(a.y0, b.y0), bottom = min(a.y1, b.y1); + float width = max(right - left, 0.f), + height = max(bottom - top, 0.f); + float interS = width * height; + float Sa = (a.x1 - a.x0) * (a.y1 - a.y0); + float Sb = (b.x1 - b.x0) * (b.y1 - b.y0); + return interS > (Sa + Sb - interS) * thresh; +} + +//! store uint64_t with cache streaming +__device__ __forceinline__ void store_u64_cs(uint64_t *ptr, uint64_t val) { + asm volatile("st.cs.u64 [%0], %1;" : : "l"(ptr), "l"(val)); +} + +//! load uint64_t with cache streaming +__device__ __forceinline__ uint64_t load_u64_cs(const uint64_t *ptr) { + uint64_t val; + asm volatile("ld.cs.u64 %0, [%1];" : "=l"(val) : "l"(ptr)); + return val; +} + +__global__ void kern_gen_mask( + const int nr_boxes, const float nms_overlap_thresh, + const Box *dev_boxes, const int dev_mask_width, uint64_t *dev_mask) { + const int + box_group_row = blockIdx.y, + box_group_col = blockIdx.x; + + if (box_group_row > box_group_col) + return; + + const int + row_nr_boxes = min( + nr_boxes - box_group_row * THREADS_PER_BLOCK, + THREADS_PER_BLOCK), + col_nr_boxes = min( + nr_boxes - box_group_col * THREADS_PER_BLOCK, + THREADS_PER_BLOCK); + + __shared__ Box block_boxes[THREADS_PER_BLOCK]; + + if (threadIdx.x < col_nr_boxes) { + block_boxes[threadIdx.x] = dev_boxes[ + THREADS_PER_BLOCK * box_group_col + threadIdx.x]; + } + __syncthreads(); + + if (threadIdx.x < row_nr_boxes) { + const int cur_box_idx = THREADS_PER_BLOCK * box_group_row + threadIdx.x; + Box cur_box = dev_boxes[cur_box_idx]; + + uint64_t result = 0; + const int start = (box_group_row == box_group_col) ? + threadIdx.x + 1 : // blocks on diagnal + 0; + for (int i = start; i < col_nr_boxes; ++ i) { + result |= static_cast( + box_iou(cur_box, block_boxes[i], + nms_overlap_thresh)) << i; + } + store_u64_cs( + &dev_mask[cur_box_idx * dev_mask_width + box_group_col], + result); + } +} + +//! true -> ~0, false -> 0 +__device__ __forceinline__ uint32_t bool_as_u32_mask(bool v) { + return (!v) - 1; +} + +//! return min value of val in current warp +__device__ __forceinline__ uint32_t warp_reduce_min_brdcst(uint32_t val) { + __shared__ uint32_t ans; + static_assert(WARP_SIZE == 32, "warp size != 32"); +#pragma unroll + for (uint32_t offset = WARP_SIZE / 2; offset; offset /= 2) + val = min(val, __shfl_down_sync(0xFFFFFFFF, val, offset)); + + if (!threadIdx.x) + ans = val; + __syncthreads(); + return ans; +} + +struct BitwiseOrArgs { + uint64_t *dst; + const uint64_t *src; + uint32_t size; +}; + +__device__ __forceinline__ void bitwise_or_single_warp(BitwiseOrArgs args) { + uint64_t * __restrict__ dst = args.dst; + const uint64_t * __restrict__ src = args.src; + uint32_t size = args.size; + for (uint32_t i = threadIdx.x; i < size; i += WARP_SIZE) { + dst[i] |= load_u64_cs(&src[i]); + } +} + +__global__ void kern_gen_indices( + uint32_t nr_boxes, uint32_t max_output, uint32_t overlap_mask_width, + const uint64_t * __restrict__ overlap_mask, uint64_t *__restrict__ rm_mask, + uint32_t * __restrict__ out_idx, uint32_t * __restrict__ out_size) { + __shared__ uint32_t out_pos; + __shared__ BitwiseOrArgs bitwise_or_args; + + const uint32_t nr_box_blocks = DIVUP(nr_boxes, 64); + + if (!threadIdx.x) { + uint32_t cnt = nr_box_blocks * 64 - nr_boxes; + // mark the padded boxes as having been removed + rm_mask[nr_box_blocks - 1] = ((1ull << cnt) - 1) << (64 - cnt); + out_pos = 0; + } + __syncthreads(); + + uint32_t + box_block_id = threadIdx.x, + th0_box_block_id = 0; + + while (th0_box_block_id < nr_box_blocks) { + bool in_range = box_block_id < nr_box_blocks; + uint64_t cur_mask = ~rm_mask[box_block_id & bool_as_u32_mask(in_range)]; + uint32_t min_box_block_id = warp_reduce_min_brdcst( + box_block_id | bool_as_u32_mask(!(in_range && cur_mask))); + + if (min_box_block_id + 1) { + // min_box_block_id != UINT32_MAX, so at least one thread finds a + // un-removed box + if (min_box_block_id == box_block_id) { + // exactly one thread can take this path + uint32_t box_id_in_block = __ffsll(cur_mask) - 1, + box_id = box_block_id * 64 + box_id_in_block; + + // so this box would not be processed again + rm_mask[box_block_id] |= 1ull << box_id_in_block; + + bitwise_or_args.dst = &rm_mask[box_block_id]; + bitwise_or_args.src = + &overlap_mask[box_id * overlap_mask_width + box_block_id]; + bitwise_or_args.size = nr_box_blocks - box_block_id; + out_idx[out_pos ++] = box_id; + } + __syncthreads(); + if (out_pos == max_output) + break; + bitwise_or_single_warp(bitwise_or_args); + + // skip the blocks before min_box_block_id + th0_box_block_id = min_box_block_id; + box_block_id = min_box_block_id + threadIdx.x; + } else { + th0_box_block_id += WARP_SIZE; + box_block_id += WARP_SIZE; + } + } + + if (out_pos < max_output) { + // fill the values after out_pos + uint32_t val = out_idx[out_pos - 1]; + for (uint32_t i = out_pos + threadIdx.x; i < max_output; i += WARP_SIZE) { + out_idx[i] = val; + } + } + if (!threadIdx.x) { + *out_size = out_pos; + } +} + +} // anonymous namespace + +void mgb::opr::standalone::nms::launch_gen_mask( + const int nr_boxes, const float nms_overlap_thresh, + const float *dev_boxes, const int dev_mask_width, + uint64_t *dev_mask, cudaStream_t stream) { + dim3 blocks(DIVUP(nr_boxes, THREADS_PER_BLOCK), + DIVUP(nr_boxes, THREADS_PER_BLOCK)); + dim3 threads(THREADS_PER_BLOCK); + kern_gen_mask<<>>( + nr_boxes, nms_overlap_thresh, + reinterpret_cast(dev_boxes), dev_mask_width, dev_mask); +} + +void mgb::opr::standalone::nms::launch_gen_indices( + int nr_boxes, int max_output, int overlap_mask_width, + const uint64_t *overlap_mask, uint64_t *rm_mask, + uint32_t *out_idx, uint32_t *out_size, + cudaStream_t stream) { + kern_gen_indices<<<1, WARP_SIZE, 0, stream>>>( + nr_boxes, max_output, overlap_mask_width, + overlap_mask, rm_mask, + out_idx, out_size); +} + +// vim: ft=cuda syntax=cuda.doxygen diff --git a/src/opr/impl/standalone/nms_kern.cuh b/src/opr/impl/standalone/nms_kern.cuh new file mode 100644 index 00000000..aad49b2e --- /dev/null +++ b/src/opr/impl/standalone/nms_kern.cuh @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include + +#define DIVUP(m, n) (((m)-1) / (n) + 1) + +namespace mgb { +namespace opr { +namespace standalone { +namespace nms { + +/*! + * \brief launch the kernel to generate nms mask + * \param nr_boxes number of input boxes + * \param nms_overlap_thresh overlapping threshold for IoU + * \param[in] dev_boxes boxes in [n, 4] layout, + * each row containing (x0, y0, x1, y1) + * \param dev_mask_width width in number of uint64_t elements of div_mask + * matrix; must be at least ceil(n, 64) + * \param[out] dev_mask [n, dev_mask_width] dev_mask[i] is a + * bitmask of length n indicating whether i overlaps with each box. Only + * the upper triangle (row < col) are filled. + */ +void launch_gen_mask(const int nr_boxes, const float nms_overlap_thresh, + const float* dev_boxes, const int dev_mask_width, + uint64_t* dev_mask, cudaStream_t stream); + +/*! + * \brief launch the kernel to generate indices of kept boxes + * \param max_output max number of entries to be written to out_idx + * \param overlap_mask the mask generated by launch_gen_mask + * \param[in,out] rm_mask mask of removed boxes; must be initialized as 0 + * \param[out] out_idx indices of boxes to be kept + * \param[out] out_size number of items written to out_idx; the remaining items + * would be filled with the last valid item + */ +void launch_gen_indices(int nr_boxes, int max_output, int overlap_mask_width, + const uint64_t* overlap_mask, uint64_t* rm_mask, + uint32_t* out_idx, uint32_t* out_size, + cudaStream_t stream); + +} // namespace nms +} // namespace standalone +} // namespace opr +} // namespace mgb + +// vim: ft=cuda syntax=cuda.doxygen diff --git a/src/opr/impl/standalone/nms_opr.cpp b/src/opr/impl/standalone/nms_opr.cpp new file mode 100644 index 00000000..3a88a9a8 --- /dev/null +++ b/src/opr/impl/standalone/nms_opr.cpp @@ -0,0 +1,272 @@ +#include "megbrain/opr/standalone/nms_opr.h" + +#if MGB_CUDA +#include "./nms_kern.cuh" +#endif +#include "./nms_cpu.h" + +#include "megbrain/comp_node_env.h" +#include "megbrain/serialization/sereg.h" +#include "megbrain/utils/arith_helper.h" // for get_aligned_power2 + +#if MGB_ENABLE_FBS_SERIALIZATION +#include "megbrain/serialization/internal/mgb_cpp_opr_generated.h" +#include "megbrain/serialization/internal/schema_generated.h" +#endif + +using namespace mgb::opr::standalone; + +MGB_DYN_TYPE_OBJ_FINAL_IMPL(NMSKeep); + +class NMSKeep::Kern { +public: + virtual ~Kern() = default; + + //! get workspace size in bytes + virtual size_t get_workspace_size(const NMSKeep* opr, + const TensorShape& boxes) = 0; + virtual void exec(const NMSKeep* opr, const DeviceTensorND& inp, + const DeviceTensorND& out_idx, + const DeviceTensorND& out_size, + const DeviceTensorND& workspace) = 0; +}; + +// f{{{ cuda kernel begins +#if MGB_CUDA +class NMSKeep::CUDAKern final : public Kern { + size_t m_workspace_overlap_mask_bytes, m_workspace_overlap_mask_bytes_align, + m_workspace_rm_mask_bytes; + + void init(const NMSKeep* opr, const TensorShape& boxes) { + auto align = opr->comp_node().get_mem_addr_alignment(); + size_t nr_boxes = boxes[1]; + m_workspace_overlap_mask_bytes = + nr_boxes * DIVUP(nr_boxes, 64) * sizeof(uint64_t); + m_workspace_overlap_mask_bytes_align = + get_aligned_power2(m_workspace_overlap_mask_bytes, align); + m_workspace_rm_mask_bytes = DIVUP(nr_boxes, 64) * sizeof(uint64_t); + } + +public: + size_t get_workspace_size(const NMSKeep* opr, + const TensorShape& boxes) override { + init(opr, boxes); + return m_workspace_overlap_mask_bytes_align + m_workspace_rm_mask_bytes; + } + + void exec(const NMSKeep* opr, const DeviceTensorND& inp, + const DeviceTensorND& out_idx, const DeviceTensorND& out_size, + const DeviceTensorND& workspace) override; +}; + +void NMSKeep::CUDAKern::exec(const NMSKeep* opr, const DeviceTensorND& inp, + const DeviceTensorND& out_idx, + const DeviceTensorND& out_size, + const DeviceTensorND& workspace) { + // NOTE: input comp node might be different from output comp node (for + // example, CUDA stream may be modified to overlap computations); a + // SingleCNOperatorNodeBase is expected to execute on a single comp node, + // and the comp node is defined as the output comp node + CompNode comp_node = out_idx.comp_node(); + + // comp ndoe is also accessible from SingleCNOperatorNode + mgb_assert(comp_node == opr->comp_node()); + + // CompNodeEnv contains platform-specific properties of a CompNode + auto&& cuda_env = CompNodeEnv::from_comp_node(comp_node).cuda_env(); + mgb_assert(cuda_env.device_prop.warpSize == 32, "invalid warp size: %d", + cuda_env.device_prop.warpSize); + auto stream = cuda_env.stream; + + init(opr, inp.shape()); + + auto inp_ptr = inp.ptr(); + auto dev_overlap_mask = reinterpret_cast(workspace.raw_ptr()), + dev_rm_mask = reinterpret_cast( + workspace.raw_ptr() + m_workspace_overlap_mask_bytes_align); + auto out_idx_ptr = reinterpret_cast(out_idx.ptr()), + out_size_ptr = reinterpret_cast(out_size.ptr()); + size_t batch = inp.shape(0), nr_boxes = inp.shape(1); + + MGB_CUDA_CHECK(cudaMemsetAsync(dev_overlap_mask, 0, + m_workspace_overlap_mask_bytes, stream)); + + auto max_output = opr->param().max_output; + + for (size_t i = 0; i < batch; ++i) { + nms::launch_gen_mask(nr_boxes, opr->param().iou_thresh, + inp_ptr + i * nr_boxes * 4, DIVUP(nr_boxes, 64), + dev_overlap_mask, stream); + + MGB_CUDA_CHECK(cudaMemsetAsync(dev_rm_mask, 0, + m_workspace_rm_mask_bytes, stream)); + nms::launch_gen_indices(nr_boxes, max_output, DIVUP(nr_boxes, 64), + dev_overlap_mask, dev_rm_mask, + out_idx_ptr + i * max_output, out_size_ptr + i, + stream); + } +} + +#endif // MGB_CUDA for CUDAKern +// f}}} cuda kernel ends + +// f{{{ cpu kernel begins +class NMSKeep::CPUKern final : public Kern { +public: + ~CPUKern() = default; + + size_t get_workspace_size(const NMSKeep*, + const TensorShape& boxes) override { + return nms::cpu_kern_workspace(boxes.shape[1]); + } + + void exec(const NMSKeep* opr, const DeviceTensorND& inp, + const DeviceTensorND& out_idx, const DeviceTensorND& out_size, + const DeviceTensorND& workspace) override; +}; +void NMSKeep::CPUKern::exec(const NMSKeep* opr, const DeviceTensorND& inp, + const DeviceTensorND& out_idx, + const DeviceTensorND& out_size, + const DeviceTensorND& workspace) { + // See CUDAKern::exec for more explanation on output comp nodes. + CompNode comp_node = out_idx.comp_node(); + + auto inp_ptr = inp.ptr(); + auto out_idx_ptr = reinterpret_cast(out_idx.ptr()), + out_size_ptr = reinterpret_cast(out_size.ptr()); + size_t batch = inp.shape(0), nr_boxes = inp.shape(1); + auto param = opr->param(); + + auto workspace_ptr = workspace.raw_ptr(); + + // NOTE: we must copy all the params into the kernel closure since it would + // be dispatched on a different thread + auto kern = [=]() { + for (size_t i = 0; i < batch; ++i) { + nms::cpu_kern(nr_boxes, param.max_output, param.iou_thresh, + inp_ptr + i * nr_boxes * 4, + out_idx_ptr + i * param.max_output, out_size_ptr + i, + workspace_ptr); + } + }; + + // The kernel should not be invoked + CompNodeEnv::from_comp_node(comp_node).cpu_env().dispatch(kern); +} + +// f}}} cpu kernel ends + +NMSKeep::NMSKeep(VarNode* boxes, const Param& param, + const OperatorNodeConfig& config) + : Super(boxes->owner_graph(), // owner graph + config, // OperatorNodeConfig + "nms_keep", // opr type name (used for generating opr name) + {boxes} // input vars for generating opr name + ), + m_param{param} { + mgb_assert(boxes->dtype() == dtype::Float32(), + "input should be float32; got %s", boxes->dtype().name()); + // setup m_kern according to device type + switch (boxes->comp_node().device_type()) { +#if MGB_CUDA + case CompNode::DeviceType::CUDA: + m_kern = std::make_unique(); + break; +#endif + case CompNode::DeviceType::CPU: + m_kern = std::make_unique(); + break; + default: + mgb_throw(MegBrainError, "NMSKeep: unsupported device type: %s", + boxes->comp_node().to_string().c_str()); + } + + add_input({boxes}); + add_output("indices")->dtype(dtype::Int32()); + add_output("sizes")->dtype(dtype::Int32()); + cg::add_workspace_output(this); // workspace is also an output var + + // make the graph deduplication system consider m_param (so two oprs with + // same input vars but different param values would not be deduplicated) + add_equivalence_component>(&m_param); +} + +// impl dtor after Kern is defined +NMSKeep::~NMSKeep() noexcept = default; + +mgb::SymbolVar NMSKeep::make(SymbolVar boxes, const Param& param, + const OperatorNodeConfig& config) { + // SymbolVar is just a wrapper of VarNode*, with overloaded methods such as + // operator+() + auto bvar = boxes.node(); + // insert opr into the owner graph of boxes + return boxes.insert_single_output_opr(bvar, param, config); +} + +void NMSKeep::get_output_var_shape(const TensorShapeArray& inp_shape, + TensorShapeArray& out_shape) const { + auto boxes = inp_shape.at(0); + mgb_assert(boxes.ndim == 3 && boxes.shape[2] == 4, "invalid box shape: %s", + boxes.to_string().c_str()); + + // out_shape should match the outputs added in the constructor + mgb_assert(out_shape.size() == 3); + + auto batch = boxes[0]; + out_shape[0] = {batch, m_param.max_output}; // indices + out_shape[1] = {batch}; // sizes + out_shape[2] = {m_kern->get_workspace_size(this, boxes)}; // workspace +} + +void NMSKeep::add_input_layout_constraint() { + input(0)->add_layout_constraint_contiguous(); +} + +void NMSKeep::scn_do_execute() { + DeviceTensorND empty_workspace; + m_kern->exec(this, input(0)->dev_tensor(), output(0)->dev_tensor(), + output(1)->dev_tensor(), + // if workspace size is 0, output(2) would be invalid and its + // dev_tensor() can not be accessed + output(2)->dev_tensor_valid() ? output(2)->dev_tensor() + : empty_workspace); +} + +#if MGB_ENABLE_FBS_SERIALIZATION + +namespace mgb { +namespace serialization { +namespace fbs { + +template <> +struct ParamConverter { + using FlatBufferType = param::NMSKeep; + static opr::standalone::NMSKeep::Param to_param(const FlatBufferType* fb) { + return {fb->iou_thresh(), fb->max_output()}; + } + static flatbuffers::Offset to_flatbuffer( + flatbuffers::FlatBufferBuilder& builder, + const opr::standalone::NMSKeep::Param& p) { + return param::CreateNMSKeep(builder, p.iou_thresh, p.max_output); + } +}; + +} // namespace fbs +} // namespace serialization +} // namespace mgb + +#endif + +namespace mgb { + +void _hack_pull_in_nms_opr_object() {} + +} // namespace mgb + +// register serialization: the default implementation uses Opr::Param; it +// requires Param::TAG, Opr::param() and Opr::make(..., param) to exist +// Note: the second param 1 here means that this operator has one input +using NMSKeepMGB = NMSKeep; +MGB_SEREG_OPR(NMSKeepMGB, 1); + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/src/opr/include/megbrain/opr/standalone/nms_opr.h b/src/opr/include/megbrain/opr/standalone/nms_opr.h new file mode 100644 index 00000000..a15e9f0c --- /dev/null +++ b/src/opr/include/megbrain/opr/standalone/nms_opr.h @@ -0,0 +1,62 @@ +#include "megbrain/graph.h" +#include "megbrain_build_config.h" + +namespace mgb { +namespace opr { +namespace standalone { + +/*! + * \brief generate indices of boxes to be kept after NMS + * + * See the docs in the python operator + */ +MGB_DEFINE_OPR_CLASS(NMSKeep, + cg::SingleCNOutshapePureByInshapeOprBase) // { +public: + struct Param { + //! TAG is used by the serializer to check Param type; here we + //! just use a random number. To generate such a random number, + //! run `xxd -l4 -p /dev/urandom` + static constexpr uint32_t TAG = 0x988a7630u; + + float iou_thresh; //!< IoU threshold for overlapping + uint32_t max_output; //!< max number of output boxes per batch + }; + + + NMSKeep(VarNode * boxes, const Param& param, + const OperatorNodeConfig& config); + ~NMSKeep() noexcept; + + //! factory method to insert the operator into a graph + static SymbolVar make(SymbolVar boxes, const Param& param, + const OperatorNodeConfig& config = {}); + + const Param& param() const { return m_param; } + +private: + const Param m_param; + + class Kern; + class CUDAKern; + class CPUKern; + + std::unique_ptr m_kern; + + //! override output shape infer func provided by + //! SingleCNOutshapePureByInshapeOprBase + void get_output_var_shape(const TensorShapeArray& inp_shape, + TensorShapeArray& out_shape) const override; + + //! this opr requires inputs to be contiguous + void add_input_layout_constraint() override; + + //! execute the operator + void scn_do_execute() override; +}; + +} // namespace standalone +} // namespace opr +} // namespace mgb + +// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/src/opr/test/standalone/nms.cpp b/src/opr/test/standalone/nms.cpp new file mode 100644 index 00000000..f53b0593 --- /dev/null +++ b/src/opr/test/standalone/nms.cpp @@ -0,0 +1,77 @@ +/** + * \file src/opr/test/standalone/nms.cpp + * + * Copyright (c) 2014-2020 Megvii Inc. All rights reserved. + */ + +#include "megbrain/opr/standalone/nms_opr.h" +#include "megbrain/test/helper.h" +#include "megbrain/opr/io.h" +#include "megbrain/opr/tensor_manip.h" +#include "megbrain/opr/tensor_gen.h" +#include + +using namespace mgb; + +namespace { + +void run_on_comp_node(const char* cn_name) { + auto cn = CompNode::load(cn_name); + auto graph = ComputingGraph::make(); + auto host_x = std::make_shared(cn, TensorShape{1, 2, 4}, + dtype::Float32{}); + auto ptr = host_x->ptr(); + ptr[0] = 0.; ptr[1] = 0.; + ptr[2] = 2.; ptr[3] = 2.; + ptr[4] = 0.5; ptr[5] = 0.5; + ptr[6] = 1.5; ptr[7] = 1.5; + + auto x = opr::Host2DeviceCopy::make(*graph, host_x); + + { + auto idx = opr::standalone::NMSKeep::make(x, {0.2, 16}); + auto size = idx.node()->owner_opr()->output(1); + HostTensorND host_idx, host_size; + auto func = graph->compile({make_callback_copy(idx, host_idx), + make_callback_copy(size, host_size)}); + func->execute().wait(); + auto idx_ptr = host_idx.ptr(); + auto size_ptr = host_size.ptr(); + ASSERT_EQ(size_ptr[0], 1); + ASSERT_EQ(idx_ptr[0], 0); + } + { + auto idx = opr::standalone::NMSKeep::make(x, {0.5, 16}); + auto size = idx.node()->owner_opr()->output(1); + HostTensorND host_idx, host_size; + auto func = graph->compile({make_callback_copy(idx, host_idx), + make_callback_copy(size, host_size)}); + func->execute().wait(); + auto idx_ptr = host_idx.ptr(); + auto size_ptr = host_size.ptr(); + ASSERT_EQ(size_ptr[0], 2); + ASSERT_EQ(idx_ptr[0], 0); + ASSERT_EQ(idx_ptr[1], 1); + } +} + +} + +TEST(TestOprNMS, CPU) { + run_on_comp_node("cpu0"); +} + +TEST(TestOprNMS, GPU) { + REQUIRE_GPU(1); + run_on_comp_node("gpu0"); +} + +#if MGB_ENABLE_EXCEPTION +TEST(TestOprNMS, InvalidInput) { + HostTensorGenerator<> gen; + auto graph = ComputingGraph::make(); + auto host_x = gen({1, 9, 5}); + auto x = opr::Host2DeviceCopy::make(*graph, host_x); + ASSERT_ANY_THROW(opr::standalone::NMSKeep::make(x, {1., 1})); +} +#endif // MGB_ENABLE_EXCEPTION