amkkk/sequential-testing-markov-repro-artifacts / repro-bundle /v1 /official_code /G4_Baselines2.ipynb
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "7IB-SoLfeyXr", | |
| "outputId": "e4c1e473-0e92-45e4-9ac2-b690f788b183" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Requirement already satisfied: cupy-cuda12x in /usr/local/lib/python3.12/dist-packages (13.6.0)\n", | |
| "Requirement already satisfied: numpy<2.6,>=1.22 in /usr/local/lib/python3.12/dist-packages (from cupy-cuda12x) (2.0.2)\n", | |
| "Requirement already satisfied: fastrlock>=0.5 in /usr/local/lib/python3.12/dist-packages (from cupy-cuda12x) (0.8.3)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "pip install cupy-cuda12x\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "UzqfvU7b7Lyw", | |
| "outputId": "2f165ecb-bd07-471a-d0ad-c9c2a1a692d4" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "\r0% [Working]\r \rGet:1 https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/ InRelease [3,632 B]\n", | |
| "\r0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com (91.18\r0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com (91.18\r \rGet:2 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 InRelease [1,581 B]\n", | |
| "Get:3 https://cli.github.com/packages stable InRelease [3,917 B]\n", | |
| "Get:4 https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/ Packages [85.0 kB]\n", | |
| "Get:5 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages [2,361 kB]\n", | |
| "Get:6 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]\n", | |
| "Hit:7 http://archive.ubuntu.com/ubuntu jammy InRelease\n", | |
| "Get:8 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]\n", | |
| "Get:9 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease [18.1 kB]\n", | |
| "Get:10 https://r2u.stat.illinois.edu/ubuntu jammy InRelease [6,555 B]\n", | |
| "Hit:11 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu jammy InRelease\n", | |
| "Get:12 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [127 kB]\n", | |
| "Hit:13 https://ppa.launchpadcontent.net/ubuntugis/ppa/ubuntu jammy InRelease\n", | |
| "Get:14 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy/main amd64 Packages [39.2 kB]\n", | |
| "Get:15 https://r2u.stat.illinois.edu/ubuntu jammy/main amd64 Packages [2,904 kB]\n", | |
| "Get:16 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [1,300 kB]\n", | |
| "Get:17 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [1,613 kB]\n", | |
| "Get:18 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [4,059 kB]\n", | |
| "Get:19 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [3,728 kB]\n", | |
| "Get:20 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [6,721 kB]\n", | |
| "Get:21 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [6,511 kB]\n", | |
| "Get:22 https://r2u.stat.illinois.edu/ubuntu jammy/main all Packages [9,748 kB]\n", | |
| "Fetched 39.5 MB in 8s (4,834 kB/s)\n", | |
| "Reading package lists... Done\n", | |
| "W: Skipping acquire of configured file 'main/source/Sources' as repository 'https://r2u.stat.illinois.edu/ubuntu jammy InRelease' does not seem to provide it (sources.list entry misspelt?)\n", | |
| "Reading package lists... Done\n", | |
| "Building dependency tree... Done\n", | |
| "Reading state information... Done\n", | |
| "The following additional packages will be installed:\n", | |
| " cm-super-minimal dvisvgm fonts-droid-fallback fonts-lato fonts-lmodern\n", | |
| " fonts-noto-mono fonts-texgyre fonts-urw-base35 ghostscript\n", | |
| " libapache-pom-java libcommons-logging-java libcommons-parent-java\n", | |
| " libfontbox-java libgs9 libgs9-common libidn12 libijs-0.35 libjbig2dec0\n", | |
| " libkpathsea6 libpdfbox-java libptexenc1 libruby3.0 libsynctex2 libteckit0\n", | |
| " libtexlua53 libtexluajit2 libwoff1 libzzip-0-13 lmodern pfb2t1c2pfb\n", | |
| " poppler-data preview-latex-style rake ruby ruby-net-telnet ruby-rubygems\n", | |
| " ruby-webrick ruby-xmlrpc ruby3.0 rubygems-integration t1utils tex-common\n", | |
| " tex-gyre texlive-base texlive-binaries texlive-latex-base\n", | |
| " texlive-latex-recommended texlive-pictures texlive-plain-generic tipa\n", | |
| " xfonts-encodings xfonts-utils\n", | |
| "Suggested packages:\n", | |
| " fonts-noto fonts-freefont-otf | fonts-freefont-ttf ghostscript-x\n", | |
| " libavalon-framework-java libcommons-logging-java-doc\n", | |
| " libexcalibur-logkit-java liblog4j1.2-java poppler-utils\n", | |
| " fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic\n", | |
| " | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum ri\n", | |
| " ruby-dev bundler debhelper perl-tk xpdf | pdf-viewer xzdec\n", | |
| " texlive-fonts-recommended-doc texlive-latex-base-doc python3-pygments\n", | |
| " icc-profiles libfile-which-perl libspreadsheet-parseexcel-perl\n", | |
| " texlive-latex-extra-doc texlive-latex-recommended-doc texlive-luatex\n", | |
| " texlive-pstricks dot2tex prerex texlive-pictures-doc vprerex\n", | |
| " default-jre-headless tipa-doc\n", | |
| "The following NEW packages will be installed:\n", | |
| " cm-super cm-super-minimal dvipng dvisvgm fonts-droid-fallback fonts-lato\n", | |
| " fonts-lmodern fonts-noto-mono fonts-texgyre fonts-urw-base35 ghostscript\n", | |
| " libapache-pom-java libcommons-logging-java libcommons-parent-java\n", | |
| " libfontbox-java libgs9 libgs9-common libidn12 libijs-0.35 libjbig2dec0\n", | |
| " libkpathsea6 libpdfbox-java libptexenc1 libruby3.0 libsynctex2 libteckit0\n", | |
| " libtexlua53 libtexluajit2 libwoff1 libzzip-0-13 lmodern pfb2t1c2pfb\n", | |
| " poppler-data preview-latex-style rake ruby ruby-net-telnet ruby-rubygems\n", | |
| " ruby-webrick ruby-xmlrpc ruby3.0 rubygems-integration t1utils tex-common\n", | |
| " tex-gyre texlive texlive-base texlive-binaries texlive-fonts-recommended\n", | |
| " texlive-latex-base texlive-latex-extra texlive-latex-recommended\n", | |
| " texlive-pictures texlive-plain-generic tipa xfonts-encodings xfonts-utils\n", | |
| "0 upgraded, 57 newly installed, 0 to remove and 60 not upgraded.\n", | |
| "Need to get 195 MB of archives.\n", | |
| "After this operation, 613 MB of additional disk space will be used.\n", | |
| "Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-droid-fallback all 1:6.0.1r16-1.1build1 [1,805 kB]\n", | |
| "Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-lato all 2.0-2.1 [2,696 kB]\n", | |
| "Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 poppler-data all 0.4.11-1 [2,171 kB]\n", | |
| "Get:4 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tex-common all 6.17 [33.7 kB]\n", | |
| "Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libkpathsea6 amd64 2021.20210626.59705-1ubuntu0.3 [60.6 kB]\n", | |
| "Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libptexenc1 amd64 2021.20210626.59705-1ubuntu0.3 [39.1 kB]\n", | |
| "Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libsynctex2 amd64 2021.20210626.59705-1ubuntu0.3 [55.8 kB]\n", | |
| "Get:8 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtexlua53 amd64 2021.20210626.59705-1ubuntu0.3 [120 kB]\n", | |
| "Get:9 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtexluajit2 amd64 2021.20210626.59705-1ubuntu0.3 [267 kB]\n", | |
| "Get:10 http://archive.ubuntu.com/ubuntu jammy/main amd64 t1utils amd64 1.41-4build2 [61.3 kB]\n", | |
| "Get:11 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libteckit0 amd64 2.5.11+ds1-1 [421 kB]\n", | |
| "Get:12 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libzzip-0-13 amd64 0.13.72+dfsg.1-1.1 [27.0 kB]\n", | |
| "Get:13 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 texlive-binaries amd64 2021.20210626.59705-1ubuntu0.3 [9,861 kB]\n", | |
| "Get:14 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-base all 2021.20220204-1 [21.0 MB]\n", | |
| "Get:15 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-lmodern all 2.004.5-6.1 [4,532 kB]\n", | |
| "Get:16 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-base all 2021.20220204-1 [1,128 kB]\n", | |
| "Get:17 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-recommended all 2021.20220204-1 [14.4 MB]\n", | |
| "Get:18 http://archive.ubuntu.com/ubuntu jammy/universe amd64 cm-super-minimal all 0.3.4-17 [5,777 kB]\n", | |
| "Get:19 http://archive.ubuntu.com/ubuntu jammy/universe amd64 pfb2t1c2pfb amd64 0.3-11 [9,342 B]\n", | |
| "Get:20 http://archive.ubuntu.com/ubuntu jammy/universe amd64 cm-super all 0.3.4-17 [20.2 MB]\n", | |
| "Get:21 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-urw-base35 all 20200910-1 [6,367 kB]\n", | |
| "Get:22 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9-common all 9.55.0~dfsg1-0ubuntu5.13 [753 kB]\n", | |
| "Get:23 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libidn12 amd64 1.38-4ubuntu1 [60.0 kB]\n", | |
| "Get:24 http://archive.ubuntu.com/ubuntu jammy/main amd64 libijs-0.35 amd64 0.35-15build2 [16.5 kB]\n", | |
| "Get:25 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjbig2dec0 amd64 0.19-3build2 [64.7 kB]\n", | |
| "Get:26 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9 amd64 9.55.0~dfsg1-0ubuntu5.13 [5,032 kB]\n", | |
| "Get:27 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ghostscript amd64 9.55.0~dfsg1-0ubuntu5.13 [49.4 kB]\n", | |
| "Get:28 http://archive.ubuntu.com/ubuntu jammy/universe amd64 dvipng amd64 1.15-1.1 [78.9 kB]\n", | |
| "Get:29 http://archive.ubuntu.com/ubuntu jammy/main amd64 libwoff1 amd64 1.0.2-1build4 [45.2 kB]\n", | |
| "Get:30 http://archive.ubuntu.com/ubuntu jammy/universe amd64 dvisvgm amd64 2.13.1-1 [1,221 kB]\n", | |
| "Get:31 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-noto-mono all 20201225-1build1 [397 kB]\n", | |
| "Get:32 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-texgyre all 20180621-3.1 [10.2 MB]\n", | |
| "Get:33 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libapache-pom-java all 18-1 [4,720 B]\n", | |
| "Get:34 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcommons-parent-java all 43-1 [10.8 kB]\n", | |
| "Get:35 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcommons-logging-java all 1.2-2 [60.3 kB]\n", | |
| "Get:36 http://archive.ubuntu.com/ubuntu jammy/main amd64 rubygems-integration all 1.18 [5,336 B]\n", | |
| "Get:37 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby3.0 amd64 3.0.2-7ubuntu2.11 [50.1 kB]\n", | |
| "Get:38 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby-rubygems all 3.3.5-2ubuntu1.2 [228 kB]\n", | |
| "Get:39 http://archive.ubuntu.com/ubuntu jammy/main amd64 ruby amd64 1:3.0~exp1 [5,100 B]\n", | |
| "Get:40 http://archive.ubuntu.com/ubuntu jammy/main amd64 rake all 13.0.6-2 [61.7 kB]\n", | |
| "Get:41 http://archive.ubuntu.com/ubuntu jammy/main amd64 ruby-net-telnet all 0.1.1-2 [12.6 kB]\n", | |
| "Get:42 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby-webrick all 1.7.0-3ubuntu0.2 [52.5 kB]\n", | |
| "Get:43 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby-xmlrpc all 0.3.2-1ubuntu0.1 [24.9 kB]\n", | |
| "Get:44 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libruby3.0 amd64 3.0.2-7ubuntu2.11 [5,114 kB]\n", | |
| "Get:45 http://archive.ubuntu.com/ubuntu jammy/main amd64 xfonts-encodings all 1:1.0.5-0ubuntu2 [578 kB]\n", | |
| "Get:46 http://archive.ubuntu.com/ubuntu jammy/main amd64 xfonts-utils amd64 1:7.7+6build2 [94.6 kB]\n", | |
| "Get:47 http://archive.ubuntu.com/ubuntu jammy/universe amd64 lmodern all 2.004.5-6.1 [9,471 kB]\n", | |
| "Get:48 http://archive.ubuntu.com/ubuntu jammy/universe amd64 preview-latex-style all 12.2-1ubuntu1 [185 kB]\n", | |
| "Get:49 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tex-gyre all 20180621-3.1 [6,209 kB]\n", | |
| "Get:50 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-fonts-recommended all 2021.20220204-1 [4,972 kB]\n", | |
| "Get:51 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive all 2021.20220204-1 [14.3 kB]\n", | |
| "Get:52 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libfontbox-java all 1:1.8.16-2 [207 kB]\n", | |
| "Get:53 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libpdfbox-java all 1:1.8.16-2 [5,199 kB]\n", | |
| "Get:54 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-pictures all 2021.20220204-1 [8,720 kB]\n", | |
| "Get:55 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-extra all 2021.20220204-1 [13.9 MB]\n", | |
| "Get:56 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-plain-generic all 2021.20220204-1 [27.5 MB]\n", | |
| "Get:57 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tipa all 2:1.3-21 [2,967 kB]\n", | |
| "Fetched 195 MB in 10s (19.6 MB/s)\n", | |
| "Extracting templates from packages: 100%\n", | |
| "Preconfiguring packages ...\n", | |
| "Selecting previously unselected package fonts-droid-fallback.\n", | |
| "(Reading database ... 121852 files and directories currently installed.)\n", | |
| "Preparing to unpack .../00-fonts-droid-fallback_1%3a6.0.1r16-1.1build1_all.deb ...\n", | |
| "Unpacking fonts-droid-fallback (1:6.0.1r16-1.1build1) ...\n", | |
| "Selecting previously unselected package fonts-lato.\n", | |
| "Preparing to unpack .../01-fonts-lato_2.0-2.1_all.deb ...\n", | |
| "Unpacking fonts-lato (2.0-2.1) ...\n", | |
| "Selecting previously unselected package poppler-data.\n", | |
| "Preparing to unpack .../02-poppler-data_0.4.11-1_all.deb ...\n", | |
| "Unpacking poppler-data (0.4.11-1) ...\n", | |
| "Selecting previously unselected package tex-common.\n", | |
| "Preparing to unpack .../03-tex-common_6.17_all.deb ...\n", | |
| "Unpacking tex-common (6.17) ...\n", | |
| "Selecting previously unselected package libkpathsea6:amd64.\n", | |
| "Preparing to unpack .../04-libkpathsea6_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking libkpathsea6:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package libptexenc1:amd64.\n", | |
| "Preparing to unpack .../05-libptexenc1_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking libptexenc1:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package libsynctex2:amd64.\n", | |
| "Preparing to unpack .../06-libsynctex2_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking libsynctex2:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package libtexlua53:amd64.\n", | |
| "Preparing to unpack .../07-libtexlua53_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking libtexlua53:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package libtexluajit2:amd64.\n", | |
| "Preparing to unpack .../08-libtexluajit2_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking libtexluajit2:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package t1utils.\n", | |
| "Preparing to unpack .../09-t1utils_1.41-4build2_amd64.deb ...\n", | |
| "Unpacking t1utils (1.41-4build2) ...\n", | |
| "Selecting previously unselected package libteckit0:amd64.\n", | |
| "Preparing to unpack .../10-libteckit0_2.5.11+ds1-1_amd64.deb ...\n", | |
| "Unpacking libteckit0:amd64 (2.5.11+ds1-1) ...\n", | |
| "Selecting previously unselected package libzzip-0-13:amd64.\n", | |
| "Preparing to unpack .../11-libzzip-0-13_0.13.72+dfsg.1-1.1_amd64.deb ...\n", | |
| "Unpacking libzzip-0-13:amd64 (0.13.72+dfsg.1-1.1) ...\n", | |
| "Selecting previously unselected package texlive-binaries.\n", | |
| "Preparing to unpack .../12-texlive-binaries_2021.20210626.59705-1ubuntu0.3_amd64.deb ...\n", | |
| "Unpacking texlive-binaries (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Selecting previously unselected package texlive-base.\n", | |
| "Preparing to unpack .../13-texlive-base_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-base (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package fonts-lmodern.\n", | |
| "Preparing to unpack .../14-fonts-lmodern_2.004.5-6.1_all.deb ...\n", | |
| "Unpacking fonts-lmodern (2.004.5-6.1) ...\n", | |
| "Selecting previously unselected package texlive-latex-base.\n", | |
| "Preparing to unpack .../15-texlive-latex-base_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-latex-base (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package texlive-latex-recommended.\n", | |
| "Preparing to unpack .../16-texlive-latex-recommended_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-latex-recommended (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package cm-super-minimal.\n", | |
| "Preparing to unpack .../17-cm-super-minimal_0.3.4-17_all.deb ...\n", | |
| "Unpacking cm-super-minimal (0.3.4-17) ...\n", | |
| "Selecting previously unselected package pfb2t1c2pfb.\n", | |
| "Preparing to unpack .../18-pfb2t1c2pfb_0.3-11_amd64.deb ...\n", | |
| "Unpacking pfb2t1c2pfb (0.3-11) ...\n", | |
| "Selecting previously unselected package cm-super.\n", | |
| "Preparing to unpack .../19-cm-super_0.3.4-17_all.deb ...\n", | |
| "Unpacking cm-super (0.3.4-17) ...\n", | |
| "Selecting previously unselected package fonts-urw-base35.\n", | |
| "Preparing to unpack .../20-fonts-urw-base35_20200910-1_all.deb ...\n", | |
| "Unpacking fonts-urw-base35 (20200910-1) ...\n", | |
| "Selecting previously unselected package libgs9-common.\n", | |
| "Preparing to unpack .../21-libgs9-common_9.55.0~dfsg1-0ubuntu5.13_all.deb ...\n", | |
| "Unpacking libgs9-common (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Selecting previously unselected package libidn12:amd64.\n", | |
| "Preparing to unpack .../22-libidn12_1.38-4ubuntu1_amd64.deb ...\n", | |
| "Unpacking libidn12:amd64 (1.38-4ubuntu1) ...\n", | |
| "Selecting previously unselected package libijs-0.35:amd64.\n", | |
| "Preparing to unpack .../23-libijs-0.35_0.35-15build2_amd64.deb ...\n", | |
| "Unpacking libijs-0.35:amd64 (0.35-15build2) ...\n", | |
| "Selecting previously unselected package libjbig2dec0:amd64.\n", | |
| "Preparing to unpack .../24-libjbig2dec0_0.19-3build2_amd64.deb ...\n", | |
| "Unpacking libjbig2dec0:amd64 (0.19-3build2) ...\n", | |
| "Selecting previously unselected package libgs9:amd64.\n", | |
| "Preparing to unpack .../25-libgs9_9.55.0~dfsg1-0ubuntu5.13_amd64.deb ...\n", | |
| "Unpacking libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Selecting previously unselected package ghostscript.\n", | |
| "Preparing to unpack .../26-ghostscript_9.55.0~dfsg1-0ubuntu5.13_amd64.deb ...\n", | |
| "Unpacking ghostscript (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Selecting previously unselected package dvipng.\n", | |
| "Preparing to unpack .../27-dvipng_1.15-1.1_amd64.deb ...\n", | |
| "Unpacking dvipng (1.15-1.1) ...\n", | |
| "Selecting previously unselected package libwoff1:amd64.\n", | |
| "Preparing to unpack .../28-libwoff1_1.0.2-1build4_amd64.deb ...\n", | |
| "Unpacking libwoff1:amd64 (1.0.2-1build4) ...\n", | |
| "Selecting previously unselected package dvisvgm.\n", | |
| "Preparing to unpack .../29-dvisvgm_2.13.1-1_amd64.deb ...\n", | |
| "Unpacking dvisvgm (2.13.1-1) ...\n", | |
| "Selecting previously unselected package fonts-noto-mono.\n", | |
| "Preparing to unpack .../30-fonts-noto-mono_20201225-1build1_all.deb ...\n", | |
| "Unpacking fonts-noto-mono (20201225-1build1) ...\n", | |
| "Selecting previously unselected package fonts-texgyre.\n", | |
| "Preparing to unpack .../31-fonts-texgyre_20180621-3.1_all.deb ...\n", | |
| "Unpacking fonts-texgyre (20180621-3.1) ...\n", | |
| "Selecting previously unselected package libapache-pom-java.\n", | |
| "Preparing to unpack .../32-libapache-pom-java_18-1_all.deb ...\n", | |
| "Unpacking libapache-pom-java (18-1) ...\n", | |
| "Selecting previously unselected package libcommons-parent-java.\n", | |
| "Preparing to unpack .../33-libcommons-parent-java_43-1_all.deb ...\n", | |
| "Unpacking libcommons-parent-java (43-1) ...\n", | |
| "Selecting previously unselected package libcommons-logging-java.\n", | |
| "Preparing to unpack .../34-libcommons-logging-java_1.2-2_all.deb ...\n", | |
| "Unpacking libcommons-logging-java (1.2-2) ...\n", | |
| "Selecting previously unselected package rubygems-integration.\n", | |
| "Preparing to unpack .../35-rubygems-integration_1.18_all.deb ...\n", | |
| "Unpacking rubygems-integration (1.18) ...\n", | |
| "Selecting previously unselected package ruby3.0.\n", | |
| "Preparing to unpack .../36-ruby3.0_3.0.2-7ubuntu2.11_amd64.deb ...\n", | |
| "Unpacking ruby3.0 (3.0.2-7ubuntu2.11) ...\n", | |
| "Selecting previously unselected package ruby-rubygems.\n", | |
| "Preparing to unpack .../37-ruby-rubygems_3.3.5-2ubuntu1.2_all.deb ...\n", | |
| "Unpacking ruby-rubygems (3.3.5-2ubuntu1.2) ...\n", | |
| "Selecting previously unselected package ruby.\n", | |
| "Preparing to unpack .../38-ruby_1%3a3.0~exp1_amd64.deb ...\n", | |
| "Unpacking ruby (1:3.0~exp1) ...\n", | |
| "Selecting previously unselected package rake.\n", | |
| "Preparing to unpack .../39-rake_13.0.6-2_all.deb ...\n", | |
| "Unpacking rake (13.0.6-2) ...\n", | |
| "Selecting previously unselected package ruby-net-telnet.\n", | |
| "Preparing to unpack .../40-ruby-net-telnet_0.1.1-2_all.deb ...\n", | |
| "Unpacking ruby-net-telnet (0.1.1-2) ...\n", | |
| "Selecting previously unselected package ruby-webrick.\n", | |
| "Preparing to unpack .../41-ruby-webrick_1.7.0-3ubuntu0.2_all.deb ...\n", | |
| "Unpacking ruby-webrick (1.7.0-3ubuntu0.2) ...\n", | |
| "Selecting previously unselected package ruby-xmlrpc.\n", | |
| "Preparing to unpack .../42-ruby-xmlrpc_0.3.2-1ubuntu0.1_all.deb ...\n", | |
| "Unpacking ruby-xmlrpc (0.3.2-1ubuntu0.1) ...\n", | |
| "Selecting previously unselected package libruby3.0:amd64.\n", | |
| "Preparing to unpack .../43-libruby3.0_3.0.2-7ubuntu2.11_amd64.deb ...\n", | |
| "Unpacking libruby3.0:amd64 (3.0.2-7ubuntu2.11) ...\n", | |
| "Selecting previously unselected package xfonts-encodings.\n", | |
| "Preparing to unpack .../44-xfonts-encodings_1%3a1.0.5-0ubuntu2_all.deb ...\n", | |
| "Unpacking xfonts-encodings (1:1.0.5-0ubuntu2) ...\n", | |
| "Selecting previously unselected package xfonts-utils.\n", | |
| "Preparing to unpack .../45-xfonts-utils_1%3a7.7+6build2_amd64.deb ...\n", | |
| "Unpacking xfonts-utils (1:7.7+6build2) ...\n", | |
| "Selecting previously unselected package lmodern.\n", | |
| "Preparing to unpack .../46-lmodern_2.004.5-6.1_all.deb ...\n", | |
| "Unpacking lmodern (2.004.5-6.1) ...\n", | |
| "Selecting previously unselected package preview-latex-style.\n", | |
| "Preparing to unpack .../47-preview-latex-style_12.2-1ubuntu1_all.deb ...\n", | |
| "Unpacking preview-latex-style (12.2-1ubuntu1) ...\n", | |
| "Selecting previously unselected package tex-gyre.\n", | |
| "Preparing to unpack .../48-tex-gyre_20180621-3.1_all.deb ...\n", | |
| "Unpacking tex-gyre (20180621-3.1) ...\n", | |
| "Selecting previously unselected package texlive-fonts-recommended.\n", | |
| "Preparing to unpack .../49-texlive-fonts-recommended_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-fonts-recommended (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package texlive.\n", | |
| "Preparing to unpack .../50-texlive_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package libfontbox-java.\n", | |
| "Preparing to unpack .../51-libfontbox-java_1%3a1.8.16-2_all.deb ...\n", | |
| "Unpacking libfontbox-java (1:1.8.16-2) ...\n", | |
| "Selecting previously unselected package libpdfbox-java.\n", | |
| "Preparing to unpack .../52-libpdfbox-java_1%3a1.8.16-2_all.deb ...\n", | |
| "Unpacking libpdfbox-java (1:1.8.16-2) ...\n", | |
| "Selecting previously unselected package texlive-pictures.\n", | |
| "Preparing to unpack .../53-texlive-pictures_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-pictures (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package texlive-latex-extra.\n", | |
| "Preparing to unpack .../54-texlive-latex-extra_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-latex-extra (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package texlive-plain-generic.\n", | |
| "Preparing to unpack .../55-texlive-plain-generic_2021.20220204-1_all.deb ...\n", | |
| "Unpacking texlive-plain-generic (2021.20220204-1) ...\n", | |
| "Selecting previously unselected package tipa.\n", | |
| "Preparing to unpack .../56-tipa_2%3a1.3-21_all.deb ...\n", | |
| "Unpacking tipa (2:1.3-21) ...\n", | |
| "Setting up pfb2t1c2pfb (0.3-11) ...\n", | |
| "Setting up fonts-lato (2.0-2.1) ...\n", | |
| "Setting up fonts-noto-mono (20201225-1build1) ...\n", | |
| "Setting up libwoff1:amd64 (1.0.2-1build4) ...\n", | |
| "Setting up libtexlua53:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Setting up libijs-0.35:amd64 (0.35-15build2) ...\n", | |
| "Setting up libtexluajit2:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Setting up libfontbox-java (1:1.8.16-2) ...\n", | |
| "Setting up rubygems-integration (1.18) ...\n", | |
| "Setting up libzzip-0-13:amd64 (0.13.72+dfsg.1-1.1) ...\n", | |
| "Setting up fonts-urw-base35 (20200910-1) ...\n", | |
| "Setting up poppler-data (0.4.11-1) ...\n", | |
| "Setting up tex-common (6.17) ...\n", | |
| "update-language: texlive-base not installed and configured, doing nothing!\n", | |
| "Setting up libjbig2dec0:amd64 (0.19-3build2) ...\n", | |
| "Setting up libteckit0:amd64 (2.5.11+ds1-1) ...\n", | |
| "Setting up libapache-pom-java (18-1) ...\n", | |
| "Setting up ruby-net-telnet (0.1.1-2) ...\n", | |
| "Setting up xfonts-encodings (1:1.0.5-0ubuntu2) ...\n", | |
| "Setting up t1utils (1.41-4build2) ...\n", | |
| "Setting up libidn12:amd64 (1.38-4ubuntu1) ...\n", | |
| "Setting up fonts-texgyre (20180621-3.1) ...\n", | |
| "Setting up libkpathsea6:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Setting up ruby-webrick (1.7.0-3ubuntu0.2) ...\n", | |
| "Setting up fonts-lmodern (2.004.5-6.1) ...\n", | |
| "Setting up fonts-droid-fallback (1:6.0.1r16-1.1build1) ...\n", | |
| "Setting up ruby-xmlrpc (0.3.2-1ubuntu0.1) ...\n", | |
| "Setting up libsynctex2:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Setting up libgs9-common (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Setting up libpdfbox-java (1:1.8.16-2) ...\n", | |
| "Setting up libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Setting up preview-latex-style (12.2-1ubuntu1) ...\n", | |
| "Setting up libcommons-parent-java (43-1) ...\n", | |
| "Setting up dvisvgm (2.13.1-1) ...\n", | |
| "Setting up libcommons-logging-java (1.2-2) ...\n", | |
| "Setting up ghostscript (9.55.0~dfsg1-0ubuntu5.13) ...\n", | |
| "Setting up xfonts-utils (1:7.7+6build2) ...\n", | |
| "Setting up libptexenc1:amd64 (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "Setting up texlive-binaries (2021.20210626.59705-1ubuntu0.3) ...\n", | |
| "update-alternatives: using /usr/bin/xdvi-xaw to provide /usr/bin/xdvi.bin (xdvi.bin) in auto mode\n", | |
| "update-alternatives: using /usr/bin/bibtex.original to provide /usr/bin/bibtex (bibtex) in auto mode\n", | |
| "Setting up lmodern (2.004.5-6.1) ...\n", | |
| "Setting up texlive-base (2021.20220204-1) ...\n", | |
| "/usr/bin/ucfr\n", | |
| "/usr/bin/ucfr\n", | |
| "/usr/bin/ucfr\n", | |
| "/usr/bin/ucfr\n", | |
| "mktexlsr: Updating /var/lib/texmf/ls-R-TEXLIVEDIST... \n", | |
| "mktexlsr: Updating /var/lib/texmf/ls-R-TEXMFMAIN... \n", | |
| "mktexlsr: Updating /var/lib/texmf/ls-R... \n", | |
| "mktexlsr: Done.\n", | |
| "tl-paper: setting paper size for dvips to a4: /var/lib/texmf/dvips/config/config-paper.ps\n", | |
| "tl-paper: setting paper size for dvipdfmx to a4: /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg\n", | |
| "tl-paper: setting paper size for xdvi to a4: /var/lib/texmf/xdvi/XDvi-paper\n", | |
| "tl-paper: setting paper size for pdftex to a4: /var/lib/texmf/tex/generic/tex-ini-files/pdftexconfig.tex\n", | |
| "Setting up tex-gyre (20180621-3.1) ...\n", | |
| "Setting up dvipng (1.15-1.1) ...\n", | |
| "Setting up texlive-plain-generic (2021.20220204-1) ...\n", | |
| "Setting up texlive-latex-base (2021.20220204-1) ...\n", | |
| "Setting up texlive-latex-recommended (2021.20220204-1) ...\n", | |
| "Setting up texlive-pictures (2021.20220204-1) ...\n", | |
| "Setting up texlive-fonts-recommended (2021.20220204-1) ...\n", | |
| "Setting up tipa (2:1.3-21) ...\n", | |
| "Setting up cm-super-minimal (0.3.4-17) ...\n", | |
| "Setting up texlive (2021.20220204-1) ...\n", | |
| "Setting up texlive-latex-extra (2021.20220204-1) ...\n", | |
| "Setting up cm-super (0.3.4-17) ...\n", | |
| "Creating fonts. This may take some time... done.\n", | |
| "Setting up rake (13.0.6-2) ...\n", | |
| "Setting up libruby3.0:amd64 (3.0.2-7ubuntu2.11) ...\n", | |
| "Setting up ruby3.0 (3.0.2-7ubuntu2.11) ...\n", | |
| "Setting up ruby (1:3.0~exp1) ...\n", | |
| "Setting up ruby-rubygems (3.3.5-2ubuntu1.2) ...\n", | |
| "Processing triggers for man-db (2.10.2-1) ...\n", | |
| "Processing triggers for mailcap (3.70+nmu1ubuntu1) ...\n", | |
| "Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...\n", | |
| "Processing triggers for libc-bin (2.35-0ubuntu3.8) ...\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libumf.so.1 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libhwloc.so.15 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero_v2.so.0 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtcm.so.1 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link\n", | |
| "\n", | |
| "/sbin/ldconfig.real: /usr/local/lib/libtcm_debug.so.1 is not a symbolic link\n", | |
| "\n", | |
| "Processing triggers for tex-common (6.17) ...\n", | |
| "Running updmap-sys. This may take some time... done.\n", | |
| "Running mktexlsr /var/lib/texmf ... done.\n", | |
| "Building format(s) --all.\n", | |
| "\tThis may take some time... done.\n", | |
| "Latex path: /usr/bin/latex\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "\n", | |
| "!apt-get update\n", | |
| "\n", | |
| "\n", | |
| "!apt-get install -y texlive texlive-latex-extra texlive-fonts-recommended dvipng cm-super\n", | |
| "\n", | |
| "import shutil\n", | |
| "print(f\"Latex path: {shutil.which('latex')}\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "cHovBX6D6J66", | |
| "outputId": "fbc39c09-3993-440c-9e79-d2401827996e" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "/usr/bin/latex\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import shutil\n", | |
| "print(shutil.which('latex'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "id": "E3MSlk9JlAO8" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from joblib import Parallel, delayed\n", | |
| "import multiprocessing\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "id": "OZ_i9H1RqwyQ" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "n_jobs=4" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "id": "9-z2oAzfsblE" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import cupy as cp\n", | |
| "xp = cp\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "id": "jQCNGTex3_-A" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "import pandas as pd\n", | |
| "np.set_printoptions(precision=4, suppress=True)\n", | |
| "plt.rcParams.update({\n", | |
| " \"text.usetex\": True,\n", | |
| " \"font.family\": \"serif\",\n", | |
| " \"text.latex.preamble\": r\"\\usepackage{amsmath,amssymb}\",\n", | |
| "\n", | |
| " \"font.size\": 16,\n", | |
| " \"axes.labelsize\": 20,\n", | |
| " \"axes.titlesize\": 20,\n", | |
| " \"xtick.labelsize\": 16,\n", | |
| " \"ytick.labelsize\": 16,\n", | |
| " \"legend.fontsize\": 16,\n", | |
| "})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "ee1OBUWGfMMp", | |
| "outputId": "fdeb8274-461c-4c97-e191-d7f9ced7ddee" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "Base TPM P0:\n", | |
| " [[0.5182 0.0409 0.1673 0.14 0.1336]\n", | |
| " [0.2182 0.2481 0.0743 0.2203 0.2391]\n", | |
| " [0.2022 0.0965 0.3248 0.0842 0.2922]\n", | |
| " [0.2028 0.2985 0.0747 0.2572 0.1668]\n", | |
| " [0.1393 0.0998 0.2995 0.3506 0.1109]]\n", | |
| "\n", | |
| "Feature f: [ 1. 1. 0. -1. -1.]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "m = 5 #state size\n", | |
| "rng = np.random.default_rng(123)\n", | |
| "P0 = rng.random((m, m)) #the TPM which is used to design all other TPMS\n", | |
| "P0 = P0 / P0.sum(axis=1, keepdims=True)\n", | |
| "assert np.allclose(P0.sum(axis=1), 1.0, atol=1e-8)\n", | |
| "f = np.array([1.0, 1.0, 0.0, -1.0, -1.0])\n", | |
| "print(\"Base TPM P0:\\n\", P0)\n", | |
| "print(\"\\nFeature f:\", f)\n", | |
| "init_dist = np.ones(m) / m" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "id": "GOlesvLNfPpZ" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def build_P_theta(theta, P0, f):\n", | |
| "\n", | |
| " # move inputs to GPU\n", | |
| " P0g = xp.asarray(P0)\n", | |
| " fg = xp.asarray(f)\n", | |
| "\n", | |
| " # tilted matrix\n", | |
| " tilde = P0g * xp.exp(theta * fg[xp.newaxis, :])\n", | |
| "\n", | |
| " # dominant eigenpair via SVD (GPU-safe)\n", | |
| " U, S, Vh = xp.linalg.svd(tilde.T)\n", | |
| "\n", | |
| " rho = S[0]\n", | |
| " v = xp.abs(U[:, 0])\n", | |
| "\n", | |
| " # construct normalized kernel\n", | |
| " Ptheta = (tilde * v[xp.newaxis, :]) / (rho * v[:, xp.newaxis])\n", | |
| " Ptheta = xp.maximum(Ptheta, 0)\n", | |
| " Ptheta = Ptheta / Ptheta.sum(axis=1, keepdims=True)\n", | |
| "\n", | |
| " # return CPU arrays for Markov simulation\n", | |
| " return cp.asnumpy(Ptheta), float(rho.get()), cp.asnumpy(v)\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "Qfm-eP-ohkuB", | |
| "outputId": "4429a77f-1283-4a23-a49a-8d5a16b08700" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "[[0.8604 0.0356 0.0629 0.0219 0.0193]\n", | |
| " [0.5368 0.3197 0.0414 0.051 0.0512]\n", | |
| " [0.5621 0.1406 0.2046 0.022 0.0707]\n", | |
| " [0.4889 0.3771 0.0408 0.0583 0.035 ]\n", | |
| " [0.4612 0.1731 0.2246 0.1092 0.0319]]\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "theta0 = 0.5\n", | |
| "P_null, _, _ = build_P_theta(theta0, P0, f)\n", | |
| "print(P_null)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": { | |
| "id": "8dKz-dtfjrqx" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class MarkovGenerator:\n", | |
| " def __init__(self, TPM, init_dist):\n", | |
| " self.TPM = TPM\n", | |
| " self.m = TPM.shape[0]\n", | |
| " self.state = np.random.choice(self.m, p=init_dist)\n", | |
| "\n", | |
| " def current_state(self):\n", | |
| " return self.state\n", | |
| "\n", | |
| " def step(self):\n", | |
| " self.state = np.random.choice(self.m, p=self.TPM[self.state])\n", | |
| " return self.state" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": { | |
| "id": "bUPHVTdLg-oW" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class SequentialTestFixedNull:\n", | |
| "\n", | |
| " def __init__(self, m, alpha, P_null):\n", | |
| "\n", | |
| " self.m = m\n", | |
| " self.alpha = alpha\n", | |
| " self.P_null = xp.asarray(P_null)\n", | |
| " self.reset()\n", | |
| "\n", | |
| " def reset(self):\n", | |
| " self.t = 0\n", | |
| " self.Nx = xp.zeros(self.m)\n", | |
| " self.Nxy = xp.zeros((self.m, self.m))\n", | |
| "\n", | |
| " def update_counts(self, u, v):\n", | |
| " self.Nx[u] += 1\n", | |
| " self.Nxy[u, v] += 1\n", | |
| "\n", | |
| " def empirical_Q(self):\n", | |
| "\n", | |
| " Qhat = xp.zeros((self.m, self.m))\n", | |
| "\n", | |
| " for x in range(self.m):\n", | |
| " if self.Nx[x] > 0:\n", | |
| " Qhat[x] = self.Nxy[x] / self.Nx[x]\n", | |
| " else:\n", | |
| " Qhat[x] = 1.0 / self.m\n", | |
| "\n", | |
| " return Qhat\n", | |
| "\n", | |
| "\n", | |
| " def compute_psi(self):\n", | |
| " return xp.sum(xp.log(np.e * (1 + self.Nx / (self.m - 1))))\n", | |
| "\n", | |
| " def compute_beta(self, psi):\n", | |
| " return xp.log(1 / self.alpha) + (self.m - 1) * psi\n", | |
| "\n", | |
| " def compute_Lt(self, Qhat):\n", | |
| "\n", | |
| " eps = 1e-15\n", | |
| "\n", | |
| " kl_rows = xp.sum(\n", | |
| " Qhat * xp.log((Qhat + eps) / (self.P_null + eps)),\n", | |
| " axis=1,\n", | |
| " )\n", | |
| "\n", | |
| " mask = self.Nx > 0\n", | |
| " return xp.sum(self.Nx[mask] * kl_rows[mask])\n", | |
| "\n", | |
| " def step(self, u, v):\n", | |
| "\n", | |
| " self.t += 1\n", | |
| "\n", | |
| " self.update_counts(u, v)\n", | |
| "\n", | |
| " Qhat = self.empirical_Q()\n", | |
| "\n", | |
| " psi_t = self.compute_psi()\n", | |
| " beta_t = self.compute_beta(psi_t)\n", | |
| "\n", | |
| " Lt = self.compute_Lt(Qhat)\n", | |
| "\n", | |
| " stop = Lt >= beta_t\n", | |
| "\n", | |
| " return stop, Lt, beta_t\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": { | |
| "id": "BDOIcUNbhvE9" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "\n", | |
| "\n", | |
| "class FieldsSequentialTestKT:\n", | |
| "\n", | |
| " def __init__(self, m, alpha, P_null):\n", | |
| " self.m = m\n", | |
| " self.alpha = alpha\n", | |
| " self.P_null = xp.asarray(P_null)\n", | |
| " self.reset()\n", | |
| "\n", | |
| " def reset(self):\n", | |
| " self.Nxy = xp.zeros((self.m, self.m))\n", | |
| " self.logM = 0.0\n", | |
| "\n", | |
| " def step(self, u, v):\n", | |
| "\n", | |
| " row_sum = self.Nxy[u].sum()\n", | |
| "\n", | |
| " qhat_uv = (self.Nxy[u, v] + 0.5) / (\n", | |
| " row_sum + self.m * 0.5\n", | |
| " )\n", | |
| "\n", | |
| " self.logM += xp.log(qhat_uv / self.P_null[u, v])\n", | |
| "\n", | |
| "\n", | |
| " self.Nxy[u, v] += 1\n", | |
| "\n", | |
| " stop = self.logM >= xp.log(1 / self.alpha)\n", | |
| "\n", | |
| " return stop, self.logM\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": { | |
| "id": "NUdgcom6hx-C" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "\n", | |
| "class FieldsModifiedJeffreys:\n", | |
| " def __init__(self, m, alpha, P_null, prior_alpha=0.25, b=0.3):\n", | |
| " self.m = m\n", | |
| " self.alpha = alpha\n", | |
| " self.P_null = xp.asarray(P_null)\n", | |
| " self.prior_alpha = prior_alpha\n", | |
| " self.b = b\n", | |
| " self.reset()\n", | |
| "\n", | |
| " def reset(self):\n", | |
| " self.Nxy = xp.zeros((self.m, self.m))\n", | |
| " self.logM = 0.0\n", | |
| " self.t = 0\n", | |
| " def _get_stationary_distribution(self, P):\n", | |
| "\n", | |
| " m = P.shape[0]\n", | |
| "\n", | |
| " A = xp.vstack([P.T - xp.eye(m), xp.ones(m)])\n", | |
| " b = xp.zeros(m + 1)\n", | |
| " b[-1] = 1.0\n", | |
| "\n", | |
| " pi, *_ = xp.linalg.lstsq(A, b, rcond=None)\n", | |
| "\n", | |
| " return xp.clip(pi, 1e-12, 1.0)\n", | |
| "\n", | |
| "\n", | |
| " def _stationary_derivatives(self, P, pi):\n", | |
| "\n", | |
| " m = P.shape[0]\n", | |
| "\n", | |
| " Z = xp.linalg.inv(\n", | |
| " xp.eye(m) - P.T + xp.outer(xp.ones(m), pi)\n", | |
| " )\n", | |
| "\n", | |
| " D = xp.zeros((m, m, m))\n", | |
| "\n", | |
| " for u in range(m):\n", | |
| " for y in range(m):\n", | |
| " e = xp.zeros(m)\n", | |
| " e[y] = pi[u]\n", | |
| " D[u, y] = Z @ e\n", | |
| "\n", | |
| " return D\n", | |
| "\n", | |
| "\n", | |
| " def _jeffreys_predictor(self, u, v):\n", | |
| "\n", | |
| " n_u = self.Nxy[u].sum()\n", | |
| " n_uv = self.Nxy[u, v]\n", | |
| " m = self.m\n", | |
| " k = m - 1\n", | |
| "\n", | |
| " eta_bar = (n_uv + 0.5) / (n_u + m / 2.0)\n", | |
| "\n", | |
| " if n_u < m:\n", | |
| " return eta_bar\n", | |
| "\n", | |
| " row_sums = self.Nxy.sum(axis=1, keepdims=True) + 1e-12\n", | |
| " P_hat = self.Nxy / row_sums\n", | |
| "\n", | |
| " pi = self._get_stationary_distribution(P_hat)\n", | |
| "\n", | |
| " try:\n", | |
| " Z = xp.linalg.inv(\n", | |
| " xp.eye(m)\n", | |
| " - P_hat.T\n", | |
| " + xp.outer(xp.ones(m), pi)\n", | |
| " )\n", | |
| " except xp.linalg.LinAlgError:\n", | |
| " return eta_bar\n", | |
| " _, svals, _ = xp.linalg.svd(Z)\n", | |
| " cond_Z = svals[0] / svals[-1]\n", | |
| " if cond_Z > 1e8:\n", | |
| " return eta_bar\n", | |
| "\n", | |
| " D = xp.zeros((m, m, m))\n", | |
| " for uu in range(m):\n", | |
| " for yy in range(m):\n", | |
| " e = xp.zeros(m)\n", | |
| " e[yy] = pi[uu]\n", | |
| " D[uu, yy] = Z @ e\n", | |
| "\n", | |
| " correction = 0.0\n", | |
| " denom = 2 * n_u + k + 1\n", | |
| "\n", | |
| " for y in range(m):\n", | |
| " delta = 1.0 if y == v else 0.0\n", | |
| " weight = P_hat[u, y] * (delta - P_hat[u, v])\n", | |
| "\n", | |
| " for t in range(m):\n", | |
| " correction += (\n", | |
| " k\n", | |
| " * weight\n", | |
| " * (D[u, y, t] / (pi[t] + 1e-12))\n", | |
| " )\n", | |
| "\n", | |
| " q = eta_bar + correction / denom\n", | |
| " return xp.clip(q, 1e-12, 1.0 - 1e-12)\n", | |
| "\n", | |
| "\n", | |
| " def _alpha_predictor(self, u, v):\n", | |
| "\n", | |
| " n_u = self.Nxy[u].sum()\n", | |
| " n_uv = self.Nxy[u, v]\n", | |
| "\n", | |
| " return (n_uv + self.prior_alpha) / (\n", | |
| " n_u + self.m * self.prior_alpha\n", | |
| " )\n", | |
| "\n", | |
| "\n", | |
| " def step(self, u, v):\n", | |
| "\n", | |
| " self.t += 1\n", | |
| "\n", | |
| " qJ = self._jeffreys_predictor(u, v)\n", | |
| " qA = self._alpha_predictor(u, v)\n", | |
| "\n", | |
| " mix_w = self.t ** (-self.b)\n", | |
| "\n", | |
| " qhat_uv = (1 - mix_w) * qJ + mix_w * qA\n", | |
| "\n", | |
| " qhat_uv = xp.clip(qhat_uv, 1e-12, 1.0 - 1e-12)\n", | |
| "\n", | |
| "\n", | |
| " self.logM += xp.log(qhat_uv / self.P_null[u, v])\n", | |
| "\n", | |
| "\n", | |
| " self.Nxy[u, v] += 1\n", | |
| "\n", | |
| " stop = self.logM >= xp.log(1.0 / self.alpha)\n", | |
| "\n", | |
| " return stop, self.logM\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": { | |
| "id": "SKFtTDuslOZ2" | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def run_single_trial(theta_q, alpha, P0, f, init_dist, m, T_max):\n", | |
| "\n", | |
| " # build alt TPM\n", | |
| " P_alt, _, _ = build_P_theta(theta_q, P0, f)\n", | |
| "\n", | |
| " gen = MarkovGenerator(P_alt, init_dist)\n", | |
| "\n", | |
| " our_test = SequentialTestFixedNull(m, alpha, P_null)\n", | |
| " fields_test = FieldsSequentialTestKT(m, alpha, P_null)\n", | |
| " mj_test = FieldsModifiedJeffreys(m, alpha, P_null)\n", | |
| "\n", | |
| " x_prev = gen.current_state()\n", | |
| "\n", | |
| " t_y = t_f = t_mj = T_max\n", | |
| "\n", | |
| " stop_y = stop_f = stop_mj = False\n", | |
| "\n", | |
| " for t in range(1, T_max + 1):\n", | |
| "\n", | |
| " x = gen.step()\n", | |
| "\n", | |
| " if not stop_y:\n", | |
| " stop_y, _, _ = our_test.step(x_prev, x)\n", | |
| " if stop_y:\n", | |
| " t_y = t\n", | |
| "\n", | |
| " if not stop_f:\n", | |
| " stop_f, _ = fields_test.step(x_prev, x)\n", | |
| " if stop_f:\n", | |
| " t_f = t\n", | |
| "\n", | |
| " if not stop_mj:\n", | |
| " stop_mj, _ = mj_test.step(x_prev, x)\n", | |
| " if stop_mj:\n", | |
| " t_mj = t\n", | |
| "\n", | |
| " if stop_y and stop_f and stop_mj:\n", | |
| " break\n", | |
| "\n", | |
| " x_prev = x\n", | |
| "\n", | |
| " return t_y, t_f, t_mj\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": { | |
| "id": "v4mO952RhFto", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 191 | |
| }, | |
| "outputId": "a3d1d883-39a8-43e7-fe99-ec982a347e63" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "\n", | |
| "=== STARTING alpha = 2.061153622438558e-09 ===\n", | |
| "\n", | |
| "=== STARTING alpha = 1.1253517471925912e-07 ===\n", | |
| "\n", | |
| "=== STARTING alpha = 6.14421235332821e-06 ===\n", | |
| "\n", | |
| "=== STARTING alpha = 0.00033546262790251185 ===\n", | |
| "\n", | |
| "=== STARTING alpha = 0.01831563888873418 ===\n" | |
| ] | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<IPython.core.display.Javascript object>" | |
| ], | |
| "application/javascript": [ | |
| "\n", | |
| " async function download(id, filename, size) {\n", | |
| " if (!google.colab.kernel.accessAllowed) {\n", | |
| " return;\n", | |
| " }\n", | |
| " const div = document.createElement('div');\n", | |
| " const label = document.createElement('label');\n", | |
| " label.textContent = `Downloading \"${filename}\": `;\n", | |
| " div.appendChild(label);\n", | |
| " const progress = document.createElement('progress');\n", | |
| " progress.max = size;\n", | |
| " div.appendChild(progress);\n", | |
| " document.body.appendChild(div);\n", | |
| "\n", | |
| " const buffers = [];\n", | |
| " let downloaded = 0;\n", | |
| "\n", | |
| " const channel = await google.colab.kernel.comms.open(id);\n", | |
| " // Send a message to notify the kernel that we're ready.\n", | |
| " channel.send({})\n", | |
| "\n", | |
| " for await (const message of channel.messages) {\n", | |
| " // Send a message to notify the kernel that we're ready.\n", | |
| " channel.send({})\n", | |
| " if (message.buffers) {\n", | |
| " for (const buffer of message.buffers) {\n", | |
| " buffers.push(buffer);\n", | |
| " downloaded += buffer.byteLength;\n", | |
| " progress.value = downloaded;\n", | |
| " }\n", | |
| " }\n", | |
| " }\n", | |
| " const blob = new Blob(buffers, {type: 'application/binary'});\n", | |
| " const a = document.createElement('a');\n", | |
| " a.href = window.URL.createObjectURL(blob);\n", | |
| " a.download = filename;\n", | |
| " div.appendChild(a);\n", | |
| " a.click();\n", | |
| " div.remove();\n", | |
| " }\n", | |
| " " | |
| ] | |
| }, | |
| "metadata": {} | |
| }, | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<IPython.core.display.Javascript object>" | |
| ], | |
| "application/javascript": [ | |
| "download(\"download_24d7a1c7-2bdd-4dcb-8fd3-4f6708b8c8ac\", \"alpha_sweep_three_tests_raw.csv\", 19313)" | |
| ] | |
| }, | |
| "metadata": {} | |
| } | |
| ], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import pandas as pd\n", | |
| "\n", | |
| "from google.colab import files\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "theta0 = 0.2\n", | |
| "theta_q_fixed = -0.6\n", | |
| "m = 5\n", | |
| "num_trials = 100\n", | |
| "T_max = 10**5\n", | |
| "\n", | |
| "alphas = np.exp(-np.array([20, 16, 12, 8, 4]))\n", | |
| "\n", | |
| "\n", | |
| "P_null, _, _ = build_P_theta(theta0, P0, f)\n", | |
| "P_alt, _, _ = build_P_theta(theta_q_fixed, P0, f)\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "avg_tau_ours = []\n", | |
| "avg_tau_fields = []\n", | |
| "avg_tau_mj = []\n", | |
| "\n", | |
| "std_tau_ours = []\n", | |
| "std_tau_fields = []\n", | |
| "std_tau_mj = []\n", | |
| "\n", | |
| "rows = []\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "for alpha in alphas:\n", | |
| "\n", | |
| " print(f\"\\n=== STARTING alpha = {alpha} ===\", flush=True)\n", | |
| "\n", | |
| " results = Parallel(\n", | |
| " n_jobs=n_jobs,\n", | |
| " backend=\"loky\",\n", | |
| " )(\n", | |
| " delayed(run_single_trial)(\n", | |
| " theta_q_fixed,\n", | |
| " alpha,\n", | |
| " P0,\n", | |
| " f,\n", | |
| " init_dist,\n", | |
| " m,\n", | |
| " T_max,\n", | |
| " )\n", | |
| " for _ in range(num_trials)\n", | |
| " )\n", | |
| "\n", | |
| " taus_y, taus_f, taus_mj = zip(*results)\n", | |
| "\n", | |
| " taus_y = list(taus_y)\n", | |
| " taus_f = list(taus_f)\n", | |
| " taus_mj = list(taus_mj)\n", | |
| "\n", | |
| " for trial, (ty, tf, tmj) in enumerate(results):\n", | |
| " rows.append(\n", | |
| " {\n", | |
| " \"theta_q\": theta_q_fixed,\n", | |
| " \"alpha\": alpha,\n", | |
| " \"trial\": trial,\n", | |
| " \"tau_ours\": ty,\n", | |
| " \"tau_fields\": tf,\n", | |
| " \"tau_modified_jeffreys\": tmj,\n", | |
| " }\n", | |
| " )\n", | |
| "\n", | |
| " avg_tau_ours.append(np.mean(taus_y))\n", | |
| " avg_tau_fields.append(np.mean(taus_f))\n", | |
| " avg_tau_mj.append(np.mean(taus_mj))\n", | |
| "\n", | |
| " std_tau_ours.append(np.std(taus_y))\n", | |
| " std_tau_fields.append(np.std(taus_f))\n", | |
| " std_tau_mj.append(np.std(taus_mj))\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "df = pd.DataFrame(rows)\n", | |
| "df.to_csv(\"alpha_sweep_three_tests_raw.csv\", index=False)\n", | |
| "files.download(\"alpha_sweep_three_tests_raw.csv\")\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "log_inv_alpha = np.log(1 / np.array(alphas))\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": { | |
| "id": "Fof6cNVog4ss", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/", | |
| "height": 577 | |
| }, | |
| "outputId": "b7a4e9af-0cb5-4b5f-d399-f6d84efa14b5" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "display_data", | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 1000x600 with 1 Axes>" | |
| ], | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAAIwCAYAAABJMwI2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyFhJREFUeJzs3Xl4G/WBP/73yJZvy5Js5yJ2HDkHhHDZDhRKS0NkSLulB9jJtrSwYYlNoF0Wdombbo+l7Tax237bbpeCnZZjodtN7Hb3V9ou1DKFlrZAEgFtSIHEyn0Qx5Isxaesmd8fY400HsmWbMkjx+/X8/iRNZc+MyMlevtzCZIkSSAiIiIiIiK6wBn0LgARERERERHRTGAAJiIiIiIiojmBAZiIiIiIiIjmBAZgIiIiIiIimhMYgImIiIiIiGhOYAAmIiIiIiKiOYEBmIiIiIiIiOYEBmAiIiIiIiKaEzL1LgARERHRbOR0OrF3715YrVbY7XaYzWa9i0RERJNgDTARUZrwer1obGxEfX09amtrUVtbi6amJni9XgBAU1OTvgUkIgBAR0cHamtr4Xa70dDQALvdjra2NjgcjoSOU1tbi8rKSlgsloT3JSKiqREkSZL0LgQR0VzncDjQ1NSEnTt3oqqqSlnudDrR1NSE5uZmVFdX40L+J7u+vh5OpxPd3d16FyUpLrTzIVlbWxuam5s197W6uhoAsG/fvoSP19jYiM7OTtjt9qSVk4iIomMNMBGRzrxeL+rr69He3q4KvwBQVVWFzs5O1NfXx9y/ra0NLpcr1cVMOafTCZfLpdR4p7N4rvlsOh+KX2NjI5qbm6Ous9lsCR9vw4YN0y0SERElgAGYiEhnbW1tqKmpmfDLc2tra8x1F0oNY3d3Nzwez6zoRxnPNZ9N50PxcTqdAKD5QxUg1/y2t7fPdJGIiChBDMBERDrbs2fPpCFpogF2LqS+g7MlLMZ7zWfL+VB83G43gKnV9BIRUXpgACYiSgOhmqWJROsf6HK54tqXkofXnIiIaPZiACYi0lltbS1cLhdaWlom3G7btm2q516vF7W1taksGo3Da06UOh0dHaivr0dlZSUEQYDFYkF1dbVqNHwiouniKNBERGmgsrISLpcLDQ0NaGpqmrSJZVtbG9rb2+F2u+F0OlFVVQWr1aqs7+zs1Ozj9Xqxfft2VFZWwuv1ore3F5WVlWhoaNBsV19fD5fLBZfLBY/HA5fLhV27dinrAWjKOdX9gPAfAdxuN7q6upQ+lpHHdLvdygi7HR0dAOR+ti6XC+3t7TGbG7tcLrS2tqK4uBjd3d1obGxEVVUVWlpaYDab0d7ejtbW1qRe8+meT6g8Xq8XbW1tqnXNzc1R+6ACckuCXbt2Kfc48nzj0dTUhI6ODrhcLpjNZthsNs2oxvX19Up5q6qqlPWh6xk6z9D60Ps6UaFzjbyv0d6voddL9L2dyPupo6MDra2tyr0f3xojdDwA8Hg8Mc+pqakJxcXFAIDe3l6sWbMGdrsdFosl5ijQk93TZH1G4r3W032PReN0OpVzqKqqQnNzM+x2O7xeLzZv3oyOjg6YzWbVZwmQr2djYyObpBNRYiQiItJdd3e3ZDabJQASAMlsNkt1dXVSa2ur5PF4Yu7X2dkpAZC6u7snPH5nZ6dUVVWlOVZra6tkt9ujvsbWrVslAFJra6u0b98+1br29nbJbDZLnZ2dSduvublZAqDZJ/KYnZ2dUnNzs2adzWaLet7t7e2SzWZTnV9VVZVkt9tVrzvZ9YsU7zWfzvmYzWbJ4/Fo1rW3t0sAot6v1tZWqaqqSrXM4/FINptNam9vj/PsZDabTXOsSFVVVapjxnoPVVVVac4hHqH7Nv4aR7sm03lvJ/p+Ct37aMesq6uTYn2t2rdvn2Sz2TTvhX379kkNDQ1KWcZL5J5O9zMSz7VO5nss8vVD/+5Ffi4jhf5tDH0uJEm+dvF8DomIxmMAJiJKI6Ev7aEvhKGfhoaGqNvHE8Y8Hs+E22zdulWqq6uLeezW1tao+zU0NKi+kE53v9AX2miBMbQuWjm7u7ujBojQeY8vR7wBNpZ495/u+URbJ0lS1HOaKAy0trZKZrN5wrJG2ydW0JMkSfV+3LdvX8zgEi2MTSZ0/tECVeiPCqHznOp7eyrvp9D5xLouobJFYzabY34eQgFw/Oslek+nck6JXOtkv8ciX398uB0vFO4BSFu3bpUkSX4Pxgr1REQTYR9gIqI00tDQgM7OTkiShH379inNEtva2tDY2DilY27evBlVVVUxmwk2Njaio6Mj5sBO0ZplAlD65TU1NSV1v4lE638baoY8vo9gaKTmmpqaqOUKNRHV00TnE9m8OpLZbNZMw7R582bY7fao93jDhg3wer0JnW+o6Wuo+XUkp9OpKbfD4Yg6L3Ks98BEmpqaYDabUVdXF3W92WxWrs1039uJvJ8mE6t5cej9HqsZeKymw1O9p4mcU6LXOpnvMQCq+c0bGhpiXsM1a9Yov4deY/fu3VP6N4SIiAGYiChNVVVVYevWrfB4PLDb7Whra5vS6MMdHR2aEBgp9IU21Fc3XjabDTabLeFpmKa6X2jf8UJfmkN9MGOtH6+3tzfh10+2ic6nsrIy7uM4nc6YITB0vD179iRUtoaGBmzfvl2zfNeuXarAFAqg1dXVSuCMtHXr1oRe1+l0xny/hj4PoXOa7nt7Ku+nRDkcjin1j53qPU3knBK51sl+jzmdTtW/Zxs3boy5beTrut1uJfhOpW85EVGm3gUgIprrXC7XpIO4tLe3w2KxYNeuXQl9mQ7Vyk02H63ZbJ5SuJ5OkJ3KfrFqRaMJ1T6O/+IeOs90GM15ovOJdw7h0Pm4XK6oNbYA0NraOmFQjKaxsRFtbW1wOBzKtfR6vcogTpH27duHzZs3o62tTSlDVVUVdu7cmXD4Cw2EFM92wPTe24m8n6Yq2qBZ8ewDTO2eJnJO8V7rVLzHIv8oYTabJyxH5D32er1oaWmJOtAfEVE8GICJiHTW3NyM1tbWCbcxm82w2+1xh1Sv1xt3gAptn6war3RhNpuVWszIGsvQ86k0z51Iotc8WUKvWVVVldQasVDNbmhEXkBudhrtNUKjaQNyjWdopODq6mq0trYmXK5ozamnaja+t1N1T6OJ51qnojyRrztZcB4f6hsaGpL++SWiuYNNoImIdOZyueLqbxialiYeu3fvBhBuOhjP8ROtIQTir0FK1n6JMpvNaGxsRGNjI1paWtDY2Ig1a9YoYS2ZQtd8poXucTJDY0hTUxMcDofy/unu7taE/FDgDbHb7di6dSv27duHrVu3JtxPMzR10mRS/d5OFpvNlnAAT+U9jZTotU5VeSb7t2D8e459f4loOhiAiYjSQKxmhZFcLheqq6sn3W58ILDb7RM2Nw6tixyQJh6h+X4TrYmZ6n5T1dDQgNbWVmzdulV5TLZEB0xKtrq6uklbB0ylyXnkYFjRBr8C5HOP1ce2ubkZXq83oesTmv91on1C55Kq93YyTdZyI9Z5puqeRkrkWie7PJEDW0VrVh9J788XEV1YGICJiNJAU1PThF8uQ7Vw45sfRquZGd+nuLW1FS6XK+bxW1tbYbfbYwbSWPuFRqhubm5O6n7JNJV+zZOJ55rPtJ07d8LlcsUMIB0dHVPu7xpqRr5r166Y75GJ/oBjs9kSahoeen/EquVra2tTrvV039szIXQ+sUZIjnXPUnlPx5ctnmud7PJEdkuYaPAsh8Oh+cNf6LMXb+sZIqJIDMBERGmgvb0dra2typQpkRwOBxobG6M227XZbKiqqlKtixy0KLRNe3s76uvrNU0YOzo64HK5JmwSvGfPHs1+bW1t2L17N7q6upK230TNREProm0z0Rfg0IixoRFnQ7XP0xHPNY9V1vHrEj2fWNuYzWZ0dnaivr5eEwadTifcbveUm5w3NjbGHPwqUktLi2bZVKfv6urqwu7duzWhMXTvQqFsqu/tqV7/0LpE9gv1j25qatKU0eFwKKORj79vid7TqZ5TvNc62e+x0L0D5HvV0tKilDM02FZoZPHm5mbV1F+dnZ1wOByorKzE3r17435NIiIAECRJkvQuBBHRXNbU1KTUhjocDqVWK1SbEhqIKFYtmtfrRX19PWw2GyorK2G326N+EXW5XGhublam1+nt7UVxcXHMJsEOhwO1tbXo7u5W1bKFvrBv27Ytapmmsl9tba0STm02G+x2O1pbW5Vzi1wX+uJsNpuVL+Mulwtmsxk1NTVobW1VvrQ7nc6YzcanOkoxMPk1T8X5hPrjOp1OZV1TU5MqeEfOr1xZWan0G59uDWh1dTW6urpi3m+v14uqqip0dHTAbDYrQcZms8WcY3Yy488ldE+jHS/e9/ZUr7/VakV9fT327t0Lr9er7NfZ2Qmn04mmpiZlXVVVlbJftPMJ3ZfQtqH3UOhejb/Ok93T6X5GEr3WyX6PhY63d+9epUY39EemjRs3qsrgdDqxefNmZWT3pqYmToVERAljACYioqgig2wizXunul+ydXR0oLOzE01NTZov+y6XC62trWhra0N7e/uUQxoRERHNLpwGiYiILjgulwubN2+Gx+PRrAvNOdra2ora2lo0NTUxABMREc0R7ANMREQXHIfDEdfUN/FOA0NEREQXBgZgIiK64Njt9rgGx4k2eBURERFduBiAiYgoqtBARolOMzLV/ZIpNHBYaDCqaDo6OtDa2jrhCNhERER0YeEgWEREpBIaVTbaiLep2C+VQoNdAVBN49Pd3Y3a2lr2/SUiIppjGICJiIiIiIhoTmATaCIiIiIiIpoTOA1SmhBFEadOnUJhYSEEQdC7OERERERERLOCJEnw+/1YtGgRDIaJ63gZgNPEqVOnUFZWpncxiIiIiIiIZqXjx49j8eLFE27DAJwmCgsLAcg3zWQy6VyaMFEU4fF4YLFYJv1rCqUG74H+eA/0x3ugL15//fEe6I/3QH+8B/pK5+vv8/lQVlamZKqJMACniVCzZ5PJlHYBeHR0FCaTKe3e6HMF74H+eA/0x3ugL15//fEe6I/3QH+8B/qaDdc/nq6k6VnyBDQ1NUEQBDQ1NcW1vcPhQG1tLSorKyEIAiwWC2pra9HR0ZHSfYmIiIiIiEhfs7IG2OVywel0Yvv27XA6nQDkcDqZxsZGtLW1qZZ5vV44HA44HA7Y7faY81VOZ18iIiIiIiLS36yqAW5sbIQgCKisrER9fb0SfuPR0tKiCrDt7e3weDzo7OyE2WwGIIfoxsbGpO5LRERERERE6WFWBWC32w0AsNlssNvtCe0b2US6ubkZdXV1MJvNsNvt2Llzp7Kura0NLpcrafsSERERERFRephVAbi9vR2SJKG7uzuh5sbj++jW1dVN+DyyOfV09iUiIiIiIqL0MasC8FTt2bNH9dxqtWq2CTVlBoB9+/YlZV8iIiIiIiJKH3MiAI/vKxwZWEMig21kLe509iUiIiIiIqL0MScCcDwig22or/FM7EtEREREREQzY04E4OmEUgZaIiIiIiKiC8OsnAd4OqI1YR7P6/Umfd/xhoeHMTw8rDz3+XwAAFEUIYpiXMeYCaIoQpKktCrTXMN7oD/eA/3xHuiL119/vAf64z3QH++BvtL5+idSpjkXgOMJqLGC7nT2HW/79u14+OGHNcs9Hg9GR0fjOsZMEEURfr8fkiTBYJgTDQbSDu+B/ngP9Md7oC9ef/3xHuiP90B/vAf6Sufr7/f74952zgXgdLFt2zY8+OCDynOfz4eysjJYLBaYTCYdS6YmiiIEQYDFYkm7N/pcwXugP94D/fEe6IvXX3+8B/rjPdAf74G+0vn6Z2bGH2vnRACONnXReJG1u5HbT2ffiWRnZyM7O1uz3GAwpN0bShCEtCzXXMJ7oD/eA/3xHuiL119/vAf64z3QH++BvtL1+idSnvQqeYrU1taqnkdryuxyuZTfq6qqkrIvERERERERpY85EYDHh9LIwApoQ21k6J3OvkRERERERJQ+5kQAttvtque7du1SPXc4HDG3n86+RERERERElD7mRAAGgK1btyq/t7S0oKOjA4AcYDdv3qysq6urg81mS9q+RERERERElB5mVQB2OBywWCwQBAGCIKjWOZ1OZXl1dbVm3+bmZtTV1SnP6+vrIQgCamtrlWbMVVVVaG9vT+q+RERERERElB5mVQAG4puLN5b29nZ0dnbCbrcrNbVmsxl2ux3t7e3Yt29fSvYlIiIiIiIi/c2qaZDsdjskSZr2MabaT3c6+xIREREREZG+Zl0NMBEREREREdFUMAATERERERHRnMAATERERERERHPCrOoDPBeIoghRFPUuhkIURUiSlFZlmmt4D/THe6A/3gN98frrj/dAf7wH+uM90Fc6X/9EysQArLNHHnkEjzzyCILBIADA4/FgdHRU51KFiaIIv98PSZJgMLDBgB54D/THe6A/3gN98frrj/dAf7wH+uM90Fc6X3+/3x/3toI03WGVKSl8Ph+Kiorg8XhgMpn0Lo5CFEV4PB5YLJa0e6PPFbwH+uM90B/vgb54/fXHe6A/3gP98R7oK52vv8/ng8ViQV9f36RZijXAacZgMKTdG0oQhLQs11zCe6A/3gP98R7oi9dff7wH+uM90B/vgb7S9fonUp70KjkRERERERFRijAAExERERER0ZzAAExERERERERzAgMwERERERERzQkcBIuIiIiIiIgAAGd9QzjrH9YsF0URPl8/TIMZUQedmleYjXmmnJko4rQwABMREREREREA4CevHsP3uw4mvN/965bjgdoVKShRcjEAExEREREREQDg9mvKUbtqvmb5nY+/it7+AIrzjXjqrms06+cVZs9E8aaNAZiIiIiIiIgAAPNMOVGbMhszDMrj6ouKZrpYScNBsIiIiIiIiGhOYAAmIiIiIiKiOYEBmIiIiIiIiOYEBmAiIiIiIiKaExiAiYiIiIiIaE7gKNBpRhRFiKKodzEUoihCkqS0KtNcw3ugP94D/fEe6IvXX3+8B/rjPdAf74G+pIjHdLsHiZSHAVhnjzzyCB555BEEg0EAgMfjwejoqM6lChNFEX6/H5IkwWBggwE98B7oj/dAf7wH+uL11x/vgf54D/THe6AvaSxkSqIIt9utc2nU/H5/3NsyAOvsvvvuw3333Qefz4eioiJYLBaYTCa9i6UQRRGCIMBisfAfGp3w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bZyengIAqtUqHjx4IDiqcIeHh6JDmEu1Wg3Hx8dwXRcLC1y5TATWgXisA7Fmofzv3z+baXnaE+Bpjn1WsA7EYx2INcry9459dHSEe/fudb3f8fFx19syARbs2rVruHbtGo6OjrC8vIxIJIKlpSXRYYVaWVkRHcJcqtVqkCQJkUhkar94TjvWgXisA7FmofxPTk7w2muvQZIkSJIkOpy+uK47tbHPCtaBeKwDsUZd/t6xl5aWcPHixa73O3eu+7SWCfCEWVhYmNgvF5Ma1zyQJGmi3xvzgHUgHutArGkvfy/uaU2A63tcpjH+WcA6EI91INY4yt87bq/tTU/b9hwVERERERER0RRiAkxERERERERzgQkwERERERERzQVeA0xEREQ0Bm+cvIE3vv9Gz/tdfvQyHn/08RFEREQ0f5gAExEREY2B8bcGfvevf7fn/V742At44WMvjCAiIqL5wwSYiIiIaAwSP5LAp57+VNP9z5vPo3qvisgjEXxJ+1LT45cfvTyG6IiI5gMTYCIiIqIxuHzxMi5fbE5mH1542P/3xy79WOi+9cuPEBFR/5gAExERERHRWFiWhf39faysrEDTNMiyLDqkidGqbEzThOM4LK8h4SzQRERERDQUuVwOsVgMkUjEv+m63nSLRqOBbUah/nksy+prP9M0RxJboVBALBaDJEmQJAm6rve0f7FY9PeNxWJIpVIjidMzjDIpFovQdR2Hh4dIJpPQNA2FQmFkZQwMty4zmYx/vPqyLxaLA8dZKBT8stnY2ICmabh586b/eQIARVFw5coV2LY98PPNPZcmwt27d10A7t27d0WHEvDp3/+w+5Evf8T99O9/WHQoc+v09NR944033NPTU9GhzC3WgXisA7Fmofzffvtt17Is9+233xYdSpNP73z6rK3d+XTLbWq1mnt6eurWarUxRta/dDrtAnCz2WzLbSqViquqqgvArVargcfi8birKMrAcWSzWReAWy6Xe9ovn8+7ANxSqeTfN4o6yOfzrqZpoWXQjve6NE0bWiydhJWJp1N95fP50MdVVXVVVe06hn7qoF3c/QLgyrI8lGO1KhtZll0Abj6f97fr5708TOM4D/V7ru4ll2IPMBERERENVTQaBYC2wzUVRUG5XIaiKE29WpZlwbZtOI4zUByapvW138bGxkDP262VlRUkEgkAZ72A3bBtG6qqAmhfvsPWrkw61VcqlUI2mw19TFGUYYTX0ijqUpZlrKysDHwcx3Falk0ymQTwXvzJZBLVatWve+ofE2AiIiIiEiaTyeDw8DBwX6VSQbVanYvrHVdXV6GqKvL5fFfbm6bZd2I/Ku3qyxt+Hpa4lctlGIYx6vAmlvfDT1jZRKNRyLIcKNN5+DyMAxNgIiIiIoHuPbgX+HfeaJoWel3jPH3Zv3r1Kmzb7upa5UF7xUelVX15P26Muqd3GrFsxGACTERERCTIwfcPcHz/GABwfP8YB98/EBzR+CmKMrFJ3bh4w1079QJbljVxvb9E04YJMBEREZEAruvi1//q1+HibI1fFy5+469+Q3BUo1csFpt6fOPxuKBoJoMsy9A0DTs7O223M02T14ASDYjrANOZ4++d3Zq4AKSzf1/9RvPDi0+e3YiIiKgnf/adP8Pu3+8G7jP/3sSffudP8VM//FOCohq9xut9geAQUF3XYds2Dg8Psbu7G5rwWZaF7e1tRKNROI6DSqWCVCrVV3KYyWRw6dIlAMDBwQHW1tba9rLmcjl/6Sav51pVVdi27ffk9iOVSsE0zbbX+PY6LNxxHNy8edMvp4ODA0Sj0Y5x9lImreqrWCwin8/79d241JO3DwBUq9XQYzfW88svv4xkMukvDTRI3KPU6f3ZqWwA+JOK1T/mXS+dSCRg2zZs24brujBNE5ZloVKpAGgeSdApnkwmE/hhSlVVlMvlwDFSqZQ/UZuiKP5z5XI5/305zM/DSPU3QTUNm/BlkL7+m677xaWm26d/70fPlmb4vR8Nfdz9+m+KiXeOzMLyI9OOdSAe60CsWSj/SVsG6c2TN91P/NEn3I9++aPuR778Ef/20S9/1P3EH3/CffPkzcD207YMkrdki7eEi6darbqqqrqVSqXt/u2WL8rn801L51SrVVdRFNcwjMD95XK55XHK5bKrKErTY+Vy2U0mk6HLIK2vr7uHh4dNx1JVte2ST60YhhF4fgBuPB5vuW19ubXb1nVdt1QquaqqNi2v5C29FLbsUq9l4mlXX6VSqeUyT/F43G2VjoTV8+HhoasoiruzszOUuPsly3LLZZ96eX+2KxvvM9SKt9RYqVTyj+u91n7jURSl7XJWqqq629vb/nmo1fuo38+D645nGST2AE+YWq2GWq02/idWPwv8SMivzX/xy8A7VeB9l1Hb/OPmxx97PyAi3jlSq9Xguq6Y9wUBYB1MAtaBWLNQ/l7sruvCdd2O23/lm1/BV775lYGf9+Y/u4m1J9f8v/e+t4frf3Edd9+5i3dr7/rDnz0uXBzfP8Znip+B/Ijc13Ouvn8Vt/75rcB9v/i1X8TfHf0dLp67iK/+7Ff7Om4vvDLOZrN+r9Xh4aHfq9WpHtbX1/3j1G9nWRZSqRRefvnlwP3Ly8tIp9PY3NzEc8891xRH2POtr6/j1q1bePbZZwOPPfvss9A0DYVCIbCfN0GVLMtNx7p16xYsy+rqvVXPO7633+bmJra2tkKPU6lU8NxzzzU9Frat13P48ssvY3l5ObDN5uYmXn75ZWxubjYNue61TOr3q389YfGFPba6uopisdh0f6t6lmUZL774IpLJZGDYfL9xD6rbuPt5f9Y/FkbTNORyOXzta19DNpuF67q4desW4vF44D3bSzzJZBLXr19vOaN3LBbzy93rIW58fwH9fx7qX2+vOVEv2zIBFuz27du4ffs2Tk9PAZwNAXnw4IGASM4DF55uureGh/x/D0Mex7sAQoYy0fDUajUcHx/DdV0sLPCyfRFYB+KxDsSahfK/f/8+gO4T4Lfuv4XXT14f+HnfOX0n8HzvnL6DN77/Rsf97tfu9/381XvVptd48P0DvH7yOt738PuGngSE8Z7DS1aAs6Rsf38fV69e7VgPrRKDZDKJ9fV1XLlypWn/RCKB559/HoZh+F/SWx3n+vXrcBwHm5uboXE8++yzTfu5rovd3V1UKpWmWXvX19eHkgDH43FsbW0hn88Hho86jhP6mluV4+bmJlRVDd0HOCvHD33oQyiXy/4w2H7KpD6Ofh5bXl4ObFMfX6t63tjYwAsvvODX8yBxD6qXuHt5fzY+1u65FUXx/7+8vIz19XX/717j2dzcxPXr11EoFPDiiy8GtrcsKxC3+w9Dr4f5eah/XUdHR7h3r/uZ8Y+Pj7velgmwYNeuXcO1a9dwdHSE5eVlRCIRLC0tiQ7L533RWVhYGMqC39S7Wq0GSZIQiUSm9ovntGMdiMc6EGsWyv/k5ASvvfYaJEmCJEkdt3/s/GN44uITAz/vhYcuBJ7vwkMXcPnRyy17gD3nF8733QMceSTS9BovPXoJb737Fi6eu9jV6x+U9xz15R2JRKDrOq5fv96xHsL2B86+hG9ubobu612Xu7+/j0Qi0fY43rWqrWII2y8Wi0FRFKytrSGRSEDX9UAvZDqdblckLZ+n/jl0XYcsy9ja2kIqlfK3Mwwj9HrKVuV4586dluUEnK0xCwA7Ozv+9bT9lMkwH6vXrp69nkmvngeJe1C9xN3L+7PxsXbPvba21nKbXuOJRCKIx+MoFApN7+ednR2/p1mSpJF8Hupf19LSEi5evNj1fufOdZ/WMgGeMAsLC5P15UJ679+JimvOSJI0ee+NOcM6EI91INa0l78Xd7dfgj/74c/isx/+7NDj+PEf+HF8fePrOPj+AX7mv/8M3nr3rUASLEHC4vlFfPVnv4pLj17y7/d6XPr9Ev8HP/kHQ4m/W+2+2Eej0b4SYG8I8iuvvIKtra3Q/fL5PFZXV5uSh7BEWtO0npIm13Wxt7eHVCqFra0tPwZVVbG1tdXXBFyNCTBw1muXy+Vw9+5dP9m7e/dux1g93kRGkUjzDyH1ZFnGSy+9FCjfXstkmI952tWz9zn40pe+5Cd+g8Q9qG7j9nT7/mx8rN1zt6rnfuIBzia70nUdL730UuA9/fjjjzc9f7lc9oftD+PzUP+6em1vetmWCTARERHRmF169BJ+9RO/ihf/R3CYoQsXX/jEFwLJ76zRNK3n2YyB93r+VFUVNrusLMvY2dmBJEn+zLvb29uIxWJNw5b7lUqlkMvl/F4427ZHsvSR4zihM3KL1q6eB/0haJREvT9bjdDsNx5N06AoCm7evOlfv18oFEKXKpNl2d9mVJ+HUZjOn3GJiIiIptxP/vBPYv2D64H7tA9qM70EEtD7Uj4e7zrDxjWE+z1Wr8mf9wXfo2ka0uk0yuUy0uk0MpnMwHF5samq6i9l025ZpFb7A+8tSdPO6upqYL9JSIh7redRxW1ZFiKRiL/0T72wsh3m+3MYBoknlUqhWCz6rzPsOt9xfR5GgQkwERERkQCSJOELP/EFSP9wvZEECb/yE78iOKrJFo/HA1+6w5im2fE4mqa1PU5YguM4TtOsyZ5sNgvHcbpKOruRSqVg23bH19qKpmlty8F7zLv209un1zIZlV7qeVRxm6YJx3Ga1sOtX+u20bDen8PSbzxez+3Ozg5s28ba2lrTNo7jYHt7O/SYw/48DBsTYCIiIiJBLj16CYvnFwEAi+cXZ3ro8zBsbW3Btu2WSUSxWOxq0s5sNgtZllEsFkMfb3X8VtdSAmc9br32brfqudzY2ABwNitvfS9tt/L5fNsEOp/PQ9O0QM9yv2UyCr3U86ji1jQNyWTS74lvPF79JGX9xD0O/cYjyzI0TUM2m0WxWAwd/gwgtHfc08/nYVyYABMREREJ9Mi5RwL/zgKv56ffHqBWiaEsyyiVSkgkEk3JnWVZODw8DPTMtTuOYRjIZDJNQ0RN08TBwYF/zEa5XK7pvkKhEJoQdVIqlUJ70bwExHGc0J7GTuWrKAoMw0AikWh6fcViEbZt+9du1j9nv2XSbgiyF2PYNq3i76WeB4m7HVVVIcty4JiO4yCTySCdTocOS+/1/dlP2XSzb7/x1PPK0yu/Vob5eRgXyR3HYnDUkbcM0t27d4Usg/TGyRuh6xI+bz6P6r0qIo9E8CXtS02PX370Mi5fvDyOEOdWrVbD4eEhVlZWpnb21WnHOhCPdSDWLJT/yckJvvWtb+GZZ57paWmNcVg31vH6yet44uIT2E3shm4zyZP/1CsUCjAMA/v7+/4XdC9RMAyjqx4hXddh2zZs24aiKNA0rakXzktEgLNZpWVZ9rdtdRxFUVAqlUKP4x3DSzgVRQkcd3d3F3t7e6hWq4jFYrhz546/PXCWcLbqJWtVTtls1k+uFEXxe2U9pmnCtu3AREK2bfvDo719vUmLGsvI2z6bzfrLHh0cHODSpUttl6jppUxkWW5ZX47jIJFI+O+F+jqwLAuZTMZ/TFVVrK6udqzn5eVlXLlyBbquN30Oeo27l7ryjr+3t4erV692rOtO789eysZ7LJ/PQ1GUlvtmMpmW14p383kJE4lEUC6X/et/689Du7u7fhkXi8WBPg/1+j1X95JLMQGeEKIT4N/5xu/gd//6d3ve74WPvYBf+vgvjSAi8szCF89pxzoQj3Ug1iyUPxNgGhTrQDzWwXhlMhlks1n/73GU/zgSYC6DRACAxI8k8KmnP9V0v1tzcffoLpaXliEtNL/RLz/K3l8iIiIiolniOI4/cmDWMAEmAMDli+FDmWu1Gg6l6f7Vn4iIiIiIuuetQz2LmNEQERERERHNqWKxCF3XRYcxNuwBJiIiIhqDVhNOvlt71//3mwffbHr88qOX8fijj488PiKaT3t7e4HZrnO53Mz2/gJMgImIiIjGwvhbo+2Ek9V7VVz9k6tN97/wsRfwwsdeGGVoRDTHbty4AeC9JY06zQ497ZgAExEREY1BqwknO+GEk0Q0SrIsB2Z7nnVMgHuQy+X8NbTaMQyj77WviIiIaDa1mnCyG1y1kohoODgJVg8aF08fdDsiIiIiIiIaH/YAD0BV1ab7VlZWkEqlBERDRERERERE7TAB7pOiKCiXy6LDICIiIiIioi5xCDQRERERERHNBSbARERERERENBeYAPfJtm3ouo5IJIJoNApd1/21s4iIiGiyPPTQQwCA09NTwZEQEVEr3jnaO2ePAq8BHoBpmgAAx3Fg2zZM08T29jZ2d3chy7LY4IiIiMh3/vx5nDt3DsfHx1hcXBQdDhERhTg5OcHCwgIefvjhkT0He4D7JMsyDMNAtVoNLHtkWRY2NzcFRkZERESNJEnC8vIyHMfhmrpERBPq6OgIi4uLWFgYXZrKHuAeKIri/393d9dfBknTNMTjcRSLRQBAsViEbduB7Ru98847eOedd/y/j46OAAC1Wg21Wm0U4felVqvBdd2JimnesA7EYx2IxzoQa1bKPxKJ4PDwEN/5znfwQz/0Q5AkSXRIfWECLx7rQDzWgVijKP+DgwO89dZb+OAHP9hze9PL9kyAe5DP55FKpaAoStMQ57W1NT8BBs6GRyeTyZbHunnzJn7t136t6f5qtYoHDx4MLeZB1Wo1HB8fw3Xdkf4SQ62xDsRjHYjHOhBrlsp/ZWUFBwcHODk5gSzLeOyxx0Z6rRkREbX37rvvolqt4u7du3jsscfgui4ODw97Osbx8XHX2zIB7pHX69tJpVJp+/iNGzfw+c9/3v/76OgITz/9NCKRCJaWlgaKcZhqtRokSUIkEpn6Lz3TinUgHutAPNaBWLNU/isrK35P8MHBAV5//XXRIRERzb1HHnkEH/jAB3Dp0qW+RuecO9d9WssEeEgae4Qdx2m7/YULF3DhwoWm+xcWFibuy4UkSRMZ1zxhHYjHOhCPdSDWLJX/4uIiFhcX4bou7t+/PxUzQ9dqNRwdHWFpaWkm6mAasQ7EYx2INaryP3fuHB5++OGBLkvpJR4mwD1od11vY8IbjUbHEBERERH1S5Kk0B+jJ1GtVsO9e/dw8eJFfvEXhHUgHutArFkp/+mNfMxM00Q0GoVlWaGP7+3tBf7udqg0ERERERERjQcT4C5lMhkAwPr6elMSbFlWYAIsWZaxuro61viIiIiIiIioPQ6B7pKmabAsC47jIBaLQVVVrK6uYn9/vykhzmazTdcEExERERERkVhMgLuUzWYBALlcDsBZr2/YcOh0Ot12+SMiIiIiIiISg0Oge5DNZlGpVJBMJv1rfGVZhqqqSCaTqFQqfqJMREREREREk4U9wD1SFAX5fF50GERERERERNQj9gATERERERHRXGACTERERERERHOBCTARERERERHNBV4DPCFc1wUAHB0dCY4kqFar4fj4GOfOncPCAn8vEYF1IB7rQDzWgVgsf/FYB+KxDsRjHYg1yeXv5VBeTtUOE+AJcXx8DAB4+umnBUdCREREREQ0fY6Pj7G8vNx2G8ntJk2mkavVanj11VexuLgISZJEh+M7OjrC008/je9+97tYWloSHc5cYh2IxzoQj3UgFstfPNaBeKwD8VgHYk1y+buui+PjYzz11FMde6fZAzwhFhYW8IM/+IOiw2hpaWlp4t7o84Z1IB7rQDzWgVgsf/FYB+KxDsRjHYg1qeXfqefXM1mDt4mIiIiIiIhGhAkwERERERERzQUmwNTWhQsX8MUvfhEXLlwQHcrcYh2IxzoQj3UgFstfPNaBeKwD8VgHYs1K+XMSLCIiIiIiIpoL7AEmIiIiIiKiucAEmIiIiIiIiOYCE2AiIiIiIiKaC0yAqaNUKgVJkvxbLpcTHdLMsywLqVQKsVgMkUgEkiQhGo2y7MekUCgEyj4SiSAWi7H8RyCTyUCSJGQyma62N00Tuq4jGo36daPrOorF4ogjnV291kEul2s6N6VSKTiOM9pAZ1ivdVCPbfRw9FMHbKuHp9fyZzs9PIOc06e2TXaJ2iiVSi6AwE1VVdFhzbR4PN5U5t5NlmXR4c08RVFalr9XB9VqVXSYU61SqbiGYbiqqvZ0Xkkmk23rRtO0MUQ/G/qpg0ql0vHzkc/nx/QKpl+/n4N6bKMHM0gdsK0eXL/lz3Z6OAY9p09zm8wEmNqqPymxcR09TdMCZa0oiptOp91sNuvG43FXURTRIc60xi808XjcTafTTSd5fgb6066x7FSm2Ww2sL1hGG61WnVLpZIry7J/fzKZHNOrmU6D1EHjFyVFUQJlX1831NogddCIbXR/Bq0DttWDGaT82U4PzyDn9Glvk5kAU0uGYQR+xeFJZbTy+XzgZJLNZkWHNFeq1Wrb8q//PABwK5WKoEinl/fFRVGUpi+Qnc4rrJvh6LcO6r/saJoW6F1pPHex96u9QT4H9dhG92+QOmBbPbh+y5/t9PAMek6f9npgAkwteb8MKYoS+KCwcR2N+l/MWMbj1ziUsFQqBR5vbHjZyzW4br/0dNOY1j/OYbjd6zUBbpXcNvbK8PPRvX4TYLbRw9NLHbCtHr5uy5/t9PAMck6fhTaZk2BRqEKhANu2AQDZbBayLIsNaMaZphmYbCCVSokLhgAAKysrbR/3Ph80ent7e4G/w+qm/hxVLpdHHdLcSafTiMfjSCaToY9fvXo18HdjndFwsY0Wg231ZGE73b9Bzumz0CYzAaZQ3ix8iqIgHo8Ljmb2WZYV+FtRFJimiVgs5s/Il0gkmraj4VldXQ383dhwHh4eBv7WNG3kMdGZxvd92Jf9+gbYNM1RhzSXDMNANpsNfayxTjgj9GixjRaDbbVYbKeHq99z+iy0yUyAqUkmk/Hf6K0+GDRcjb+mWZYFXdf9k4xt2ygWi4jFYigUCiJCnHmyLAd+Cc1kMoHyr/+lX9M0qKo69hiptfoGuPFLEI1e4xeiWCwmKJLZxzZaHLbVYrGdHp9Bz+mT3iYzAaYAx3H8NdRUVeUvy2PS2FuSyWSQzWZRrVZRqVQCJ/FUKsVhPSOSz+f94YS2bQd+1fd+wUyn0yiVSoIjnS+T2HhSUD6f9//f+CWVhodttFhsq8VjOz0e7c7ps9AmMwGmgPoFyPnLsjjxeBzpdBqyLENRFGxtbQUen/gFxmcUr7MTr5s64PDb8crlcoEv+oZhCIxmtrGNnixsqycP2+nB9XJOn9Y2mQkw+Wzb9ofsaJrGaycEapx8oHEYD3/ZHA1d1/3hhYqioFwuw3VdVCoVaJrm975Eo1HRoc6tbhpSfgEaH9M0A0mZYRhsO0aEbfTkYVs9fmynR6vXc/q0tslMgMnHX5bFaTw5KIrSdnsOqxq+YrEYmKghn8/7X2YURQkMB7JtO/B5IZpH3vWPHsMwOCR3hNhGi8e2Wiy206M1T+f0c6IDoMnhDdWRZTlwEgGA/f19///eRAPRaBTpdHqsMc6qTlP50+htb28H/m78YtP49yTOajiruvl81P8Kzc/T6FmWhfX1dQBnbcbu7i4nnBkxttHi8dwiFtvp0enlnD4LbTITYAIQ/JXScZy2sxfWP85Z9oZD1/VAmXeaYGASh5PMmk4n7Em8pmVW6boe+CLjOE7TZ6D+HMZz0mjZto319fXAEESek0aLbfRkYFs9WdhOD0ev5/RZaJM5BJoAnP1q1mkoTyNZlnlyH5LG6ysap59vHEbVa11RZ41l2umLzSSe0GdVY1k3fh4av+TUD+Gi4fJmXXUcB5qmoVKpsB0YA7bRk4FttVhsp4evn3P6LLTJTIDJV6lU4Lpu6K1++nNVVeG6LqrVKk/uQ+LNIOm5efNm4ATSOJPkJJ5Mpt3a2lrg78Yhho09Lnzvj0/jl87GYXCNw9w4OdBo1H9RisfjnOBnzNhGi8e2Wiy208PV7zl9Jtpkl6gLyWTSBeACcFVVFR3OTCqVSn4ZA3BlWXbj8birqmrgfpb/6ISVdVgdyLLsVqtV0eFOvV7e1+l0OrC9YRiu6559bmRZ9u+Px+PjCH1mdFsHlUolUM7tbrIs+/VDnQ3j/M42ejC91AHb6uHrpdzYTg/HoOf0aW+TmQBTV9i4jkc+n297ElIUhSf0EapUKq6iKB0bglKpJDrUqdTYMLa6tTrHxOPxvvaj9/RbB9lstqsvSt4tmUwKeoWTb9DPQRi20b0ZtA7YVg9mkPJnOz0cwzinT3ObzCHQ1JX6YTwTOZRhRiSTSVQqFcTj8cDQHVVVkc1meb3diCmKgkqlgnw+D03T/DpQFAWapiGbzaJarfIzMIBBJiUxDAOlUilQN7IsQ9M0GIaBcrk8pChnWz91oGlaT+ceDv1sb9iT87CN7t0gdcC2enD9lj/b6eEYxjl9mttkyXVdV3QQRERERERERKPGHmAiIiIiIiKaC0yAiYiIiIiIaC4wASYiIiIiIqK5wASYiIiIiIiI5gITYCIiIiIiIpoLTICJiIiIiIhoLjABJiIiIiIiornABJiIiIiIiIjmAhNgIiIiIiIimgtMgImIiIiIiGguMAEmIiKaQ7lcDplMRshz27aNQqEwlufJZDJjeS4iIpoOkuu6ruggiIiIaHx0XYdpmojH4zAMQ9jzj+MrSDQahW3bSCaTyOfzI38+IiKabOwBJiIiGpDjOIhGo5AkCZFIBLZtiw6ppUQiAdM0oShK18lvJpOBJElD6TG2bdtPvsfBe42FQkFYjzcREU0OJsBEREQDMk3TT3odx4FlWYIjCpfJZFAsFgGgY2+obdsoFouIxWLI5XIAzl7noLLZLADgxo0bAx+rG6qqIplMAjgb9j2M10BERNOLQ6CJiIgGVCwWkUgk/L8NwxhbD2e3HMdBJBIBACiKgkqlErpdKpVqec2sqqool8sDxRGJRLCystLy+Ueh/rXLsoxqtTq25yYiosnCHmAiIqI5sLm56f+/3VDgw8NDAGdJsqZpQ42hUCjAcZyxD0WWZdn/QcJxHL9Hm4iI5g8TYCIiohnnDWf2bGxstNzWMAy4rotKpYJSqTTUOLxh196Q5HG6evWq//+bN2+O/fmJiGgyMAEmIiKacfXJr6IokGV57DFYlgXLsoQkvwACQ9IdxwmUCRERzQ8mwERERGOSy+WQSCT8GaOj0Sh0XUcmk4HjOC33KxQK0HUdkUjEn2k6Go0il8v5a+rGYjFEIpHQ4b3b29v+/4c9rLlbXu9vL8OfvWur62fYjsViHcurFUVR/P8Pu3ebiIimAxNgIiKiEbMsC9Fo1J+F2Zsx2lsSKJfL4cqVK6G9krquI5VKwTRNP+lzHAe2bSOTySAajfozKzuOg729vcD+jbNSR6PREb3K1hzHQaFQgKqqgSS0Fa+8EokEbNtGPp+H67p45ZVXoCiKX16Ns21nMpm2S1Cpqur/n7NBExHNJybAREREI7a+vu4nZqqqolKp+NfZ1k/O5CV8nkKhEEjU6q/PbezJLZfLcF23aW3f/f39wN/dJKDD5s0q3c3SR97SS7ZtQ9M0lMtl/7XKsgzDMCDLMhzHwfr6uv+jgGVZHSe3qn/tk7xWMxERjQ4TYCIiohFqHK67u7vrJ2KKosAwjEBilkql/P/XJ7OqqvrJsqIoge1s2245JLjxfhEJcD6fD8zE3Ipt2/5yUl6yG8a7jthxHH9Cq3w+D0VR2r6+S5cuBf6e1PWaiYhodJgAExERjVD9sGZN00InoKrvza3v8fWWJAKAlZWVwD6Nx2ns6fU09nSOewIs0zRh23ZXk1/Vr6WcTCZbxrq2tub/3yvfnZ2djtcXNx6vvnyJiGg+MAEmIiIaofoEtFVC13hdrrdPfW9mY7LWbc/uwcFBt6GOhDf5VX2PdRhvlmhP/bJFjRrLxUt8OyXZjT8i9DORFhERTTcmwERERCPSmGA1JmCteAmwruv+fZZl+b2dtm0H1rJtN/RXZJLnLTekaVrHodf1M1XLshyYsKpR/Q8JjuMgl8u1HC7dDnuAiYjmzznRARAREc2qfofcesliMpmEYRj+sOj6IcL1vF7WbmIYJy9J72bpo/qe8tXV1bbbNv6QkEwmu1reqbH8RVwPTUREYrEHmIiIaIS6mXm4Uqm03Ofw8BDpdBrxeDyQzCqKgnQ6HTojdL3GiZ/G2SNcKBQgy3LPaw+36/0FmpP6XtYWrtdtjzwREc0O9gATERGNkKqqfuJrWRZs2w4kuI7jYGdnJ7C9x7ZtWJaF1dXVvob4As29nOMa9lssFuE4jr9GcSdra2v+EO/GpL1Rv0l8ux8aiIhoPrAHmIiIaIS2trYCf+u67s+MbJpmYC3bxu29HspCoQBJkppukUgEuq4jk8m07F1u7E0d1/q33rDsbmZ/BhBYImlvb6/ldqZpIhaLBe7zXlO75aCA5sRZ5PBwIiISgwkwERHRCHnr2XrJlm3b0HUd0WgUuq4HZj7O5/OBhLXT8GHHcWCaJnK5HKLRKAqFQtM2iqIEEr3GXtBGpmkiEon4SXY9y7L8+xuT0Hpect84bLsdb01k4Kz3OJfL+QmrbdsoFAqIxWJIpVLIZrOB11EqlWCaJqLRaMvloIDgUlG9DssmIqLZwASYiIhoQPWzHIfNYByPx1GtVpFOp5u21TQN6XQa1Wq1qbe0WCwG1gXuJJVKhfaA1k8qVZ9wtzLodcLdLn3UyCunZDKJ7e1tXLlyBZIkQdd1lEol3LhxA5VKBfF4HIqioFwuQ1VV5HI5pFIp5PP5tolt/WtvNaEYERHNNsl1XVd0EERERBTkOA4ikQgA+MleY2+q1wO8ubnpJ62GYQSGEwNniXR9wjfqpj8SiWBlZaVjb/M42bYdWG+5Wq1yCDQR0RxiDzAREdEEahyuG5asybKMeDyOGzdu+PeFTXLVOBS5l17lXhUKBTiO0/fMzKPiTbAFNJcHERHNDybAREREE6h+iZ5OCWt9T2urpX3qZ2Nut27woLxjb2xsjOw5+lH/mrudmZqIiGYPE2AiIqIJpKpqYOKsRCLRdP2uZVlIpVL+5FftJs1KJpP+tcfFYnEks0FblgXLspBMJieqh9WbdRsIlgMREc0fXgNMREQ0oSzLalomqZ1SqdR2Eqj662Dj8Xjfawu34iXj3uRUkyIajcK2baiqinK5LDocIiISiAkwERHRBHMcBzs7OzAMA/v7+4FkWJZlrK6uQtf1rntdTdOErusAwifMGiTOSCQycUlmJpNBLpdrOZEYERHNFybAREREc8Y0TX9W6Gq1OpRjOo6DK1euwDCMiVlj1+vxVhQFpVKJQ5+JiIgJMBEREREREc0HToJFREREREREc4EJMBEREREREc0FJsBEREREREQ0F5gAExERERER0VxgAkxERERERERzgQkwERERERERzQUmwERERERERDQXmAATERERERHRXGACTERERERERHPh/wMEwVInzmC+ZwAAAABJRU5ErkJggg==\n" | |
| }, | |
| "metadata": {} | |
| } | |
| ], | |
| "source": [ | |
| "import matplotlib.ticker as mticker\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "plt.rcParams.update({\n", | |
| " \"text.usetex\": True,\n", | |
| " \"font.family\": \"serif\",\n", | |
| "\n", | |
| " \"text.latex.preamble\": r\"\"\"\n", | |
| " \\usepackage{amsmath,amssymb}\n", | |
| " \\usepackage{bm}\n", | |
| " \\usepackage{sfmath}\n", | |
| " \\boldmath\n", | |
| " \"\"\",\n", | |
| "\n", | |
| "\n", | |
| " \"font.size\": 20,\n", | |
| " \"axes.labelsize\": 26,\n", | |
| " \"axes.titlesize\": 28,\n", | |
| " \"xtick.labelsize\": 20,\n", | |
| " \"ytick.labelsize\": 20,\n", | |
| " \"legend.fontsize\": 20,\n", | |
| "})\n", | |
| "\n", | |
| "plt.figure(figsize=(10, 6))\n", | |
| "avg_tau_ours = np.asarray(avg_tau_ours)\n", | |
| "avg_tau_fields = np.asarray(avg_tau_fields)\n", | |
| "avg_tau_mj = np.asarray(avg_tau_mj)\n", | |
| "\n", | |
| "std_tau_ours = np.asarray(std_tau_ours)\n", | |
| "std_tau_fields = np.asarray(std_tau_fields)\n", | |
| "std_tau_mj = np.asarray(std_tau_mj)\n", | |
| "\n", | |
| "plt.errorbar(\n", | |
| " log_inv_alpha,\n", | |
| " avg_tau_ours,\n", | |
| " yerr=std_tau_ours,\n", | |
| " fmt=\"o-\",\n", | |
| " linewidth=2,\n", | |
| " capsize=5,\n", | |
| " label=\"Our Algorithm\",\n", | |
| ")\n", | |
| "\n", | |
| "plt.errorbar(\n", | |
| " log_inv_alpha,\n", | |
| " avg_tau_fields,\n", | |
| " yerr=std_tau_fields,\n", | |
| " fmt=\"s--\",\n", | |
| " linewidth=2,\n", | |
| " capsize=5,\n", | |
| " label=\"Fields Add 1/2\",\n", | |
| ")\n", | |
| "\n", | |
| "plt.errorbar(\n", | |
| " log_inv_alpha,\n", | |
| " avg_tau_mj,\n", | |
| " yerr=std_tau_mj,\n", | |
| " fmt=\"d-.\",\n", | |
| " linewidth=2,\n", | |
| " capsize=5,\n", | |
| " label=\"Fields Modified Jeffreys\",\n", | |
| ")\n", | |
| "\n", | |
| "plt.xlabel(r\"$\\log(1/\\alpha)$\", fontsize=20)\n", | |
| "plt.ylabel(r\"$\\mathbb{E}_Q[\\tau_\\alpha]$\", fontsize=20)\n", | |
| "plt.title(\n", | |
| " r\"Stopping time vs confidence $\\alpha$\",\n", | |
| " fontsize=20,\n", | |
| ")\n", | |
| "\n", | |
| "plt.yscale(\"log\")\n", | |
| "\n", | |
| "ax = plt.gca()\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "yticks = [5, 10, 20, 30, 50, 100]\n", | |
| "ax.set_yticks(yticks)\n", | |
| "\n", | |
| "ax.set_yticklabels([rf\"$\\mathbf{{{y}}}$\" for y in yticks])\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "ax.set_ylim(\n", | |
| " min(yticks) * 0.9,\n", | |
| " max(yticks) * 1.1,\n", | |
| ")\n", | |
| "\n", | |
| "plt.grid(True, which=\"both\", alpha=0.25)\n", | |
| "\n", | |
| "plt.tight_layout()\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "leg = plt.legend(\n", | |
| " loc=\"lower right\",\n", | |
| " frameon=True,\n", | |
| " prop={\"weight\": \"bold\", \"size\": 20},\n", | |
| ")\n", | |
| "\n", | |
| "leg.get_frame().set_alpha(0.95)\n", | |
| "\n", | |
| "plt.show()\n", | |
| "\n" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "accelerator": "GPU", | |
| "colab": { | |
| "gpuType": "T4", | |
| "provenance": [] | |
| }, | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "name": "python" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Xet Storage Details
- Size:
- 131 kB
- Xet hash:
- 3cbb7407425a9724ad34570b81ad49b5a4484c07b88776841e2d1f4bd705dc91
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.