From c72cf74edabebfea8e16747515321714fe231134 Mon Sep 17 00:00:00 2001 From: ctgk Date: Fri, 27 Sep 2024 17:14:18 +0900 Subject: [PATCH] EDIT: edit for pep8 --- .pre-commit-config.yaml | 10 +-- notebooks/ch07_Sparse_Kernel_Machines.ipynb | 20 ++--- prml/bayesnet/discrete.py | 6 +- prml/clustering/__init__.py | 2 +- prml/clustering/k_means.py | 20 ++--- prml/dimreduction/autoencoder.py | 1 + prml/dimreduction/bayesian_pca.py | 3 +- prml/dimreduction/pca.py | 80 +++++++++---------- prml/kernel/__init__.py | 5 +- prml/kernel/gaussian_process_classifier.py | 18 ++--- prml/kernel/gaussian_process_regressor.py | 10 +-- prml/kernel/polynomial.py | 1 + prml/kernel/rbf.py | 1 + prml/kernel/relevance_vector_classifier.py | 50 ++++++------ prml/kernel/relevance_vector_regressor.py | 30 +++---- prml/kernel/support_vector_classifier.py | 15 ++-- prml/markov/__init__.py | 6 +- prml/markov/categorical_hmm.py | 7 +- prml/markov/gaussian_hmm.py | 7 +- prml/markov/kalman.py | 15 ++-- prml/markov/particle.py | 3 +- prml/markov/state_space_model.py | 1 + prml/nn/__init__.py | 2 + prml/nn/array/__init__.py | 2 + prml/nn/array/array.py | 1 + prml/nn/array/broadcast.py | 3 +- prml/nn/array/ones.py | 3 +- prml/nn/array/zeros.py | 1 + prml/nn/distribution/bernoulli.py | 7 +- prml/nn/distribution/categorical.py | 20 ++++- prml/nn/function.py | 1 + prml/nn/image/__init__.py | 2 + prml/nn/image/convolve2d.py | 1 + prml/nn/image/deconvolve2d.py | 7 +- prml/nn/image/max_pooling2d.py | 1 + prml/nn/image/util.py | 16 ++-- prml/nn/io/__init__.py | 2 + prml/nn/io/io.py | 8 +- prml/nn/loss/__init__.py | 9 +++ prml/nn/loss/kl.py | 6 +- prml/nn/loss/sigmoid_cross_entropy.py | 1 + prml/nn/loss/softmax_cross_entropy.py | 1 + prml/nn/math/add.py | 1 + prml/nn/math/exp.py | 1 + prml/nn/math/log.py | 1 + prml/nn/math/multiply.py | 1 - prml/nn/math/power.py | 1 + prml/nn/math/product.py | 1 + prml/nn/math/sqrt.py | 1 + prml/nn/math/square.py | 1 + prml/nn/math/subtract.py | 5 +- prml/nn/math/sum.py | 1 + prml/nn/nonlinear/log_softmax.py | 3 + prml/nn/nonlinear/logit.py | 1 + prml/nn/nonlinear/sigmoid.py | 1 + prml/nn/nonlinear/softplus.py | 1 + prml/nn/nonlinear/tanh.py | 1 + prml/nn/normalization/__init__.py | 3 + prml/nn/normalization/batch_normalization.py | 1 + prml/nn/optimizer/__init__.py | 2 + prml/nn/optimizer/ada_delta.py | 1 + prml/nn/optimizer/ada_grad.py | 3 +- prml/nn/optimizer/adam.py | 1 + prml/nn/optimizer/momentum.py | 1 + prml/nn/optimizer/optimizer.py | 2 +- prml/nn/optimizer/rmsprop.py | 1 + prml/nn/random/__init__.py | 8 ++ prml/nn/random/dropout.py | 1 + prml/nn/random/normal.py | 7 +- prml/nn/random/uniform.py | 5 +- prml/preprocess/sigmoidal.py | 9 +-- prml/rv/bernoulli.py | 51 ++++++------ prml/rv/bernoulli_mixture.py | 36 ++++----- prml/rv/categorical.py | 41 +++++----- prml/rv/gamma.py | 6 +- prml/rv/gaussian.py | 45 ++++++----- prml/rv/multivariate_gaussian.py | 11 +-- prml/rv/multivariate_gaussian_mixture.py | 55 +++++++------ prml/rv/rv.py | 61 +++++++------- prml/rv/students_t.py | 26 +++--- prml/rv/uniform.py | 20 +++-- prml/rv/variational_gaussian_mixture.py | 78 +++++++++++------- prml/sampling/metropolis.py | 4 +- prml/sampling/metropolis_hastings.py | 1 + setup.cfg | 75 +++++++++++++++++ test/test_bayesnet/test_discrete.py | 2 + test/test_nn/test_backward.py | 2 + .../test_distribution/test_bernoulli.py | 2 + .../test_distribution/test_gaussian.py | 2 + test/test_nn/test_image/test_convolve2d.py | 6 +- test/test_nn/test_image/test_deconvolve2d.py | 18 ++++- test/test_nn/test_image/test_max_pooling2d.py | 2 + .../test_loss/test_sigmoid_cross_entropy.py | 6 +- test/test_nn/test_math/test_add.py | 2 + test/test_nn/test_math/test_log.py | 2 + test/test_nn/test_math/test_matmul.py | 2 + test/test_nn/test_math/test_multiply.py | 2 + test/test_nn/test_math/test_negative.py | 2 + .../test_nonlinear/test_log_softmax.py | 2 + test/test_nn/test_nonlinear/test_sigmoid.py | 2 + test/test_nn/test_nonlinear/test_softmax.py | 2 + test/test_nn/test_nonlinear/test_tanh.py | 2 + 102 files changed, 635 insertions(+), 404 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 738c02e8e..0835ebbf7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,11 +15,11 @@ repos: name: Check file encoding entry: bash -c 'for file in "$@"; do file --mime-encoding $file | grep -q "ascii\|binary"; if [ $? != 0 ]; then echo $file; exit 1; fi; done' -- types: [text] - # - id: flake8 - # name: Check Python format - # entry: flake8 --count --show-source --statistics - # language: system - # types: [python] + - id: flake8 + name: Check Python format + entry: flake8 --count --show-source --statistics + language: system + types: [python] - id: unittest name: Run Python unittests language: system diff --git a/notebooks/ch07_Sparse_Kernel_Machines.ipynb b/notebooks/ch07_Sparse_Kernel_Machines.ipynb index 7d2b05070..b3292f94f 100644 --- a/notebooks/ch07_Sparse_Kernel_Machines.ipynb +++ b/notebooks/ch07_Sparse_Kernel_Machines.ipynb @@ -42,7 +42,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -65,7 +65,7 @@ "x0, x1 = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100))\n", "x = np.array([x0, x1]).reshape(2, -1).T\n", "plt.scatter(x_train[:, 0], x_train[:, 1], s=40, c=y_train, marker=\"x\")\n", - "plt.scatter(model.X[:, 0], model.X[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", + "plt.scatter(model.x[:, 0], model.x[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", "cp = plt.contour(x0, x1, model.distance(x).reshape(100, 100), np.array([-1, 0, 1]), colors=\"k\", linestyles=(\"dashed\", \"solid\", \"dashed\"))\n", "plt.clabel(cp, fmt='y=%.f', inline=True, fontsize=15)\n", "plt.xlim(-3, 3)\n", @@ -80,7 +80,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAARUAAAD8CAYAAABZ0jAcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOydd3hUxfrHP7O76b3QITRBEFG6FRUFBBWulyKoCIiCFQVFRa/3AgpKExSvPxWkgwXsIIqA4hVEISi9E2kBQkjvye55f3+czSYhAZLdTTblfJ5nH/bMOTPz7gLfnXln5n2ViGBgYGDgLkyeNsDAwKB6YYiKgYGBWzFExcDAwK0YomJgYOBWDFExMDBwK4aoGBgYuBW3iIpSaoFS6pxSas9F7iul1Byl1BGl1C6lVIdC94YppQ7bX8PcYY+BgYHncNdIZRHQ6xL3ewMt7K9RwPsASqlwYAJwHdAFmKCUCnOTTQYGBh7ALaIiIv8DEi/xyD+AJaLzOxCqlKoH3AmsE5FEEUkC1nFpcTIwMKjkWCqonwbAyULXp+xlFysvhlJqFPooh4CAgI6tWrUqH0sNLo1kg/K9fFmNxgrWv0HywBIFtvMg6WBuCKZQTxtXKrZv335eRGo5U7eiRMVlRGQuMBegU6dOEh0d7WGLah6SuQJJnYAKeQ3ld5delvMLkvQkKugJVMAjHraw8iC2eCRxENhOAeGokLkov36eNqvUKKWOO1u3okQlFmhU6LqhvSwWuO2C8o0VZJNBWfG9G7K+RlKe169NAUjSk2BpCX4DPGtbZcMUBCqg4Nrc6OLPVjMqakn5W2CofRXoeiBFRM4Aa4GeSqkwu4O2p73MoBKiTAGosHng1R5JGYMkjQRLS1T4IpQpxNPmVRpEspGkx8F6CBX4ApibI0mPIrnbPG1aheCuJeVPgC3AlUqpU0qpR5RSjyulHrc/sgaIAY4A84AnAUQkEXgd2GZ/vWYvM6ikKFMAKuChgmv/QYagXIAkPwe5W1Ahb6ICR6LCl4Cpvi4s1iOeNq/cUVUx9IHhU/Ec+T4UzA1BeYH1KCrkLYePxQB9RGKLRfndW1Bmi0cyP0YFjkapyr/nVCm1XUQ6OVO3yjhqDTyP5Pzq8KGo8EWABUkaqftYlAnla+wGAFDenYHORcvMtVBBz3rGoAqm8kumQeXBXA98bnT4UBw+Fp/b9JFLKZCc35CsNUXLbGeR9P+jKo6aDYpjjFQMSo2yXKGLSOEyUwAq7P1S1RcRJGM+5P4GCMrvbl1QEh8C7TzK9x59X4dBlcYQFYMKQykFoXPsU6ZxoJ1DMj/WBSVsAcoQlGqBMf0xqFAcUyZzfSTtTbAd1wXFu72nTTNwE4aoGFQ8kgaSU3BtO+05WwzcjiEqBhWKw4ciGaiwheDVCUkZh2R952nTDNyEISrljEguWtLTSPbPRcvTP0RLm1mjVjxEBEkeW+BD8bmp0A7dcYjV6eMmBpUIQ1TKG8kG22kkuUBYJP1DJP0tsJ0Bao6oKKVQIa+jwhY6fCj5PhYVOgtlaexhCw3cgbH6U84oUzCEL0QSH9aFxetayIsG3z6okGlVYnelO1GWK4qXmQLAt7dT7YmWjjIFXrbMoOKoWf+iPYQyhaDCFwJ5uqCoILugVA1NFy2zmM9DRJCsbxHJ9ZBVIDmbkPjbkdw/C8qsJ5Dz9yCZyz1mV03HEJWKIvPTgveSCTm/es6WspK5GEkZq29cwy4o6bP1vSZZX3jOLksLMIUhSY8guX/qgpI4VP9+vYwlak9RNX4qqzgOH4p3NwgYDmkzkOSnIfS/4H0d5P6O8r3d02ZenICRYD2ApE0DQLQUyPgA/AbpLw+hzHUgfAmSOBRJHGwvDNWPEXhd5TG7ajqGqJQzYktAMj4Cn3tAOwnJz0Doe5A2FUmbDaZgyPsTIn+otDtKlbJAyFsIOIQFv0Go4Eke9wkpcx0IeQNJvF+/DnrWEBQPY0x/yhlljkBFfI4KnY4KeUuPBpb8FAQ+CyZ/yItGhUyttIJSgLnIoUFlaeJxQQG7DyX5+YLrtJlFfCwGFY/n/1XUAJSlMUpZUJYoPWAPCpJHQt6fqJDpKL++njbxkuT7UMiYp4eN9OmFpE1z+Fg8ZlchH4qK+BpV61cw1Xb4WAw8gyEqFY0psmjs0hKWWCsdmYsdPhQVPBkVOgt8e+vCkvW15+zSzgLi8KEocx17lLU6YD1WYWZI3mEk/d0iGxlFS0dLnYJo6RVmR2XB8KlUIKJlIsmPgXYGFThGj06fOAzCF1duP4DvXShJh4An7VMek+5jMTfVY6l4COXdBWqtQynvgjJzHYj8tkhZeSPZ30HG/4GWDkHjQTKQpEchb6f+/fjcVGG2XNRG60mUpWjwbbGdBlMdlDK7tS93xajtpZQ6aE9rOr6E+7OVUjvsr0NKqeRC92yF7n3rDnsqI/oW9dGQu02f8gQ+qf+qqgAkcRhiPeVpEy+KMtdGBT5dxIeilAVT0BiUh/PYlCQeFSkoACrwWfB/CDIXIqn/dgiKCp2NqgyCkvM7cv5OJPOzgjLrESRhgH5S3M24PFJRusy9B/RATwa2TSn1rYjsy39GRMYWen40UHgTQZaItHPVjsqOUgr8h4DfvSi/PnqZJUpfEs36Asz1PWyhgbMopSDoVUQyIWuFXhb6TuUJr+ndHrxvRFL/bb/uqPuiAOU/2O3duWOk0gU4IiIxom+v/BQ9zenFuB/4xA39VjmUbzeHoDjKLFGYgsZWipUUAxeQDD0rYf5l7o5Kc1hUKR9U2HvgfYs+kjqvBylX4UtKPDbhKu74l1yW1KWNgabAT4WKfZVS0Uqp35VS95ZUz8CgMiNaeqEpzzsFU6G0qZVLWIKeKyjwvadcBAUq3lE7GPhcRGyFyhqLSKxSqhnwk1Jqt4gcvbBi4VzKUVGVfU+HQU1C0mcV+FB8e+lL7gCZC8G7E/j28LSJug8l6VFQwfqGy8xFiKU5yt/9O6LdMVK5WErTkhjMBVMfEYm1/xmDnvK0xEMbIjJXRDqJSKdatZzKG21gUC6owLF6+Aa7D0UphQp6FRX6Lvh097B1dkHJ96FEfIqK/L5gKlTIeesu3CEq24AWSqmmSne7D0ZPc1oEpVQrIAw9k2F+WZhSysf+PhK4Cdh3YV0Dg8qMMgWhfG4uWqYUyvdO3YnrcXzB3MDhQ3H4WHxuB+X+EBEuT39ExKqUeho9B7IZWCAie5VSrwHRIpIvMIOBT6XoJLM18KFSSkMXuKmFV40MDAxcR1kaQviKIgKnlA+Evl8uomekPTUwMCiGK2lPjXVMA4NSImJFsr8vtqIj2esRyfKQVZUPQ1QMDEpL1hdI8rNI+hyHsEjmciT5SfDw4crKhHH2x8AjiEiJ8/mLlVcK/Abq53ky3tOXjM2RSOok3eEZMMrT1lUaDFExqHBENCT1NbA0RAU8WlCe9R2SvQZCZ1f4+Z3SoJQJgifrgpIvLD63o0LnVEp7PYUx/THwABpIMpI2XY+Kh11QUp4HLRnE6mH7Lo5SJpSl0IlyyxWAl8fsqYwYIxWDCkcPTzkTQXRhyVoD1n3g1REVNhdl8ve0iRdFMpcjaa+BTzdQQZAxF8ELAp+pvNO2CsYQlUqKaCkoU8gFZal6HqFqgCPubfb3YN2jl4XN1XMAVVIka7XDh6JC5wAWRHlDxntgCtGDmhsY05/KiGQuR87fhVgLjkBJbrSe4yZ7gwctczPZa4teZ1Xyw+s+N4H/Iw4filImVPBkCHgCfHt62rpKgyEqlRHv6wBBEh9CrEd1QUkaCaYI8GrraevcgsOH4tUZVTvaHp6ywMdSGVGmMEzBLxWNNKdMeuiKSh4Pp+gZ3oKy8tj8aohKJURZrrAHyAY53xtJfABMtVHhS1Hm2m7tq/BoqKDsRLlmHhTJQzLeL+RDCdYzDfj2RjIWIFry5RsxKDViO48k9EOyCyKOiFiRlBeQ9Jlu788QlUqKslyBChxTcB08yf2CkrsNOX83kj6voMx6BEkchKRO1K+1TCTzs6JBnUX0Mi3DqX6V8kKFLSriQ1HKggp5CxWx0uMhKqsdyhswI8mjkeyf7ILyImSvRin3++gMR20lRXKji8QPlZTnIHwpytLcfZ14tQffXkj6DP3atxuS+BBgQgU8opdlfY6kTQbbCQgcp9uSPgsyPkRJltPOSWWOLF6mLGAuMb6XgQsoUzCEL0ISh+u7f5UfSAYq8HlU4GNu788QlUpIgQ9Fn/IgqfbUng+5VVgKlnbRhSV9Bphq2Y/I2/vwfwisMZAxT9/shYKMueB3P/gPdYsdBuWPLiwfIeeu10NfenUoF0EBY/pTObHFgbmew4fi8LEoP9AS3NqVUhZUwOMFBT63FhEtpRQqeAL4PaAnE7MLigqeYMTVrUKIWJHUyQUFebuL+FjcifGvohKi/O5GRXxTxIeiLFegIn/Qc924ET3M4MOgwsDSWp/uFPKxODAFXvDe2OhVVSjiQwl8Xl9ts1zp8LG4G0NUKilKFd/6XVKZK+hOWbsPJeJjVMQX4HsXkj7DkdJUT3k6yz5CGaxPezLmIekzK01QZ4PLYIuFnE0OH4oyBaPCF+nCkvWl27szfCo1GRUClhb6VCZ/yhMyE8ECpnr6ddbHkPGhY8oDCkHpUyFTXQh4yGPmG5QOZWkMkd+jzBEFZaZgCF8MejRXt2KISg1GmWs59sM4ypQFFVpo74JvH32Vx39EgQ8leAJYGkIlTyxvUEBhQXGUmYLKpS9DVAwuiTIFQ6HwBGDPyHdBmYFBPhWVS3m4Uiq+UM7kRwvdG6aUOmx/DXOHPQYGBp6jQnIp2/lMRJ6+oG44MAHoBAiw3V43yVW7DAwMPIMncikX5k5gnYgk2oVkHVBJslobGBg4Q0XmUu6vlNqllPpcKZWf0bAseZhH2XMuR8fHx7vBbAMDg/KgovaprAKaiMg16KORxWVtwEh7amBQNaiQXMoikiAiOfbLj4COpa1rYGBQtaiQXMpKqXqFLvsC++3v1wI97TmVw4Ce9jIDA4MqSkXlUn5GKdUXsAKJwHB73USl1OvowgTwmogkumqTgcGlyD96oHy6obw7FJRn/wi2s6gA4/S1Kxi5lA1qHKKlIAkDQYtHhc1HeXdAsn9Ekp8Fr2tQ4csc56xEbOi7JmoWRi5lA4MyoEwh+vEEUy0k6RG0tOlI8jOANwRPKxAU6wkkoQ+Su+3SDRoUwRAVgxqJMtfVhUUyIOMjQAMEkp9AbPG6oCQOBVs8qMqbNqQyYoiKQc0lb1fR66AXQTutp0I531sPuRi+GOV1Vcn1DUrEEBWDGonuQxkDXu1QkWvA3ATS3wL/YUAOkIcKfcsQFCcwRMWgxiFaCpIyHryuRoUtKBSuM1SPE5P/XOqbiM3YvV1WDFExqHEoU4i+6hO2AJUfJlNyASsoP1TE16jwZfpUKHGoISxlpFqJiogNyVxRLBubZK1BNGP7i0EByrt9gaAA5P4Kkq0vJ3tdhfLuggqbB9pZMFZ/ykT1CtKUswFJfRXy/kT87kd5XQNZK5DUf+tzZf/79bQXhf8xGRgAyv9B8OlVNOSidxeIXF9i1DSDi1OtREX59oTA0Uj6u5D1JeJ9PeT+Dj63gt+9evpQr06osP962lSDSkiJIRcNQSkz1Wr6A6ACR0OAPRZU7u9gqg+Bz0LSI4AFFfScR+0zMKjuVDtRAVDmOgUX2mlI6AeY7Zn3mnnMLgODmkC1ExXJ/Ez3ofjcCn4DC25YWoG5qecMMzCoAMR2DskrGslVxIrkbK4wG6qVqEj2zwWCEjgGcjaA8tdv5v6KpE0xEmAZVGsk5WUkcRiSt1e/FiuSMg5JehjJO1ghNlQrRy0+N6ACRyM+PSBpOGBBRXyJZP8PrAchcwmCGRX8sqctNTAoF1TwJCTxISRxOITPRzIWQPYaVNBLKK8rK8SGaiUqSvlC4GjQ0hGvzqigsShLM1RgMz2GhikU5X2tp800MCg3lKUhhC9FEu9HEgboZUEvoQIeqTAbqpWo5KNMgaiwd4uWKYUKfslDFhkYVCDmumCuB1qcfu19fYV2X618KgYGNZ18Hwp5O8B/CJgaIInDHT6WisAQFTeipz26sExKLC9Ve9aj+py4cJmWiZb2FiLZTrVpUL0Q0dBSJiLZemhnSXkFsteA7z2AF4QtARWoC4s1pkJsqqi0p88ppfbZ8/5sUEo1LnTPVigd6rcX1q0qiJaJJA5BS5tTUCaCpL2BJI1ySlgkcwWSNlXfIZzfR9JI/SRt7p9us92gCiPZYN2PJI9FsteifHvrgpK9Bqz7UZbaqPCl4Hs3mBtWiEkVlfb0L6CTiGQqpZ4ApgOD7PeyRKSdq3Z4HOULluaQ8V809J29kvYGZC4G/+GAV9mbDHoRkRQk/V19ZJK7A/K2o0JmonxuLFUbIla7DUNQyqegPOtL8OqiO/YMqizK5A9h85GkR5DkseDTTd9K4d0FFfqB/nduaYgKmVhhNlVI2lMR+VlEMu2Xv6Pn96lWKGVCBU8Bv/6Q8V8k7kqHoKigl1FKOdGmWW/Tt7c+OsnbpguK3z2lbyT3DyRtGpL0FPmplyRzOZIyHikUO+RiSPYPaMljEMkrKLPGoCUMQWxny/yZDNyPvjAxH7BCzjpA0wXF5O8Reyoy7Wk+jwDfF7r2tacz/V0pde/FKpVn2lPREtGSRiO2uIIysaGl/AfJ+b3U7ejCMrlomZOCUmBIDtjOFVzb/i5TdeVzk25T7v90YclYiKROAp/bUcH/unwDtjjIXoMkP4dIHmKNscduPQKSXsYPY1Bu5Gwoep37q2fsoIIdtUqpIUAnYEah4sb2VAAPAG8rpZqXVLdc055aT0LuJntAnjg9LkvKy5D1KeTtLHUzug9latGy9Hcv8nQp2sv3oeT9hQp5C/z66VOhMrap/O8rEJa0N8H7ZlToHPTcb5epGzAMFfQK5KxFEvohCfcDVlTYUpTlCic/mYE7kaxvkJSXwPt6VK3N4NXe4WPxBBWS9hRAKdUd+BfQt1AKVEQk1v5nDLARaO8Gm8qE8r7WHpDnHJL4IJL0KGR/jQp8BhX4WKnayHfKOqY8dfY7pkKFnbdlQdKmFvhQ/PrYp1d2Ycn+uYyt5RV6bwNKf1xBBQwHvwf0XcmSpEdM82pRxv4NygPRMpC06QU+FHMtfSrk1VYPh1nwX60CjRJx6YXu7I0BmgLewE6gzQXPtAeOAi0uKA8DfOzvI4HDwFWX67Njx45SHmg5W8V2poX+Sv5P2era0sQW30dsKVNE0zS9TLOJLXm82M4PEk3LKbs9tgTRsn4qWqZZRcv8WjTNVvp2MpbpnynxsYL3CY+IpmWXrn7eUbHF3VTw3SQ+LZqWW6bPYlB+aHlHRbNlFC2zpYmWd9zpNtGzizqlCRWV9nQGEAistPsXTohIX6A18KFSSkMfNU2VoqtGFYYeinJlQUHu74gtrmgYhUugTIEQ/jGoAIcPRSkTBE/RwxSWYqpRvM1w8O1WtEyZwe8fF6lRHMnZXOBDcUx5vJDUV5HUyaiQ1y9dP9+HghUV8R3kbtaXyZOfg9BZjsRb1R3J2ahH3jeFFpRZj4Jkorzaes4wKDGchzIFgociHBppT6HAh2Kf8uB9ve7LMNXWY7CUUlgqIyI2yFwO/oOLCJtkrQLvjihz/UvW11L+Azk/6j4U+5RHMhYhaVNRYYtRPteVq/2VAdESkfjbwdwEFb4IZQrVNyYmDgUViIpcU+1So7qS9tQQFUBy/ockPWr3oehR4yQ3WhcW376YQia5ra+qhkge2M6gLFFFy60xNSrglf5v5EmwXIEK/g+SPBoQe+Cv6uewNkTFDUjuDpR30T14krcPLM2LbBozqLnk//joeKEiv6mWggJGgna3cKGgAHqqBrugiGhIbnEhk9xoRLRyt69Yv1oaYiu6yCYiFRaIp0ZiLrz9ygSmSI+ZUpkxRKW0ZC7Rl5uzvnIUSdZXSOKDkLmkws2RlOeQhAcRq77vUESQtMn6XpK8wxVuT3XH4UMxRaKCXgZEP6SnJXvatEpHtREV0VLQkkYieYcKykRDS52EZH3jegf+g8D7Bn17e9ZX+itlPHjfoN+rYFTgWJAMPcqX9QSSNhkyl+rH3S8YkovkoiW/WDx2acZ8JHNFRZpdJREt0b4CZvehBDyMCvs/sB7Rz9xckLyuplNtRAUtBfL2I0lDkbxD+nQl9TXIXK4v/bmIUn6osPftwvKSfQfjDaiw91HKzw0foIz2eF2FCl+sC8v57nZBeRgVNL74sQAtEXK32WOX6sIiGR/pZ4Jy/zDi9l4OFYbyH1bEKat8bkGF/R/K/+Fqt/LjKtUm8puyREH4MiRxCJL4kH5iOC8aAkbpv+ru6EP5gW8vJPc3/dq3l0cExYGltT4qyduu2+M/pMRzRspc1x5i8CFdWHy6QvZq8L0bFTLNtbNJNQClFASOKl7uc4sHrKn8VJ+RCqAsTfTYEZKkC4pPN1Tg8277TyNZXyGpE8CrA3h1QFInFPGxVCT5PhTytuvhAlWIfSp0ssTnlaWh/btJ0QXF3BQVMgOlqs3vikEloVqJioiGZCwuKMjbCVb3OC0l6zuHD0WFL0SFLyzkY/nOLX2UyZ60NwqmPGGLC6ZCiQ8VWxVykPNDwXstHqyHSn7OwMAFqo2oOHwoWR/rU57IHwGLw8fiMl5twLevw4fi8LH49gWvq11vv4woSwvwH+HwoTh8LF6tQIUUe173oUzXpzyR6+wjm2HFnbfWY8Wi1OnL12fK9fMYVB+qzeY3yduLJAyEgBGOKY9YjyGJQ8CrA6Yw504KVwfEegI53xt8ezqmPGI9pfuezHVQ4Z/o35eWisT3AO/2jnNCoqUhSY+AloKKXO2xsz6iJSNpM/R0E6ZgvUw0vcyvD8rrKo/YVV1xZfNbtZlQK682EPE1WFoUHOizNIHwT8AU4VnjPIyyREHEp2Bp7fCh5OeHQfkUfF+mYAh6FkmdiCQ/AyFvIEmPQ94eVOg7nj08mLcXsr5GrAchbIEezDn1P5C1AkzBYIhKpaHaiAqA8mpZvMzSqIQnax4lnaQtKT6t8n8AQBeWc3q+GBX6Hsq3R/kaeBmUz00Q+g6S/Kyefc/SCLK/h4DH9ZdBpaHa+FQM3Ihvn6LXPrd6xo4LUL7dUaFvg3WPLij+D6ACxxpL4pUMQ1QMiuDwoWAB7656WfIzTucuciciGpLzS0FB3h6QNM8ZZFAi1Wr6Y1CcQwmHWLJzCadSTxHsE0z/1v25pfEtJf66i5auC0q+D8W3B5L5cYGPJfRdzzlqRSvwoQQ8jvK6Rp8KJY2AsAUO562B5zFGKtUA0dKKnT/JyE3n/s8H0HVhV3JtudzS+BYaBDXgie+eoMPcDsQklZCtTvnqgYjsggK6j0UFTwRzEy71G1RSLFSRXPcdAchZVyAogWPtU6F39KMZLgQXN3A/1WZJuaYiko0k3Kev7IS8gVJmbJqVPktbEWJJZX6fOfgHD3Y8r+Ud5r0tL/LWn3/xx6N/UCfQ9ah2Yj2JJA1DBb2I8u1VYFfS42C5AlPwq673IaKnnfDuWmSUJbnbwNLGYzluqisej6dSirSnPkqpz+z3/1BKNSl072V7+UGl1J3usKcmoZQvyrcnZH+FpLyCSB4/7h5CbOpJFt3eGt/MCY4dv2I9AknDeKrVOe5ucTuzf5/tHiNMYWCqY08L8UOBoORu0Zf63YBSSj/Ed8G0TXl3NgSlklFRaU8fAZJE5Aql1GBgGjBIKXUVMBhoA9QH1iulWopxlvyiaJqG1WrFarWiaRqaphEU9BQKyE54Gy3pCz6IPsMT7e/Fq/YCSB6FpDyvC0rWZ4BChS9lzPU2blpwE693ex0vs2t+EmUKhLB5SNJI3feil6JCpqL8/unqRzaoYrg8/VFK3QBMFJE77dcvA4jIm4WeWWt/ZovSd1+dBWoB4ws/W/i5S/VZVac/iYmJHD16lPPnz5OQkEBiYiJJSUk8//zzBAYGsnz5chYvXkxaWhoZGRlkZmaSmZnJ4cOHCQgIYNy4cbz11lvF2tVTI2g8NjSMectSHeVms5mwsDDi9jYHLZGXXj/Pht/qExQcQVBQEBtOb2DYzcP4YM4HAPzvf/8jNTWVWrVqUadOHerWrYuvr2+pP59oiY69LfjcjinsA9e+MAOP4ekdtSWlPb0wxLrjGXtKjxQgwl7++wV1S0yZqpQaBYwCiIqKKukRj5Avykopjhw5wnfffcepU6c4deoUp0+f5syZM6xevZqWLVuydOlSxowZU6yNoUOHEhgYSE5ODmlpaQQFBVGvXj38/f3x8ysIrdCjRw+CgoLw8vLCbDZjNpv17fWiIamv8s+7AmnW2ItZO5L5Z9OrCQ/shUmlgl2j69U206CeP+lZJs6cOUPuiVy2/Fqg35MnT2bdunVFbOvUqRPbtm0DYNasWWRmZtKkSROaNWtG8+bNqV27tt2GbD1tRz45vyDZPzh8LAY1hyqzpCwic4G5oI9UPGFDXFwcq1at4tChQxw9epSjR48SExPD119/ze23387OnTsZM2YMvr6+NGjQgPr169O+fXtMJt11dc8999C0aVMiIyOJjIwkPDyc0NBQLBb9r2HEiBGMGDHiov3feeed3HlnUbdTvqCQ9Tl33vMivQY/w8lvbyXCtJeJN6dC7l+g/FHhyxjz9BuMeWw7KmQCv8QF8NSap9jxxA5HWwsWLOD06dPEx8cTFxfH2bNn8fcv8Fd8+eWXbN68uZhN33//NZL0OB9+9D11ooZzdfv7aRr2JubksRCKISw1DHeISmnSnuY/c8o+/QkBEkpZt0I5f/48u3btYteuXezdu5e9e/cyduxYBg4cyPHjxxk5ciTe3t6OX+pbbrmF2rVrA9C7d2/OnTtHZGRkiftAmjdvTvPmJaaKdgEr2M5CwFN6ihGlePKG97lj8Q081uZ/1AsIRoUv1dNp2P0eeUkv8vov4TzZ6ckidjZs2JCGDYtv3c9n06ZNZGVlcfz4cWJiYjhy5Ai1atUCWxxa7iGen5hMVtZ0YDp+fn60be3Hw0Pn8PizuqjYbDbMZiNKWnXHHaKyDWihlGqKLgiD0ZOtF+ZbYBiwBRgA/CQiopT6FvhYKdAXggIAACAASURBVDUL3VHbAtjqBptKxZkzZ9i6dSu1atXixhtv5PTp0zRoUDD7ioyMpE2bNnh760m4rr32Wv7++28aNWpU4n8Of3//Ir/sFYFS3hD2IWBxCESb2m145vrx3PHdRyzoM5EbzE31Z03+HFOv8tzGx/C2BDCqY/FoZpfDz8+PVq1a0apVqyLl5trriI+H/fv3s3v3bnbt2sXOnX+Rq3RBiY+Pp0mTJnTq1ImbbrqJrl27cuONNxISUjxMg0EVx9l8qYVfwF3AIfR8yf+yl72GnowdwBdYCRxBF41mher+y17vINC7NP05m0tZ0zSZNWuW9O/fXxo0aCDoWcrlgQcecNx/55135Mcff5SzZ8861UdlYsGfC6T5O83l2vevlUErB0m3Rd0kYlqEvPjji5KdV7o8yu4iNjZWnnnmGencubNYLBYBxGQyycqVK0VEJDMzU7KysirUJoOLgwu5lKvt5rfMzEx+++03Nm7cSE5ODjNmzACgXbt2pKWlcf3119O5c2c6d+5Mu3btCAgIqAjTKxxNNDad2ERsaizBPsF0a9oNfy/P7uvIyMjgjz/+YOPGjYwYMYImTZqwcOFCnn76abp3706fPn3o06cPdepU3XSzVR1XVn/cMlKp6NelRiqLFy+WW265Rby8vAQQs9ksd9xxh2iaJiL6L6JB5WP79u3y5JNPSlRUlACilJKbbrpJ0tPTPW1ajQQXRipV+uxPQkICy5YtY8iQIWRkZADw999/k56ezpgxY1izZg1JSUmsX7/e4W8ovERrUHno0KED7733HseOHWPnzp1MmDCBqKgoxwjyjTfeYMGCBaSlle5UslTBEXh1oUpOfxo1aiTNmjVj06ZNaJpG7dq1+fHHH7n22mv1OV0Vja+Rk5NDamoqaWlppKenOza/5eTkkJ2dXWwnLYDJZMJsNmOxWPDy8sLHxwdfX1/8/f0JCAggKCiIoKAggoODq+zKi6ZpdOjQgZ07d+Lv78/gwYMZNWoUXbp0KfJ3HZsay/vR77N452JOp50myDuIfq37MbrLaNrXa+/BT1D1qHEJ2pVScs0119C3b1/69OlDp06dHHtBKhspKSmcPHmSU6dOERsby5kzZzh79iznzp3j3Llzjt21ycnJZGdnl6stISEhhIeHExkZ6dgxW7duXcdSclRUFI0bNyY4uPKFERARtmzZwoIFC/j000/JyMhgxowZjBs3DoBtsdvo80kfBlzVnyc6PcmVkVdyLuMcS3Yu4e3fZzPl9jd4pMMjHv4UVYcaJypt27aV3bt3e9oMQP8VPXXqFAcPHuTw4cMcOXKEmJgYYmJiOH78OKmpqcXqhIWFUadOHWrVqkVkZCQRERGEhYUREhJCSEgIQUFBBAYGOnbU+vn54e3tjbe3d5GdtPn9558Hys3NJScnh6ysLLKyssjIyCAtLY3U1FSSk5NJSkoiMTGR+Ph4zp07R1xcHHFxcY5RTz4RERE0b96cFi1acOWVV9KqVSvatGlDixYt8PLyYJxaO6mpqSxfvpyePXvSvHlzfvj5B+6bdR8fjLuOwddciQqd7Yj7IhnzOXxmIbd9c4QVAz/n5qibPWx96RDrUcj9E+U/sKBMy4TMRXq2iHLO11TjRMVTZ3/i4uLYsWMHO3fuZM+ePezdu5cDBw6QmZnpeMbf35+mTZvStGlTmjRpQuPGjYmKiqJhw4Y0aNCAunXr4uPjU+G2Xwyr1UpcXBwnT57kxIkTHDt2zLGx7fDhw5w4ccLxrLe3N1dddRXt2rWjY8eOjpUzT3+eHsN6sH7JesLDAxg70pfRT/YjuNF7kLkESZsGvr358HBL1sVs4MtBX3rU1tKipfwLslaigv6DChiCaJlI0kjI265vZvTuXK79G6JSDiQkJLB161a2bt1KdHQ027dv58yZgtw3DRo0oE2bNrRu3ZrWrVtz5ZVX0rJlS+rVq1dlfTolkZmZycGDB9m7dy+7d+9m586d/PXXX5w7dw4AHx8fOnXqxM0338wtt9zCzTffXOHTpy7zujAschg/LPiB1atXUzvSzJuvRjJ8UDD49kaFzCQjL4e6M+tydtxZAr0DK9Q+ZxDJRZKfhZwNqMAXkJyNuqCEzET53VPu/Rui4iIiwpEjR/jll1/YtGkTv/32G4cP65kNlVK0bt2ajh070qFDB9q1a8c111xDeHi42/qvaogIp06dYuvWrWzZsoXNmzezfft28vLyMJvNdOnShe7du3PXXXfRuXPncncQN5/TnLVD1nJF+BX88ccfvDCmJ71v9+Kl0eGoOrtQSj9pXf+t+mwduZWGwRc/ilCZEMnVRye5+qFPFTKrQgQFPH9KuUoSGxvL+vXrWb9+PT///DOxsfqRo4iICG666SZGjBjB9ddfT8eOHQkKCvKwtZULpRSNGjWiUaNG9O/fH9BHNFu2bGHjxo2sX7+eKVOm8Prrr1OrVi3+8Y9/8M9//pPu3bs7jjy4k0j/SI4nH+eK8CvocvUefv6yNjZ7RJ7PFv6Dz9cE8ObMaaTmpBLmG+b2/ssNsYIUct5ryZ6zpSw4u8HFky9ntunn5ubKTz/9JOPGjZOrr77asUW/Vq1aMmjQIPnggw9k3759jk1yBq6RkJAgH3/8sQwePFiCgoIEkNDQUBkxYoSsX79ebDab2/p6e8vbMvjzwaKlfyS2My3ElvSMaFquaOkL5b9Ta4mvr1n8gvykw+Mdqszfr2bLENv5B8R25krRMr8UW+LjYjvTQrT0pRXSPy5sfvO4QDjzKq2opKenyxdffCEPPvighISECCDe3t7SvXt3mTFjhuzYscOt/7gNSiY7O1tWr14tDz30kENgGjduLJMmTZLY2FiX20/KSpJ6M+vJ59t6OwQlHy19oaxZ20G8muo7rO+9915JSEhwuc/yxpb0gl1QVomIiKblFAhLzh/l3r8hKoXIyMiQFStWyIABA8TPz08AiYiIkOHDh8tXX30laWlpZf1+DdxIZmamfPLJJ9K9e3cBxGKxyIABA2TTpk0ujSKiY6Ol7sy68tiqUbLjzA7JzsuWE8kn5PVfXpfaM2rLR9EfyVtvvSVeXl7y6aefuvETlQ+aNVa0rB+Llmk5omV8IppW/j+ENV5UbDab/PzzzzJ8+HDHL2Ht2rXlySeflA0bNkheXp4r369BOXH48GEZN26chIWFCSDXXXedrFq1ymlxOZ16Wib8PEEaz24sXq95ScS0CBn57UjZeXan45mYmJgS3xsUxRVRqdKrP7GxsSxcuJAFCxbw999/ExQUxIABA3jwwQe57bbbqsy29LS0NOLi4khKSiIlJcURo/bBBx9EKcW6devYvn07mqYhIphMJry8vBy7SX/77TdOnTpFUFAQISEhhIaGEhkZ6QgeVdnJyMhgyZIlTJ8+nWPHjtGxY0dee+01evfuXW7L8/v27aNjx4488cQTzJw5s9LuyPYUNe6UcsuWLeXee+8Vk8kkgNx+++2ybNkyycjIcIdIu52jR4/KsmXLZPLkyTJy5Ejp3bu3XHvttZKamioiIi+88ILDcVz4lZOTIyIiTz31VLF7vr6+jvYffPDBYvcjIiIc98eNGyd33XWXPP744zJ16lRZuXKl7N69u2K/hFKQm5srCxYskGbNmgkgXbt2le3bt5dLX1arVZ599lkBZMCAAY7v2kCHmjZSUUpJZGQkjz76KI8++mg5hGgsGyL6vo1du3axe/du9u/fz759+/j0009p3rw5c+bM4dlnnwWgVq1aNGrUiPr16zN//nxq167N9u3b2bdvn2Orfv42/WbNmmEymcjJyUHTNMfIK39rfn6Uubi4OOLj40lLSyMlJYXk5GTy8vJ46KGHAHjllVdYu3Ytx48fJyEhAYC2bduya9cuACZMmADoJ4U7depUJPqdJ8jNzWX+/PlMnDiR+Ph4nnjiCSZPnkxYmPuXg2fNmsXzzz/PPffcw+eff+7x3cGVhRo3UmnatKlHo4TFxcXJN998I8eOHRMRkS+++KLIKKFBgwbSvXt32bNnj+P5/fv3V4pYLikpKfLnn3/K5s2bHWU33nijY9SXb/+kSZM8aKVOcnKyPPvss2IymaR27dry2WeflUs/77//vgDy7rvvlkv7VRFquqO2NOw9t1ee/u5paTGnhUTNjpI7Ft8hn+7+VHKslx/2ZmRkyJIlS2TEiBHSsmVLx3++OXPmiIjI6dOn5b///a/8+uuvkpSUVGbbKgPp6emyefNmefvtt+X++++XWbNmiYj+2Zs0aSIPP/ywrFy50iOrZzt27JDOnTsLIA8++KCkpKS4vY8NGzYY2wsK4TFRAcKBdcBh+59hJTzTDj3g9V5gFzCo0L1FwN/ADvurXWn6LauovPP7O1Jrei15dcOrsuvsLolJjJHP9nwmN82/Sa6bd52czzhf5PmMjAxZtWqVrF27VkT0X3ez2SxhYWHSt29fmTZtmmzatKlSjDzKm9jYWBk4cKCEhoYKID4+PnL33XdLdHR0hdqRl5cnkyZNErPZLM2aNZOtW7eWSz/Hjh2TefPmlUvbVQlPisp0YLz9/XhgWgnPtARa2N/XB84AoVIgKgPK2m9ZROWLfV9Io5mNZHDnR2TP5gOO8pysHBl/12S5+42+ctui2+TcuXMyf/586dOnj/j6+gogPXv2dDx/4MCBGv1LlpeXJxs3bpSxY8dK48aNZceOHSIismfPHvn1118rbKfq5s2bJSoqSnx8fGT58uVub3/06NECyA8//OD2tqsSnhSVg0A9+/t6wMFS1NlZSGTKVVQ0TZP2H7SXT37/TIa1HC19gobIns0HJCcrR17uPVm6ca+snvejtJjTQjrc0MGx03P06NHy448/SnZ2xUacrypomuYQkYcfflgAadOmjbz//vsVElP2/PnzcuuttwogEyZMcKugZWRkSNu2bSUyMlJOnTrltnarGp4UleRC71Xh64s83wXYD5ikQFQO2qdFswGfS9QdBUQD0VFRUaX6YnbH7ZbGsxuLTbNJfGyCDGs5Wnp6DZQu/t2kFg3E18dX4uPjZcbmGdJ3el/5888/q8zZkMpCenq6zJ8/Xzp00EU5MjLS4WsqT3JycmTYsGECyBNPPOHWUeSBAwckICBA7rzzzhr778EVUbnsjh+l1Hql1J4SXv8o/JzdkIuuTyul6gFLgYdFJD/U2MtAK6Azun/mpYvVF5G5ItJJRDrVqlXrcmYDcCbtDFeEX4FJmdAsVkK7m9mYt4qtmT+T5ZvKE08+gdVqpWVES7SGGu3bt69WsVAqgoCAAEaMGEF0dDS//vornTp14uzZs4D+g5WTk1Mu/Xp7e7Nw4UJefPFF3n//fZ566qliEeyc5corr+TNN99k7dq1rFixwi1t1iicVSMpw/QHCAb+5BJTHeA2YHVp+i3t9Of3k79L61mtRURk/779opRJIqgr13CD3B34gMPHMjd6rjz4xYOlatPg8uSPGlatWiVNmjSR1atXl1tfmqbJ+PHjBZCxY8e6rV2r1SrTpk0rl5WmqgAenP7MoKijdnoJz3gDG4AxJdzLFyQFvA1MLU2/lxMVq9UqK1eulE6dO4nf1X6y5e8t8nLvyXILfWTNR+sdU6F8H8uN82+UL/d96eTXb3AxNm/eLFdddZUA0r9/fzl9+nS59KNpmjzzzDMCyPvvv18ufdQ0PCkqEXbBOAysB8Lt5Z2Aj+zvhwB5FCwbO5aOgZ+A3cAeYBkQWJp+LyYqVqtVli5d6thL0qJFCxnw4gDpOKeT9A4dJGs+Wu94Nl9YHhgzXJq/01zybMahw/IgJydHpkyZIj4+PhIWFiZfffVVufRjtVrl7rvvFrPZLBs2bHBbu9u2bZObb75Zzp0757Y2qwIeExVPvS4mKjNnzhRArr32Wlm5cqVYrVaxaTYZ+tVQafdeO/l6/9cO8TiScESe+OpJqf9Wfdl7bm+Zv3SDsnHgwAHp3LmzLFq0qNz6SE1NldatW0u9evUkPj7eLW3u27dPAHn99dfd0l5VoUaLyubNm+XXX38VEZHExERZuXJlsZUAm2aTpTuXyvUfXS/+U/wlYlqERE6PlHFrx8mplJq7bFjRFA5B8cMPP8j58+cv8bRz/PXXX+Ll5SX9+vVzW5u9evWSunXr1qhDhzVSVE6fPi1DhgwRQHr16lXqLyslO0XOpZ8zpjseJDU1VUJDQ+Wqq64qFz/L1KlTBZBVq1a5pb3Vq1cLIN9++61b2qsK1DhRadSokQQFBYm3t7e88sorRhLvKsjGjRslMDBQmjdvLsePH3dr27m5udK6dWtp1qyZWw6e5ubmSkREhAwaNMgN1lUNXBGVKhmZ5uTJk9x4443s3buXKVOmOJJ4G1Qdbr31VtatW8f58+fp0aMHiYmJbmvby8uLd955h5iYGBYsWOCW9iZOnMhtt93munE1gCoZT6VFixZy6NAhY6NaNeDXX3+le/fuTJ48mRdeeMFt7YoIN998M7GxsRw+fLhSpGutSrgST6VKjlRCQkIMQakmdO3alejoaEdoTHehlOLll1/m+PHjfPmle1KdnjlzhqNHj7qlrepMlRSVwqQmplEVR1sGBbRt2xalFEeOHGHz5s1ua/euu+6iUaNGLFy40C3t3Xrrrbz44otuaas6U6VF5XxsAqOvf4X5Ly/3tCkGLiIiDBkyhPvuu4/09HS3tGkymRg2bBg//vij4zySK1x77bXs3LnTDZZVb6qkqKQnZXA+NoHnu00kOS6FG//R2dMmGbiIUopZs2Zx+vRpZs6c6bZ2+/fvj4iwdu1al9u64oorOHHihNsOLlZXqqSonI6J4/5Gj5Mcl8KbP/yLq2640tMmGbiBG2+8kYEDBzJjxgy3jCwArrnmGmrXru0WUWnUqBF5eXnExcW5wbLqS5UUlXx6P3qHISjVjClTppCVlcUHH3zglvZMJhNdu3Zl27ZtLrcVEREBQFJSksttVWeqrKiYzCa+mrOG/32+xdOmGLiRFi1aMGDAAPLy8tzWZrt27Thy5AipqakutXPDDTfw8ccfU79+fTdZVj2xeNoAZ4hqVZ+vti7ilbumMOX+twG4ZcANHrbKwF189tlnbt0y0Lp1awCOHj1K+/btnW4nKiqKqKioi94XyUUp7wvKNMBarLw6UyVHKr4BvvgH+fHGmn9x1Q0tSTyT7GmTDNyIUgoR4dy5c25pLz85WmxsrEvtnDt3jo0bN5KRkVHsnmipSMJ9SMZHBWWiIan/RpJHI2J1qe+qRJUUlXz8g/yY+dNE7h3d29OmGLiZkSNH0rVrV7e0VadOHQDi4+NdamfdunV069aNU6dOFb+p/MHSFEmbjmR85BAUslaC5SqgauT1dgdVWlQAzJaa85dVk2jcuDGHDh1y2Q8COFKZ5ubmutRO/opU3bp1i91TyoIKmQG+d+vCEtdKF5SAp1CBz9SoHeBVXlQMqicdOnQAYM+ePS63ZbHorkOr1bUpSGxsLH5+fgQHB5d4XxeW6YVKfGqcoIAhKgaVlEaNGgGu+0EAxw7dwMBAl9o5ePAgLVu2vKhI6FOeiYVKciBzvkt9VkVcEhWlVLhSap1S6rD9z7CLPGdTSu2wv74tVN5UKfWHUuqIUuozVZNc5AaXpF69egBu2QSXkpICcNERRmnZt28frVq1KvFeER9KwFOoOvsKpkKFnLc1AVdHKuOBDSLSAj0A9viLPJclIu3sr76FyqcBs0XkCiAJeMRFewyqCcHBwbz++ut07uz6EYyTJ08CBatAzvLFF1/w0ksXSU0lqZC7vZAPpZCPJed/NWr1x6V4Kkqpg8BtInLGnixso4gU2+KqlEoXkcALyhQQD9QVEatS6gZgoojcebl+O3XqJNHR0U7bbVCzeOeddxgzZgznzp2jtInonEG0dFABRaZHuphYUcq33PotDzwZT6WOiJyxvz8L1LnIc75KqWil1O9KqXvtZRHoaVLzJfwUcNGfEqXUKHsb0a4uDRpUfrKzs4mJiXFLhsNdu3YRGRlJZGSk02188sknfPPNN5d8RpkCi/lblLJUOUFxlYpKe9rYrnoPAG8rpZqX1VBxIu2pQdVl9+7dNG/e3C0HAaOjo+nYsaNLqzATJkxg7ty5LttSE7jsNn0R6X6xe0qpOKVUvULTnxK3QIpIrP3PGKXURqA98AUQqpSy2EcrDQHXXf0G1YKYmBhA36/iComJiezZs4d//vOfTrexZ88eDh8+zJgxY1yypabg6vTnW2CY/f0woNj4UCkVppTysb+PBG4C9tlHNj8DAy5V36BmsmvXLiwWy0VXW0rLTz/9hKZp9OjRw+k2Pv30U0wmEwMGDLj8wwYui8pUoIdS6jDQ3X6NUqqTUip/Ha01EK2U2okuIlNFZJ/93kvAc0qpI+g+lpq3qG9QIlu3bqVNmzaO3bDOsmrVKkJCQujSpYtT9W02G0uXLuWOO+6gdu3aLtlSU3DplLKIJAB3lFAeDTxqf/8b0PYi9WMA5/62Daot2dnZbNq0iccff9yldnJycvj666/p16+f09H0T5w4gdlsZuTIkS7ZUpOokqEPDKo3JpOJzz77jKZNm7rUzurVq0lNTWXQoEFOt9G0aVOOHDliBFcvA1Uy74+xT8WgNPTo0YNDhw4RExOD2Vz2g6fx8fEEBgbi5+dXDtZVbmpc3h+DykVWRjYnDxZduBMRDv8ZU+a2MjIymDRpEseOHXPJpgMHDrB+/XpGjhzplKAAPPfcc7Rp08blg4g1DUNUDFxm9qgPGNv13/y9+zigC8qCVz7mqc7j2bflYJnaWr58ORMnTnRsrXeW6dOn4+fnx2OPPeZU/X379rF8+XL69+/vOOVsUEqcTcLsyVfHjh0vnlnaoMI5eei0DG44SvrXelhidh2Tj8Yvk+5qgLz9+Idis9lK3Y7NZpM2bdpIu3btRNM0p+05duyYWCwWGT16tNNt9OvXT4KCgiQ+Pt7pNqoyuJCg3eMC4cyrNKKyZVW0TBv+rljzrI6y0zFn5eXekyXhTOJl6xuUjXxh6a4GOCUoIiIrV64UQJYtW+aSLUOHDhUfHx85ceKEU/V/+eUXAWTSpEku2VGVcUVUqu305+SBWNYt/oWpQ9/FZrVx5u84xnWbyIE/DpMUl+Jp86odDa6oS+vrWziu+zxxJyZT6f952Ww2Jk6cSKtWrRg8eLDTduzatYulS5fyzDPPOGKylJUVK1YQFRXl1oTxNYlqvfrz6bSvmf/yclpd14LzpxLIycxh2rr/0KJDswqwsuYgdh/Kp9O+pkP3thzfdwprrpUZGybQtG3pttmnpqby2GOP0a9fPwYOHOi0HbfddptjW314eLjT7Zw5c6ZGp+JwZfXH41MZZ15l8am8/fiHjiH5ga2HS13PoPQs+NfHRaY8hX0sx/Y6NwVxhiVLlgggc+fOdar+yZMn5dixY262qmqCMf0pmTN/x7H1+78c15/PXo3NavOgRdWTKzo04x9P9WL0e49iMplo2KIeM36aSJubWhFer8RggEWYNm0a+/fvd8mGc+fOMXbsWK677joeeaTssb40TWP48OFcd911ZGVluWRLjcdZNfLkqzQjldMxZ+WBxo/LP8OHyaHtR+WTqV9JdzVAJt8/u4jz1sCzfPfddwLIq6++6nQbmqZJ//79xdvbW/bu3etUG3PmzBFAPvzwQ6ftqE5grP4UZ/ZjHzoEJZ98Ydm+ftdl6xuUP2fPnpW6detKmzZtJDs72+l2Fi1aJIBMnTrVqfo7d+4UX19fueuuu1xayq5OGKJSAjnZuXJ8/6li5Ud3HrtsXYPyx2azSY8ePcTX11d27XJe5A8cOCABAQFy2223idVa9hFoWlqaXHnllVKvXj05e/In0bTcIve1vBOiWeOctq+q4oqoVFufirePF1GtikenbHaNa0F/DNzD/PnzWbduHXPmzKFt2xIPsV+WjIwM7rvvPnx9fVm2bJlT2/FNJhNdu3Zl2ZLZ1LI8jaSMQ0RPDi/Wk0jiQ/a0pc6tkooUT2Amkut0e1UBY/+xgUcYOnQoZrOZhx9+2Kn6IsKIESPYs2cPa9ascSpSvtVqxd/fn3nz5ultZqQjadP0mKiBY5HE4SAZqOD/OBWKUqzHkaSHIejfKN9udruzkKTHwOtaVNDzZW6zKlBtRyoGlZOdO3eSkJCAj48PI0aMcDpu7LRp01ixYgVvvPEGd9552QQMxVi7di1t27Z1hK0EUAGPoIJeguzvkfM9QVJQ4YtQXm2cshFTKKhQJPlpJPvnAkHJ3YqyXOFcm1UAQ1QMKoxDhw7RvXt3hg0bdvmHL8GKFSt4+eWXGTx4MC+++GKZ6+/evZuBAwfi4+NTPJqbT8+C96YIsLR02k5lCkGFLwTLlUjyY0jctbqghExD+f3j8g1UUQxRMagQTp06Rc+ePVFKMXv2bKfb2bRpE0OHDuXmm29m4cKFZR7pnD59mrvvvpugoCBWr15dJBVqvg8FFQK+fcF2ooiPxRmUKQQV9n8FBb69q7WgQAWkPVVKdSuU8nSHUio7P/ePUmqRUurvQvfauWKPQeUkNjaWbt26kZSUxPfff0+LFi0uX6kEdu7cyT333EPjxo35+uuv8fUtWz6dpKQk7rzzTpKSkli9ejUNGzZ03BPbWV1QJAMVvghT6MyCqVDKOBcctVlISqHRVPaPSPbPTrVVVSj3tKci8rPYU54CtwOZwI+FHnlBClKi7nDRHpfZuXEvH7/xZZGy86cTefvxueRkuZ7Yqiby2GOPERcXxw8//EDHjh2dauPQoUP07NmToKAg1q1bR0RERJnb0DSNsLAwvvnmG9q3b1/0pikcvK8r4kPJ97Eo75ucc9QW9qGEzEDV3mafCj1dvYXF2bVou3IfBOrZ39cDDl7m+VHA8kLXi4ABZe23POOpvPPEXOmuBsjiCZ+JiEh8bIIMv3K09AkaIof/iim3fqsqO87skEe/eVTCp4WL5TWLNJ7dWP7z03/kdOppso4ARgAAD7BJREFUxzOxsbHy+++/O93HoUOHpH79+hIZGSn79+8vc/3MzEzJysoSEanQzW1a3mGxne0iWubXBWW2ZLHF/1NsKRMqzA5nwFOb39DTlua/V4WvL/L8T8A9ha4X2YVpFzAb8ClNv+UpKlarVaY//F/prgbI7FEfOARl96/7yq3PqsqCPxdI7em1ZfIvk+VE8gnJzsuWnWd3ymPfPiYRYyNk4LCBTm1IK8yhQ4ekQYMGEhkZ6dQmuezsbOnVq5f06tWrzPFd3IFmSyuxTNMq3payUK6iAqwH9pTw+seFIgIkXaKdeugJ2b0uKFOAD7AY+M8l6o8CooHoqKiocvw6dWF56c7XHaebDUEpzqbjm6TO9DrSr/ND8sXs1Y7yvNw8GXrLKLF4eYkpxCR7Du9xuo/du3dL3bp1nRaUzMxM6dWrlwDy0UcfOW1HTcQVUbmsT0VEuovI1SW8vgHi7OlOuVTaUzv3AV9JIVe6iJyxf4YcYCGXyAEkFZhLOSkuhTMxcY7rP9fvLtf+qiJvbXmLf9/yb66Juob3n1vEl29/hzXPSr8b7mfp/+bRILIBd0+9mw0JG5xq/48//uDWW29FKcUvv/xS5l23GRkZ3HPPPaxdu5Z58+Y5dXLZwEmcVSNdzJgBjLe/Hw9Mv8SzvwPdLijL98co4G307IUenf4U9qHs/GWvYyqU72MxEEnLSZOAKQGSmp0qebl5MrH/DOmuBkhTWgsg7Vt1lNTUVFl3dJ1cN++6Mre/Zs0aCQgIkGbNmsnRo0cvX6EE+vXrJyaTSZYuXepU/ZoOHvSpRKCv+hxGnyaF28s7AR8Veq4JevJ10wX1fwJ2o0+nlgGBpem3PEVl0sCZRXwohX0se387UG79ViVOppyU+m/Vd1xnZ2ZLdzVAOnGbtAq6RvLy8kRE5ND5Q9LsnWZlanvu3LliNpulffv2cvr06ctXuAg7duyQL774wun6NR2PiYqnXuUpKsnxKbL/j0NFyqxWq2z9/s9y67OqkT9SSctJk/Xr1kvPa+5x+J+6qwEOH8v6o+uly7wupWrTZrPJ+PHjBZBevXpJampqme3at2+fTJs2rcz1DIpjiIpBhdN3eV+565G7RKHEnyBZMmVFkanQF7NXy/2f3y9vb3n7sm2lpqZK3759BZBRo0ZJbm7uZetcyM8//yyhoaFSp04dOXv2rDMfyaAQhqgYVCgxMTFyTedrBJBG4c1kyZQCf1O+sAwaNlTqzqwriZmXTody+PBhufrqq8VsNsucOXOc2keyePFi8fLykquuusqIMesmXBEV4+yPQZnIzMzk+uuv59jBYzzy+iPkjM/gVNejnE47jVX7//bOP6jKKo3j3wcJFbMNJTX8CemS6QohuCmjOyDTODpKP6yFslUHxloyt2gbJDV32nIndiacHalMcTRDxZ8trHlNMGTQSgkz1DLRpNXAH6jX+A33/e4f9+0uCBcu9164FzyfmTP3fc973vM+z3u5D+ec5znnNOL7G9/j8oLzyBu/H1kxWfDpa32N2qysLISGhuLSpUswGAx46aWXOhy5+sYbb2D+/PmYOnUqCgoKMHKkWi/H1SijorCJy5cvgyS8vb3x/vvvo7i4GOuXr4dh3j6UXC/BuPfGofdbvTEzYyYGeg9E0fNFCBsa1mpdjY2NWLZsGaKjozF69GgUFRUhKirKLrnGjx+PhIQEGAwG+Pi0v8i2oguwt4njyqS6P11HY2MjU1NT2a9fP2Zmtu1Wt6XrUlpayvDwcAJgfHy8JXy+IxQXF3Pbtm0dvk9hO1BjKorO4NixY5w4cSIBcObMmfzxxx8dqm/37t308fFh//79mZGRYVcdW7dupbe3N0eOHGmXQVLYhjIqCpuprqzhoR1HmuVpmsbcjHw21DdY8pYvX04R4ZAhQ5iZmenQRDyj0ci4uDgCYGhoKM+e7fimbjU1NUxISCAAhoeHOxTDomgfZVQUNrP5zR1ml+9qcyyJpmlMfz2DUTKXe9L2sq6ujiSZmZnJV155hTdv3nToeYcOHeKoUaPo4eHB5ORkS/0doba2liEhIQTAV1991S6Xs6JjKKOisJlmsSSr/8P01zM4HU/yucg4BgQEOC14rLKykkuWLKGI8IEHHuDhw4cdqu/tt99mdna2U2RTtI8yKooO8athmY4nGYxwDh04nAA4YcIEHjhwwOH6c3Jy6O/vTwB88cUX+csvLaf/t8f169cZGxvLvLw8h+VRdBxHjIpyKd+B9PLsBb+AwfgBJ/ANDqOB9di8eTOOHz9ut2sXAK5du4YFCxYgKioKnp6eyM/Px5o1a5qtA2sLubm5CAoKwo4dO3D69Gm75VG4BrXvzx0ESWRnZ+Nszk8wrDmE2TPn4MKl86g94QHvCh94eNj3P0bTNGzYsAFJSUm4desWkpOTsWLFCvTt27dD9VRVVSEpKQlpaWkIDAzEkSNHEBbWeqyLwo2xt4njyqS6Px2jrq6OmzZt4oQJ5tB6f4xl6qIPaDKZmo2x5Hyc3+G6v/76a06ZMoUAOHXqVJ48af+iTOvWraOI8OWXX2Z1dbXd9SgcB2pMRWGNlJQU+vn5EQDHjRvHNavTmL48o9nSig31DUx/PYPGCttnBpeXlzM+Pp4iwkGDBnHjxo0t3M7V9dXceHwjn9n1DJ/IfIJJB5J4tqK5O9loNPKLL74gaZ6pfOzYMQe0VTgLZVQUFjRNa9ZamDdvHh999FEaDAanLPpcU1PDlJQU9u/fn56enkxMTGzV7ZxzLoeD/jmIMz6ewQ1FG7j95Ha+9tlr9E3x5aKsRaxvrGd2djaHDRtGX19fVlVVOSybwnkoo6LgjRs3mJaWxuDgYALgiRMnSNKyYJKjmEwmbt68mSNGjCAAzpo1i2fOnGm17NGLR+mbMpC5xU9Ta/x/kJqmaTReW8VpqcEcNXmUpfXkyEr7is5BGZU7mIsXLzI2NpZ9+vQhAAYHBzMtLY1Go9Ep9Wuaxn379jEoKIgAGBISwpycnDbvmfHxDK47+neayh+m6cp0ao0/U9M0mm69wwuFo3h3Py/CE0xcntgiGE7TTNQafmopR0OpU/RR2IYjRkV5f7oZmqbhyJEjqK2tRVRUFO655x4UFBQgLi4OCxcutHuzrtbIy8vDihUrUFBQAH9/f2RkZCAmJqZNL1HpzVIU/lyIPX/cA9FmgzcWgtfnobTMHyMH5WP4mPlYvqIvLvhdgMdgD3h5eTW7n5WrgeqtwIBNkLseMufV/Bs0LgXufQ/SJ8Jp+ik6CXutkSvTndZSaWho4MGDB7l48WLLoOvkyZMt1529n01+fj4jIyMJgH5+fkxLS7M5vP7AuQOM3BRpOS8tMfCpOXfzrrvA01/FWMZ19ny3h7O3zG5xv9ZQStPlP9BUHkqt/hS16k9oKvstTRXPUdOUR6irgKuC30TkKRE5JSKaiIS2UW6GiJwRkRIRWdok319EvtLzM0XEy1odTdE0Dc8++ywMBgNMJpMjKrgtFRUVluPY2FhERkYiPT0dkyZNwpYtW7B//37LdXvjS5pCEjk5OYiIiMC0adNw6tQppKamoqSkBAkJCS1aFNbw6uWFqvoqVFVVYeXKlXjwd7OR/VkVkpcMwPDBZYBWDgCobqhGb8/eLe4XzxGQAR8B0g+seAw0vmbejtRnLUQ6FveicBH2WiOzMcNYAIEA8gCEWinTC8A5AAEAvACcAPCQfm07gBj9+AMAf7bluWPHjuV9991HABw6dCiTkpJYVFTUpVtaOpubN29y7969TExMZFBQEEWEZWXmbZFyc3O5a9cuVlZWOv25JpOJu3fvZlhYmKVl8u6779rtjamqr+KAtwZw2IhhBMC5s+/muW//Qq3ueLMxluit0VxbuNZqPdova2gqG0NT2RhqdYX2qqewE7h6oLYdozIZwP4m58l6EgDXAHi2Vq6tNHHiRNbW1nLnzp2cNWsWe/XqRQAsLi52/tvtIgIDAwmAXl5ejIiI4KpVq3j16tVOf25+fj4BMCAggGvXrmVtba3DdSYaEhkWN46HPhlKk3Glxdhrdd/QVP4wD59+mgPfGcjKutaNpKXLcyWCpvJJlq6QoutwxKiI+X7HEJE8AH8lWdjKtbkAZpCM18+fA/B7AH8D8CXJ0Xr+cAD7SI638oxFMG99CgDjYd4rqKfhC7Oh7Yn0VN16ql6BJPvbc2O73h8RyQEwpJVLy2je+rRLIPkhgA91mQpJWh3D6a70VL2AnqtbT9bL3nvbNSok7Z+2auYSgOFNzofpeRUA7hURT5KNTfIVCkU3piuWPjgGYIzu6fECEAMgS++3fQ5grl5uPoAua/koFIrOwVGX8uMichHmQda9IrJfz/cTkU8BQG+FLAawH8B3ALaTPKVXkQQgUURKYN6XOd3GR3/oiNxuTE/VC+i5uim9bsMpA7UKhULxK2rlN4VC4VSUUVEoFE6lWxgVR6cDuCsiMkBEDojIWf2z1X07RcQkIt/oKaur5bSV9t6/iPTWp2OU6NMzRnW9lPZhg24LRORqk+8p3hVydgQR2SAiV0Sk1ZgvMfMvXedvRSTEportjZrrygQHpwO4awKQAmCpfrwUwDtWylW6WlYbdGn3/QNIAPCBfhwDINPVcjtRtwUA1rha1g7qNQ1ACICTVq7PBLAP5uj3RwB8ZUu93aKlQvI7kmfaKTYJQAnJ8yTrAWwDEN350jlENIBN+vEmAI+5UBZHseX9N9V3J4DpIiJdKKO9dMe/rXYhmQ/gehtFogF8RDNfwhxXdn979XYLo2IjQwH8t8n5RT3PnRlMskw/Lgcw2Eq5PiJSKCJfioi7Gh5b3r+lDM2hBkaYQwncHVv/tp7Uuwk79Wkn3R27flNus0iTu0wHcDZt6dX0hCRFxJp/fyTJSyISAOCgiBSTPOdsWRUOkQ1gK8k6EXke5hZZpItlcgluY1TYedMBXEpbeonIZRG5n2SZ3qy8YqWOS/rneX3y5sMw9/HdCVve/69lLoqIJ4DfwDxdw91pVzeSTfVYD/N4WXfHrt9UT+r+tDodwMUytUcWzNMTACvTFETER0R668e+AMIBuOO2fba8/6b6zgVwkPqIoJvTrm63jTXMgTl6vLuTBeBPuhfoEQDGJt1167h6BNrGUerHYe7P1QG4DH3dFQB+AD69bbT6B5j/iy9ztdw26DUQQC6AswByAAzQ80MBrNePpwAohtnjUAwgztVyt6FPi/cP4E0Ac/TjPgB2ACgBcBRAgKtldqJu/wBwSv+ePgfwoKtltkGnrQDKADTov684AC8AeEG/LgDSdJ2LYcXzentSYfoKhcKp9KTuj0KhcAOUUVEoFE5FGRWFQuFUlFFRKBRORRkVhULhVJRRUSgUTkUZFYVC4VT+BznX+yfTrc5zAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -106,7 +106,7 @@ "x0, x1 = np.meshgrid(np.linspace(-1, 1, 100), np.linspace(-1, 1, 100))\n", "x = np.array([x0, x1]).reshape(2, -1).T\n", "plt.scatter(x_train[:, 0], x_train[:, 1], s=40, c=y_train, marker=\"x\")\n", - "plt.scatter(model.X[:, 0], model.X[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", + "plt.scatter(model.x[:, 0], model.x[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", "plt.contour(\n", " x0, x1, model.distance(x).reshape(100, 100),\n", " np.arange(-1, 2), colors=\"k\", linestyles=(\"dashed\", \"solid\", \"dashed\"))\n", @@ -131,7 +131,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAD8CAYAAACYVXqwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOydd3iT1RfHv2+6B110MMqmpVAoe4OCgGxkyhIBFX+gbAQqe8oW2TJEEJCpgiBb9t4bSlll2D3Tpmma9/3+/njbtGE1haRh5PM87wO5fd97T9Lek3vOPfccgSQsWLDwfqIwtwAWLFgwHxYFYMHCe4xFAViw8B5jUQAWLLzHWBSABQvvMRYFYMHCe4zRFIAgCFaCIFwUBGGHsfq0YMGCaTHmCmAQgJtG7M+CBQsmxigKQBAEXwAtAawwRn8WLFjIG6yN1M9PAEYAyPeiGwRB+BrA1wDg5ORUNSAgwEhDW7Bg4WnOnz8fQ9Irp/teWwEIgtAKQBTJ84IgNHjRfSSXAVgGANWqVeO5c+ded2gLFgAAJHHq8SmsurQKj5WPkc82H9oFtEO7su1ga2VrbvHMgiAIYYbcZwwToC6ANoIgPACwAcBHgiCsNUK/FizkSII6AU3XNkWPv3qglEcp9K3aFx+X+hg/n/8Zfgv8cDH8orlFfKMRjHkYKGMF8B3JVi+7z7ICeL9ITU3F/fv38eDBA1SvXh1eXl44ceIE5syZg7i4OCiVSqhUKmg0GmzZsgWVKlXC1q1bMWXKFHh4eMDT0xO+vr4oVqwYOnfuDE9PTwCAKIn46LePUM7dFgs+6g7rfL10YzL9CjZfHo+Bh07i5JcnUcK9hJnevXkQBOE8yWo53WeJA7BgNJRKJZRKJQDgypUraNSoEYoUKQJHR0cEBgaiZcuWOHXqFAAgJSUFISEh0Gq18PHxQWBgIGrVqgVnZ2cAgJOTE7y9vaFUKnHmzBnMnz8f/fv3R3JyMgBg7dq1aNCqAR7se4DhJQpCkfIDmPIbAHnyM643OhZLxFeVu2H2idlm+DTeDoy6AjAUywrg7Sc9PR1nz57FmTNncObMGZw/fx6hoaFYuHAhvvnmG4SGhuKzzz5DmTJl4Ofnh9KlS6N48eIIDAyEi4tLrseTJAmRkZHw8fGBQqHAwoULMXz8cKjj1ACAShU80b09MHjg51CkHwIUrhA81iBcJaD84vJ4MvQJHGwcjPwpvLkYugKwKAALBqFUKnHs2DHY29ujYcOGSEhIgIeHB0jC19cXVatWRdWqVdGmTRtUrFgxT2QKWBiA2VVmI+RkCDZv3gQx7QZO7yoIAPhP8zt8i8p//0XnFsXR3kdRzK1Ynsj1JmCoAjDWNqCFd5DTp09j165d2LdvH06fPg1RFNGsWTM0bNgQbm5u2LNnD8qXL4+CBQuaRT4HGwd4FfVCqzqtMHRgEygfdQOgQWyciDLV66JBg8b4YdoPSElPgZ21nVlkfNOx+AAs6FCpVDh69Kju9YgRIzB58mRotVqMHDkS//77L/744w/dz5s0aWK2yQ8ATUs1xcbrG3U2v3M+bwie+2CXrxHGDM6H48cPoXKlysDfgK3m/dwOzBGSeX5VrVqVFt4MNBoNt2/fzm7dutHJyYnW1taMi4sjSd68eZOxsbFmlvDF3I+/T48ZHrwV2oRiVENK2sckSUlKoxj3DR9f9WfBJj5UWClYsGBB3ft6HwBwjgbMRcsK4D1m9+7d8PX1RevWrbFnzx50794du3fvRr58ckBnQEAAPDw8zCzliynuVhwzGs9A47+vY1v0ZxAFHwCAINjiUmpP9Djnivpff4jTp09j0KBBcHd3ByB/6VmQsfgA3jOOHj0KR0dHVK1aFQEBAahbty569eqF5s2bw8bGxtzi5ZqvqnyFgs4FMfXoVAzYPQ5++f0Qo4pBojoR/Wv0x7Daw2ClsEK1qrI/7MyZMxgyZAg2b96MQoUKmVn6NwBDlgnGviwmQN5z4MAB1qtXjwDYoUMHc4tjEm5F3+L+u/t5+vFppovpz71n165ddHZ2pq+vLy9fvpzHEuYdMNAEsCiAd5y7d++yTZs2BEBfX1/Onz+fKSkp5hbLrFy8eJGFCxemi4sLjx8/bm5xTIKhCsDiA3jH2bBhAw4cOIDp06cjNDQUAwYMgKOjo7nFMiuVKlXCyZMn4ePjg6ZNm+LGjRvmFslsWAKB3kFiY2MRFhaGKlWqID09HVFRUShcuLC5xXrjePLkCebNm4cffvgB1tbvljvMEgn4nnLr1i20bt0aarUad+7cgZ2dJQDGEKKioqBSqVC8eHFzi2IULJGA7yFXrlxBgwYNYGNjg61bt1omv4GQRMuWLaFUKnHy5EndduH7gMUH8I4QHh6OVq1awcHBAadOnULt2rXNLdJbgyAI+PHHH3Hv3j107doVoiiaW6Q8w6IA3hFmzZqF2NhYbN++HSVKvF9n341B/fr1sXDhQuzZswcTJ040tzh5hsUH8I6Qnp6Oq1evokqVKuYW5a2AlCAI+t9/kiTiiy++xG+//YZ9+/ahUaNGZpLu9XmjfQAREREIDw8360GSd4X4+HgAgLu7u2XyGwjFJ2B8X8BlAgTbqnIbNUDiACycWROOjo6oUKGCmaXMG8xiAjx58gQlSpTAoEGDEB0dbQ4R3hl+/vln+Pv76zLxWDAEa4BpYPxXoOY8SA2Y0B9IOwgnZ3csXrwY3t7ekCTJ3IKaHLMogPLly6N79+5YtGgRSpUqhalTp0KtVptDlLee33//HWXKlNEd4LGQM4KVDwSPNYDCC4z7HIyqC6QdguAyCYJjFwBAdHQ0GjZsiC1btphZWtPy2gpAEAR7QRDOCIJwWRCE64Ig5OhBsbOzwy+//IJr166hUaNGGDNmDPz9/bFq1ar3ygP7uty/fx/Xrl1D586dzS3KW4dg5QPB/RcA6QATAfu2uskPyCZVSkoKvvnmG8TFxZlPUBNjjBVAGoCPSFYEUAlAM0EQahnyYEBAAP766y8cOHAABQoUQO/evVGjRg2cOHHCCGK9+1y/fh0AUK1ajr4es0M+q9hJ0WxHc0kNqJyc1ZC2D9Sc1720trbGypUrERcXh+DgYDNImDe8tgLIOHuQnPHSJuPK1W+1YcOGOH36NH7//XdERkaibt266NatGx49evS64r3T3LlzBwDg7+9vZkleDqU4MLYDqN6T1UYRTAwGlT8YrARILSglP9suJeROHp3Nn7Hs9zoqmwMZPoFMgoKCMHjwYCxfvhwnT57M1RhvDYacGMrpAmAF4BKAZAAzcrr/ZacBlUolx4wZQ3t7ezo4OHDSpElUq9WvfizqHebixYtcsWIF09Off/T1TUESlRRjPqUYXpZS6m5KkpZi/HcUw/0oKRca3I8YP4xidDtKYmJW38lrKEZUp5R+13B5NNcoRlSklLI+q00bQTGqCcWE0Xr3KpVKFipUiG3atDG4/zcBmOM4MAA3AAcBlH/Oz74GcA7AuaJFi+b4Bh48eMCOHTsSAMuUKcPt27cb4WOxYC6ylIA/xYiKuZ78JCmlHqAYXk6nBKTkNRTD/SjG9aUkpeWuL23Uc2SMpSQ9q0wvXrzI5OTkXPVvbsyiAORxMQ5ydSCj5APYtWsX/f39CYAtW7bknTt3XvEjefdQqVQ8duwYo6OjzS2KQUhiojxhw/0oRr/aN6pOCWT28wqT/1VJS0tjampqnoz1uhiqAIyxC+AlCIJbxv8dADQBcOt1+82kWbNmuHbtGmbPno3Dhw8jMDAQU6ZMQWpqqrGGeGu5ffs26tWrh3///dfcouQIKYJJ2Zxu2lA9n4ChCPYNAduscw6CyxQIgukz/iYlJSEwMBAzZsww+Vh5iTF2AQoCOCgIwhUAZwHsI7nDCP3qsLGxwbBhwxASEoI2bdpg7NixKFeuHLZt22bMYd46AgIC4ODggGPHjplblJeS6fCDehsE50EQvC8ANhXAhCG5VgJMWQtojiDzT5fxfUApyQRS6+Pi4oKKFSti9uzZiIqKMvl4eYYhywRjX6+bEuzAgQMsX748AbBVq1a8e9dwB9C7RqtWrViiRAlKkmRuUV6IlP6IYkQNPZtf5xOI+9pg2Z+2+Z/2CZiakJAQWllZceDAgSYf63XBu54TUKPRcPbs2XRycqKdnR3HjBnz1jlqjMGyZcsIgKdPnza3KC9FEp+tLyCJSkqS4Ts8YtLMZ2x+KfUAxahmlLThRpEzJ7788kva2dnx0aNHeTLeq/LOK4BMHj9+zG7duhEAixUrxr///ttofecVKZoUrruyjtOOTuP8U/N5L+6ewc8mJCTQ0dGRQ4YMMaGEbwaSJD3XS/+8NlNx//592tjYcOLEiXk25qtgqAJ46/MBFC5cGOvWrcORI0fg5OSENm3aoGnTprh586a5RcsRkph5fCaKzi2KtVfWIj41Hlcir6D68upou6EtolJytjVdXV1x6tQpzJo1Kw8kNi+CIEAQnj3A+rw2U1G8eHGcOnUKY8aMybMxTYohWsLYl6nSgqelpXHu3Ll0c3OjtbU1hw4dyqSkJJOMZQxG7hvJqj+XY2j4Rr32FHU4g3d9woCFAYxTGV7OSqvVGltECy9Bo9GYW4QXgvdlBZAdW1tbDB48GLdv30avXr3w448/okyZMvj111/fuENGN6JvYNWlVdjVKhAlMRlMOw4AoJQIe2U/TK0UitqFgzDjuGHbTtu3b0fJkiXx33//mVJsCxns2LEDRYsWRXh4uLlFeT0M0RLGvvKqMMjJkydZs2ZNAmDVqlXfqCIQA3YO4Jh/x1ASYylGt6IYXp6S6h+K0W0phpejlHqAITEh9J7lTXV6zo6yO3fu0NbWlj179jS98BZ4584dKhQKDh8+3NyiPBe8L07AnJAkievWrWPhwoUJgN26dWNYWFiejf8iaiyvweMPZYUkibEUIz/QRbdJqQd095WaV4q3om8Z1OfIkSMJgCdOnDCJzBb06dq1K52dnd/IqsOGKoB3ygR4HoIgoFu3bggJCcHo0aPx559/wt/fH6NGjTJ7Fh0BQsb/rKAXk5Utsk0hGP4rGj16NIoUKYKvvvoKGo3GOEJaeCHBwcFITk7G4sWLzS3KK/POK4BMnJycMGXKFISEhKBTp06YNm0a/P39sWLFCmi12jyXp1rBath7dy8oJYJxvQApCoLrDMC6DBjfF0w7jrtxdxGvjkcxt2IG9ZkvXz4sXrwYN27cwD///GPaN2ABQUFBaNasGebPn4+0tDRzi/NqGLJMMPb1JhQHPXXqFGvXrk0ALFeuHLdv356n0XRXIq6w4OyCjHnyqc7mJ6nnE/h6Wzd+t+e7XPd96dIlY4tr4QVcvHiRJ0+eNLcYzwCLDyBnJEniH3/8QT8/PwJgo0aNeP78+Twbf8juIay5rALDovS3AVPT/uP4vW3pN9+P0SmvftLv0qVLVKlUryumhbcQiwLIBRqNhgsWLGD+/PkJgJ9++ilv375t8nFFSeSkQ5PoPt2d7Ta049gDY9n/n/70meXDpmua8r+k/1657wcPHtDGxob9+vUzosQWnkdsbCz79OnD/fv3m1sUHRYF8AokJCRwzJgxdHR0pLW1Nb/99ltGRkaafNwkdRJXXljJ8QfHc+axmQZ7/XNi2LBhBMA//vjDKP1ZeD5qtZo+Pj5s0aKFuUXRYVEAr0F4eDj79u1LKysrOjk5cdSoUYyPjze3WLkmLS2N1apVo5ubG+/dk88XPC95Rl4l1HiXmTBhAgHkycrRECwKwAjcunWLXbp0IQC6ublx+vTpb51Nfe/ePbq6urJatWpMTdhNMaohpfSsw0ZSehjFqI8ope41o5RvP+Hh4bSxseHgwYPNLQpJwxXAe7MN+CqUKVMG69evx6VLl1CnTh0EBwejdOnSWLRo0Vuz7VOiRAmsWrUKLVu2hLVdUUBKAeN6gNr7oPYhGNcDkJSAVWFzi/pS5L/pnNvMRYECBdCpUyesXLkSKSkp5hbHcAzREsa+3pYVwNMcOnSI9evX1x09Xrly5RufkfdpNKrrFCNqZOXUi6hOSXPd3GK9FEl9imJMJ72cApI2Qk4EknbBjJLpc/LkSX777beMino24WheA8sKwPh8+OGHOHz4MPbs2QMvLy988cUXCAoKwqZNm96KOnJnzpxBQPnWuP64j65NcJkAwaacGaUyBBFIvwnG9ZRrDIiRYNzngHhf/pmJoRgOSir9NmpArX7dilq1amHhwoXw8vIyuUzGwqIAcokgCPj4449x5swZXd24zp07o3LlytixY8cbtSx9miJFikClUqJ9pwFISJQnDpU/gNr7ZpbsWSg+AbVy4RPBrg4E96WA9j4Y1QiMaS1HTrovh2Br2qpIpEY2meK/1imBzMIijOv6TKESkjh69ChCQkJMKpexMEZW4CKCIBwUBOFGRm3AQcYQ7E1HEAR06NABV69exbp166BSqdC6dWvUq1cPBw8eNLd4z6WAVzo2LiuEB4/S8NXIkoDHdoDpOp/AmwJJMGGYXLgzQwnAthpgXQpACsAECK4zTT75AUAQbCE4DwbSz2UogYSsqkLO/SEonPXuVyqVaNas2duToMUQO+FlF+SswFUy/p8PwG0A5V72zNvqA3gZGo2GS5cuZaFChQiAH3300RuXp09K3UkxsiZnzxxOAJw9ezYlTQjFyFqUVNvMLZ4eUvodipF1KEbWpqS5QTG2V5bfItyPYnQrfZ+AicO4JdV2vfGzVxV6mt69e9PJyYlKpdKkMr0MmLEwyDYATV52z7uoADJRqVScO3cuvby8CIDt27fnzZs3zS2WDjkRp8T27duzU6dOcp49Me/+UCVJpJgwhlLqbv121R8UE6fqTWQp/Q7FiOrZJl45iimbKUa3phhenmJUc4rpYXLBkdielNIumlDuNH0FIKa88N5jx44RAH/55ReKkmiWjM1mUQAAigN4CMDlOT/LVWmwt52kpCROnDiRzs7OVCgU7N27Nx8+fGhusXSoVCqz/GFKYopenUAyY/KH+8uTOHvGXylNrteXOfFielFMPSZP/sgP5WeiGlOMbpdxoOpf08gspVGM6yPLENuDYngZijHdX6gEYlNi6VXMi/Yl7amYqKDdZDu2/r0199zZYxL5nkeeKwAAzgDOA2if073v8grgaaKiojhkyBDa2trS3t6ewcHBTEhIMLdYOu7du8cBAwbk6XZm9mKhYlzfbJM/K8hKnnT/kydd4hSK4RXk/8cPo6jaIz8T7kcxslbG5DdNHH72yZ+57JfNgQwlIOkHht2Pv89S80qxUvcKdPNwY3RMNBPViVx+fjlLzy/FYXuG5YnizVMFALkk+B4AQw25/31SAJk8ePCAn332GQEwf/78nDdvHtPSzB+C+9tvvxEAg4OD83RcSVTqL6n1Jr9EMe6bjEn3O0lS1IRSDA/K9kxANnt8s+nklESKCeOfsfkl1XaK8d/ppSQXJZFBS4I452ArJj1oRXVqVjyAlLqHMQ+rseLiAC4/v9xk8maSZwoAgADgNwA/GfrM+6gAMjl//jw/+ugjAqCfn1+e5yF4Hn369CEA7ty5M8/GlJf92RTAMz6BHc9MOjHtUrZnAl/oEDQXu0J3scrSKhR1FYvaUpseR1G1W17txHTikft7WGZBGZP/zvNSAdQDQABXAFzKuFq87Jn3WQGQ8jfcP//8wzJlyhAAmzRpwhs3bphNHpVKxaCgIHp6evLx48cmH0/P5tdGP+MTeO4zYkKGrV82a/LH9qGYelT2CUS3pKjKOwX2PD7/63MuPC2XP5PUB3lhf0kWL2LNw1t9MyIZZQes/wJ/nv/PtHknDFUArx0HQPIYSYFkEMlKGdfO1+33XUYQBLRo0QJXrlzB3LlzcfbsWQQFBWHo0KFmyVPo4OCATZs2ITU11eQFLyglg8rZgG1tCO5LIFh5QnD/RS4WqpwB8tlchnLatN6ANgSwqQpAA0ABaA4BmoOA00hAextIHASmnTSp/C8jVhWLoq5FAQCCXQOULNMeEdEiNmxVQnCbC0HhDEEQUMSlCGJUMWaTMzuWSEAzkr2OQe/evfHTTz8hICAAGzduzFxd5RllypTB3r17sXDhQpOOIyicIXiskye/4JDV5v4LBPfVLyj1bQUonCG4LQRsSme05ZPbtQ+AlGlyk10nwLaWSeV/GV5OXniQ8AAAQPVe5LP+B62aOGHz38lIj/5GVmQkwhLD4O3kbTY59TBkmWDs6303AV7EqVOnWLlyZQJgs2bNeP/+fbPIkZyczFu3jJOUxFhk2sySJFFMGJ9h/1fI8gPEf292X8reO3sZtCRIz+b/Y8s6AuCejUUpRrflgbvbWW5RuTfGB2BZAbxB1KxZE2fPnsW8efNw9OhRBAYGYt68eXle1ahjx45o3rw5kpKSdG0UoyEljgOZmtVGLaSkKaD2wWuPyeSloOaMflvaCTDlFwCy2ZT5r+AyHrCpCECtu1dw+ER3j7loVLIRbBQ2mHZ8PmBTHoL7SjRv0Q7Ozs7YvKcCYlIi0H/XEIyoM8LssmZiUQBvGFZWVhg4cCBu3LiBBg0aYPDgwfjggw/y9HDJ2LFjERYWhoEDB2Y1pl8AUjeC8f1ApoLUgonDAdVvgOZEjn1Sew+k/olJirGgFA9KKlC9DYzvo1MCTDsBxv8PTN0KUq3/XPp1ID1b8VfBTX427fSrv2kjoBAU2NplK9aG3EPH/RocfngOkpWE7yd8D0X5wqjx139oX7YLelbqaVY59TBkmWDsy2ICGIYkSVyzZg3d3d3p4ODARYsW5dkyd+zYsQTAzZuz9tgl1V8Z3vvPMgJ4/Cgl57ynLWmfUIyoRDHhe0qSmNEWQzG6BcWYznI4sjaaYnRzihFBFJN+yvDsP7u9J2muyT/LWPaLCeN0eQ3E8AqU0syfEj1JncQFpxcwaEkQHaY40HWaKztv7swjD47kmQywpAR7N5AkiVvPbGWp6qUIgBXqVuD9x/dNPq5Go2G1atXo4eHB//7Lyk4spWzJ2rtXLjCoL0mSMia1n6wEtFHy5A+vQEmdlVNf0kY/FW//7N6+GNtbPiSUMF5WHDqfQDmKcd/k6bmG3HDjxo08zRpsqALIu8LqFnLN1cir6PFXD6jSVej0Qydc++cadi7aiZIBJfHttG+xoP8Ck41tY2ODNWvWoH///lCr5SU4qQU1x3T3UHMOYKrOmw8g43y8BEHhot+hw6fyvymLwNQtAGwhuK+AYJfNa6+9rf+M9g5gW0OvSXD7CWAyBKtCWY0u4wHHrhBsyrzSeyUlQBsCwaasfnv6DcC6rFHs9WHDhuH27dsIDQ19Y+x/AJYVwJvKzeib9J7pza8n9meyMuvQyZUrV1iwQCFCAD/+8mOKopgn8sSrYrjgUEP22ejCvn814O/nhzL1sZ9eDL8kSfJhmZgOlMTErLbEH+Qletr1rG/4qI905gBJSurjWct+zW2dOSClmf5ItZS84pnDRJJqB8XwMi899psblixZQgC8fj1v0q/BsgvwdhO8Pxg9CvbEg0mRGN9mJlJT5G/hu4ceIyCiBoL8KmPvL3vRuGljxMXFvdZY16OuY92VdVh/dT3uxz+bGGTKzinw+aAA9l07jUqFW6NswXb45dpllFgfg1139gPZPPWCY085fVf8F6CUBCqnA6pfAfsmQOJ3AOwBm2qA+AhMGgNSkp2AiUMB6+IQPFZDsPGD4P4bYFUYTBj6jBPQ6Dh0kmsyJgwA1QfA1H/AxGFy0JF9a6MM0aJFCwDArl27jNKf0TBESxj7sqwAXs6jxEd0n+5OZZqS+9ce4cdWnTis4Xiun/YnGwsdOb7dDKap01irby1a2VixVKlSr/TNcubxGdZfWZ+F5hRily1d2HFTR+afkZ8t1rVgaGwoSXL+qfksPtqXNrZW7NShoe5ZSVLx8I2v6D3TjfvvPhXHn7pftskzv+0TRsln9zNs/md8ApJEKe0SJTFWdg7G9aekjaKkjaakuUxJ0lJMGEsp7czrfbAvQRITM0KNM48ed6MkJht1jMDAQDZq1Miofb4IWJyAby87Qnaw6Zqmutf71x5hY6EjGwsdOeLjSdSkaUiSay+vZeOpjenj48N8+fLxn3/+MXiM4w+P03OmJ1edDaZGq9G1J6clc9bhPiwwuwDP/3ee7tPdeefRJE4c7kEA/PvvvylJKt25+D8vT2KVpVX0E3lIknxOP3MyaSMoxvXVc/iRpJg0j5JysV6blHaBYkRFilFNZSUgaeUjwOF+lJTLcvU5GoKkuUJJTJL/n7I+S2YTjDV06FA6OzvnySlQQxWAxQR4A1EICkjZ9syVcVmJJ9NUadCmy4FBEiV4B3jj3LlzKF26NFq3bo2lS5fm2L8oiejxVw8sbdQGPXz/gHXaXwDkLwOHtBUY6n8IwTWao9sf3dCoZCOULDwGI0YOQ2AZW3zTrzuSHvYGNGcguM7AJxVGI0GdgHP/ndP1QeV0QAwDrHwBWAMJ30JwnaHv8AOgyDcQgnM/vTbBtjIE9+WAFAHGdQfjvwLUf0NwHgLBuQ+MCaVkMO5LML43JNUfYNIEwKo0AFsgeRYk9V79+7WPQGqf7UM0LK5/5MiRePLkCWxtnxfubCYM0RLGviwrgJcToYyg23Q3xqfG86/5O3XL/t2/HtCZA6rkVHbe3JnzT80nSSqVSrZs2ZIAOHr06OfGC9yNu8vBuwbT+QdnChME2k22Y5ffS/LEpSKUUjZmW5YHM1WjosMUB36//3uS8rf6sX1fUhDA4d+6U1Jt1fXb86+eXHlhZZbDL9yPYuIkeWmfaQ5kcwwagqQ+lfVtnDjpNT/Rl4yTuj8rt0B0e4pRzTLSjX0sOwbVB+X7xFi5nkL8YF0OAF1ik+hWenkB3gRgWQG8vfg4+6BZ6WYIXj8KiwatRN221TF6wxA07dUQI1YPwNUjNzB+yA/Yc3cPPq/4OQDA2dkZW7duRZ8+fTB16lT069dPL4T4SNgR1FpRC/bWtvg86HOM/3A8woeFo2aJb9BhbwyWnOoPpCwCHDpAcJkKexsHlHAvgZDYzAhENWpX0WDlTz4Y2tcNTL8o25AA0sQ0WCsyd5QVgGMPCPnGyE5B+0YQ3OYDsIOcOiJnSBFM3ZzVkHYcFKNf70N9AYJ9I8B5pFe2RhUAACAASURBVPxCexUQ78rbk/k3A3b1MlYxgKDwgOD0FaD+B0wcLh/sif8SSL8qZwcWDNtRX7NmDfr165fzjXmFIVrC2JdlBZAzYQlh9P3Rl73n9KEyRT+4ZfFvy1l4VmGuvLDymeckSWJwcDABsGvXrkxPT2dUchS9Z3lz76WPKcb15Xd7hnLa0WkkZTv8zu1AFp5lzUMXfPW2vZquacqS80rq2fySaivFpBlMf1Ka2oRxTE5LZv4Z+Xkv7p5u/OetPgyNYNS3+RdTSjuj5xMwBZI25qkApKQX36tc9tJEJjkxZswYKhQKJiW9eAxjAEsg0NtNUdeiONLrCL7e8TVKLS6F1v6t4WjjiFOPTyEqJQpzms1B5/Kdn3lOEARMmzYNbm5uCA4OhlarRcVvKqK1f2s0Lt0AVE5CoLMvNt+3w4iKjkDKQpTIB4yu8SHmXb+D+gXHAVAADp3wMPEhkjXJ2HttAJp4yTa/4PAJYqKj8Um7RejTfSkig8JQu0htlHAvAar3AYILBLuaOnmoDQPSjkBw6mHYG087ks3mz/imdF8ux/qnLJYPAhkRirFg/OcA7AHHLoBqHRjfG3D/FYIi37MPOHYFkjNz/tsCdo1yNV79+vUhSRJOnz6Nxo0bv7b8r40hWsLY15u2ApAkieHh4Tx69KhuOy0pKYnffvstv/jiC/bq1Ytffvklv/nmG+7ZI2d2VavV3L17N0NCQqhWq00q363oW1x0ZhHnnpzLnbd3UitqDXpu9uzZBEDXKq48dPcQSVJKXsPkR6XoOd2KV28UzYipH8kkdSIdpzpSGfE5xXA/7ro+hWUXluWBewfoOTM/110Yy3RRtnNFUWT1mtXp5G7PglMK8l7cPfmbO7qNHLyjPiWPlf6AYmR9uf5gLlJ2PS+9t6S5Tkky7ucsicpsIckZMmf3WTxVNl0vmWlMp4zPbnCu7P/ExEQKgsAJEyYY9b08Dd7HbcDQ2FCO3DeSbTe05aebP+Wyc8uYnPb8vdy0tDROmDCBTZs2paenJyGnNeOwYcNIkgkJCfTw8GDhwoVZpEgRFi5cmB4eHpwzZw5J8vbt27pnBEFg6dKl2bZtWx48eNAk7+1VyVQCHbt11EUNihE1uPSAN0v+aMObD4bqIvK8Znrxv6QHPHGrL31meXPnbTnF1vGHx1nnlzr0/dGXXbZ0YYeNHegywIUQwK/6f6UbK/uBHillU9bk17w5dRGyI8cj/Kib/Lr21P2UlEv127JNfl0680xzIH4wJckwpUyS5cuXZ/PmzV//DbwEQxWAQL5+5hlBEFYCaAUgimT5nO6vVq0az50799rjZqKVtBi4ayC23NiCXpV6oZZvLaRoUrDl5haceHQCq9uuRvPSzXH27FmEhYWhU6dOIInixYvD3d0dVatWRaVKleDn54egoCAUKlQoxzFTU1Nx7tw53L9/H3fu3MHNmzdx9epVzJkzBy1btsTx48cxYMAANGrUCC1atEDdunXNtv1T+JPC+O/v/zBo0CDMmVQCgmoRAGDpjUSMPpOIBiWaoahrcSw4swDu9u5I1iRjQM0B+OGjH2BjZaPr50rkFVyNvAprhTVqF6mNScMmYfXq1bh+/Tr8/f0BABRjwOgGkNN2AUL+vyHYBOT1WzY6cj3AIRAc2kCwb5rVnrwclKIh5Pve4Bj/oUOH4uHDh7rakqZAEITzJHOunWaIlsjpAvABgCoArhlyv7FXAN/s+IY15tbkT8N+1nM2RT+OYZ9eA5ivWz6Wq1yOAFikSBHdN6Epl+6HDx9mgwYNaGNjQwB0cXHhZ599xsjISJON+SLmnphL/5b+BMDpY/LrjuVKyWv4+G4JVliQn7aTbZl/Rn4O3jWYS84sYYNVDVjkxyI89+TcC/sNDw+ns7Mz+/Tpo2uT0h/oRwGmntB7RtI+oSS+OXURcsOLHJnmzkT0PGCGwiDFzaEA7sbdpedMTy4ctZyNhY5c0H8FJUli9OMYtirama4KOYLNwceBCxYsYGKi4XvRxkCpVPKvv/5i7969WaJECZ3S2bt3L69du5YnMsSnxrPgrIKs3aQAAXDdurUk5T/cpqsqsNmy/HSd6KKXqfbu5Qfs+W0fes/05p3YOy/s+8SJE0xNTZX7y2bziymbM4p3BOiUgKR9TDGqIcXYz034bi2Qb6ACgIlKg43aP0pXbWXpd6vZWOjICR1m8XO//qzv1JwFfApy9ZrV9Jnpw9sxt4027quQ/ZuiXDl5RdKwYUNu27bN5Kf6LoZfZIHpBehTzoc2tjbc+e9Orrywkp4zPek4xokVAmtxy4/bScqTv4NXb3Yt8j8O3zaCX237KofeSZUqmekRTXU2v3xOf3LGSqAsRc1VefJHVKGkuWLS9/qmo9VqWaVKFU6ePNlkY7xxCiD7ZcwVQMdNHbnx2kaS8gQb3DKYpVGejYWOvHb8FjUaOc69+drm3BGyw2jjvi7R0dGcPn06ixYtSgAMDAzkrl27TDtmSjTH/TOONl42FJwF2g+3Z6PVjXgz4iYndprNxkJHzuq9SDf5H4f+xwhlBF2nuVKZ9uJEG2FhYSxWrBh/XTFez+GnrwT8KEZUfu8nfyYBAQH85JNPTNa/oQrgrY8EtLWyRYomBQCwd8c+LNn1Ex4iFOnU4OD6Y7C2lkMdkjXJsLO2M6eoenh6emLkyJG4e/cu1q5dCwC6yD2tVpupVI07pqMnJraYiMuHL8NZcIawUcCkepMQ4BOAUesGoUiZQtiz6iASY5SYdWA8CpcuCB9nH3g7eeNJ0pMX9uvr6wsvLy+Mm7gSaWJxXbsgCBCce2fdaFUMsA40+vt6Gylfvjxu3LhhbjHefgXQtFRTbLqxCds2b0OrT1rBitbYtmkHun3XAdsW7caigSvxKPERrkVdQy1f8+WMfxHW1tbo3r07rly5ojszPm7cODRp0sRkfyBly5bF2rVrkfowFVNGTgEAPLz5BHERCbp7Tm0/D0BeIeakPBUKBWbNmoVHjx5h/vz5unaKT8C4HoCQD7CtC2ivg0nj8XRyUN39L1B6me2U4kCKT/1MA0oJz3vsjSYgIAB3795FWlqaeQUxZJmQ0wVgPYBwAOkAHgP48mX3G9MESE1Ppcd3HrS1tWU+hSsP/X2UJHU+gUZCB36ypB0H7BxgtDFNzdKlS+nm5kZra2sGBwdTpVLl/NArUL9HfQLgjEmzdMv+sJuPdebAlh+382jYUfov8Kco5eyjaNGiBd3c3BgbG0tJG65n88t77rMzDhuNfeZZ+cz/SIpJ8/TbU7ZQjP2CojaaYlQjivEjdHvucuXefhmHccxfaDU3rFmzhgB486ZpYiTwPgUCfT/3eypcFRy5PJip6am69gfxD9h2aTtWWVqFSWrTxl4bm6ioKPbq1YsA6O/vzzNnjJ8M40HcA1qXsqaVwprNfTrxcaic/DNdk86JnWbzY/tOrPdzPc47NS+HnmQuX75MQRA4d+5cSmIKxbh+eja/rATm6Cr+ZkenAML9dEpATkDqTzG2FyUplZJyYUbgzQhKklqe/OF+lJLXGOHTyFuuXLnC7t27MyQkxCT9v1cKgCQPhx7mx2s+ptdMLzZa3Yh1fqlDjxkeHLRr0Fs3+bOzd+9eBgQE8PLlyybp/6d9P1HhrGCh4oWZnJIVNXnpySXWX/gBW/3eShcCbAinj62gqAnTa5O04ZTUR3N8Vk8JRDbQm/y6ezKVQOZhnLdw8ucFhioAo0QC5hZjRQLu3LkTarUa7du317Xdj7+P0LhQ2FrZonqh6nCydXrtccyNJElQKGR3zYIFC9C5c2d4exuvttykXyZh/Ffj4VzfGbX61EJcahzCleHoV60fgusF60UDvgwyDYxuBMAGqfbL4OTiB4oRYNxnciZfz38hKF7++yBFMDIrO6/gcwWCYJ/t5xowsny2n9+EIFjl7g3rjSdBEBQ5tpkCkkhPTzdJhGieRgLm9jLGCkCtVrNo0aIMCgpievqblYzBVNy9e5f29vYsWrQoz583bnnpAQMGEAB/WPUDj4UdY5r21WxqSXONO9f70d3NmjevbJbt9ojKzz3g89zns9UdyG4OkNls/nA/uTaAzhwwPA5fbyzVdoqxPfRy/0npoRSjW1NKD32lPnNDUFAQu3TpYpK+8a6bAPPnzycA7t2797X7eps4d+4cixQpQgcHB27bts1o/apUKgYEBNDX15cJCa8Xqhvx+DCdnQR2bO0sL9NzNfkzlv1iip5PIPvkz1z26/sEcq8EMlN/ZyYAldJDKUbWphhZh1L6i6MfjUXdunXZsGHDnG98Bd5pBZCWlsYCBQrwww8/fCPjsE1NREQEq1evToVCwaVLnzq1JklMVCdSpcndzkFobCgHLh9IQSGwftv6TEh9dSUgacM5dqgcgn16VxFK6Y9yfkbSyMeJs9n8Op9AZH2K2kiKsV88Y/NLyoUU4we+ckounRKIrCknHsmjyU+S7du3Z9myZU3St6EK4K2MA/jzzz8RERGBkSNHmqTKiqh9thrv89rMhY+PDw4dOoRWrVrBw8MDABCXGocpR6ag6E9FUWhOIbjNcEPtX2pj7ZW1kCjhWtQ17ArdhWMPjyFdTNf1FZ0SjdbrW6P2L7WhKaBBrU61cHTrURQeWBij/x2tl5zUEDJt/qH9fJE/vzPGzEgE43qA2scvfU4QbCB4rILgvgSCYA9KCRAEKwguUyHk3wKFlTfgOgtw7J41lvpfUIoGXOboUnJR+xBSfD+DYwMEh5aAUz9AigOoguC+FIJ1qVy951clf/78iI+Pz5OxXoghWsLY1+uuALZt28ZWrVqZJH4+7OZj9iozgNdPZm3PqJQqDm0wjn/N32n08V6HzNXPw4SHLDq6KLtv7M5L4XJxzHQxndtubWOpuaXoPt2dRecW5cdrPmaVpVVYcHZBTjo0idHJ0QxcFMjhO1tRpX5IkkxJSWHp0qVZrHgB1l1Skf/b/r9cyKOmGNVEZ/PPmTOHAHjpYDmKkQ0MzrMvqY/LxUSVCyhpbslt6WEUIz+gmDidkkpOf56VxHS0fLox856I6pQ0hm2v6Zb9JqwH8CJGjBhBOzs7k/SNd9kEMCVRj2L4eelv2calB6+fDKFKqeKQD8fyY6tOPLD+mLnFewZJklj2+7IUFAIre9RmxIOsvHkjVnxP+6GOLDWtNMcfHK9rv/j4IussqMsyC8qw+5b21IYH6eXc+3e37F/5bpA/i80txtOPDS/PJaVs0dn8qampPHNqH8WYbhSVP2eTWUsxYdQLtwYlMV42B8L9KIZXpph6OGNiV6EYUYdiRA1KYpIurkAM96MY+znFyHoZk9+wIilP2/xP+wRMza5duzh8+HCTfJG9swrg7t27Jj/Sm6kEPrbqxOZ2Xd7YyU9SjtSb58/mTeSU4DU9GzDiQRS3bNxKmxG2bFi4DVsEfkqv6V5Up6upSdNwXNsZbOLYkTaTbDn639H6iTdVf1MMr8DPPi1MGxsbDl07lL229npl+STNVR695MdOq7zpNTM/Xae5ssaSAlx20JspcVnVhSXlz3qZeSQxnmLkh9kOElXKmPzV9Ca4JEkU4wdnxQVk/ExOIabvH5LS7+rqGJKUIxOfsvllJRBISf1m/r4N5Z1VAO3bt6e/v/8rP28oD2891lXjWTTo2ey7bwoDdg7gtKPTmJaWxvq1PyAgsCLqsHjjMqzUswavHL3Odvl70bNfAa45uI7j2s5gY6Ejl89bTc+Zniy3qFxGaa4zWZMtsiYjwm/Rzc2NNevXZOCiwFzJJEoi78Xd463oWxyxdwRdmzqzQHFr3g2pyZgnnbjjdCF+/GtZVvq5EiOTI2WPf3Rm6bCM3HzqYxTDA/W3BLNN8EzkZX/9bGXIRlNUn5V3E5Lm6pSApLmVkdd/WNazkkRJG/GM/JI2PLe/hldCo9EwMTHRrCuAt8oJKEkSDh8+jDp16ph0nNTkVMz9X1aFnT2/HsSNU7df8oT5iFfHo6BzQdja2mLn3n9QvGAJXMNpRHv+h7G9g1GhXjnM3D8ONom2mNl/Pk5sO4v+C77Exz0bwNbKFtEp0fhP+R/ALMcgKMHbywNTpkzB6aOnkXQxySBZ0rRpmHV8FkrPL436v9ZH/V/rY/bJ2agcaIWIB1rs+/s+3BWX0LxUM+xsWRJNixZAx00dAcEBcJ0NKFzB+D6QlHPB+P8BeJ4DMiuRNbUP5cNGVEPIvxVw6gukbgJS/wIcOgIpi8HkeWB6CBj3OSDYQHDur3teEAQIVj7PjCBYFTD0438tVq1aBVdXV4SHh+fJeM/jrVIAoaGhiI2NRf369V+5j6hHMfLSJxtJcUpd9d3U5FSMbjUN14/dwqjfB+P3hz/DzdsF3zed8kYqgYLOBXEn7g4A4Mq/N1E8pjxKKyqA7sDKoRsRGRaNYuV8oc6vgm2yHFFXo3llFM5XGApBAWuFNdSpJ8D4voC1PwS3BQA0YFwP/K9PBxQsXRBx2+KQmpr6UjnUWjVa/N4CB+/vxIaOGxA2OAxu9m7Y0mEVanzgBptiwNiZsUhRSUD6UQjibUyp3wERyRE4EbYDSBgESEoAaiBlCeScgnaA4AUgH6CQC3QwtguYLv8emDwfYKq8e2BTDoLzEFkJqLcA9p/IVX9TFoOxreXJ77EWgnVx+VkpGaT+STySoPR6lZZzQ+YOliTlbqfFmLxVCuDixYsAgCpVqrzS8+H3IvF10DCsHL1epwSSYpUY0XgSJneaA5K4f+0R7ly4j+C1g9CwS114+ebH7IMT4ebtgqNbThntvRiLz4I+w6+XfsWRrScx+dM5KF81EOfjjqFuUG08sLqDIQ3G4quuA6BWpKJV0+ZIL5uKLzp8iyf3wtElsAtiVDHw0UwArItC8PgNgn1TXW0+ZUxfaD/WIiU6BbNmzXqpHGMOjIGHrYRtH4WjuvsDnA8/D2uFNdr4VcW0mk4Y9p07oqNF/LQsc9tLAUXKEnwZ1BBrz30DSDFAviH6nQq2ADQQ8q+B4PknYO0HCAIY3xOUkiG4TIKQ/3cINuXk2wVBrieQ/w8o7GpAcPwsqy/banI+AmSEG8f3AeO/0SkBkqByGhjTPs+UQGb+ByurVw9lfm0MsROMfb2qD2D06NG0srJ65eqqoihy7tc/s7HQkSu+X8fEmCT+r/J3bG7flWd2XdDdlxD9rJMxMSbJ5Gm7XpVWv7disxkt2b92MJMTZO/1uuPrqHBUsIRjGTr0d2apyaXpNt2NFX6qwHwDXekwwpHVFlVn/un5OXB7Cyal6h/guR+1jbWWVeCAnQPYsWNHOjg48PHjx88dPzktmR4zPHg/LkQ+uhvux22XR7DFmg9lz324H7VxI+hSQUF3DwVV4f0phlekGO7PDccKsN1qJ4rJq+SafNGtKGluZ9ToK0cxZYNuHElKp5R+X68u4YvQ2fyRdSnGdM+IKMzmE0jZlLF78AUlKZVi4lS9moZ5wYIFCwjAJIli8S46Aa9fv84NGzbkfONLyK4EGgsdn5n8byMJqQmsv7I+66yow03XNvFJ0hOGxoYyX818BECbz204++j3uui+0Iv32GZIB9pNtmWVpVXYbkM7uk93Z++tvTl873C2+r0VPWZ4cNKhSbJD79492trasmfPns8df+ftnWywqgHJjFiA2C945KIvKy6wlSegaivFmE4ctdqd3RfnoxgRRDFpBcXwAM7Z48kvN7hQjKgmT/6MAiK6GgORdfROAxqClB6qm/xS+n1KkkgxYVSGEvgp675MJZCtCGleRpbOmDGDAJiSkmL0vg1VAG+VCVCuXDl07vxsOazcoFAo0HtqV93rYuV8Ua1ppdcVzay42rvi38//xeBag/Hz+Z9RdVlVfLT6IzT5tgngBYh/pSP6ySrsD12NZeeXodeFHrhS5BCOty2A0m4eKO1RGpf6XkKVglXg4eCBzoGd8XDwQwyrMwwxqhgULloYgwYNwm+//aYzw7Kj1CiR3yE/AEAQ7CDkG4Ja3vaIT5NwITEIUK0D0q+hdNkvofBpDgreUEZOB2mNX0Od0NmvOEAtkG8UBIUc2ShYeUJw/00XGZgrFJ6AbSWdzS8ICggukwGHbvo1Chw6AoKz7qWQb7hJIktfRJ06dTB27Fg4ODjk2ZhP81YdB96xYwcCAgJQunTpVx47KVaJEU0mIez6I+Qv5IHIsGh0CW6HL6Z2zdNffl6w4doGzPlzDi5OvohStW1Q9kt7uDh/gE9K+qCCw178cscHK67fQZw6y+Yt4FQAjUo2QmRyJI4/Og5HG0doRA3aFmuL7QO2o1qVati7d6/eZ3Xq8Sn03tYbN765AWhD5Vp7lDD/agI2hj7CnlalkM9rLkYc2QtbKxuELliJuHglmo6rhvV3lDj3xV9AfE85FNdrt04JmBJm2PxQrZJ3IZgK2NaH4L4YgvDm5I58Vd6548CiKNLKyoqjRo3K9bOZPG3zP+0TeNcOFvX4sweXnVvGiRMnsmuXNlQ/rksx3I//ni9MrxkObPDrh/Sc4cmiPxblotOLGLwvmPaT7Wk/2Z4uP7jwxEM5n3+EMoIT9k+gU2snAuDu3foVcSVJYtmFZfnv7d/kQzWRdSml36MopvLrLWUYOM+Wv5zqS88ZngyJDuGwcZ8SAAv2KcgH8Q/kPtLDKKVszJPPRZKkZ2x+fZ+AaWs9ZvLw4UPGx8ebpG/kpQkgCEIzQRBCBEG4IwhCsDH6fJqkpCSIoghPT89X7kNQCLB3ssPEv4ajerPKUCgUGLikD1r2aQwr67fKGjIIVboKbvZuGDNmDH5fvw02zvXxODkdXfZFoNaTqrh49wrqrmmG/KleKOZWDJojhCLZGqJSQsDJIHTa3AnKNCVcFW5I/oFoLrSHwkOBYcOH6W1dCYKA8R+Ox1c7RyMsxROCxxoI1iWgUNhjSbtLGF/rQ3x/ZANiU2NRbnE5bHE9De/i3rDZawMvWy+5D+uiEBw/fe77ILUg1c+2SykGfQ7P3icBYgzg0B1CvjHy7oFjJwguUwEm68dEmJCuXbuibdu2eTLWi3jt8uCCnI5lEYAmkBOCnhUE4W+SRk1pm5Agn+5yc3N75T7yuTtj7pHJestXhUKBQT9/DQDvnAlQwq0ELkZcRKfATmDyYly7+Du+W5+Gzk29EeJxGZW3loSTygk3Ym9g68g9+NN5Eyo8qYZoKQpP8v0H7/iC+PXcKjwaF4srh29gxOoBiCn9CId+PIT169eje/esk3mdy3dGVEoUqm2egJ4VF6BD2Q6wt7bH8UfHsehsGOoUbYB17dfBWmENWytbHKpyCA0bNsS0adMwefLkF74HkmBisLxN6L4EgiDby1RtAJMXA/nXQ7Aq/OLnxSdgbFfA+VsIjpn+Iw3AGIDWer9zwbET4ND+tTIM5YZHjx7hgw8+yJOxXoghy4SXXQBqA9iT7fX3AL5/2TOvYgJcvXqVALhp06ZcP/u+cjP6Jn1m+TAlbh7FcD8O6leVEMClW6fT5QcrxoaW50eNq9D1i/xsYPcJrUZZsaF1O65csI524+xZ0a8O3Xp78mOrTty/9ghJ8vD9w3Qo4sASJUo8dzv2Xtw9jtw3kjWW12Dlnyuz2x/deOTBkeeaV927d9crl/YiJNVfGYlCelKSVJRS1svL9bg+OWYDlpOHfiWHEadsoCSp5IND4f6UVH/l4tM0Lmq1mgqFgmPHPpsh2Rggr7YBAXQEsCLb6x4AFj7nvtcqDXb27FkC4Pbt21/l83hv6fFnD36yrg5TYoYzPj6WgrPA8lXKs8SPRXgxpB3th9uxcqn6rOfSgrbD7PlV+SEkSetJ1qxRoBGdvs3HLr5f6yZwaGwoC/SVawzOnz//tWSLiYkx+GCXTglkbtkZMPl1z2ZTAvJl3slPkteuXSMArl271iT9G6oA8szwJbmMZDWS1by8vHL9vL+/Pw4ePIjatWubQLp3l+Wtl8PetgjKrtmIJVeXwqWlC65duIaHx/5D3d/3wm9nJeS/5wObVFuItlqE3r2LZbNXQ9AokOaqhn2aI2KexGFF8DqQxO3Y2yhZrSQaNGiAKVOmIDk5+ZVly58/P1xcXKDRaHDhwgVIlBCVEoUY1bPh2oJDW8AmKwJUcJ0NQTAsmaYg2EFwnZ3VYFNV7s+MXL9+HYBcpMWcvLYPAMATAEWyvfbNaDMqLi4uaNCggbG7fee58u9NuE8ril9X/Q8bH2yAS3UXqI6roN2rRaGwUiivrIRoxKLGR1VxM+QClA2jMWP7LHi7FobzVwpMbTARabZW2DRrGwBgR6XN6F25NwLLBaJOnTqYN28eRo8e/Voyft3va2zctBEewzygdlRDogRvJ2/0q9YPfav1hb21PajaAKSf1z3DhIF6PoGXQabK92eSfg5UbczmE8h7qlevjvnz5yMw0Myl0gxZJrzsgqxE7gEoAcAWwGUAgS975lV8AFFRUVy3bh3Dw/PmqKapSdekc9mINYyP0s+99/fi3bx+4pbRxrl8+DpbOXXnF+UGMTY8juevX6BNN1t6+HrTbrg9i/YuyTrT6nHgroH8+vtvaTvKjtbBtqzTtSF9f/SlMk1JSZI475vl7DSoG0v8VILJaXK4cevWreni4sLY2NhXli8qOYp+E/xoZaNgvcb15C05SeLxh8fZcm0T1ltZj0nxv+ot+5/2CbyMp23+p30C7yrIKxOApBZAfwB7ANwEsInk9dft92lu376tq6H3LvDg2iNsW7gLIxpPQkJ0IgBg64JdmP/tCuxYts9o4wR9UA5Td45CVFgMevoNwPgac1AurAoSvoqBnYctYktHwrdUIaRoUvB7vtUQ7bSAo4TL5c9gZuOZiEuNw757+3Dog504W+IEdn+2W1drYerUqVAqlZgxY8Yry9dza0+0r+GPWWML4dj+Y1i2bBkEQUBtb2BrowiUcrHHoP0/AXYNILgthCDYQnBoC8F1BiA+AqTElw8gJQDiYwiuM+TnBDsIbgsBuw/B9KuvNkja/gAAIABJREFULPfroNFosHHjRsTGxpplfD0M0RLGvl5lBXDy5EkC4D///JPrZ99Uzu+/wpaO3dgnaCh/HbuejYWOHN9+JtM1xq9zsG/NYTYWOrKeawvmn+LJT4Z1ZJOhTejU1omYAAoTBAoTBNpNsGOxucU4dPdQlltUjr4/+rLm8ppccnbJcyssffbZZ3RwcOCTJ09yLVPmLoVafZfp4R+y8YcudHCw543Lv1MMr0AxuiVjku/QbbobI5XPHkQyNGDnefdJUholA+odmoKjR48SAP/44w+TjYF37TDQ+fPnCYBbt+Z8Euxt4vz+K7qDSUM+GGuSyR8ZFsXPSn7DxkJHFmlemuU7VWHnQn3oa1eSjg6OjIyM5I6le9lY6MhRbaaw4pKK3B26O+eOSd67d482Njbs27evXrtKo+Kqi6v40eqPWHZhWdZeUZtzT85lnCpOd8/UI1M5aNcgkqSU/oiPLtdmgzoOvHa4GMXolrqDQZ03d+bKC29uVqbcMmrUKFpZWZksCpB8A3cBXhc7Ozk+W61+NiLsbebhjax02QnRSUhOMCy6zVCiHkZjWMMJUMYlY/bx8UiqGw2fo0Vh52iHCi5VoEpVoXvznvip7zLUaFEZ4zeNQP8a/bH0/NKcOwdQokQJfP3111i+fDlCQ0MBAHfi7qDCkgrYcH0DBtQYgE2dNmFSw0k49985BCwKwNGwowCARHUifJzkjDyCtS8Klx6Cf//wRVl/Wwj5RurOBHg7eSMxLYel/lvEtm3bUL9+/dcKajMWb40CyDwx9S4pgK0LdmHRoJWo264Gftg5ClFh0Xo+gdxAEqvGbcDdyw/02tdN/RPxEQmYvmcMXMs6w9XJFT9unIr4yAR8Efw5fFAEBy/sg0tBJ4z/Yzhs7WxQy7cWbsXcMnjsMWPGwM7ODuPGjYMyTYmma5tiSKUy2PlJC7QNaIvy3uXRuGRjrGneFasbV0GHTR1wJ+4OCuUrhJDYEFn+tBNg0mRAcEKq2g6ff9YOq1f+8P/2zjssiqsL4+/QxIKKgNhR1FhCIrHFfFGjEVtUNIpiwV6wi4rYFWOMaGJXrGhsibHHhh1rQMUaEEEEFQGlSq877/fHuisbUMouLOD+nmeeJzM7c+cM5r5zz5l7zwEABEQHoIZBjXz/TYoj//77L3x9fdGvXz91myIlL8MEVW8FcQFSU1N5584dpSLOxYknt5/Kff74mHhuddxNz1Pe7FFuMBf3XUlRFLnv58MM8c+bbx0b8ZaDatvzR6MRDHwQTJK8dsSLXXVtObH1bGZmZjI0PpTGK40piiKjw2N4aut5tkFnAmBDPQv5dbde3aLlFst8Pc/8+fMJgHP2zOGPB/pQEuskjbQnSCcLZU25Pf+iEyefnszXCa9Z2aUyo9+6y31+URLN9JRgfve/SixbVovHz6+n8UrjfFc6Kq5s2LCB2trahZIEJCsobTGA0siVg/8wIz2Dt87cYxft/nT8fjFvn73PNy8judVxN60EG+5a8Gee2wsNDJeLwO+LDrCrri2nfDOXiXHShBOiKLLppqb0CPZ47/P3WMbRw8awTZWO7Gs8koEPgul4zpGzzs/K17O8ffuWRkZGrNikIs8Hnpfm/n8nAtKMv+/z7YfEhbDS8krMlGRy0ulJ7LG3DZPCreU+P0mGv7rH2rX0qVtJh7MO5c+W4k5QUFCh36NUCsD27dvp6elZoGvVScyb7HX2/nvswt6r7KLdnzM7Lua6idtpJdhw3cTt+V6iHBoYLg8q9ig3WN75ZWy6vYn/2/I/di07gPN6LGNaarr8ukG17WnX3p5GK4wYGJ3/+nhr1qwhAO4/up/kuwIg4RbvU3pnKbZRaXklxiTHMC0zjQMODWCTjU3oetuVAVEBfBL5hL/d/I01ZtegblldWlpaMj4++xeIkkZRVrEulQKgr69PR0fHAl2blZwi7YURfSfJw6tPsp/JSAb9+z7n3t0LD9mzwhDeOKZYcUf2qc5KsOHKkRtz7PyiKMo7bVZkx64d8ZK30U3PVj6sl5EhyaD1n9b8dkNbPnj1UH48ITGBY53GsqZLLW68tbFAz5qamkqdKjpsZNGIEonk3bA/S07/d+5AUnoSyywtw9SMVPkzXQq6xH5/9aP5OnM2WN+Adkft6BniSXd3dxoZGfHevZKdti0zM5OWlpZcunRpkdyvVAqAiYlJts9N+eWF3ysOrT+JDzx85MeSE5I5vf1C/umi+gUiIQFhHFhrnFwE7l54yB/KDuK4ZjMVko+Koigf9lsJNpzZcTGTE7PnwnObt5/T2y9kcsJ7n9jrlDcHm43n0fVn5MP+p/eCssUEZKRnptPZw5mmv5qy1bZW7L6vO03HmhIAHVY6KPW8PeZIKxTt3jEjy7A/QSEm4HbPjT3298hzm1kXDJWUpC0SUcKEtARK3s012LdvX5GuZi2VAmBubs4hQ4YU6FoZMa9jOfpzB/YsP4QPPHzknb+LzgB6HFCuHNS/N/yYkqQ46SQ8+A3vnH/AgbXGyTv3xzr/uonb5e6A4/fZRcDjwA120RkgFwGvU97sXmYg7S0d2aPcYAWfXzasH9lkGjMzM7PZm5aZxivBV3jS/yTvht5l48aN2bx5c6U62dOop9SupU3TamWY8HKAfNgviwmEB7dkvbVmPBd4Lt9tr1ixgv379y9wVuii4OHrhxx5fCTLLSsn3+z+smO1mtVoaWlZZJmlS6UANGvWjNbW1gW6NisyEZB1SFV0/ujwGPYoN5iOnZzlIhAe/IZD6k7gmC+m8+9NZ+X3yzr6IMlrhz2z+fwyEcipLJlMBGTtTWw1m/ExCbx/+d9sPn9oYDif3H6arY3U5Oyz4zZv3kwAvHFDub/F4l2LCYA97bvLZw+mZabxz3//YP11dfnTlZ8K1O7q1asJgL169WJKSv4yBRcFh3wP0WSlMX+5toxvEqVR/ojECHYc2pEAuPj3xUVmS6kUgHbt2rFDhw4Fuva/hD17Le9A6yZsU0mbF/ZeZWet/nTs5Mznvi85pO4E/lhlOE+4nuUPZQexZ/kh7K4/KFtMQCKR8PKfN7K9eT1PejMhNucqtSuGb5DbHxES9UGbnt4L4oDqY3jn3AP5MVluxH1LDyucm5iYSENDQ/bv378gj69Ah+4dqF1Gm+XnlGe9tfVYaXkldvy9I088OaFUu66urgTAjh07FupMuvziF+lHk5UmvOf3HSVvZ1MUpSOu2NgYVq6kz569q9JkpTF9I/JWuVhZSqUAvHjxQiWrAWXDflkHkrkDyiKKIjdMcVOoOXDC9Sy76dlyjMV0vo2MyxYTKAiyYX/WKcRZYwJZeRsZx3HNZvKHsoN459yDDxZDkeHo6Mi2bdsqHbEODAykrq4uBw8dzMDoQEYmRSrVXlb27t1LXV1dfvHFF8XGHZh8ejIXXl5IMWH9uyKlsymKGZS8nUufq2aMevELF3ss5oRTE4rEnlIpAKrgvz7/f2MCypA1Am8l2LCP4XBunCoVhNXjNsvPCwkI4+jPHfjYKyDf95B1ftmw/78xgZyQiYD860CZgQqdPzkxhX63pLakp2f/wlBQnJycCIBeXl65n5wFURR59flVzr80nzPPzeRW762MS1XMHOTh4cGtW7eqzFZlMVlpwqAY6fd9MWE901814PHd1eXFSERR5Mu3L1llRZUisadUCsDFixe5Zs2aAl0rw987kL0rD1Pw+WUisHnG70q1HRb0mtYVh9JKsKH9V47SDqdlw6nfzsvWOXMKyuUFV4dd8s4v49L+a+xdeRiDfV4qnHvb/R4zM6T3CfEPVRCmyFDppJvkxBTO6LCI1hWHKgQmo6KilH67xsfHs3r16mzVqlWeg1+PXj/iF65fsPHGxlx0eRFX3FjBfn/1o6GLIV2uu+QYoDxx4gSXLl1a4L+pKtD5SUf+WVMiyeTowRUJgJeO1JS7A5mSTArOQpF8ySiVAuDg4MAKFSoU6NqsZO08MhJiE5X6h4l5HcshdSewj+Ew/jJkrcJIYGbHRSqL/oqimE1MDq8+SSvBhsc3usuPHd/oTivBhodWnZAP+7PaZFtrHEMCwjijwyJ20e7PS39cl1/r4+NDfX197t+/X2l7ZZ+/tm/fnuu5/lH+NP3VlGMXTWRCrOK/0S7XfWyyugmdPZyzXTdx4kQC4LfffsunT7MHPIuCWqtr8XHEY0okmZw6viUBcN40wyzuQCb9o/xZ7bdqRWJPqRSABQsWUBCKRkHzi0Qi4eYZvzPg7jN6HLjx3j//bhFPbT1fqPdOT0vnwt4uchGQdf4F1ssZFRaj4PO/jYzjsAaTFMQga+eXPUv9+vXZrl07pW0TRZFt27alkZERo6I+HKwkyf4H+3PmH7PYVdeWk9vMlRc6lT3PotHLaehiyFdxirkBRFHkvn37WLlyZZYrV44rVqwo8tjA3ItzOfHYRNr0aUwAnDqhvXQyVJaYwIyz0+l03qlI7CmVArB8+XICYHJy8V0YktUnXz12M60EG26c6lboopVVBGSdPz0tnQF3n9HGdLSCz//6eQSttN4LgMwdyMrKlSsJgD4+ygdHHz16RG1tbY4aNeqD54QnhNPQxZBxqXG8efy2XAT2Lzsi7fx9VjA9LZ0TT03McRRAkiEhIbS2tiYAnjih3NeG/PLy7UtWGluJ2joCVyy1VhjxiQnreeFBZ5qsNJFXQipsSqUAyMopR0REFOj6wub22fsKATlRFLl5+i5aCTb8fVHh5587suaUvFMfXv0+fXpyYoo8157M5++i3Z8bJu9gLwM7Dv9sSjYRiIiIoJ6eHqdOnaoS22bNmkUAvHbtWo6/X3x2UV5hmCRvHr/93oX6fhHDY8MZlRTFw76H2edAn4/e68aN959U3dzcePbs2UIT4LS0NJ4/Lx3hXXt+jVXmVOG4k+N4J/QOIxIj6B3qzQmnJtBkpQk9gj0KxYacKBIBANAfgC8AEUDLvF5XUAFwc3MjAD5/XjQqml+S4pPp6rBLwUcXRZF7lhzkc9+XH7lSeWTDZKfOS9jXeKRCTEAURe6Ys49bHXdn8/l9bj6Ri0BctOKCm0GDBtHQ0DDXwh15ITExkWZmZmzcuHGO7V0Ousx2O9+7HMc3urOjXh82/N8XrDirEiv9UomVllei6a+mtHC1kCcm/RiZmZls3Fg6JG/atCldXV1Vtpw8LS2NO3fuZP369amlpSWPPYTFh3HJlSVstKERq6yows82fEZnD2eGxuc/ZZoyFJUANAHQCMCVohCApKQkRkZGFtl0ysLk2IYzPLvrssKxx14B3DB5R76j2ed3X5EP+2PexHJiKyd21upPK8GGZ3dd5o45++QTng6vPpnN5390zZebprll+7s+vP+I/v7+BXvAHDhz5gwBcMGCBdl+i0mOkeb+S3zD4xvd+Z2+NWs41WL71d/wazMrTmozhwmxCey2rxstNjVhy20tGZuS+0Sg1NRU7t69m5aWlgRAPT09du/endu2beOLF/mfhxEWFsapU6eyatWqBMDmzZvT3d099wuLmCJ1AYpKAEoLEomEc7otZWet/nIReOwVQOtKQzmswaRsqcJz483LSK6ftJ3padJv+AmxiZzQ0omdtftzROOp8s6fk3CKokiXYevp1OUnhenBp7ae56A69nzzQrXu1tChQ6mjo8P79+9n+23U8VEcuXMUrQQbNp32Jccf68LM8GZ8eHEfu+ra0mHYXFZ2MWBEsAUn/t2NAw4NyPN9RVHk3bt3OX36dJqbmxMAAbBmzZrs3bs3N23aJD/30qVLPH36NP/66y9u2rSJDg4OPHBA6sJFRkbSwMCA/fr1o7u7e7EMSJPFUACgZGkwUppIYe7cuXz27FmBri9OpCancnZXqQism7BN3vk/Nq03PyTEJsp96EF17D86ajq76zI7a/WXi0DWZCGPfR+zX79+9PPzU4ld0dHRNDU15VdffZVt0lF4Qjjrra3HH1f1Y2WXyoxPDqQkwoqZ4c2498QS1vq1Krd61KYkworxyYE0dDHki7f5f4uLokgfHx+uXbuWQ4YMYePGjWlnZyf/3cjISC4QAFiuXDlOmjRJ/ntxDkLLUJkAALgIwCeHrTfzIQBZt4KOAGTplC9cuFCg64sbqcmp7F15WLY5/ZkZmfT1zD70/veGX57eODKfX9ZuV11bep70/ug1MhGQXTOvxzKmpaQxPDyc2tranDVLdVl5jhw5QgB0dnbO9ltofCgtXC1YZmkZDj06lPYnhrHFJgPWW6XDP65XoyTCimKmdDr46L9Hc53XOpXZJePOnTv08vKir68vQ0NDi+1b/mPkVQByTQpK0oqkRQ7b37ldq2r09fUBACkpKUV960Ih6NFLpKeky/fvXZQWPfnjl6OY0X4Rrh+9Jf/t5OZzmN5uIc7uvCw/FhoYLhNgOVFhMdg6aw8OrDiOXuO74Gj0LtS3rIsl/X6F16m7+BBdR3REk28+k+/P3TcNevp6qFatGnr16oXdu3cjIyND6WcGgL59+2LIkCFYunQp7ty5o/BbDYMasP3cFqO/Go32Zu3xZbWv8UvHOQgYVBe2DQwgGMyAoF0NAGBa3hRxqarPFtyyZUt8/fXXaNq0KWrUqFHqysZnpcRkBQbeC0BaWpqaLVEev1tPMafrUpjUNsLvAevRokszrBq9Ged+90Bfhx5o1Ko+lg1cg+tHb+Hk5nNYP2kH2vRqgU520nryLx6HwL6ZI3bO+0MuAlGh0ZjebiGOb3BHr/FdMHnjaBgYVsCK8wth3qwu/nQ5lk0wZJzedgGP//GX7y+1XY20FOnfedSoUYiIiMCZM2dU9vwbN25E9erVMXToUCQnJyv8VsOgBt4kvcGY5mMwodk3sKpyCFpCWQD6YNw8MP0eACAgpvRkC1YbeRkmfGgD8COAVwDSALwBcC4v1xXUBQgICCAA7t27t0DXFxckEglHNpnGoVl8/tTkVDp1XsIe5Qcz5nUsE+OSOPV/8xQm9mRNBSaRSLjGfiutBBvumLOPka+iOPyzKexlYMerhz2z+fwJsYk5ToEmqeDzp6WkZYsJZGRk0NTUlL1791bp3+HixYsEwAkTFFfIvU15y8oulRkafY6S15byYb+YGU5JhBUlry0ZFn2OlV0q821K/gKmnwooisIgJI+RrEWyDElTkl2V1KOPIisOkp6ernA8PS0Dka+y11kLe/a6MM0pMCmJqUhNSkWDr+qhSnVpcQgtbS3olNGFUY0qKF+5PMpXLIf/9W4tv+b7Qe2gV0ZXvq+lpYWprmPQY1xnHFhxHINqj0dMeCyWn12A9v3aQEtL8Z+2QuXyMDCskM0WkvDzeiotCnLYEXr6eug6oiNmuk1AWOBrxEUlQEdHB46OjmjevHm265WhU6dOmDlzJjZv3ozjx4/Lj1fSrwT7FvYYemIeksRqEKrshaBdTbpV2YsksRqGnpiPcc3HoZJ+JZXa9MmRF5VQ9VbQEYBEImFKSkq2t9vyoes42Gw8w4Jey4/9ufwou+nZ8smd/Ge3LQr2/nSIVoINV4zYwLSUNPk03r83SUtynXCVZhCa0WERJ7R0YlddW147kn1ZbURIVJZ1BwsLFLBKS03Llmg0MyMzx6xBqiYtLY0tWrSgoaEhQ0JC3t9fksnhx4azwfoGXO+1ngFRAQyICuB6r/VsuL4hhx8bzkyJ+lb/FXdQGqcCf4in94L4o9EIuQj8ufworQQb/jJkrVqXiOaGTARkm6zzu7tdUhj2y9yBrrq29DrlzZCAMAY9ei4f9vesMIRjLKbL3YH8iMBz35cc0WiKQtqwpPhkOrRbwBObFfP2paen89KlS6p5+CwEBASwfPnybNeunUIiElEUeSX4Cm0P2dJ8nTnN15lzwKEB9Aj2KJGR+aKkVApARkYGp0yZkuPMK5kIyDpTce/8pHQBT1YBkNkb9Og5V47cqPBWToxL4rLBa/j6eQQnfz2HP1YZzsFm49nLwI73Lj2iYydn+We8HXP25dkGWeHQ3pWH8cntp0yKT+a0tvPZRWcArx76R+HcjRs3qmyB0H/Zu3cvAXD27Nkqb/tTpFQKgEQikSZXXLw4x99/Hrha3plePQ0r0D1UgSiKPPjbCflyVhlXD/0jT9GddfXegBpj5e5AXkQrJCCMA2qMYVc9W57efoGzrJaws1Z/nvvdg2vst/LImlP5slcmAl10BrB7mYE5dn6S9HriRUFLYPmO5an7ky5rrqpJp/NOKlvhZm9vTwA8efJk7idr+CilUgBIUk9PL8e3hGzYP/pzB/auPCxbTEDV+Hr6Z8vAG/kqisE+L/n0fhC76dly8tdz5CIgWya8uO9Khc4vG/ZnjQnkVQT6GL6fRHR+zxWSBc+bH+zzUt7WNqfsX1lO+p+k8QpjmrcyZ41aNZiUlkS/SD/OODuDJitNeClIedcgJSWFlpaWNDQ0ZGBg8YzdlBTyKgAlah4AIK0S/N/vxgdWHIfbvD/w/eC22PrwN/x22Rkpialw7OiM8OA3KrchPiYBc7v9jHndlyEpXmpLVGg0HL9fgkW9V6Du57Wx8OBMBN4PxpyuP+PM9otYbrcen/+vEWbvngyKRGZ6JqZsHAPridIPJ3YLbTB8ia10YtB/PtW/8HuVrWx4OQN9lClbRr7fwLIuABRo0kpyQgrWjn9fDvz0tgvwvxMo3/eP8sfI4yPR8dIP+L5aN4S9CsPdW3fRyKgR6p1qig43u2Pg4YF4Gfcy3/fOir6+Po4cOQJBEPDjjz8iKUm1pdI15EBeVELVmzIjgOrVq3P06NEKx87suMjlQ9cpvDmf3gvi9PYLGfO6cFJHXzvsyS66AzihpRNf+L3i8M+m0LriUN4+e4//3pDOm8+6pn1cs5kKy4Q/NDf/v8fTUtI4sNY4Tmw1W54iPDo8Rj6FePucfe+zDD/K/1D8vz7/f2MCJDnp9CQuvLSQa+y3sgN6U1dHl05OTtwweQetBBtumbmbDu4OnHtxbr7vnxPnzp2jIAgcNGiQJthXQFBaXYBGjRpx5MiR2Y5/qI5eYZGelk6bqqMUgni3z97jxFaz2bvyMCbEJiqkBhtjMT1bTCAnQvxDFXL4k+TVw57sojOAE1vN5usXEexjOJxWgg03TNkhvSZLqvH8rt7794afdPJQFp9fJgKyYKJs0Y1s8tE36MJO6Cfv/KIo0jfCl3XWFGyRV0788ssvBMDly5errM1PiVIrAMXpjXDzxG0FAbBvPovdywyk50lvhdRgl/ZfyxYT+BALei1XyNmfkpRKx07OCvfJ2vllhASEcfvsvQXKlZA1G7CMuKh4iqKYLZOtRCJRsEN2PDEtkfo/6+f73h9CFEUOGjSIgiAUeXqv0kBeBaDExQCKy8KMqNBobHPcizLl3vvhz+4Hw2nPFBjXqiL3+ZednovvB7eTxwRWDN/40XZn/T4JZk1rYfGPv+L60VtYaO2Chx6+cNhqr3DeiJ8GKuzXalgdY1zsss0AzAuVjCtmO1bRyACCIEBbSxsVy1REaEIoSMJ12i4AwFM+QhAfY+f8P0ESL+Newriccb7v/SEEQYCbmxuaN2+OwYMHw8fHR2Vta3iPIBWLoqVly5b09vYu0LXbt2/H48ePsWbNGhVblXcSYhMxpc08xL5+iwUHp2Ne91/kv33Wwhxrb/6Mszs9YGXXDmUrlJX/5nXqLqrXN4VZk1ofbT8+JgEObRci5EkoAMBhqz3O774C/9uBsLJrj0v7r8G8WV2sOL8QFSqXz5PNKYkpCrZ86FhOTDg1AaYVTGF8pDb+3nQWNjN64eyzY/C4cAUtkzqh79weuPDlCWSKmZj5v5loV6cdtLW082RXbrx69QqtW7eGnp4ebt26BVNTU5W0W9oRBOEuyZa5nVfiRgDe3t74448/1GpDhcrl0a7v11hwcDp+X/gXdPV0MGR+P+jp6+H1i0i8jYhHr/FdsnWuNj1b5Nr5AUBPXw96+u/n/R9dexr+twMx/08HOO6ciMVHZiHo4XPM7rIUKUmpubbnff4hhppPwmPP96v9woPfYOwXM3Fy87lcr5/69VRsur0JVx9fg82MXhj361D07t0bcUlvEW8XhulaE3D66WlAAGacm4EGGxpg+93tUMXLpVatWjhx4gQiIiLQp08fpKbm/rwa8kFe/ARVb8rEABYsWEAtLS2la9cpS3paOie2mi33+Unp3ADrikM5rOHkDxb1zA2Zz99Zqz+PrjtN+68c2UVnAHfO/0PhPM+T3vIAXG5EvorisIaTaV1xKH3/ecKwoNccbDaeP1YZzqf3gvJk1zG/YzRZYcIFlxbweexzvgp/RQhgRauKNPzFUKHc94l/TvOz1Z9xscfifD37x5AlEbG1tS0VOSELG5TWIKCshHXWhSPq4tiGM9ky7fh6+nOP88ECByuX2PzKzlr9eWHvVZJkXHQ8xzefxe76g/js4fMC2yoTgazlwXz+eaJwjkQiYVRYzAfb8Iv04+TTk2m0wohwBlETLFNZn8OsJsonRcm+SAxuPo41VtXg/fDsuf8KiouLCwGoNDtRaaXUCsCpU6cIgDdv3ixwG8WZJ3cCeWm/Yu78uOh47l92ROk337/XH8sFYHDd8XTs5MyUJFk9OwnXjNtC25pjc/wqkBVRFNlsczNOWjSJPTr1YhedAZz67XwG3H2mMCfh56s/c+yJsUrZ/N/7TpgwgQC4ZcsWlbVbGim1AvDkyRNWrVqVZ86cKXAbxZG46Phs1YIlEglvn1XNG1Q27JcJwA9lB9FKsKFjJ2cmJ6ZwzbgttBJs6DZvf66jl5jkGBr8YkCJKBWka4c9FUqiyyYk+Ub4ssH6BiqxX0ZGRga7d+9OLS0tHj9+XKVtlybyKgAlLgjYqFEjvHnzBt27d1e3KSplw6QdcLJagn+v+wEARFHEmnFbMa/7Mvjc8FOq7fDgN3Ds6IyUhBS4eq/Alge/wriWEfT0dfHgsg+sDYbi9PaLGDT3R4z8eVCun1ozxAz59Ou/AAAUmklEQVToaetBS9ACSVSu8/4zoq6eDqqamQAA9HX0kSlmKmX7f9HR0cHBgwfRsmVLDBw4EF5eXipt/1OjxAlAaWX86hEwqWWEeT8sw8OrvlgzbivO7ryMIfP74fNvGyvVdsSLKIgSESsvLobXqbtY0GM5Zu2ciKp1jKGjpyM/r+k3jfI0z8KorBF0tXXhF+mHrp27ocO3HVDJ2ADDFg9AWko65v3wC5Lik3H9xXV8bvK5UrbnRIUKFXDq1CnUqFEDvXr1wpMnT1R+j0+GvAwTPrQB+BXAEwCPABwDUDkv1ymbEMTV1ZUdOnQoVrMCVUFUWAyHfzZFPpzeteBPlT1jWoq0Wu6zh8/Zz2QkbWuO5ZL+vynM6pv+3UJ5TCA3FlxawOF/DWcTA0sKEPj4tjSgeO2wJ7vq2nJq+3lsvqU5T/oX3tLegIAAVq1albVr12ZoaNGW3iruoIhcgAsALEh+CSAAwFwl28sTJHHlyhUEBwcXxe2KDEPTSqj1WXX5fosuzVQ281FPXw8AYP6lGVzOL0RCTCKuH5YOnxu1qo9pW8bB5/oTLLR2QWpy7lmXp7WZhuuvr6NKFwMQRLJWIgCgXb82mLV/Ih5be8OonBG6Nyg8V61hw4Y4e/YsYmNj8cMPPyAuTvUpwks7yiYFPU9S5uR5Ach9losKaN9emhrbw8OjKG5XJMh8/lun76HbqO9Ru1ENzPthmTwmoErMvzSD2ee15ftTXcei57jOcNo9GVpagmx091GMyxnj8rDLeNssBgCw7NAyuN1zg9MFJwx+0R+GdSrhmO0xlc0I/BBfffUVDh8+jMePH6NHjx6lpmZEkZGXYUJeNgAnAdh95HelS4PJEEWRderUYa9evZRqpzghW1orG/ZHhcVwZOOp7FlhCAPuqrYU2s2/b7Or7gD+UHYQu+nZcmCtcfIMSvn91JiRkUEdXR22HNCSI46P4LyL8/gk8knuF6qYgwcPUhAE9unTp9ingisKUMSlweZDGgMQ8nJTVSQFnT59OvX09Pj2benIC//gig/3/nRIweePCovh6rGb8+yX54Wbf9+Wr0xMiE2UxwSyikB+Wb16Na9cuaIyGwvK+vXrCYAjR44sdfGh/KIyAci1AWAEAE8A5fJ6jSoEwNvbmyNGjGBYmPpy/5VEzu++winfzFWYqvzs4XOObDJNnq+wJLN48WIC4Jw5c9RtilopEgEA0A3AYwAm+bmutJUHj414y70/HVIYPmdmZnLPkoOMi45Xo2U5k9MQWZlhc0REBB8/fqyMSSpDFEWOHz+eAPjbb7+p2xy1kVcBeP8RuGBsBFAGwIV30WovkuOVbDNf3Lt3D0nJSXht+BpXX1yFRJTAoqoF7L60K7KqMVcPemL34r/w5kUkpm+zB0msGrMZF3ZfRZVqldFjXOcisSOvaGtnD8zldCwnIkKi8Mo/DM2tvpQfc3Jywsm/TyEyOkLt+RoEQcDGjRsRHR0NR0dHGBsbY/jw4Wq1qTijlACQbKAqQwqCKIrobdMbr5Nf45ufv0Ffi77Q09bDtRfXsMBjARZ/txjTvp5W6P9TWk/sitg3b7H/5yOgSEgkElzcew3DnAcUu86vLFtm7obXCW84H3NC6+5fISM9Aw89fJEQmwi/W0/RtM1nuTdSyGhra2Pv3r2IiYnB6NGjYWxsjB49eqjbrOJJXoYJqt5U5QJcfX6VBsMMCIA/LflJflwURf62eAMbrG7ANZ5rVHKv3BBFkW7z9ssn1exxPlgk9y1q4qLjOaGFNPXZzeO3uajPCtZAXVapZKRu07IRHx/PFi1aUF9fnzdu3FC3OUUKSutagKw4nnfEnM4LYIpacHZ2xi2v2yAJV4ddOPvTVUyId8CSq0sKpYb8fxFFEVFhMfL9iJAoiKJY6PctaipWMYDL+YUo10IPttsGYbXpcrxtEgGxkgSeIZ6y2FCxwMDAAO7u7qhduzZ69uwJX19fdZtU7CixAnAv/B4ikiIwe/BMbN7iCh3qodv33fHLiLU4vsEdfaf1wPRFE9HZvDP2/7u/UG2RSCRyn3+Y8wAMWdAPZ3dexppxW0udCJDEinsucP/uCHRT9NDkVHPUFGvByNgIdsfsMPz4cGRIMtRtphwTExOcP38eZcuWRZcuXfDypXK1C0obJVYAfCN80bZOW2hraeNH+174ddEqGKaYwmPPTfQYa4Xxq4dDEAR8Z/YdfCIKN6Hk0bVn5J1/6KL+GL7EVi4Cf288W6j3LmrWe67HtnM70HJ9R8xuPgctq7VApaDqGNt1AnqdHIinLwLheN5R3WYqULduXZw9exZJSUno2rUroqOzl5L/VCmxAqCtpY10SToA6VtJ+60+6gufQxAE3Lt3H69eShNqpknSoKOl7MeOj9NrQhfM3jMFQxf1ByCNRA9fYgun3yejxzirQr13UZIhycBC90VosKcZKrAibh6/Dcddk9D885a4tMILflcCsajmEux5tAdvElVfkUkZvvzyS/z9998IDg5Gr169NFOGZeQlUKDqTRVBwOexz1llRRUmpCZw41Q3Wgk2dHXYxXO7L7MsyrOifmXe9rrDdjvb8ZDvIaXvp0FaH7DFupY8tfU8/W4FsHflYexYuSe/N+5JKy0beXGRUcdHcdU/q9Rsbc4cPnz4k5gyjNKaESgr1n9ac+wme3nnl03/3PTTFpaBPnV0dFmxT0WmpKWo5H6fOptub6L9SXv5/t2Lj2iM6iyDsjyy9n1F4lX/rKKDu4M6TMwTsinDEydOVLcphUZeBaDEugAAsL7berinnUbdTUYY6mIj/95vP38MHDbMgGAOxB+PR9v/tdUsFVUBBnoGiE6R+s9J8clY67gJUQhHNdTB8Q3uiAiJAgBEJUfBoIyBOk39KFOmTMGsWbPg6uqK1atXq9sctVKiBcCsshlujLyBSMPXMFtnhv6H+sPuqB3M15vjatnLuHT+Eg4cOIDPPvsMFStK01Y9fPgQEolEzZaXTLo16IaLQRcREvEKc7v9DI9HF6Gro4s9p90QH50grcb84g32/7sffRr3Ube5H8XFxQU2NjaYOXMm/vrrL3WbozZKXGWgD/Ey7iVuvryJTDETX5h+ActqltnOiYqKQs2aNVG9enUMGzYM/fv3h4WFhdqnr5YkRv09ChHPoxDrmIZbvISxY8di8+bNeHL7KeZ0/RllZxCvagXj+sjr6jY1V1JTU9GlSxfcuXMH165dQ6tWrdRtksrIa2WgEh0DyC9paWn866+/aGVlRS0tLQJg/fr1eenSJZLFq/BoUZOcmMKfBqxi0L8v5MdEUeSuBX/y/J4r8mPxqfFsvb01Wzq0Ys06NRkZGUmSDIwO5Ig/R7Le2np8+fZlkdtfUCIiIli3bl1WrVqVz56pNu+COsGnEAPIL3p6ehgwYAAuXLiAsLAwbN68GY0bN0b16tI0XPv370eDBg1ga2sLFxcXnDp1CsHBwaVuMk9OvI2Iw+N//DHre2cE+7wESfy+8AD2LzsCP88A+XkGZQxwedhl/Ni3D4TJAiz3WKLu2rr4xu0bVDUygdcYL9SuVPsjdypemJiYwN3dHZmZmbC2tkZiYqK6TSpSSo0LoAouXLiALVu24P79+wr5Bt+8eYOqVavi4MGD8Pb2RoMGDWBubo569eqhTp060NXV/UirxROS2VyfkIAwOHVagoy0DHz+bWP88/cd9Bhrhambx0JLSwsZGRkYP3482rRpg7Fjx0IiShASHwKRImoa1EQZnTIfuFvx5+LFi+jatSt69+6NQ4cO5Xl1ZHFF4wIoSWxsLG/evEk3Nze5a+Do6Eg9PT0CkG8VKlSQ/75jxw46Oztz9+7dvH79OsPCwoqlW+F3K4COnZwZH5MgPxYXFU/H7xfz+rFb8gVNU7+dL89xEBYWxg4dOhAAlyxZoi7TC5V169YRAGfPnq1uU5QGn8I8AHWQmZnJFy9e8MqVK3Rzc+PatWvlv/Xv35+CICgIhIWFhfz3bdu2cevWrfTw8GBoaKjaxOHWmXvsXmYgJ7SYxfiYBMZFxXOc5Ux21x/EZYPXyAWgr/FIPn0QxO3bt9PY2JjlypXj7t271WJzUWFvb08APHr0qLpNUYq8CoDGBVAxaWlpePHiBYKCghAUFARtbW3Y29sDAJo0aaJQxMLAwACDBg3C1q1bAQDu7u6oWbMmGjZsiLJly+bYvqq4deYelvT9FUY1DCGKROybOLT9sTU8DkjXUtjM7IVZnZYgIjEcl9+eRNu2bbF161Y0bdq0UO1SN2lpaWjfvj18fX3h5eUFCwsLdZtUIPLqAmgEoAgRRREhISEICAiAv78//P390bBhQ0ydOhUSiQTly5dHWloaBEGAmZkZGjVqBDs7O9jZ2YEkgoODYWZmpjL/9MLeq1g5fCMAYNyvQ7F9zj406l4HWvWkq/lmTZ6DWd87Q7cWsPufLZ/M59KwsDC0aNECFStWhLe3NwwMiu+kpg+RVwEo3FUyGhTQ0tKCmZkZzMzM0LmzYqYgQRBw69Yt+Pv7w8/PTy4Qb95IF9VERESgfv360NHRgZmZGerVqwczMzMMHToUderUwZMnT1C1alVUrVoVhoaGKF++fI4dliRSU1MR+OQZDq8+CQAI5wvMWDIV0ToRuHAyBWXKlIG1tTVq1DfFqitLUMEw57ZKKzVq1MCBAwfQqVMnjBkzBgcOHCi9z58XP+FDG4ClkJYFewDgPIAaebmuJMcA1EVcXBx37NjBefPmceDAgWzdujVNTU25c+dOrl27ViHuAIBaWlp88UL6TX/VqlU0MTGhoaEhdXR05Od0LmPDO+cecNTAMTQQKtPC5Cvu2bWXCQkJuVjzabB8+XIC4ObNm9VtSr5BUcQABEGoSDL+3X9PBdCUeUgK+qm6AIUBScTExMDf3x+RkZGIiIjA27dvERcXBycnJ1SsWBFnzpzBqVOnoK2tjQoVKuCVbzgeuPth85F1aGvdBsD7mMDEdaPQ07505TEsKKIookePHvDw8ICnpye++uordZuUZ4o8BiAIwlwAdUhOyO1cjQCoF5IIDXyNWg2rKxx/9TQ827FPnaioKDRr1gxVqlSBt7c3ypQpGXMd8ioASs8EFARhmSAIIQCGAFikbHsaCh9BEHLs6JrOnx1jY2Ns374dPj4+cHJyUrc5KidXARAE4aIgCD45bL0BgOR8krUB7Acw+SPtjBMEwVsQBO/IyEjVPYEGDYXMDz/8gGnTpmH9+vW4cOGCus1RKap0AeoAOEMy1w+nGhdAQ0kjNTUVlpaWSE1NhY+PDypUqKBukz5KkbgAgiA0zLLbG8CTD52rQUNJRl9fH25ubnj58iXmzJmjbnNUhrIxAJd37sAjAF0ATFOBTRo0FEu+/fZbTJkyBa6urvD09FS3OSpBMxNQg4Z8kJCQgM8//xyVKlXC/fv3oaNTPOfSFdlXAA0aPiUMDAywZs0a+Pj4YOfOneo2R2k0AqBBQz7p27cv2rZti3nz5pX4IiMaAdCgIZ8IggBXV1fExsZi+fLl6jZHKTQCoEFDAfjiiy8wbNgwbNy4sUTXG9QIgAYNBWTJkiUQRRG//fabuk0pMBoB0KChgNSpUwd2dnbYvn07wsLC1G1OgdAIgAYNSrBgwQJkZmaW2FGARgA0aFACc3Nz2NjYwM3NDQkJCeo2J99oBECDBiVxcHBAfHw89u/fr25T8o1GADRoUJLWrVvDwsICe/bsUbcp+UYjABo0KIkgCBg+fDg8PT3h5+enbnPyhUYANGhQAXZ2dhAEocRVGtYIgAYNKqBatWpo3749Dh06pG5T8oVGADRoUBF9+vTB48ePS9TMQI0AaNCgIjp16gQAuHTpkpotyTsaAdCgQUVYWFjAyMgIN27cULcpeUYjABo0qAhBENCiRQvcv39f3abkGY0AaNCgQiwtLeHj4wOJRKJuU/KERgA0aFAh9evXR0ZGBkJDQ9VtSp5QiQAIgjBTEAQKgmCsivY0aCipmJubAwCCgoLUbEneUEVloNqQZgQuOd8+NGgoJExNTQFIS4qVBFQxAlgDwAnSirMaNHzSmJiYoFmzZiWmhqBSOY3flQcLJfkwt/rpgiCMAzDu3W6aIAg+yty7mGIMoGRIf/4prc9WKM9lbW2t6ibzS6O8nJRrXQBBEC4CqJbDT/MBzAPQhWScIAjPAbQkmesfUxAE77zkLC9plNbnAkrvs33qz5XrCICk1Qdu8AWAegBkb/9aAO4JgtCa5Ot82qtBgwY1UGAXgOS/AKrK9vMzAtCgQUPxQF3zALap6b6FTWl9LqD0Ptsn/VxqqQ2oQYOG4oFmJqAGDZ8wGgHQoOETRu0CUNqmEQuC8KsgCE8EQXgkCMIxQRAqq9smZRAEoZsgCP6CIAQKgjBH3faoCkEQaguC4CEIwmNBEHwFQZimbptUiSAI2oIg3BcE4dTHzlOrAJTSacQXAFiQ/BJAAIC5aranwAiCoA1gE4DuAJoCGCQIQlP1WqUyMgHMJNkUQBsAk0rRswHANAC5ZihV9wig1E0jJnmeZOa7XS9I50eUVFoDCCQZRDIdwAEAvdVsk0ogGU7y3rv/ToC0s9RUr1WqQRCEWgB6ANiR27lqE4Cs04jVZUMRMAqAu7qNUIKaAEKy7L9CKekkWREEoS6ArwDcUq8lKmMtpC9WMbcTlVoLkBt5mUZcmPcvLD72XCT/fnfOfEiHmSWvXMwnhCAIFQAcAeBAMl7d9iiLIAg9AUSQvCsIQofczi9UASit04g/9FwyBEEYAaAngE4s2RMtQgHUzrJf692xUoEgCLqQdv79JI+q2x4V8S0Aa0EQfgCgD6CiIAj7SNrldHKxmAhUmqYRC4LQDcBqAN+RjFS3PcogCIIOpIHMTpB2/DsABpP0VathKkCQvnl2A4gh6aBuewqDdyMAR5I9P3SOuoOApZGNAAwAXBAE4YEgCFvUbVBBeRfMnAzgHKRBsoOlofO/41sAQwF8/+7f6cG7t+YnRbEYAWjQoEE9aEYAGjR8wmgEQIOGTxiNAGjQ8AmjEQANGj5hNAKgQcMnjEYANGj4hNEIgAYNnzD/B42GjLM1BZfpAAAAAElFTkSuQmCC\n", + "image/png": "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", "text/plain": [ "
" ] @@ -158,7 +158,7 @@ "x0, x1 = np.meshgrid(np.linspace(-4, 4, 100), np.linspace(-4, 4, 100))\n", "x = np.array([x0, x1]).reshape(2, -1).T\n", "plt.scatter(x_train[:, 0], x_train[:, 1], s=40, c=y_train, marker=\"x\")\n", - "plt.scatter(model.X[:, 0], model.X[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", + "plt.scatter(model.x[:, 0], model.x[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", "plt.contour(x0, x1, model.distance(x).reshape(100, 100), np.arange(-1, 2), colors=\"k\", linestyles=(\"dashed\", \"solid\", \"dashed\"))\n", "plt.xlim(-4, 4)\n", "plt.ylim(-4, 4)\n", @@ -188,7 +188,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -214,7 +214,7 @@ "y, y_std = model.predict(x)\n", "\n", "plt.scatter(x_train, y_train, facecolor=\"none\", edgecolor=\"g\", label=\"training\")\n", - "plt.scatter(model.X.ravel(), model.t, s=100, facecolor=\"none\", edgecolor=\"b\", label=\"relevance vector\")\n", + "plt.scatter(model.x.ravel(), model.t, s=100, facecolor=\"none\", edgecolor=\"b\", label=\"relevance vector\")\n", "plt.plot(x, y, color=\"r\", label=\"predict mean\")\n", "plt.fill_between(x, y - y_std, y + y_std, color=\"pink\", alpha=0.2, label=\"predict std.\")\n", "plt.legend(loc=\"best\")\n", @@ -237,7 +237,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -264,7 +264,7 @@ "x0, x1 = np.meshgrid(np.linspace(-4, 4, 100), np.linspace(-4, 4, 100))\n", "x = np.array([x0, x1]).reshape(2, -1).T\n", "plt.scatter(x_train[:, 0], x_train[:, 1], s=40, c=y_train, marker=\"x\")\n", - "plt.scatter(model.X[:, 0], model.X[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", + "plt.scatter(model.x[:, 0], model.x[:, 1], s=100, facecolor=\"none\", edgecolor=\"g\")\n", "plt.contourf(x0, x1, model.predict_proba(x).reshape(100, 100), np.linspace(0, 1, 5), alpha=0.2)\n", "plt.colorbar()\n", "plt.xlim(-4, 4)\n", diff --git a/prml/bayesnet/discrete.py b/prml/bayesnet/discrete.py index c74cb6bb6..8a85c81f5 100644 --- a/prml/bayesnet/discrete.py +++ b/prml/bayesnet/discrete.py @@ -1,4 +1,5 @@ import numpy as np + from prml.bayesnet.probability_function import ProbabilityFunction from prml.bayesnet.random_variable import RandomVariable @@ -35,7 +36,7 @@ def __init__(self, n_class:int): self.is_observed = False def __repr__(self): - string = f"DiscreteVariable(" + string = "DiscreteVariable(" if self.is_observed: string += f"observed={self.proba})" else: @@ -201,7 +202,8 @@ def send_message(self, proprange, exclude=None): if random_variable is not exclude: self.send_message_to(random_variable, proprange) - if proprange == 0: return + if proprange == 0: + return for random_variable in self.condition: if random_variable is not exclude: diff --git a/prml/clustering/__init__.py b/prml/clustering/__init__.py index 169827c8a..aeb18a1df 100644 --- a/prml/clustering/__init__.py +++ b/prml/clustering/__init__.py @@ -1,4 +1,4 @@ -from .k_means import KMeans +from prml.clustering.k_means import KMeans __all__ = [ diff --git a/prml/clustering/k_means.py b/prml/clustering/k_means.py index d3f890bc8..89f02b52a 100644 --- a/prml/clustering/k_means.py +++ b/prml/clustering/k_means.py @@ -7,13 +7,13 @@ class KMeans(object): def __init__(self, n_clusters): self.n_clusters = n_clusters - def fit(self, X, iter_max=100): + def fit(self, x, iter_max=100): """ perform k-means algorithm Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data iter_max : int maximum number of iterations @@ -23,25 +23,25 @@ def fit(self, X, iter_max=100): centers : (n_clusters, n_features) ndarray center of each cluster """ - I = np.eye(self.n_clusters) - centers = X[np.random.choice(len(X), self.n_clusters, replace=False)] + eye = np.eye(self.n_clusters) + centers = x[np.random.choice(len(x), self.n_clusters, replace=False)] for _ in range(iter_max): prev_centers = np.copy(centers) - D = cdist(X, centers) + D = cdist(x, centers) cluster_index = np.argmin(D, axis=1) - cluster_index = I[cluster_index] - centers = np.sum(X[:, None, :] * cluster_index[:, :, None], axis=0) / np.sum(cluster_index, axis=0)[:, None] + cluster_index = eye[cluster_index] + centers = np.sum(x[:, None, :] * cluster_index[:, :, None], axis=0) / np.sum(cluster_index, axis=0)[:, None] if np.allclose(prev_centers, centers): break self.centers = centers - def predict(self, X): + def predict(self, x): """ calculate closest cluster center index Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data Returns @@ -49,5 +49,5 @@ def predict(self, X): index : (sample_size,) ndarray indicates which cluster they belong """ - D = cdist(X, self.centers) + D = cdist(x, self.centers) return np.argmin(D, axis=1) diff --git a/prml/dimreduction/autoencoder.py b/prml/dimreduction/autoencoder.py index e5c19edfa..09f8d1868 100644 --- a/prml/dimreduction/autoencoder.py +++ b/prml/dimreduction/autoencoder.py @@ -1,4 +1,5 @@ import numpy as np + from prml import nn diff --git a/prml/dimreduction/bayesian_pca.py b/prml/dimreduction/bayesian_pca.py index 9e9e280d6..247b78f90 100644 --- a/prml/dimreduction/bayesian_pca.py +++ b/prml/dimreduction/bayesian_pca.py @@ -1,4 +1,5 @@ import numpy as np + from prml.dimreduction.pca import PCA @@ -26,7 +27,7 @@ def fit(self, X, iter_max=100, initial="random"): """ initial_list = ["random", "eigen"] self.mean = np.mean(X, axis=0) - self.I = np.eye(self.n_components) + self.eye = np.eye(self.n_components) if initial not in initial_list: print("availabel initializations are {}".format(initial_list)) if initial == "random": diff --git a/prml/dimreduction/pca.py b/prml/dimreduction/pca.py index 55d7b7f8e..72c96feee 100644 --- a/prml/dimreduction/pca.py +++ b/prml/dimreduction/pca.py @@ -15,14 +15,14 @@ def __init__(self, n_components): assert isinstance(n_components, int) self.n_components = n_components - def fit(self, X, method="eigen", iter_max=100): - """ - maximum likelihood estimate of pca parameters + def fit(self, x, method="eigen", iter_max=100): + r"""Maximum likelihood estimate of pca parameters. + x ~ \int_z N(x|Wz+mu,sigma^2)N(z|0,I)dz Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data method : str method to estimate the parameters @@ -46,69 +46,69 @@ def fit(self, X, method="eigen", iter_max=100): method_list = ["eigen", "em"] if method not in method_list: print("availabel methods are {}".format(method_list)) - self.mean = np.mean(X, axis=0) - getattr(self, method)(X - self.mean, iter_max) + self.mean = np.mean(x, axis=0) + getattr(self, method)(x - self.mean, iter_max) - def eigen(self, X, *arg): - sample_size, n_features = X.shape + def eigen(self, x, *arg): + sample_size, n_features = x.shape if sample_size >= n_features: - cov = np.cov(X, rowvar=False) + cov = np.cov(x, rowvar=False) values, vectors = np.linalg.eigh(cov) index = n_features - self.n_components else: - cov = np.cov(X) + cov = np.cov(x) values, vectors = np.linalg.eigh(cov) - vectors = (X.T @ vectors) / np.sqrt(sample_size * values) + vectors = (x.T @ vectors) / np.sqrt(sample_size * values) index = sample_size - self.n_components - self.I = np.eye(self.n_components) + self.eye = np.eye(self.n_components) if index == 0: self.var = 0 else: self.var = np.mean(values[:index]) - self.W = vectors[:, index:].dot(np.sqrt(np.diag(values[index:]) - self.var * self.I)) - self.__M = self.W.T @ self.W + self.var * self.I + self.W = vectors[:, index:].dot(np.sqrt(np.diag(values[index:]) - self.var * self.eye)) + self.__M = self.W.T @ self.W + self.var * self.eye self.C = self.W @ self.W.T + self.var * np.eye(n_features) if index == 0: self.Cinv = np.linalg.inv(self.C) else: self.Cinv = np.eye(n_features) / np.sqrt(self.var) - self.W @ np.linalg.inv(self.__M) @ self.W.T / self.var - def em(self, X, iter_max): - self.I = np.eye(self.n_components) - self.W = np.eye(np.size(X, 1), self.n_components) + def em(self, x, iter_max): + self.eye = np.eye(self.n_components) + self.W = np.eye(np.size(x, 1), self.n_components) self.var = 1. for i in range(iter_max): W = np.copy(self.W) - stats = self._expectation(X) - self._maximization(X, *stats) + stats = self._expectation(x) + self._maximization(x, *stats) if np.allclose(W, self.W): break - self.C = self.W @ self.W.T + self.var * np.eye(np.size(X, 1)) + self.C = self.W @ self.W.T + self.var * np.eye(np.size(x, 1)) self.Cinv = np.linalg.inv(self.C) - def _expectation(self, X): - self.__M = self.W.T @ self.W + self.var * self.I + def _expectation(self, x): + self.__M = self.W.T @ self.W + self.var * self.eye Minv = np.linalg.inv(self.__M) - Ez = X @ self.W @ Minv + Ez = x @ self.W @ Minv Ezz = self.var * Minv + Ez[:, :, None] * Ez[:, None, :] return Ez, Ezz - def _maximization(self, X, Ez, Ezz): - self.W = X.T @ Ez @ np.linalg.inv(np.sum(Ezz, axis=0)) + def _maximization(self, x, Ez, Ezz): + self.W = x.T @ Ez @ np.linalg.inv(np.sum(Ezz, axis=0)) self.var = np.mean( - np.mean(X ** 2, axis=1) - - 2 * np.mean(Ez @ self.W.T * X, axis=1) - + np.trace((Ezz @ self.W.T @ self.W).T) / np.size(X, 1)) + np.mean(x ** 2, axis=1) + - 2 * np.mean(Ez @ self.W.T * x, axis=1) + + np.trace((Ezz @ self.W.T @ self.W).T) / np.size(x, 1)) - def transform(self, X): + def transform(self, x): """ project input data into latent space - p(Z|X) = N(Z|(X-mu)WMinv, sigma^-2M) + p(Z|x) = N(Z|(x-mu)WMinv, sigma^-2M) Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data Returns @@ -116,15 +116,15 @@ def transform(self, X): Z : (sample_size, n_components) ndarray projected input data """ - return np.linalg.solve(self.__M, ((X - self.mean) @ self.W).T).T + return np.linalg.solve(self.__M, ((x - self.mean) @ self.W).T).T - def fit_transform(self, X, method="eigen"): + def fit_transform(self, x, method="eigen"): """ perform pca and whiten the input data Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data Returns @@ -132,16 +132,16 @@ def fit_transform(self, X, method="eigen"): Z : (sample_size, n_components) ndarray projected input data """ - self.fit(X, method) - return self.transform(X) + self.fit(x, method) + return self.transform(x) - def proba(self, X): + def proba(self, x): """ the marginal distribution of the observed variable Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data Returns @@ -149,8 +149,8 @@ def proba(self, X): p : (sample_size,) ndarray value of the marginal distribution """ - d = X - self.mean + d = x - self.mean return ( np.exp(-0.5 * np.sum(d @ self.Cinv * d, axis=-1)) / np.sqrt(np.linalg.det(self.C)) - / np.power(2 * np.pi, 0.5 * np.size(X, 1))) + / np.power(2 * np.pi, 0.5 * np.size(x, 1))) diff --git a/prml/kernel/__init__.py b/prml/kernel/__init__.py index 01b72f065..8e6d343a4 100644 --- a/prml/kernel/__init__.py +++ b/prml/kernel/__init__.py @@ -1,8 +1,7 @@ -from prml.kernel.polynomial import PolynomialKernel -from prml.kernel.rbf import RBF - from prml.kernel.gaussian_process_classifier import GaussianProcessClassifier from prml.kernel.gaussian_process_regressor import GaussianProcessRegressor +from prml.kernel.polynomial import PolynomialKernel +from prml.kernel.rbf import RBF from prml.kernel.relevance_vector_classifier import RelevanceVectorClassifier from prml.kernel.relevance_vector_regressor import RelevanceVectorRegressor from prml.kernel.support_vector_classifier import SupportVectorClassifier diff --git a/prml/kernel/gaussian_process_classifier.py b/prml/kernel/gaussian_process_classifier.py index 5fa1500a4..d56c4ca77 100644 --- a/prml/kernel/gaussian_process_classifier.py +++ b/prml/kernel/gaussian_process_classifier.py @@ -20,18 +20,18 @@ def __init__(self, kernel, noise_level=1e-4): def _sigmoid(self, a): return np.tanh(a * 0.5) * 0.5 + 0.5 - def fit(self, X, t): - if X.ndim == 1: - X = X[:, None] - self.X = X + def fit(self, x, t): + if x.ndim == 1: + x = x[:, None] + self.x = x self.t = t - Gram = self.kernel(X, X) + Gram = self.kernel(x, x) self.covariance = Gram + np.eye(len(Gram)) * self.noise_level self.precision = np.linalg.inv(self.covariance) - def predict(self, X): - if X.ndim == 1: - X = X[:, None] - K = self.kernel(X, self.X) + def predict(self, x): + if x.ndim == 1: + x = x[:, None] + K = self.kernel(x, self.x) a_mean = K @ self.precision @ self.t return self._sigmoid(a_mean) diff --git a/prml/kernel/gaussian_process_regressor.py b/prml/kernel/gaussian_process_regressor.py index 4f1aa94fd..af09f75bb 100644 --- a/prml/kernel/gaussian_process_regressor.py +++ b/prml/kernel/gaussian_process_regressor.py @@ -49,9 +49,9 @@ def fit(self, X, t, iter_max=0, learning_rate=0.1): log_likelihood_list = [-np.inf] self.X = X self.t = t - I = np.eye(len(X)) - Gram = self.kernel(X, X) - self.covariance = Gram + I / self.beta + eye = np.eye(len(X)) + gram = self.kernel(X, X) + self.covariance = gram + eye / self.beta self.precision = np.linalg.inv(self.covariance) for i in range(iter_max): gradients = self.kernel.derivatives(X, X) @@ -59,8 +59,8 @@ def fit(self, X, t, iter_max=0, learning_rate=0.1): [-np.trace(self.precision.dot(grad)) + t.dot(self.precision.dot(grad).dot(self.precision).dot(t)) for grad in gradients]) for j in range(iter_max): self.kernel.update_parameters(learning_rate * updates) - Gram = self.kernel(X, X) - self.covariance = Gram + I / self.beta + gram = self.kernel(X, X) + self.covariance = gram + eye / self.beta self.precision = np.linalg.inv(self.covariance) log_like = self.log_likelihood() if log_like > log_likelihood_list[-1]: diff --git a/prml/kernel/polynomial.py b/prml/kernel/polynomial.py index 9e3bb08ac..71f51064a 100644 --- a/prml/kernel/polynomial.py +++ b/prml/kernel/polynomial.py @@ -1,4 +1,5 @@ import numpy as np + from prml.kernel.kernel import Kernel diff --git a/prml/kernel/rbf.py b/prml/kernel/rbf.py index 4115eb3b7..ab1bb7259 100644 --- a/prml/kernel/rbf.py +++ b/prml/kernel/rbf.py @@ -1,4 +1,5 @@ import numpy as np + from prml.kernel.kernel import Kernel diff --git a/prml/kernel/relevance_vector_classifier.py b/prml/kernel/relevance_vector_classifier.py index 44534bb00..78e681dfa 100644 --- a/prml/kernel/relevance_vector_classifier.py +++ b/prml/kernel/relevance_vector_classifier.py @@ -20,21 +20,21 @@ def __init__(self, kernel, alpha=1.): def _sigmoid(self, a): return np.tanh(a * 0.5) * 0.5 + 0.5 - def _map_estimate(self, X, t, w, n_iter=10): + def _map_estimate(self, x, t, w, n_iter=10): for _ in range(n_iter): - y = self._sigmoid(X @ w) - g = X.T @ (y - t) + self.alpha * w - H = (X.T * y * (1 - y)) @ X + np.diag(self.alpha) + y = self._sigmoid(x @ w) + g = x.T @ (y - t) + self.alpha * w + H = (x.T * y * (1 - y)) @ x + np.diag(self.alpha) w -= np.linalg.solve(H, g) return w, np.linalg.inv(H) - def fit(self, X, t, iter_max=100): + def fit(self, x, t, iter_max=100): """ maximize evidence with respect ot hyperparameter Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input t : (sample_size,) ndarray corresponding target @@ -43,7 +43,7 @@ def fit(self, X, t, iter_max=100): Attributes ---------- - X : (N, n_features) ndarray + x : (N, n_features) ndarray relevance vector t : (N,) ndarray corresponding target @@ -54,11 +54,11 @@ def fit(self, X, t, iter_max=100): mean : (N,) ndarray mean of each weight """ - if X.ndim == 1: - X = X[:, None] - assert X.ndim == 2 + if x.ndim == 1: + x = x[:, None] + assert x.ndim == 2 assert t.ndim == 1 - Phi = self.kernel(X, X) + Phi = self.kernel(x, x) N = len(t) self.alpha = np.zeros(N) + self.alpha mean = np.zeros(N) @@ -71,20 +71,20 @@ def fit(self, X, t, iter_max=100): if np.allclose(param, self.alpha): break mask = self.alpha < 1e8 - self.X = X[mask] + self.x = x[mask] self.t = t[mask] self.alpha = self.alpha[mask] - Phi = self.kernel(self.X, self.X) + Phi = self.kernel(self.x, self.x) mean = mean[mask] self.mean, self.covariance = self._map_estimate(Phi, self.t, mean, 100) - def predict(self, X): + def predict(self, x): """ predict class label Parameters ---------- - X : (sample_size, n_features) + x : (sample_size, n_features) input Returns @@ -92,20 +92,20 @@ def predict(self, X): label : (sample_size,) ndarray predicted label """ - if X.ndim == 1: - X = X[:, None] - assert X.ndim == 2 - phi = self.kernel(X, self.X) + if x.ndim == 1: + x = x[:, None] + assert x.ndim == 2 + phi = self.kernel(x, self.x) label = (phi @ self.mean > 0).astype(int) return label - def predict_proba(self, X): + def predict_proba(self, x): """ probability of input belonging class one Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input Returns @@ -113,10 +113,10 @@ def predict_proba(self, X): proba : (sample_size,) ndarray probability of predictive distribution p(C1|x) """ - if X.ndim == 1: - X = X[:, None] - assert X.ndim == 2 - phi = self.kernel(X, self.X) + if x.ndim == 1: + x = x[:, None] + assert x.ndim == 2 + phi = self.kernel(x, self.x) mu_a = phi @ self.mean var_a = np.sum(phi @ self.covariance * phi, axis=1) return self._sigmoid(mu_a / np.sqrt(1 + np.pi * var_a / 8)) diff --git a/prml/kernel/relevance_vector_regressor.py b/prml/kernel/relevance_vector_regressor.py index 236d95653..3055af909 100644 --- a/prml/kernel/relevance_vector_regressor.py +++ b/prml/kernel/relevance_vector_regressor.py @@ -20,13 +20,13 @@ def __init__(self, kernel, alpha=1., beta=1.): self.alpha = alpha self.beta = beta - def fit(self, X, t, iter_max=1000): + def fit(self, x, t, iter_max=1000): """ maximize evidence with respect to hyperparameter Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input t : (sample_size,) ndarray corresponding target @@ -35,7 +35,7 @@ def fit(self, X, t, iter_max=1000): Attributes ------- - X : (N, n_features) ndarray + x : (N, n_features) ndarray relevance vector t : (N,) ndarray corresponding target @@ -46,12 +46,12 @@ def fit(self, X, t, iter_max=1000): mean : (N,) ndarray mean of each weight """ - if X.ndim == 1: - X = X[:, None] - assert X.ndim == 2 + if x.ndim == 1: + x = x[:, None] + assert x.ndim == 2 assert t.ndim == 1 N = len(t) - Phi = self.kernel(X, X) + Phi = self.kernel(x, x) self.alpha = np.zeros(N) + self.alpha for _ in range(iter_max): params = np.hstack([self.alpha, self.beta]) @@ -65,21 +65,21 @@ def fit(self, X, t, iter_max=1000): if np.allclose(params, np.hstack([self.alpha, self.beta])): break mask = self.alpha < 1e9 - self.X = X[mask] + self.x = x[mask] self.t = t[mask] self.alpha = self.alpha[mask] - Phi = self.kernel(self.X, self.X) + Phi = self.kernel(self.x, self.x) precision = np.diag(self.alpha) + self.beta * Phi.T @ Phi self.covariance = np.linalg.inv(precision) self.mean = self.beta * self.covariance @ Phi.T @ self.t - def predict(self, X, with_error=True): + def predict(self, x, with_error=True): """ predict output with this model Parameters ---------- - X : (sample_size, n_features) + x : (sample_size, n_features) input with_error : bool if True, predict with standard deviation of the outputs @@ -91,10 +91,10 @@ def predict(self, X, with_error=True): std : (sample_size,) ndarray standard deviation of predictive distribution """ - if X.ndim == 1: - X = X[:, None] - assert X.ndim == 2 - phi = self.kernel(X, self.X) + if x.ndim == 1: + x = x[:, None] + assert x.ndim == 2 + phi = self.kernel(x, self.x) mean = phi @ self.mean if with_error: var = 1 / self.beta + np.sum(phi @ self.covariance * phi, axis=1) diff --git a/prml/kernel/support_vector_classifier.py b/prml/kernel/support_vector_classifier.py index c476b546d..7aef5f4e6 100644 --- a/prml/kernel/support_vector_classifier.py +++ b/prml/kernel/support_vector_classifier.py @@ -17,13 +17,12 @@ def __init__(self, kernel, C=np.inf): self.kernel = kernel self.C = C - def fit(self, X:np.ndarray, t:np.ndarray, tol:float=1e-8): - """ - estimate support vectors and their parameters + def fit(self, x: np.ndarray, t: np.ndarray, tol: float = 1e-8): + """Estimate support vectors and their parameters. Parameters ---------- - X : (N, D) np.ndarray + x : (N, D) np.ndarray training independent variable t : (N,) np.ndarray training dependent variable @@ -35,7 +34,7 @@ def fit(self, X:np.ndarray, t:np.ndarray, tol:float=1e-8): N = len(t) coef = np.zeros(N) grad = np.ones(N) - Gram = self.kernel(X, X) + Gram = self.kernel(x, x) while True: tg = t * grad @@ -58,14 +57,14 @@ def fit(self, X:np.ndarray, t:np.ndarray, tol:float=1e-8): grad -= direction * t * (Gram[i] - Gram[j]) support_mask = coef > tol self.a = coef[support_mask] - self.X = X[support_mask] + self.x = x[support_mask] self.t = t[support_mask] def lagrangian_function(self): return ( np.sum(self.a) - self.a - @ (self.t * self.t[:, None] * self.kernel(self.X, self.X)) + @ (self.t * self.t[:, None] * self.kernel(self.x, self.x)) @ self.a) def predict(self, x): @@ -102,6 +101,6 @@ def distance(self, x): """ distance = np.sum( self.a * self.t - * self.kernel(x, self.X), + * self.kernel(x, self.x), axis=-1) + self.b return distance diff --git a/prml/markov/__init__.py b/prml/markov/__init__.py index 6fd3ea780..73d002cec 100644 --- a/prml/markov/__init__.py +++ b/prml/markov/__init__.py @@ -1,7 +1,7 @@ -from .categorical_hmm import CategoricalHMM -from .gaussian_hmm import GaussianHMM +from prml.markov.categorical_hmm import CategoricalHMM +from prml.markov.gaussian_hmm import GaussianHMM from prml.markov.kalman import Kalman, kalman_filter, kalman_smoother -from .particle import Particle +from prml.markov.particle import Particle __all__ = [ diff --git a/prml/markov/categorical_hmm.py b/prml/markov/categorical_hmm.py index 3f18aef03..efbd46db8 100644 --- a/prml/markov/categorical_hmm.py +++ b/prml/markov/categorical_hmm.py @@ -1,5 +1,6 @@ import numpy as np -from .hmm import HiddenMarkovModel + +from prml.markov.hmm import HiddenMarkovModel class CategoricalHMM(HiddenMarkovModel): @@ -55,8 +56,8 @@ def draw(self, n=100): hidden_state = np.random.choice(self.n_hidden, p=self.transition_proba[hidden_state]) return np.asarray(seq) - def likelihood(self, X): - return self.means[X] + def likelihood(self, x): + return self.means[x] def maximize(self, seq, p_hidden, p_transition): self.initial_proba = p_hidden[0] / np.sum(p_hidden[0]) diff --git a/prml/markov/gaussian_hmm.py b/prml/markov/gaussian_hmm.py index 9cdd60920..88007ad07 100644 --- a/prml/markov/gaussian_hmm.py +++ b/prml/markov/gaussian_hmm.py @@ -1,6 +1,7 @@ import numpy as np + +from prml.markov.hmm import HiddenMarkovModel from prml.rv import MultivariateGaussian -from .hmm import HiddenMarkovModel class GaussianHMM(HiddenMarkovModel): @@ -61,8 +62,8 @@ def draw(self, n=100): hidden_state = np.random.choice(self.n_hidden, p=self.transition_proba[hidden_state]) return np.asarray(seq) - def likelihood(self, X): - diff = X[:, None, :] - self.means + def likelihood(self, x): + diff = x[:, None, :] - self.means exponents = np.sum( np.einsum('nki,kij->nkj', diff, self.precisions) * diff, axis=-1) return np.exp(-0.5 * exponents) / np.sqrt(np.linalg.det(self.covs) * (2 * np.pi) ** self.ndim) diff --git a/prml/markov/kalman.py b/prml/markov/kalman.py index 723a0c887..61d0409fd 100644 --- a/prml/markov/kalman.py +++ b/prml/markov/kalman.py @@ -1,11 +1,11 @@ import numpy as np -from prml.rv.multivariate_gaussian import MultivariateGaussian as Gaussian + from prml.markov.state_space_model import StateSpaceModel class Kalman(StateSpaceModel): - """ - A class to perform kalman filtering or smoothing\n + """A class to perform kalman filtering or smoothing + :math:`z` : internal state (random variable)\n :math:`x` : observation (random variable) @@ -40,7 +40,6 @@ class Kalman(StateSpaceModel): dimensionality of observed variable """ - def __init__(self, system, cov_system, measure, cov_measure, mu0, P0): """ construct Kalman model @@ -221,9 +220,8 @@ def fit(self, sequence, max_iter=10): return kalman_smoother(self, sequence) -def kalman_filter(kalman:Kalman, observed_sequence:np.ndarray)->tuple: - """ - perform kalman filtering given Kalman model and observed sequence +def kalman_filter(kalman: Kalman, observed_sequence: np.ndarray) -> tuple: + """Perform kalman filtering given Kalman model and observed sequence. Parameters ---------- @@ -246,8 +244,7 @@ def kalman_filter(kalman:Kalman, observed_sequence:np.ndarray)->tuple: def kalman_smoother(kalman:Kalman, observed_sequence:np.ndarray=None): - """ - perform Kalman smoothing given Kalman model (and observed sequence) + """Perform Kalman smoothing given Kalman model (and observed sequence). Parameters ---------- diff --git a/prml/markov/particle.py b/prml/markov/particle.py index d4e7c4d90..7fa3436ba 100644 --- a/prml/markov/particle.py +++ b/prml/markov/particle.py @@ -1,7 +1,8 @@ import numpy as np from scipy.special import logsumexp from scipy.spatial.distance import cdist -from .state_space_model import StateSpaceModel + +from prml.markov.state_space_model import StateSpaceModel class Particle(StateSpaceModel): diff --git a/prml/markov/state_space_model.py b/prml/markov/state_space_model.py index b4f55000e..fa0ab778a 100644 --- a/prml/markov/state_space_model.py +++ b/prml/markov/state_space_model.py @@ -2,4 +2,5 @@ class StateSpaceModel(object): """ Base class for state-space models """ + pass diff --git a/prml/nn/__init__.py b/prml/nn/__init__.py index 4c26f6e61..d6e2a059d 100755 --- a/prml/nn/__init__.py +++ b/prml/nn/__init__.py @@ -1,3 +1,5 @@ +# flake8: noqa + from prml.nn.config import config from prml.nn.network import Network from prml.nn import array diff --git a/prml/nn/array/__init__.py b/prml/nn/array/__init__.py index 0061bf265..4f62fad73 100755 --- a/prml/nn/array/__init__.py +++ b/prml/nn/array/__init__.py @@ -1,3 +1,5 @@ +# flake8: noqa + from prml.nn.array.array import Array, array, asarray from prml.nn.array.reshape import reshape_method from prml.nn.function import broadcast, broadcast_to diff --git a/prml/nn/array/array.py b/prml/nn/array/array.py index fe90605d6..d2f96a53c 100755 --- a/prml/nn/array/array.py +++ b/prml/nn/array/array.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.config import config from prml.nn.queue import backprop_queue diff --git a/prml/nn/array/broadcast.py b/prml/nn/array/broadcast.py index b08e757cd..da04fcf03 100755 --- a/prml/nn/array/broadcast.py +++ b/prml/nn/array/broadcast.py @@ -1,2 +1 @@ -import numpy as np -from prml.nn.function import Function, broadcast, broadcast_to +from prml.nn.function import Function, broadcast, broadcast_to # noqa diff --git a/prml/nn/array/ones.py b/prml/nn/array/ones.py index 78fc1adcc..44e1c605c 100755 --- a/prml/nn/array/ones.py +++ b/prml/nn/array/ones.py @@ -1,6 +1,7 @@ +import numpy as np + from prml.nn.array.array import Array from prml.nn.config import config -import numpy as np def ones(size): diff --git a/prml/nn/array/zeros.py b/prml/nn/array/zeros.py index a793e8a45..4a3a1da5c 100755 --- a/prml/nn/array/zeros.py +++ b/prml/nn/array/zeros.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.array.array import Array from prml.nn.config import config diff --git a/prml/nn/distribution/bernoulli.py b/prml/nn/distribution/bernoulli.py index 96b03f5cd..787900f7b 100755 --- a/prml/nn/distribution/bernoulli.py +++ b/prml/nn/distribution/bernoulli.py @@ -1,10 +1,11 @@ import numpy as np + from prml.nn.array.array import asarray -from prml.nn.math.log import log -from prml.nn.nonlinear.sigmoid import sigmoid -from prml.nn.nonlinear.logit import logit as logit_func from prml.nn.distribution.distribution import Distribution from prml.nn.loss.sigmoid_cross_entropy import sigmoid_cross_entropy +from prml.nn.math.log import log +from prml.nn.nonlinear.logit import logit as logit_func +from prml.nn.nonlinear.sigmoid import sigmoid class Bernoulli(Distribution): diff --git a/prml/nn/distribution/categorical.py b/prml/nn/distribution/categorical.py index 39dd194c3..9a79917c4 100755 --- a/prml/nn/distribution/categorical.py +++ b/prml/nn/distribution/categorical.py @@ -1,20 +1,31 @@ import numpy as np + from prml.nn.array.array import asarray +from prml.nn.distribution.distribution import Distribution from prml.nn.function import Function +from prml.nn.loss.softmax_cross_entropy import softmax_cross_entropy from prml.nn.math.log import log from prml.nn.nonlinear.softmax import softmax -from prml.nn.distribution.distribution import Distribution -from prml.nn.loss.softmax_cross_entropy import softmax_cross_entropy class Categorical(Distribution): + """Categorical distribution.""" + is_categorical = True - def __init__(self, mean=None, logit=None, use_gumbel_softmax=True, tau=0.1): + def __init__( + self, + mean=None, + logit=None, + use_gumbel_softmax=True, + tau=0.1, + ): + """Initialize a categorical distribution.""" super().__init__() if mean is not None: self.mean = asarray(mean) - assert((self.mean.value >= 0).all() and np.allclose(self.mean.value.sum(axis=-1), 1)) + v = self.mean.value + assert ((v >= 0).all() and np.allclose(v.sum(axis=-1), 1)) self.logit = log(self.mean) self._log_pdf = self._log_pdf_mean elif logit is not None: @@ -56,6 +67,7 @@ def _log_pdf_logit(self, x): class CategoricalPDF(Function): + """Probability density function of a categorical distribution.""" def _forward(self, mean, x): proba = np.ones_like(mean) diff --git a/prml/nn/function.py b/prml/nn/function.py index 0efb96f1b..e8c3e281c 100755 --- a/prml/nn/function.py +++ b/prml/nn/function.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.array.array import Array, asarray from prml.nn.config import config from prml.nn.queue import backprop_queue diff --git a/prml/nn/image/__init__.py b/prml/nn/image/__init__.py index 48be8ac13..b6f4f451a 100755 --- a/prml/nn/image/__init__.py +++ b/prml/nn/image/__init__.py @@ -1,3 +1,5 @@ +# flake8: noqa + from prml.nn.image.convolve2d import convolve2d, Convolve2d from prml.nn.image.deconvolve2d import deconvolve2d, Deconvolve2d from prml.nn.image.max_pooling2d import max_pooling2d diff --git a/prml/nn/image/convolve2d.py b/prml/nn/image/convolve2d.py index e88cbaf3d..a43e6c9c1 100755 --- a/prml/nn/image/convolve2d.py +++ b/prml/nn/image/convolve2d.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.array.array import Array from prml.nn.network import Network from prml.nn.function import Function diff --git a/prml/nn/image/deconvolve2d.py b/prml/nn/image/deconvolve2d.py index 8431a96dd..197982c94 100755 --- a/prml/nn/image/deconvolve2d.py +++ b/prml/nn/image/deconvolve2d.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.array.array import Array from prml.nn.function import Function from prml.nn.network import Network @@ -30,8 +31,10 @@ def __init__(self, kernel_size, out_ch, stride, pad, shape): def _forward(self, x, y): if self.shape is None: - shape = (len(x),) + tuple(s * (imlen - 1) + klen - for s, imlen, klen in zip(self.stride, x.shape[1:], self.kernel_size)) + (self.out_ch,) + shape = (len(x),) + tuple( + s * (imlen - 1) + klen for s, imlen, klen + in zip(self.stride, x.shape[1:], self.kernel_size) + ) + (self.out_ch,) else: shape = (len(x),) + self.shape + (self.out_ch,) patch_flat = np.matmul(x, y.T) # (N, Hx, Wx, kx * ky * out_ch) diff --git a/prml/nn/image/max_pooling2d.py b/prml/nn/image/max_pooling2d.py index 0d76d8e0e..861c78d11 100755 --- a/prml/nn/image/max_pooling2d.py +++ b/prml/nn/image/max_pooling2d.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.config import config from prml.nn.function import Function from prml.nn.image.util import img2patch, patch2img, patch2img_no_overlap diff --git a/prml/nn/image/util.py b/prml/nn/image/util.py index ba5db8b1e..0ef085352 100755 --- a/prml/nn/image/util.py +++ b/prml/nn/image/util.py @@ -1,11 +1,12 @@ import itertools + import numpy as np from numpy.lib.stride_tricks import as_strided def img2patch(img, size, step=1): - """ - convert batch of image array into patches + """Convert batch of image array into patches. + Parameters ---------- img : (n_batch, xlen_in, ylen_in, in_chaprml.nnels) ndarray @@ -39,8 +40,8 @@ def img2patch(img, size, step=1): def _patch2img(x, stride, shape): - """ - sum up patches and form an image + """Sum up patches and form an image. + Parameters ---------- x : (n_batch, xlen_in, ylen_in, kx, ky, in_chaprml.nnels) ndarray @@ -57,12 +58,16 @@ def _patch2img(x, stride, shape): img = np.zeros(shape, dtype=x.dtype) kx, ky = x.shape[3: 5] for i, j in itertools.product(range(kx), range(ky)): - slices = tuple(slice(b, b + s * len_, s) for b, s, len_ in zip([i, j], stride, x.shape[1: 3])) + slices = tuple( + slice(b, b + s * len_, s) + for b, s, len_ in zip([i, j], stride, x.shape[1: 3]) + ) img[(slice(None),) + slices] += x[..., i, j, :] return img def patch2img(x, stride, shape): + """Transform patches to an image.""" img = np.zeros(shape, dtype=x.dtype) kx, ky = x.shape[3:5] patch = img2patch(img, (kx, ky), stride) @@ -72,6 +77,7 @@ def patch2img(x, stride, shape): def patch2img_no_overlap(x, stride, shape): + """Transform patches to an image without overlaps.""" img = np.zeros(shape, dtype=x.dtype) patch = img2patch(img, x.shape[3:5], stride) patch += x diff --git a/prml/nn/io/__init__.py b/prml/nn/io/__init__.py index de353b927..173436482 100755 --- a/prml/nn/io/__init__.py +++ b/prml/nn/io/__init__.py @@ -1 +1,3 @@ +# flake8: noqa + from prml.nn.io.io import save_parameter, load_parameter, save_object, load_object diff --git a/prml/nn/io/io.py b/prml/nn/io/io.py index 3eb038841..528353ddf 100755 --- a/prml/nn/io/io.py +++ b/prml/nn/io/io.py @@ -14,10 +14,10 @@ def load_parameter(filename: str, parameter: dict): def save_object(filename: str, obj): - with open(filename, "wb") as file: - pickle.dump(obj, file) + with open(filename, "wb") as f: + pickle.dump(obj, f) def load_object(filename: str, obj): - with open(filename, "rb") as file: - return pickle.load(filename) + with open(filename, "rb") as f: + return pickle.load(f) diff --git a/prml/nn/loss/__init__.py b/prml/nn/loss/__init__.py index bf16dcd07..7ede1651d 100755 --- a/prml/nn/loss/__init__.py +++ b/prml/nn/loss/__init__.py @@ -1,3 +1,12 @@ from prml.nn.loss.kl import kl_divergence from prml.nn.loss.sigmoid_cross_entropy import sigmoid_cross_entropy from prml.nn.loss.softmax_cross_entropy import softmax_cross_entropy + + +_functions = [kl_divergence, sigmoid_cross_entropy, softmax_cross_entropy] + + +__all__ = [_f.__name__ for _f in _functions] + + +del _functions diff --git a/prml/nn/loss/kl.py b/prml/nn/loss/kl.py index 12a746509..86da113e5 100755 --- a/prml/nn/loss/kl.py +++ b/prml/nn/loss/kl.py @@ -1,5 +1,3 @@ -import numpy as np -from prml.nn.function import Function from prml.nn.distribution.bernoulli import Bernoulli from prml.nn.distribution.categorical import Categorical from prml.nn.distribution.gaussian import Gaussian @@ -34,8 +32,10 @@ def kl_divergence(q, p, data=None): def kl_bernoulli(q, p): - return (q.mean - 1) * (q.logit - p.logit) \ + return ( + (q.mean - 1) * (q.logit - p.logit) - softplus(-q.logit) + softplus(p.logit) + ) def kl_categorical(q, p): diff --git a/prml/nn/loss/sigmoid_cross_entropy.py b/prml/nn/loss/sigmoid_cross_entropy.py index c70589b27..6fda1a93c 100755 --- a/prml/nn/loss/sigmoid_cross_entropy.py +++ b/prml/nn/loss/sigmoid_cross_entropy.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/loss/softmax_cross_entropy.py b/prml/nn/loss/softmax_cross_entropy.py index 59616b9a6..baac12f6e 100755 --- a/prml/nn/loss/softmax_cross_entropy.py +++ b/prml/nn/loss/softmax_cross_entropy.py @@ -1,5 +1,6 @@ import numpy as np from scipy.special import logsumexp + from prml.nn.function import Function diff --git a/prml/nn/math/add.py b/prml/nn/math/add.py index 69ef4e30e..d184fbf3f 100755 --- a/prml/nn/math/add.py +++ b/prml/nn/math/add.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/exp.py b/prml/nn/math/exp.py index 28878cd28..51a9f3faa 100755 --- a/prml/nn/math/exp.py +++ b/prml/nn/math/exp.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/log.py b/prml/nn/math/log.py index 4a6ec358c..b47a689e3 100755 --- a/prml/nn/math/log.py +++ b/prml/nn/math/log.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/multiply.py b/prml/nn/math/multiply.py index 5a53839ad..755506fea 100755 --- a/prml/nn/math/multiply.py +++ b/prml/nn/math/multiply.py @@ -1,4 +1,3 @@ -import numpy as np from prml.nn.function import Function diff --git a/prml/nn/math/power.py b/prml/nn/math/power.py index b84c073d9..589b0037d 100755 --- a/prml/nn/math/power.py +++ b/prml/nn/math/power.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/product.py b/prml/nn/math/product.py index d9448f699..2379fb4c9 100755 --- a/prml/nn/math/product.py +++ b/prml/nn/math/product.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/sqrt.py b/prml/nn/math/sqrt.py index 9938c1709..8697aba69 100755 --- a/prml/nn/math/sqrt.py +++ b/prml/nn/math/sqrt.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/square.py b/prml/nn/math/square.py index 09af3d425..e10ed0af8 100755 --- a/prml/nn/math/square.py +++ b/prml/nn/math/square.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/math/subtract.py b/prml/nn/math/subtract.py index 8ade19c9f..5c88d9b71 100755 --- a/prml/nn/math/subtract.py +++ b/prml/nn/math/subtract.py @@ -1,8 +1,9 @@ -import numpy as np from prml.nn.function import Function class Subtract(Function): + """Subtraction function.""" + enable_auto_broadcast = True @staticmethod @@ -15,8 +16,10 @@ def _backward(delta, x, y): def subtract(x, y): + """Subtract.""" return Subtract().forward(x, y) def rsubtract(x, y): + """Reverse subtract.""" return Subtract().forward(y, x) diff --git a/prml/nn/math/sum.py b/prml/nn/math/sum.py index fda2da2ee..a027046fb 100755 --- a/prml/nn/math/sum.py +++ b/prml/nn/math/sum.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/nonlinear/log_softmax.py b/prml/nn/nonlinear/log_softmax.py index 01757a752..1d44fd0fc 100755 --- a/prml/nn/nonlinear/log_softmax.py +++ b/prml/nn/nonlinear/log_softmax.py @@ -1,9 +1,11 @@ import numpy as np from scipy.special import logsumexp + from prml.nn.function import Function class LogSoftmax(Function): + """Log-softmax function.""" def _forward(self, x): self.output = x - logsumexp(x, axis=-1, keepdims=True) @@ -16,4 +18,5 @@ def _backward(self, delta, x): def log_softmax(x): + """Return log-softmax transformation of the input.""" return LogSoftmax().forward(x) diff --git a/prml/nn/nonlinear/logit.py b/prml/nn/nonlinear/logit.py index d04704629..973eb0cbb 100755 --- a/prml/nn/nonlinear/logit.py +++ b/prml/nn/nonlinear/logit.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/nonlinear/sigmoid.py b/prml/nn/nonlinear/sigmoid.py index 1f60b8a95..db7c1c4c4 100755 --- a/prml/nn/nonlinear/sigmoid.py +++ b/prml/nn/nonlinear/sigmoid.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/nonlinear/softplus.py b/prml/nn/nonlinear/softplus.py index 38a29a372..f5f03ecdc 100755 --- a/prml/nn/nonlinear/softplus.py +++ b/prml/nn/nonlinear/softplus.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/nonlinear/tanh.py b/prml/nn/nonlinear/tanh.py index 3ee63e5f2..061caa4a9 100755 --- a/prml/nn/nonlinear/tanh.py +++ b/prml/nn/nonlinear/tanh.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/normalization/__init__.py b/prml/nn/normalization/__init__.py index 43fef92e1..3f67d6f75 100755 --- a/prml/nn/normalization/__init__.py +++ b/prml/nn/normalization/__init__.py @@ -1 +1,4 @@ from prml.nn.normalization.batch_normalization import BatchNormalization + + +__all__ = ['BatchNormalization'] diff --git a/prml/nn/normalization/batch_normalization.py b/prml/nn/normalization/batch_normalization.py index 4542cfa6c..17f72c6ee 100755 --- a/prml/nn/normalization/batch_normalization.py +++ b/prml/nn/normalization/batch_normalization.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.array.ones import ones from prml.nn.array.zeros import zeros from prml.nn.config import config diff --git a/prml/nn/optimizer/__init__.py b/prml/nn/optimizer/__init__.py index 77632f993..d6dabdd87 100755 --- a/prml/nn/optimizer/__init__.py +++ b/prml/nn/optimizer/__init__.py @@ -1,3 +1,5 @@ +# flake8: noqa + from prml.nn.optimizer.ada_delta import AdaDelta from prml.nn.optimizer.ada_grad import AdaGrad from prml.nn.optimizer.adam import Adam diff --git a/prml/nn/optimizer/ada_delta.py b/prml/nn/optimizer/ada_delta.py index 314ede339..387c977f4 100644 --- a/prml/nn/optimizer/ada_delta.py +++ b/prml/nn/optimizer/ada_delta.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.config import config from prml.nn.optimizer.optimizer import Optimizer diff --git a/prml/nn/optimizer/ada_grad.py b/prml/nn/optimizer/ada_grad.py index e98442cf7..bb1ee5f0f 100644 --- a/prml/nn/optimizer/ada_grad.py +++ b/prml/nn/optimizer/ada_grad.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.config import config from prml.nn.optimizer.optimizer import Optimizer @@ -27,7 +28,7 @@ def update(self): for key in self.parameter: param, G = self.parameter[key], self.G[key] if param.grad is None: - continue + continue grad = param.grad G += grad ** 2 param.value += self.learning_rate * grad / (np.sqrt(G) + self.epsilon) diff --git a/prml/nn/optimizer/adam.py b/prml/nn/optimizer/adam.py index 7d2d6414f..63280178d 100755 --- a/prml/nn/optimizer/adam.py +++ b/prml/nn/optimizer/adam.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.config import config from prml.nn.optimizer.optimizer import Optimizer diff --git a/prml/nn/optimizer/momentum.py b/prml/nn/optimizer/momentum.py index cb50e18c9..9b672f395 100644 --- a/prml/nn/optimizer/momentum.py +++ b/prml/nn/optimizer/momentum.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.optimizer.optimizer import Optimizer diff --git a/prml/nn/optimizer/optimizer.py b/prml/nn/optimizer/optimizer.py index 784f6d241..42ee6167d 100755 --- a/prml/nn/optimizer/optimizer.py +++ b/prml/nn/optimizer/optimizer.py @@ -2,7 +2,7 @@ class Optimizer(object): def __init__(self, parameter: dict, learning_rate: float): if isinstance(parameter, list): - self.parameter = {f"parameter{i}" : param for i, param in enumerate(parameter)} + self.parameter = {f"parameter{i}": param for i, param in enumerate(parameter)} elif isinstance(parameter, dict): self.parameter = parameter self.learning_rate = learning_rate diff --git a/prml/nn/optimizer/rmsprop.py b/prml/nn/optimizer/rmsprop.py index 5271ba36e..2e125fab3 100644 --- a/prml/nn/optimizer/rmsprop.py +++ b/prml/nn/optimizer/rmsprop.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.optimizer.optimizer import Optimizer diff --git a/prml/nn/random/__init__.py b/prml/nn/random/__init__.py index c961637ac..494f18319 100755 --- a/prml/nn/random/__init__.py +++ b/prml/nn/random/__init__.py @@ -1,3 +1,11 @@ from prml.nn.random.dropout import dropout from prml.nn.random.normal import normal, truncnormal from prml.nn.random.uniform import uniform + +_functions = [dropout, normal, truncnormal, uniform] + + +__all__ = [_f.__name__ for _f in _functions] + + +del _functions diff --git a/prml/nn/random/dropout.py b/prml/nn/random/dropout.py index 536884563..62eab2094 100755 --- a/prml/nn/random/dropout.py +++ b/prml/nn/random/dropout.py @@ -1,4 +1,5 @@ import numpy as np + from prml.nn.function import Function diff --git a/prml/nn/random/normal.py b/prml/nn/random/normal.py index 981e239cb..ee40dc674 100755 --- a/prml/nn/random/normal.py +++ b/prml/nn/random/normal.py @@ -1,11 +1,14 @@ import numpy as np from scipy.stats import truncnorm + from prml.nn.array.array import asarray def normal(mean, std, size): + """Return a random sample from normal distribution.""" return asarray(np.random.normal(mean, std, size)) -def truncnormal(min, max, scale, size): - return asarray(truncnorm(a=min, b=max, scale=scale).rvs(size)) +def truncnormal(min_, max_, scale, size): + """Return a random sample from trunc-normal distribution.""" + return asarray(truncnorm(a=min_, b=max_, scale=scale).rvs(size)) diff --git a/prml/nn/random/uniform.py b/prml/nn/random/uniform.py index 2c6396740..4f9b2905d 100755 --- a/prml/nn/random/uniform.py +++ b/prml/nn/random/uniform.py @@ -1,6 +1,7 @@ import numpy as np + from prml.nn.array.array import asarray -def uniform(min, max, size): - return asarray(np.random.uniform(min, max, size)) +def uniform(min_, max_, size): + return asarray(np.random.uniform(min_, max_, size)) diff --git a/prml/preprocess/sigmoidal.py b/prml/preprocess/sigmoidal.py index 0d926ff0c..bb3af47d4 100644 --- a/prml/preprocess/sigmoidal.py +++ b/prml/preprocess/sigmoidal.py @@ -2,15 +2,13 @@ class SigmoidalFeature(object): - """ - Sigmoidal features + """Sigmoidal features. 1 / (1 + exp((m - x) @ c) """ def __init__(self, mean, coef=1): - """ - construct sigmoidal features + """Initialize sigmoidal features. Parameters ---------- @@ -38,8 +36,7 @@ def _sigmoid(self, x, mean): return np.tanh((x - mean) @ self.coef * 0.5) * 0.5 + 0.5 def transform(self, x): - """ - transform input array with sigmoidal features + """Transform input array with sigmoidal features. Parameters ---------- diff --git a/prml/rv/bernoulli.py b/prml/rv/bernoulli.py index 489e21b30..80f35e1cf 100644 --- a/prml/rv/bernoulli.py +++ b/prml/rv/bernoulli.py @@ -1,4 +1,5 @@ import numpy as np + from prml.rv.rv import RandomVariable from prml.rv.beta import Beta @@ -63,50 +64,48 @@ def shape(self): else: return None - def _fit(self, X): + def _fit(self, x): if isinstance(self.mu, Beta): - self._bayes(X) + self._bayes(x) elif isinstance(self.mu, RandomVariable): raise NotImplementedError else: - self._ml(X) + self._ml(x) - def _ml(self, X): - n_zeros = np.count_nonzero((X == 0).astype(int)) - n_ones = np.count_nonzero((X == 1).astype(int)) - assert X.size == n_zeros + n_ones, ( - "{X.size} is not equal to {n_zeros} plus {n_ones}" + def _ml(self, x): + n_zeros = np.count_nonzero((x == 0).astype(int)) + n_ones = np.count_nonzero((x == 1).astype(int)) + assert x.size == n_zeros + n_ones, ( + "{x.size} is not equal to {n_zeros} plus {n_ones}" ) - self.mu = np.mean(X, axis=0) + self.mu = np.mean(x, axis=0) - def _map(self, X): + def _map(self, x): assert isinstance(self.mu, Beta) - assert X.shape[1:] == self.mu.shape - n_ones = (X == 1).sum(axis=0) - n_zeros = (X == 0).sum(axis=0) - assert X.size == n_zeros.sum() + n_ones.sum(), ( - f"{X.size} is not equal to {n_zeros} plus {n_ones}" + assert x.shape[1:] == self.mu.shape + n_ones = (x == 1).sum(axis=0) + n_zeros = (x == 0).sum(axis=0) + assert x.size == n_zeros.sum() + n_ones.sum(), ( + f"{x.size} is not equal to {n_zeros} plus {n_ones}" ) n_ones = n_ones + self.mu.n_ones n_zeros = n_zeros + self.mu.n_zeros self.prob = (n_ones - 1) / (n_ones + n_zeros - 2) - def _bayes(self, X): + def _bayes(self, x): assert isinstance(self.mu, Beta) - assert X.shape[1:] == self.mu.shape - n_ones = (X == 1).sum(axis=0) - n_zeros = (X == 0).sum(axis=0) - assert X.size == n_zeros.sum() + n_ones.sum(), ( - "input X must only has 0 or 1" + assert x.shape[1:] == self.mu.shape + n_ones = (x == 1).sum(axis=0) + n_zeros = (x == 0).sum(axis=0) + assert x.size == n_zeros.sum() + n_ones.sum(), ( + "input x must only has 0 or 1" ) self.mu.n_zeros += n_zeros self.mu.n_ones += n_ones - def _pdf(self, X): - assert isinstance(mu, np.ndarray) - return np.prod( - self.mu ** X * (1 - self.mu) ** (1 - X) - ) + def _pdf(self, x): + assert isinstance(self.mu, np.ndarray) + return np.prod(self.mu ** x * (1 - self.mu) ** (1 - x)) def _draw(self, sample_size=1): if isinstance(self.mu, np.ndarray): diff --git a/prml/rv/bernoulli_mixture.py b/prml/rv/bernoulli_mixture.py index 0c6023488..7cc1f736b 100644 --- a/prml/rv/bernoulli_mixture.py +++ b/prml/rv/bernoulli_mixture.py @@ -58,44 +58,44 @@ def coef(self, coef): assert coef is None self.parameter["coef"] = np.ones(self.n_components) / self.n_components - def _log_bernoulli(self, X): + def _log_bernoulli(self, x): np.clip(self.mu, 1e-10, 1 - 1e-10, out=self.mu) return ( - X[:, None, :] * np.log(self.mu) - + (1 - X[:, None, :]) * np.log(1 - self.mu) + x[:, None, :] * np.log(self.mu) + + (1 - x[:, None, :]) * np.log(1 - self.mu) ).sum(axis=-1) - def _fit(self, X): - self.mu = np.random.uniform(0.25, 0.75, size=(self.n_components, np.size(X, 1))) + def _fit(self, x): + self.mu = np.random.uniform(0.25, 0.75, size=(self.n_components, np.size(x, 1))) params = np.hstack((self.mu.ravel(), self.coef.ravel())) while True: - resp = self._expectation(X) - self._maximization(X, resp) + resp = self._expectation(x) + self._maximization(x, resp) new_params = np.hstack((self.mu.ravel(), self.coef.ravel())) if np.allclose(params, new_params): break else: params = new_params - def _expectation(self, X): - log_resps = np.log(self.coef) + self._log_bernoulli(X) + def _expectation(self, x): + log_resps = np.log(self.coef) + self._log_bernoulli(x) log_resps -= logsumexp(log_resps, axis=-1)[:, None] resps = np.exp(log_resps) return resps - def _maximization(self, X, resp): + def _maximization(self, x, resp): Nk = np.sum(resp, axis=0) - self.coef = Nk / len(X) - self.mu = (X.T @ resp / Nk).T + self.coef = Nk / len(x) + self.mu = (x.T @ resp / Nk).T - def classify(self, X): + def classify(self, x): """ classify input max_z p(z|x, theta) Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns @@ -103,16 +103,16 @@ def classify(self, X): output : (sample_size,) ndarray corresponding cluster index """ - return np.argmax(self.classify_proba(X), axis=1) + return np.argmax(self.classify_proba(x), axis=1) - def classfiy_proba(self, X): + def classfiy_proba(self, x): """ posterior probability of cluster p(z|x,theta) Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns @@ -120,4 +120,4 @@ def classfiy_proba(self, X): output : (sample_size, n_components) ndarray posterior probability of cluster """ - return self._expectation(X) + return self._expectation(x) diff --git a/prml/rv/categorical.py b/prml/rv/categorical.py index 81a47aca3..3ce8c3997 100644 --- a/prml/rv/categorical.py +++ b/prml/rv/categorical.py @@ -1,6 +1,7 @@ import numpy as np -from prml.rv.rv import RandomVariable + from prml.rv.dirichlet import Dirichlet +from prml.rv.rv import RandomVariable class Categorical(RandomVariable): @@ -65,38 +66,38 @@ def shape(self): else: return None - def _check_input(self, X): - assert X.ndim == 2 - assert (X >= 0).all() - assert (X.sum(axis=-1) == 1).all() + def _check_input(self, x): + assert x.ndim == 2 + assert (x >= 0).all() + assert (x.sum(axis=-1) == 1).all() - def _fit(self, X): + def _fit(self, x): if isinstance(self.mu, Dirichlet): - self._bayes(X) + self._bayes(x) elif isinstance(self.mu, RandomVariable): raise NotImplementedError else: - self._ml(X) + self._ml(x) - def _ml(self, X): - self._check_input(X) - self.mu = np.mean(X, axis=0) + def _ml(self, x): + self._check_input(x) + self.mu = np.mean(x, axis=0) - def _map(self, X): - self._check_input(X) + def _map(self, x): + self._check_input(x) assert isinstance(self.mu, Dirichlet) - alpha = self.mu.alpha + X.sum(axis=0) + alpha = self.mu.alpha + x.sum(axis=0) self.mu = (alpha - 1) / (alpha - 1).sum() - def _bayes(self, X): - self._check_input(X) + def _bayes(self, x): + self._check_input(x) assert isinstance(self.mu, Dirichlet) - self.mu.alpha += X.sum(axis=0) + self.mu.alpha += x.sum(axis=0) - def _pdf(self, X): - self._check_input(X) + def _pdf(self, x): + self._check_input(x) assert isinstance(self.mu, np.ndarray) - return np.prod(self.mu ** X, axis=-1) + return np.prod(self.mu ** x, axis=-1) def _draw(self, sample_size=1): assert isinstance(self.mu, np.ndarray) diff --git a/prml/rv/gamma.py b/prml/rv/gamma.py index 9898b0aab..5efec78b1 100644 --- a/prml/rv/gamma.py +++ b/prml/rv/gamma.py @@ -81,11 +81,11 @@ def shape(self): def size(self): return self.a.size - def _pdf(self, X): + def _pdf(self, x): return ( self.b ** self.a - * X ** (self.a - 1) - * np.exp(-self.b * X) + * x ** (self.a - 1) + * np.exp(-self.b * x) / gamma(self.a)) def _draw(self, sample_size=1): diff --git a/prml/rv/gaussian.py b/prml/rv/gaussian.py index d4001691e..c487df94d 100644 --- a/prml/rv/gaussian.py +++ b/prml/rv/gaussian.py @@ -1,4 +1,5 @@ import numpy as np + from prml.rv.rv import RandomVariable from prml.rv.gamma import Gamma @@ -107,61 +108,61 @@ def shape(self): else: return None - def _fit(self, X): + def _fit(self, x): mu_is_gaussian = isinstance(self.mu, Gaussian) tau_is_gamma = isinstance(self.tau, Gamma) if mu_is_gaussian and tau_is_gamma: raise NotImplementedError elif mu_is_gaussian: - self._bayes_mu(X) + self._bayes_mu(x) elif tau_is_gamma: - self._bayes_tau(X) + self._bayes_tau(x) else: - self._ml(X) + self._ml(x) - def _ml(self, X): - self.mu = np.mean(X, axis=0) - self.var = np.var(X, axis=0) + def _ml(self, x): + self.mu = np.mean(x, axis=0) + self.var = np.var(x, axis=0) - def _map(self, X): + def _map(self, x): assert isinstance(self.mu, Gaussian) assert isinstance(self.var, np.ndarray) - N = len(X) - mu = np.mean(X, 0) + N = len(x) + mu = np.mean(x, 0) self.mu = ( (self.tau * self.mu.mu + N * self.mu.tau * mu) / (N * self.mu.tau + self.tau) ) - def _bayes_mu(self, X): - N = len(X) - mu = np.mean(X, 0) + def _bayes_mu(self, x): + N = len(x) + mu = np.mean(x, 0) tau = self.mu.tau + N * self.tau self.mu = Gaussian( mu=(self.mu.mu * self.mu.tau + N * mu * self.tau) / tau, tau=tau ) - def _bayes_tau(self, X): - N = len(X) - var = np.var(X, axis=0) + def _bayes_tau(self, x): + N = len(x) + var = np.var(x, axis=0) a = self.tau.a + 0.5 * N b = self.tau.b + 0.5 * N * var self.tau = Gamma(a, b) - def _bayes(self, X): - N = len(X) + def _bayes(self, x): + N = len(x) mu_is_gaussian = isinstance(self.mu, Gaussian) tau_is_gamma = isinstance(self.tau, Gamma) if mu_is_gaussian and not tau_is_gamma: - mu = np.mean(X, 0) + mu = np.mean(x, 0) tau = self.mu.tau + N * self.tau self.mu = Gaussian( mu=(self.mu.mu * self.mu.tau + N * mu * self.tau) / tau, tau=tau ) elif not mu_is_gaussian and tau_is_gamma: - var = np.var(X, axis=0) + var = np.var(x, axis=0) a = self.tau.a + 0.5 * N b = self.tau.b + 0.5 * N * var self.tau = Gamma(a, b) @@ -170,8 +171,8 @@ def _bayes(self, X): else: raise NotImplementedError - def _pdf(self, X): - d = X - self.mu + def _pdf(self, x): + d = x - self.mu return ( np.exp(-0.5 * self.tau * d ** 2) / np.sqrt(2 * np.pi * self.var) ) diff --git a/prml/rv/multivariate_gaussian.py b/prml/rv/multivariate_gaussian.py index 0d55bddec..8926366af 100644 --- a/prml/rv/multivariate_gaussian.py +++ b/prml/rv/multivariate_gaussian.py @@ -1,4 +1,5 @@ import numpy as np + from prml.rv.rv import RandomVariable @@ -85,12 +86,12 @@ def shape(self): else: return None - def _fit(self, X): - self.mu = np.mean(X, axis=0) - self.cov = np.atleast_2d(np.cov(X.T, bias=True)) + def _fit(self, x): + self.mu = np.mean(x, axis=0) + self.cov = np.atleast_2d(np.cov(x.T, bias=True)) - def _pdf(self, X): - d = X - self.mu + def _pdf(self, x): + d = x - self.mu return ( np.exp(-0.5 * np.sum(d @ self.tau * d, axis=-1)) * np.sqrt(np.linalg.det(self.tau)) diff --git a/prml/rv/multivariate_gaussian_mixture.py b/prml/rv/multivariate_gaussian_mixture.py index 6b70dbb8d..f457c4255 100644 --- a/prml/rv/multivariate_gaussian_mixture.py +++ b/prml/rv/multivariate_gaussian_mixture.py @@ -1,4 +1,5 @@ import numpy as np + from prml.clustering import KMeans from prml.rv.rv import RandomVariable @@ -119,20 +120,18 @@ def shape(self): else: return None - def _gauss(self, X): - d = X[:, None, :] - self.mu + def _gauss(self, x): + d = x[:, None, :] - self.mu D_sq = np.sum(np.einsum('nki,kij->nkj', d, self.cov) * d, -1) return ( np.exp(-0.5 * D_sq) - / np.sqrt( - np.linalg.det(self.cov) * (2 * np.pi) ** self.ndim - ) + / np.sqrt(np.linalg.det(self.cov) * (2 * np.pi) ** self.ndim) ) - def _fit(self, X): - cov = np.cov(X.T) + def _fit(self, x): + cov = np.cov(x.T) kmeans = KMeans(self.n_components) - kmeans.fit(X) + kmeans.fit(x) self.mu = kmeans.centers self.cov = np.array([cov for _ in range(self.n_components)]) self.coef = np.ones(self.n_components) / self.n_components @@ -142,8 +141,8 @@ def _fit(self, X): self.coef.ravel()) ) while True: - stats = self._expectation(X) - self._maximization(X, stats) + stats = self._expectation(x) + self._maximization(x, stats) new_params = np.hstack( (self.mu.ravel(), self.cov.ravel(), @@ -154,26 +153,26 @@ def _fit(self, X): else: params = new_params - def _expectation(self, X): - resps = self.coef * self._gauss(X) + def _expectation(self, x): + resps = self.coef * self._gauss(x) resps /= resps.sum(axis=-1, keepdims=True) return resps - def _maximization(self, X, resps): + def _maximization(self, x, resps): Nk = np.sum(resps, axis=0) - self.coef = Nk / len(X) - self.mu = (X.T @ resps / Nk).T - d = X[:, None, :] - self.mu + self.coef = Nk / len(x) + self.mu = (x.T @ resps / Nk).T + d = x[:, None, :] - self.mu self.cov = np.einsum( 'nki,nkj->kij', d, d * resps[:, :, None]) / Nk[:, None, None] - def joint_proba(self, X): + def joint_proba(self, x): """ - calculate joint probability p(X, Z) + calculate joint probability p(x, Z) Parameters ---------- - X : (sample_size, n_features) ndarray + x : (sample_size, n_features) ndarray input data Returns @@ -181,20 +180,20 @@ def joint_proba(self, X): joint_prob : (sample_size, n_components) ndarray joint probability of input and component """ - return self.coef * self._gauss(X) + return self.coef * self._gauss(x) - def _pdf(self, X): - joint_prob = self.coef * self._gauss(X) + def _pdf(self, x): + joint_prob = self.coef * self._gauss(x) return np.sum(joint_prob, axis=-1) - def classify(self, X): + def classify(self, x): """ classify input max_z p(z|x, theta) Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns @@ -202,16 +201,16 @@ def classify(self, X): output : (sample_size,) ndarray corresponding cluster index """ - return np.argmax(self.classify_proba(X), axis=1) + return np.argmax(self.classify_proba(x), axis=1) - def classify_proba(self, X): + def classify_proba(self, x): """ posterior probability of cluster p(z|x,theta) Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns @@ -219,4 +218,4 @@ def classify_proba(self, X): output : (sample_size, n_components) ndarray posterior probability of cluster """ - return self._expectation(X) + return self._expectation(x) diff --git a/prml/rv/rv.py b/prml/rv/rv.py index 5d794c80c..fb1b1f823 100644 --- a/prml/rv/rv.py +++ b/prml/rv/rv.py @@ -2,14 +2,14 @@ class RandomVariable(object): - """ - base class for random variables - """ + """Base class for random variables.""" def __init__(self): + """Initialize a random variable.""" self.parameter = {} def __repr__(self): + """Representation of the random variable.""" string = f"{self.__class__.__name__}(\n" for key, value in self.parameter.items(): string += (" " * 4) @@ -22,6 +22,7 @@ def __repr__(self): return string def __format__(self, indent="4"): + """Format the random variable.""" indent = int(indent) string = f"{self.__class__.__name__}(\n" for key, value in self.parameter.items(): @@ -34,77 +35,74 @@ def __format__(self, indent="4"): string += (" " * (indent - 4)) + ")" return string - def fit(self, X, **kwargs): - """ - estimate parameter(s) of the distribution + def fit(self, x, **kwargs): + """Estimate parameter(s) of the distribution. Parameters ---------- - X : np.ndarray + x : np.ndarray observed data """ - self._check_input(X) + self._check_input(x) if hasattr(self, "_fit"): - self._fit(X, **kwargs) + self._fit(x, **kwargs) else: raise NotImplementedError - # def ml(self, X, **kwargs): + # def ml(self, x, **kwargs): # """ # maximum likelihood estimation of the parameter(s) # of the distribution given data # Parameters # ---------- - # X : (sample_size, ndim) np.ndarray + # x : (sample_size, ndim) np.ndarray # observed data # """ - # self._check_input(X) + # self._check_input(x) # if hasattr(self, "_ml"): - # self._ml(X, **kwargs) + # self._ml(x, **kwargs) # else: # raise NotImplementedError - # def map(self, X, **kwargs): + # def map(self, x, **kwargs): # """ # maximum a posteriori estimation of the parameter(s) # of the distribution given data # Parameters # ---------- - # X : (sample_size, ndim) np.ndarray + # x : (sample_size, ndim) np.ndarray # observed data # """ - # self._check_input(X) + # self._check_input(x) # if hasattr(self, "_map"): - # self._map(X, **kwargs) + # self._map(x, **kwargs) # else: # raise NotImplementedError - # def bayes(self, X, **kwargs): + # def bayes(self, x, **kwargs): # """ # bayesian estimation of the parameter(s) # of the distribution given data # Parameters # ---------- - # X : (sample_size, ndim) np.ndarray + # x : (sample_size, ndim) np.ndarray # observed data # """ - # self._check_input(X) + # self._check_input(x) # if hasattr(self, "_bayes"): - # self._bayes(X, **kwargs) + # self._bayes(x, **kwargs) # else: # raise NotImplementedError - def pdf(self, X): - """ - compute probability density function - p(X|parameter) + def pdf(self, x): + """Compute probability density function p(x|parameter). Parameters ---------- - X : (sample_size, ndim) np.ndarray + x : (sample_size, ndim) np.ndarray input of the function Returns @@ -112,15 +110,14 @@ def pdf(self, X): p : (sample_size,) np.ndarray value of probability density function for each input """ - self._check_input(X) + self._check_input(x) if hasattr(self, "_pdf"): - return self._pdf(X) + return self._pdf(x) else: raise NotImplementedError def draw(self, sample_size=1): - """ - draw samples from the distribution + """Draw samples from the distribution. Parameters ---------- @@ -138,5 +135,5 @@ def draw(self, sample_size=1): else: raise NotImplementedError - def _check_input(self, X): - assert isinstance(X, np.ndarray) + def _check_input(self, x): + assert isinstance(x, np.ndarray) diff --git a/prml/rv/students_t.py b/prml/rv/students_t.py index 8e61a48b9..5c2f380a1 100644 --- a/prml/rv/students_t.py +++ b/prml/rv/students_t.py @@ -80,9 +80,9 @@ def shape(self): else: return None - def _fit(self, X, learning_rate=0.01): - self.mu = np.mean(X, axis=0) - self.tau = 1 / np.var(X, axis=0) + def _fit(self, x, learning_rate=0.01): + self.mu = np.mean(x, axis=0) + self.tau = 1 / np.var(x, axis=0) self.dof = 1 params = np.hstack( (self.mu.ravel(), @@ -90,8 +90,8 @@ def _fit(self, X, learning_rate=0.01): self.dof) ) while True: - E_eta, E_lneta = self._expectation(X) - self._maximization(X, E_eta, E_lneta, learning_rate) + E_eta, E_lneta = self._expectation(x) + self._maximization(x, E_eta, E_lneta, learning_rate) new_params = np.hstack( (self.mu.ravel(), self.tau.ravel(), @@ -102,27 +102,27 @@ def _fit(self, X, learning_rate=0.01): else: params = new_params - def _expectation(self, X): - d = X - self.mu + def _expectation(self, x): + d = x - self.mu a = 0.5 * (self.dof + 1) b = 0.5 * (self.dof + self.tau * d ** 2) E_eta = a / b E_lneta = digamma(a) - np.log(b) return E_eta, E_lneta - def _maximization(self, X, E_eta, E_lneta, learning_rate): - self.mu = np.sum(E_eta * X, axis=0) / np.sum(E_eta, axis=0) - d = X - self.mu + def _maximization(self, x, E_eta, E_lneta, learning_rate): + self.mu = np.sum(E_eta * x, axis=0) / np.sum(E_eta, axis=0) + d = x - self.mu self.tau = 1 / np.mean(E_eta * d ** 2, axis=0) - N = len(X) + N = len(x) self.dof += learning_rate * 0.5 * ( N * np.log(0.5 * self.dof) + N - N * digamma(0.5 * self.dof) + np.sum(E_lneta - E_eta, axis=0) ) - def _pdf(self, X): - d = X - self.mu + def _pdf(self, x): + d = x - self.mu D_sq = self.tau * d ** 2 return ( gamma(0.5 * (self.dof + 1)) diff --git a/prml/rv/uniform.py b/prml/rv/uniform.py index ca5173efd..bafed4e58 100644 --- a/prml/rv/uniform.py +++ b/prml/rv/uniform.py @@ -1,17 +1,17 @@ import numpy as np + from prml.rv.rv import RandomVariable class Uniform(RandomVariable): - """ - Uniform distribution + """Random variable that follows a uniform distribution. + p(x|a, b) = 1 / ((b_0 - a_0) * (b_1 - a_1)) if a <= x <= b else 0 """ def __init__(self, low, high): - """ - construct uniform distribution + """Initialize a uniform distribution. Parameters ---------- @@ -31,6 +31,7 @@ def __init__(self, low, high): @property def low(self): + """Lower bound of the random variable.""" return self.parameter["low"] @low.setter @@ -39,6 +40,7 @@ def low(self, low): @property def high(self): + """Higher bound of the random variable.""" return self.parameter["high"] @high.setter @@ -47,23 +49,27 @@ def high(self, high): @property def ndim(self): + """Rank of the random variable.""" return self.low.ndim @property def size(self): + """Number of elements in the random variable.""" return self.low.size @property def shape(self): + """Shape of the random variable.""" return self.low.shape @property def mean(self): + """Mean value of the random variable.""" return 0.5 * (self.low + self.high) - def _pdf(self, X): - higher = np.logical_and.reduce(X >= self.low, 1) - lower = np.logical_and.reduce(X <= self.high, 1) + def _pdf(self, x): + higher = np.logical_and.reduce(x >= self.low, 1) + lower = np.logical_and.reduce(x <= self.high, 1) return self.value * np.logical_and(higher, lower) def _draw(self, sample_size=1): diff --git a/prml/rv/variational_gaussian_mixture.py b/prml/rv/variational_gaussian_mixture.py index 0dcbc6e38..5a6627f33 100644 --- a/prml/rv/variational_gaussian_mixture.py +++ b/prml/rv/variational_gaussian_mixture.py @@ -1,13 +1,22 @@ import numpy as np from scipy.special import digamma, gamma, logsumexp + from prml.rv.rv import RandomVariable class VariationalGaussianMixture(RandomVariable): - def __init__(self, n_components=1, alpha0=None, m0=None, W0=1., dof0=None, beta0=1.): - """ - construct variational gaussian mixture model + def __init__( + self, + n_components=1, + alpha0=None, + m0=None, + W0=1., + dof0=None, + beta0=1., + ): + """Initialize variational gaussian mixture model. + Parameters ---------- n_components : int @@ -34,11 +43,11 @@ def __init__(self, n_components=1, alpha0=None, m0=None, W0=1., dof0=None, beta0 self.dof0 = dof0 self.beta0 = beta0 - def _init_params(self, X): - sample_size, self.ndim = X.shape + def _init_params(self, x): + sample_size, self.ndim = x.shape self.alpha0 = np.ones(self.n_components) * self.alpha0 if self.m0 is None: - self.m0 = np.mean(X, axis=0) + self.m0 = np.mean(x, axis=0) else: self.m0 = np.zeros(self.ndim) + self.m0 self.W0 = np.eye(self.ndim) * self.W0 @@ -49,12 +58,13 @@ def _init_params(self, X): self.alpha = self.alpha0 + self.component_size self.beta = self.beta0 + self.component_size indices = np.random.choice(sample_size, self.n_components, replace=False) - self.mu = X[indices] + self.mu = x[indices] self.W = np.tile(self.W0, (self.n_components, 1, 1)) self.dof = self.dof0 + self.component_size @property def alpha(self): + """Alpha parameter.""" return self.parameter["alpha"] @alpha.setter @@ -63,6 +73,7 @@ def alpha(self, alpha): @property def beta(self): + """Beta parameter.""" return self.parameter["beta"] @beta.setter @@ -71,6 +82,7 @@ def beta(self, beta): @property def mu(self): + """Mean parameter of posterior Wishart distribution.""" return self.parameter["mu"] @mu.setter @@ -79,6 +91,7 @@ def mu(self, mu): @property def W(self): + """Weight parameter.""" return self.parameter["W"] @W.setter @@ -87,6 +100,7 @@ def W(self, W): @property def dof(self): + """Degree of freedom.""" return self.parameter["dof"] @dof.setter @@ -94,19 +108,20 @@ def dof(self, dof): self.parameter["dof"] = dof def get_params(self): + """Get parameters.""" return self.alpha, self.beta, self.mu, self.W, self.dof - def _fit(self, X, iter_max=100): - self._init_params(X) + def _fit(self, x, iter_max=100): + self._init_params(x) for _ in range(iter_max): params = np.hstack([p.flatten() for p in self.get_params()]) - r = self._variational_expectation(X) - self._variational_maximization(X, r) + r = self._variational_expectation(x) + self._variational_maximization(x, r) if np.allclose(params, np.hstack([p.flatten() for p in self.get_params()])): break - def _variational_expectation(self, X): - d = X[:, None, :] - self.mu + def _variational_expectation(self, x): + d = x[:, None, :] - self.mu maha_sq = -0.5 * ( self.ndim / self.beta + self.dof * np.sum( @@ -118,10 +133,10 @@ def _variational_expectation(self, X): r = np.exp(ln_r) return r - def _variational_maximization(self, X, r): + def _variational_maximization(self, x, r): self.component_size = r.sum(axis=0) - Xm = (X.T.dot(r) / self.component_size).T - d = X[:, None, :] - Xm + Xm = (x.T.dot(r) / self.component_size).T + d = x[:, None, :] - Xm S = np.einsum('nki,nkj->kij', d, r[:, :, None] * d) / self.component_size[:, None, None] self.alpha = self.alpha0 + self.component_size self.beta = self.beta0 + self.component_size @@ -133,38 +148,39 @@ def _variational_maximization(self, X, r): + (self.beta0 * self.component_size * np.einsum('ki,kj->kij', d, d).T / (self.beta0 + self.component_size)).T) self.dof = self.dof0 + self.component_size - def classify(self, X): - """ - index of highest posterior of the latent variable + def classify(self, x): + """Index of highest posterior of the latent variable. + Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns ------- output : (sample_size, n_components) ndarray index of maximum posterior of the latent variable """ - return np.argmax(self._variational_expectation(X), 1) + return np.argmax(self._variational_expectation(x), 1) + + def classify_proba(self, x): + """Compute posterior of the latent variable. - def classify_proba(self, X): - """ - compute posterior of the latent variable Parameters ---------- - X : (sample_size, ndim) ndarray + x : (sample_size, ndim) ndarray input Returns ------- output : (sample_size, n_components) ndarray posterior of the latent variable """ - return self._variational_expectation(X) + return self._variational_expectation(x) - def student_t(self, X): + def student_t(self, x): + """Student's t probability distribution function.""" nu = self.dof + 1 - self.ndim - L = (nu * self.beta * self.W.T / (1 + self.beta)).T - d = X[:, None, :] - self.mu + L = (nu * self.beta * self.W.T / (1 + self.beta)).T # noqa + d = x[:, None, :] - self.mu maha_sq = np.sum(np.einsum('nki,kij->nkj', d, L) * d, axis=-1) return ( gamma(0.5 * (nu + self.ndim)) @@ -172,5 +188,5 @@ def student_t(self, X): * (1 + maha_sq / nu) ** (-0.5 * (nu + self.ndim)) / (gamma(0.5 * nu) * (nu * np.pi) ** (0.5 * self.ndim))) - def _pdf(self, X): - return (self.alpha * self.student_t(X)).sum(axis=-1) / self.alpha.sum() + def _pdf(self, x): + return (self.alpha * self.student_t(x)).sum(axis=-1) / self.alpha.sum() diff --git a/prml/sampling/metropolis.py b/prml/sampling/metropolis.py index 9eebd0878..7b30e7144 100644 --- a/prml/sampling/metropolis.py +++ b/prml/sampling/metropolis.py @@ -1,10 +1,10 @@ import random + import numpy as np def metropolis(func, rv, n, downsample=1): - """ - Metropolis algorithm + """Metropolis algorithm. Parameters ---------- diff --git a/prml/sampling/metropolis_hastings.py b/prml/sampling/metropolis_hastings.py index ce20a1303..27c69e48a 100644 --- a/prml/sampling/metropolis_hastings.py +++ b/prml/sampling/metropolis_hastings.py @@ -1,4 +1,5 @@ import random + import numpy as np diff --git a/setup.cfg b/setup.cfg index eef97bbdc..e8ac11e12 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,6 +24,81 @@ develop = pep8-naming [flake8] +ignore = + ; variable "sum" is shadowing a Python builtin + A001 + ; class attribute is shadowing a Python builtin + A003 + ; import statement "sum" is shadowing a Python builtin + A004 + ; No blank lines allowed after function docstring + D202 + ; missing whitespace around arithmetic operator + E226 + ; missing whitespace after ':' + E231 + ; missing whitespace around parameter equals + E252 + ; expected 2 blank lines, found 1 + E302 + ; too many blank lines (2) + E303 + ; comparison to False should be 'if cond is False:' or 'if not cond:' + E712 + ; the module is shadowing a Python builtin module + A005 + ; missing trailing comma + C812 + ; Missing docstring in public module + D100 + ; Missing docstring in public class + D101 + ; Missing docstring in public method + D102 + ; Missing docstring in public function + D103 + ; Missing docstring in public package + D104 + ; Missing docstring in magic method + D105 + ; Missing docstring in __init__ + D107 + ; One-line docstring should fit on one line with quotes + D200 + ; 1 blank line required between summary line and description + D205 + ; Use r""" if any backslashes in a docstring + D301 + ; First line should end with a period + D400 + ; First line should not be the function's "signature" + D402 + ; First line should be in imperative mood; try rephrasing + D401 + ; First word of the first line should be properly capitalized + D403 + ; missing whitespace after keyword + E275 + ; line too long + E501 + ; Import statements are in the wrong order. + I100 + ; Imported names are in the wrong order. + I101 + ; Missing newline between import groups. + I201 + ; Multi-line container not broken after opening character + JS101 + ; function name should be lowercase + N802 + ; argument name should be lowercase + N803 + ; variable in function should be lowercase + N806 + ; line break before binary operator + W503 + ; invalid escape sequence + W605 per-file-ignores = ; Ignore 'Missing docstring in public module' and 'variable "copyright" is shadowing a python builtin' docs/conf.py:A001,D100 diff --git a/test/test_bayesnet/test_discrete.py b/test/test_bayesnet/test_discrete.py index 7b0e3b850..b55c36b80 100644 --- a/test/test_bayesnet/test_discrete.py +++ b/test/test_bayesnet/test_discrete.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + from prml import bayesnet as bn diff --git a/test/test_nn/test_backward.py b/test/test_nn/test_backward.py index 243afa518..be93c9440 100755 --- a/test/test_nn/test_backward.py +++ b/test/test_nn/test_backward.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_distribution/test_bernoulli.py b/test/test_nn/test_distribution/test_bernoulli.py index 2ec35d097..721050632 100755 --- a/test/test_nn/test_distribution/test_bernoulli.py +++ b/test/test_nn/test_distribution/test_bernoulli.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_distribution/test_gaussian.py b/test/test_nn/test_distribution/test_gaussian.py index dce928dcf..2af50adf5 100755 --- a/test/test_nn/test_distribution/test_gaussian.py +++ b/test/test_nn/test_distribution/test_gaussian.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_image/test_convolve2d.py b/test/test_nn/test_image/test_convolve2d.py index 0ac1ce6dd..e9683f928 100755 --- a/test/test_nn/test_image/test_convolve2d.py +++ b/test/test_nn/test_image/test_convolve2d.py @@ -1,4 +1,5 @@ import unittest + import numpy as np from scipy.ndimage.filters import correlate import prml.nn as nn @@ -29,7 +30,10 @@ def test_convolve2d_backward(self): output.backward(2 * (output.value - 1)) x.value -= x.grad * 0.01 w.value -= w.grad * 0.01 - self.assertTrue(np.allclose(output.value, 1)) + self.assertTrue( + np.allclose(output.value, 1, rtol=0, atol=1e-2), + output.value, + ) self.assertEqual(nn.config.dtype, np.float32) self.assertEqual(x.dtype, nn.config.dtype) self.assertEqual(w.dtype, nn.config.dtype) diff --git a/test/test_nn/test_image/test_deconvolve2d.py b/test/test_nn/test_image/test_deconvolve2d.py index 5b3b6e3dc..24b19f1bf 100755 --- a/test/test_nn/test_image/test_deconvolve2d.py +++ b/test/test_nn/test_image/test_deconvolve2d.py @@ -1,6 +1,8 @@ import unittest + import numpy as np from scipy.ndimage.filters import correlate + import prml.nn as nn @@ -9,8 +11,15 @@ class TestDeconvolve2d(unittest.TestCase): def test_deconvolve2d_forward(self): img = np.random.randn(1, 3, 3, 1).astype(np.float32) kernel = np.random.randn(3, 3, 1, 1).astype(np.float32) - output = nn.deconvolve2d(img, kernel, (1, 1), (0, 0)) - self.assertTrue(np.allclose(output.value[0,1:-1,1:-1,0], correlate(img[0,:,:,0], kernel[::-1,::-1,0,0], mode="constant"))) + out = nn.deconvolve2d(img, kernel, (1, 1), (0, 0)) + + actual = out.value[0, 1:-1, 1:-1, 0] + expect = correlate( + img[0, :, :, 0], + kernel[::-1, ::-1, 0, 0], + mode='constant', + ) + self.assertTrue(np.allclose(actual, expect, 0, 1e-2)) def test_deconvolve2d_backward(self): x = nn.random.normal(0, 1, (1, 3, 3, 1)) @@ -22,7 +31,10 @@ def test_deconvolve2d_backward(self): output.backward(2 * (output.value - 1)) x.value -= x.grad * 0.01 w.value -= w.grad * 0.01 - self.assertTrue(np.allclose(output.value, 1), output.value) + self.assertTrue( + np.allclose(output.value, 1, rtol=0, atol=1e-2), + output.value, + ) if __name__ == "__main__": diff --git a/test/test_nn/test_image/test_max_pooling2d.py b/test/test_nn/test_image/test_max_pooling2d.py index 7abce6445..ea9e13f38 100755 --- a/test/test_nn/test_image/test_max_pooling2d.py +++ b/test/test_nn/test_image/test_max_pooling2d.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_loss/test_sigmoid_cross_entropy.py b/test/test_nn/test_loss/test_sigmoid_cross_entropy.py index 1438fe68b..55a34debc 100755 --- a/test/test_nn/test_loss/test_sigmoid_cross_entropy.py +++ b/test/test_nn/test_loss/test_sigmoid_cross_entropy.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn @@ -16,8 +18,8 @@ def test_sigmoid_cross_entropy(self): npg = np.random.randn(10, 3) loss.backward(npg) - self.assertTrue(np.allclose(x.grad, npg * (npy - npt))) - self.assertTrue(np.allclose(t.grad, -npg * npx)) + self.assertTrue(np.allclose(x.grad, npg * (npy - npt), 0, 1e-2)) + self.assertTrue(np.allclose(t.grad, -npg * npx, 0, 1e-2)) if __name__ == "__main__": diff --git a/test/test_nn/test_math/test_add.py b/test/test_nn/test_math/test_add.py index dd2478ebf..3e3d05f4d 100755 --- a/test/test_nn/test_math/test_add.py +++ b/test/test_nn/test_math/test_add.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_math/test_log.py b/test/test_nn/test_math/test_log.py index c5f74c111..65a5a2104 100755 --- a/test/test_nn/test_math/test_log.py +++ b/test/test_nn/test_math/test_log.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_math/test_matmul.py b/test/test_nn/test_math/test_matmul.py index c23b0efd9..333b00534 100755 --- a/test/test_nn/test_math/test_matmul.py +++ b/test/test_nn/test_math/test_matmul.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_math/test_multiply.py b/test/test_nn/test_math/test_multiply.py index 016e45915..4b622bb7e 100755 --- a/test/test_nn/test_math/test_multiply.py +++ b/test/test_nn/test_math/test_multiply.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_math/test_negative.py b/test/test_nn/test_math/test_negative.py index 709fd8d51..9b9e250db 100755 --- a/test/test_nn/test_math/test_negative.py +++ b/test/test_nn/test_math/test_negative.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_nonlinear/test_log_softmax.py b/test/test_nn/test_nonlinear/test_log_softmax.py index f3dbc2e8a..759219e3c 100755 --- a/test/test_nn/test_nonlinear/test_log_softmax.py +++ b/test/test_nn/test_nonlinear/test_log_softmax.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_nonlinear/test_sigmoid.py b/test/test_nn/test_nonlinear/test_sigmoid.py index a4b1fcd80..09f9ed73f 100755 --- a/test/test_nn/test_nonlinear/test_sigmoid.py +++ b/test/test_nn/test_nonlinear/test_sigmoid.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_nonlinear/test_softmax.py b/test/test_nn/test_nonlinear/test_softmax.py index 0fa2a74e1..92a34400a 100755 --- a/test/test_nn/test_nonlinear/test_softmax.py +++ b/test/test_nn/test_nonlinear/test_softmax.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn diff --git a/test/test_nn/test_nonlinear/test_tanh.py b/test/test_nn/test_nonlinear/test_tanh.py index 50baa51fc..5586d9d94 100755 --- a/test/test_nn/test_nonlinear/test_tanh.py +++ b/test/test_nn/test_nonlinear/test_tanh.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import prml.nn as nn