--- /srv/reproducible-results/rbuild-debian/r-b-build.c4lpv2WS/b1/pandas_2.2.3+dfsg-9_arm64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.c4lpv2WS/b2/pandas_2.2.3+dfsg-9_arm64.changes ├── Files │ @@ -1,5 +1,5 @@ │ │ - 4c6a9131d2b24bf80a0951f33a88e98b 10794620 doc optional python-pandas-doc_2.2.3+dfsg-9_all.deb │ - cdd2f20d52917edbf0c7c56aca8e2e8d 34776572 debug optional python3-pandas-lib-dbgsym_2.2.3+dfsg-9_arm64.deb │ - 441b67d24cf446b81d658bbd4a85700e 3877148 python optional python3-pandas-lib_2.2.3+dfsg-9_arm64.deb │ + e597f4391b778ed2167ef4805c6b1773 10793864 doc optional python-pandas-doc_2.2.3+dfsg-9_all.deb │ + a8edc16622ec86de69c8275bed447999 34776136 debug optional python3-pandas-lib-dbgsym_2.2.3+dfsg-9_arm64.deb │ + e6e6b1396f5ee91a540716aa9087d9ab 3875984 python optional python3-pandas-lib_2.2.3+dfsg-9_arm64.deb │ 6f05a87b66230b056112f4c7c394692b 3096828 python optional python3-pandas_2.2.3+dfsg-9_all.deb ├── python-pandas-doc_2.2.3+dfsg-9_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2025-03-29 13:01:52.000000 debian-binary │ │ --rw-r--r-- 0 0 0 147380 2025-03-29 13:01:52.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 10647048 2025-03-29 13:01:52.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 147376 2025-03-29 13:01:52.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 10646296 2025-03-29 13:01:52.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -6256,61 +6256,61 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 210184 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/series.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 48665 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/style.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 48657 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/testing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 53295 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/window.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 244 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/release.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 269 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/reshaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 17010 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/search.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 2358647 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/searchindex.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 2358599 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/searchindex.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 259 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/sparse.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 244 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/style.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 255 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/text.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 256 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/timedeltas.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 277 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/timeseries.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 272 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/tutorials.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 171380 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/10min.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 283835 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 283836 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 436075 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/basics.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 36646 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/boolean.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 217515 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/categorical.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18313 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/cookbook.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 66125 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/copy_on_write.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 160414 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/dsintro.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 81376 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/duplicates.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 115461 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 115453 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 107882 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/gotchas.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 300850 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/groupby.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 59715 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 395484 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/indexing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 41778 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/integer_na.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1145820 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/io.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 208885 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/merging.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 178690 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/missing_data.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 112153 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/options.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 147524 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/pyarrow.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 162660 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/reshaping.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 115581 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/scale.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 115579 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/scale.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 65863 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/sparse.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 698240 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 87857 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 87843 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 165302 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/text.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 100947 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/timedeltas.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 486621 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/timeseries.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 204461 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/visualization.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 141947 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/window.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 270 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/visualization.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 107681 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10569 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/index.html.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 83987 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.10.0.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 66492 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.10.1.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 82312 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.11.0.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 104316 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.12.0.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 222516 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.0.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 222518 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.0.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 89385 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.1.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 243730 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.14.0.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 83262 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.14.1.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 252303 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.0.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 68280 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.1.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 75115 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.2.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 145199 2025-03-29 13:01:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.16.0.html │ │ │ ├── ./usr/share/doc/python-pandas-doc/html/searchindex.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -21550,15 +21550,14 @@ │ │ │ │ │ "007200": 2184, │ │ │ │ │ "007207": [2184, 2214], │ │ │ │ │ "007717": 2199, │ │ │ │ │ "007824": 15, │ │ │ │ │ "007952": 2207, │ │ │ │ │ "007996": 2186, │ │ │ │ │ "007f": 203, │ │ │ │ │ - "008": 2193, │ │ │ │ │ "008182": 2204, │ │ │ │ │ "008298": 2186, │ │ │ │ │ "008344": 2207, │ │ │ │ │ "008358": 2207, │ │ │ │ │ "008500": 15, │ │ │ │ │ "008543": [102, 1158], │ │ │ │ │ "008943": [102, 1158], │ │ │ │ │ @@ -21581,14 +21580,15 @@ │ │ │ │ │ "010026": 2191, │ │ │ │ │ "010081": 15, │ │ │ │ │ "010165": 2199, │ │ │ │ │ "010589": 2193, │ │ │ │ │ "010670": [102, 1158], │ │ │ │ │ "0108": 2257, │ │ │ │ │ "010903": 2207, │ │ │ │ │ + "011": 2193, │ │ │ │ │ "011111": [182, 760], │ │ │ │ │ "011342": 2207, │ │ │ │ │ "011351": 2207, │ │ │ │ │ "011374": 2195, │ │ │ │ │ "011470": 2207, │ │ │ │ │ "011736": 2186, │ │ │ │ │ "011829": 2207, │ │ │ │ │ @@ -21633,15 +21633,14 @@ │ │ │ │ │ "016": 2193, │ │ │ │ │ "016009": 15, │ │ │ │ │ "016287": 2210, │ │ │ │ │ "016331": 2210, │ │ │ │ │ "016424": [16, 19], │ │ │ │ │ "016692": [2184, 2195, 2214], │ │ │ │ │ "01685762652715874": [624, 1215], │ │ │ │ │ - "017": 2193, │ │ │ │ │ "017106": 2207, │ │ │ │ │ "017118": 2199, │ │ │ │ │ "017152": 2186, │ │ │ │ │ "017263": 2207, │ │ │ │ │ "017276": 2191, │ │ │ │ │ "017587": [2184, 2195, 2214], │ │ │ │ │ "017796": 2207, │ │ │ │ │ @@ -21651,15 +21650,15 @@ │ │ │ │ │ "018193": 2207, │ │ │ │ │ "018409": 2207, │ │ │ │ │ "018601": [2184, 2214], │ │ │ │ │ "018808": 2207, │ │ │ │ │ "018904": 2207, │ │ │ │ │ "018941": 2207, │ │ │ │ │ "018993": 2214, │ │ │ │ │ - "019": 2207, │ │ │ │ │ + "019": [2193, 2207], │ │ │ │ │ "019449": 2207, │ │ │ │ │ "019794": 2197, │ │ │ │ │ "01t00": [2163, 2199, 2210, 2235, 2246, 2261], │ │ │ │ │ "01t01": 2210, │ │ │ │ │ "01t03": 2210, │ │ │ │ │ "01t05": [909, 2210, 2235], │ │ │ │ │ "01t07": 1280, │ │ │ │ │ @@ -21820,14 +21819,15 @@ │ │ │ │ │ "0396": [2184, 2186], │ │ │ │ │ "039624": 2207, │ │ │ │ │ "039926": 2210, │ │ │ │ │ "03c": 2208, │ │ │ │ │ "03t00": [2199, 2210, 2235, 2261], │ │ │ │ │ "03t05": [909, 2210], │ │ │ │ │ "04": [26, 27, 29, 31, 80, 84, 88, 114, 127, 148, 149, 157, 177, 178, 207, 213, 230, 292, 294, 306, 307, 317, 330, 332, 345, 402, 423, 528, 529, 592, 595, 600, 640, 644, 646, 658, 659, 671, 685, 688, 703, 725, 726, 732, 755, 756, 781, 788, 804, 985, 1075, 1145, 1269, 1270, 1280, 1289, 1344, 1393, 1452, 1498, 1500, 1741, 1776, 1815, 2184, 2185, 2186, 2188, 2195, 2197, 2199, 2201, 2204, 2205, 2207, 2209, 2210, 2212, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2222, 2223, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2235, 2238, 2240, 2241, 2246, 2249, 2250, 2261, 2264, 2271, 2283, 2298], │ │ │ │ │ + "040": 2193, │ │ │ │ │ "0400": [2222, 2271], │ │ │ │ │ "040039": 2216, │ │ │ │ │ "040247": 2207, │ │ │ │ │ "0405": [182, 760], │ │ │ │ │ "040775": 2207, │ │ │ │ │ "040863": 2186, │ │ │ │ │ "041": [1447, 2200, 2232], │ │ │ │ │ @@ -21941,15 +21941,14 @@ │ │ │ │ │ "056780": 2210, │ │ │ │ │ "056842": 2207, │ │ │ │ │ "056909": 2210, │ │ │ │ │ "057165": 2207, │ │ │ │ │ "057490": 2193, │ │ │ │ │ "057737": 2235, │ │ │ │ │ "057974": 2257, │ │ │ │ │ - "058": 2193, │ │ │ │ │ "058006": 2199, │ │ │ │ │ "058176": 2207, │ │ │ │ │ "0582": 2202, │ │ │ │ │ "0582158": 2202, │ │ │ │ │ "058373": 2207, │ │ │ │ │ "058534": 2210, │ │ │ │ │ "058615": 2207, │ │ │ │ │ @@ -22252,20 +22251,20 @@ │ │ │ │ │ "0n": [1489, 2298], │ │ │ │ │ "0px": 2207, │ │ │ │ │ "0rc0": 13, │ │ │ │ │ "0th": [26, 249, 882, 1202, 2185, 2197, 2199, 2235], │ │ │ │ │ "0x00": 2294, │ │ │ │ │ "0x40": 2294, │ │ │ │ │ "0x7efd0c0b0690": 3, │ │ │ │ │ - "0xffff3f5e92b0": 2230, │ │ │ │ │ - "0xffff717fdf80": 2210, │ │ │ │ │ - "0xffff731e84b0": 2199, │ │ │ │ │ - "0xffff7c545a80": 2197, │ │ │ │ │ - "0xffff9bb39d30": 2246, │ │ │ │ │ - "0xffffa0207b60": 2195, │ │ │ │ │ + "0xffff1b6f52b0": 2230, │ │ │ │ │ + "0xffff41642480": 2210, │ │ │ │ │ + "0xffff4301edf0": 2199, │ │ │ │ │ + "0xffff5c472a10": 2197, │ │ │ │ │ + "0xffff753074d0": 2246, │ │ │ │ │ + "0xffff77d624e0": 2195, │ │ │ │ │ "1": [1, 2, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 39, 42, 44, 46, 49, 54, 56, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 148, 149, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 177, 178, 180, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 319, 321, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 337, 339, 341, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 361, 363, 364, 366, 367, 370, 371, 372, 375, 376, 377, 378, 380, 382, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 411, 412, 414, 415, 416, 417, 419, 420, 421, 422, 423, 424, 425, 426, 427, 429, 430, 431, 432, 433, 434, 435, 436, 437, 440, 446, 449, 450, 451, 455, 456, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 473, 475, 476, 477, 478, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 495, 496, 498, 499, 500, 501, 502, 503, 505, 509, 510, 511, 514, 516, 519, 525, 531, 532, 533, 534, 536, 540, 543, 545, 547, 548, 549, 551, 557, 558, 561, 565, 568, 569, 571, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 589, 590, 591, 592, 593, 594, 595, 596, 597, 599, 600, 601, 602, 603, 604, 609, 613, 614, 615, 616, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 671, 673, 674, 675, 676, 678, 679, 680, 681, 682, 683, 684, 686, 688, 689, 690, 691, 692, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 709, 710, 711, 712, 713, 714, 715, 716, 717, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 743, 744, 747, 748, 749, 750, 751, 752, 753, 755, 756, 758, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 812, 813, 814, 815, 816, 817, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 891, 892, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 912, 913, 914, 916, 918, 921, 923, 927, 930, 938, 939, 940, 941, 942, 943, 945, 946, 947, 948, 949, 950, 951, 952, 953, 957, 959, 960, 970, 977, 979, 981, 984, 994, 997, 1003, 1004, 1005, 1006, 1011, 1012, 1021, 1031, 1032, 1033, 1034, 1035, 1036, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1091, 1092, 1093, 1095, 1096, 1097, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1118, 1119, 1121, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1347, 1348, 1350, 1354, 1355, 1358, 1359, 1362, 1363, 1368, 1369, 1372, 1373, 1374, 1375, 1377, 1380, 1381, 1382, 1383, 1384, 1385, 1387, 1388, 1389, 1390, 1391, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1413, 1414, 1415, 1416, 1417, 1419, 1421, 1422, 1423, 1424, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1453, 1454, 1455, 1457, 1458, 1459, 1460, 1462, 1463, 1464, 1466, 1467, 1468, 1469, 1470, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1482, 1483, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1502, 1506, 1507, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1524, 1525, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1560, 1561, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1578, 1580, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1598, 1600, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1620, 1621, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1637, 1638, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1657, 1659, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1677, 1679, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1699, 1701, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1720, 1722, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1741, 1742, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1758, 1759, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1776, 1777, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1793, 1794, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1815, 1816, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1839, 1840, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1857, 1858, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1876, 1877, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1894, 1895, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1912, 1913, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1930, 1931, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1947, 1948, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1964, 1965, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1982, 1983, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2018, 2019, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2036, 2037, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2054, 2055, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2073, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2090, 2091, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2108, 2109, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2127, 2128, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2145, 2146, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2163, 2164, 2165, 2166, 2184, 2185, 2186, 2187, 2188, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2208, 2209, 2210, 2211, 2212, 2214, 2216, 2217, 2218, 2220, 2222, 2224, 2225, 2227, 2228, 2230, 2232, 2238, 2240, 2241, 2243, 2245, 2246, 2249, 2257, 2259, 2260, 2263, 2298, 2307, 2309, 2310], │ │ │ │ │ "10": [2, 3, 5, 6, 9, 10, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 68, 69, 74, 80, 83, 84, 85, 88, 91, 94, 97, 98, 102, 105, 109, 111, 113, 119, 120, 121, 129, 133, 137, 138, 139, 140, 142, 144, 160, 163, 171, 173, 187, 188, 189, 190, 192, 193, 199, 202, 203, 204, 206, 207, 212, 213, 215, 216, 217, 220, 221, 222, 223, 228, 230, 234, 244, 258, 265, 268, 275, 276, 278, 284, 286, 288, 289, 293, 295, 296, 298, 300, 302, 316, 317, 318, 322, 323, 324, 329, 330, 331, 345, 395, 423, 427, 440, 445, 509, 514, 516, 534, 536, 544, 546, 551, 554, 556, 560, 562, 568, 569, 570, 571, 572, 577, 583, 592, 594, 595, 596, 600, 620, 621, 627, 635, 639, 641, 645, 647, 648, 649, 650, 652, 670, 671, 673, 677, 678, 679, 681, 684, 685, 686, 695, 696, 708, 713, 714, 738, 741, 763, 764, 765, 766, 768, 781, 787, 788, 798, 804, 808, 836, 837, 838, 839, 840, 841, 842, 843, 844, 849, 852, 863, 868, 874, 889, 895, 902, 904, 912, 923, 940, 942, 943, 944, 948, 957, 959, 960, 970, 982, 984, 995, 997, 1001, 1003, 1004, 1005, 1011, 1016, 1020, 1021, 1069, 1071, 1072, 1075, 1109, 1154, 1158, 1162, 1163, 1173, 1174, 1175, 1180, 1185, 1189, 1195, 1200, 1205, 1219, 1220, 1230, 1239, 1246, 1250, 1256, 1261, 1264, 1267, 1284, 1288, 1291, 1292, 1294, 1297, 1298, 1299, 1306, 1308, 1319, 1324, 1343, 1344, 1345, 1350, 1367, 1387, 1391, 1403, 1411, 1416, 1418, 1420, 1421, 1440, 1447, 1451, 1452, 1458, 1462, 1467, 1473, 1478, 1479, 1482, 1485, 1488, 1490, 1491, 1498, 1598, 1657, 1677, 1699, 1720, 1741, 1758, 1894, 1912, 2018, 2185, 2186, 2188, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2234, 2235, 2238, 2240, 2241, 2246, 2249, 2254, 2257, 2260, 2261, 2264, 2265, 2271, 2277, 2283, 2289, 2290, 2294, 2298, 2302, 2307, 2308], │ │ │ │ │ "100": [3, 15, 17, 22, 30, 68, 97, 98, 111, 118, 132, 135, 141, 142, 145, 159, 161, 175, 182, 192, 202, 207, 212, 213, 233, 273, 303, 345, 359, 360, 427, 577, 587, 588, 620, 621, 655, 709, 717, 760, 781, 787, 788, 900, 1345, 1391, 1398, 1447, 1457, 1472, 1473, 1488, 1490, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2223, 2225, 2226, 2230, 2231, 2232, 2235, 2241, 2242, 2246, 2249, 2302, 2307], │ │ │ │ │ "1000": [9, 10, 15, 24, 25, 28, 29, 32, 102, 141, 183, 191, 193, 194, 427, 717, 761, 767, 768, 769, 874, 1154, 1158, 1456, 1465, 1467, 1876, 1964, 2184, 2185, 2186, 2188, 2193, 2195, 2199, 2205, 2206, 2207, 2210, 2211, 2220, 2223, 2229, 2230, 2235, 2238, 2246, 2249, 2261, 2294], │ │ │ │ │ "10000": [192, 1485, 2185, 2201, 2206, 2210, 2220, 2228, 2266], │ │ │ │ │ "100000": [1354, 1372, 2199, 2201, 2210], │ │ │ │ │ "1000000": [144, 2199, 2228], │ │ │ │ │ @@ -22856,15 +22855,15 @@ │ │ │ │ │ "1148": 2219, │ │ │ │ │ "11481": 2235, │ │ │ │ │ "11485": 2231, │ │ │ │ │ "11488": 2230, │ │ │ │ │ "114907": 2207, │ │ │ │ │ "11497": 2230, │ │ │ │ │ "11499": 2249, │ │ │ │ │ - "115": [282, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2230, 2231, 2232, 2257], │ │ │ │ │ + "115": [282, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2230, 2231, 2232, 2257], │ │ │ │ │ "11502": 2230, │ │ │ │ │ "11503": 2257, │ │ │ │ │ "11514": 2231, │ │ │ │ │ "11517": 2229, │ │ │ │ │ "11519": 2229, │ │ │ │ │ "11520": 2229, │ │ │ │ │ "11522": 2230, │ │ │ │ │ @@ -23297,15 +23296,15 @@ │ │ │ │ │ "12679": 2283, │ │ │ │ │ "126818": 2197, │ │ │ │ │ "12684": 2231, │ │ │ │ │ "12687": 2231, │ │ │ │ │ "12688": 2235, │ │ │ │ │ "12695": 2231, │ │ │ │ │ "126970": [2224, 2228], │ │ │ │ │ - "127": [2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2203, 2204, 2208, 2210, 2211, 2225, 2227, 2231, 2232, 2283], │ │ │ │ │ + "127": [2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2203, 2204, 2208, 2210, 2211, 2225, 2227, 2231, 2232, 2283], │ │ │ │ │ "12701": 2231, │ │ │ │ │ "12702": 2230, │ │ │ │ │ "127029": 2235, │ │ │ │ │ "12706": 2231, │ │ │ │ │ "12713": 2231, │ │ │ │ │ "1272": 2298, │ │ │ │ │ "12723": 2231, │ │ │ │ │ @@ -23458,15 +23457,15 @@ │ │ │ │ │ "13078": 2232, │ │ │ │ │ "13082": 2232, │ │ │ │ │ "13083": 2238, │ │ │ │ │ "130932": 2207, │ │ │ │ │ "13097": 2235, │ │ │ │ │ "13098": 2232, │ │ │ │ │ "130980": 2195, │ │ │ │ │ - "131": [2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2203, 2208, 2210, 2211, 2232, 2249, 2283], │ │ │ │ │ + "131": [2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2203, 2208, 2210, 2211, 2232, 2249, 2283], │ │ │ │ │ "1310": 2199, │ │ │ │ │ "13101": 2239, │ │ │ │ │ "13104": 2232, │ │ │ │ │ "13107": 2232, │ │ │ │ │ "13109": 2232, │ │ │ │ │ "13110": 2232, │ │ │ │ │ "13119": 2232, │ │ │ │ │ @@ -23495,15 +23494,15 @@ │ │ │ │ │ "13176": 2232, │ │ │ │ │ "13179": 2235, │ │ │ │ │ "1318": [16, 17, 18, 19, 2199, 2235], │ │ │ │ │ "13180": 2232, │ │ │ │ │ "1319": [16, 17, 18, 19, 2199, 2235], │ │ │ │ │ "13191": 2232, │ │ │ │ │ "13193": 30, │ │ │ │ │ - "132": [2184, 2185, 2186, 2188, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2208, 2210, 2211, 2222, 2230, 2232, 2249, 2283], │ │ │ │ │ + "132": [2184, 2185, 2186, 2188, 2191, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2208, 2210, 2211, 2222, 2230, 2232, 2249, 2283], │ │ │ │ │ "1320": [16, 17, 18, 19, 2199, 2235], │ │ │ │ │ "13200": 2232, │ │ │ │ │ "132003": [15, 2185, 2197, 2199, 2202, 2215, 2257], │ │ │ │ │ "13200317033032932": 2197, │ │ │ │ │ "132009": 2207, │ │ │ │ │ "13202": 2234, │ │ │ │ │ "132023": 2199, │ │ │ │ │ @@ -23797,15 +23796,15 @@ │ │ │ │ │ "13873": 2238, │ │ │ │ │ "13874": [2232, 2241], │ │ │ │ │ "13876": 2232, │ │ │ │ │ "13879": 2234, │ │ │ │ │ "13884": 2232, │ │ │ │ │ "13894": 2232, │ │ │ │ │ "13898": 2232, │ │ │ │ │ - "139": [2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2203, 2208, 2210, 2211, 2212, 2232, 2298], │ │ │ │ │ + "139": [2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2203, 2208, 2210, 2211, 2212, 2232, 2298], │ │ │ │ │ "13900": 2232, │ │ │ │ │ "13902": 2232, │ │ │ │ │ "13905": 2241, │ │ │ │ │ "13907": 2232, │ │ │ │ │ "139168": 2197, │ │ │ │ │ "13917": 2232, │ │ │ │ │ "13918": 2238, │ │ │ │ │ @@ -24314,15 +24313,15 @@ │ │ │ │ │ "15495": 2238, │ │ │ │ │ "1549507744": 2199, │ │ │ │ │ "1549507744249032": 2197, │ │ │ │ │ "154951": [15, 2185, 2197, 2199, 2202], │ │ │ │ │ "154971": 22, │ │ │ │ │ "154975": 22, │ │ │ │ │ "15498": 2235, │ │ │ │ │ - "155": [1447, 2185, 2186, 2188, 2195, 2197, 2199, 2200, 2201, 2207, 2210, 2211, 2232], │ │ │ │ │ + "155": [1447, 2185, 2186, 2188, 2193, 2195, 2197, 2199, 2200, 2201, 2207, 2210, 2211, 2232], │ │ │ │ │ "15501": 2246, │ │ │ │ │ "15503": 2235, │ │ │ │ │ "15504": 2235, │ │ │ │ │ "15506": 2246, │ │ │ │ │ "15507": 2238, │ │ │ │ │ "15516": 2235, │ │ │ │ │ "15520": 2235, │ │ │ │ │ @@ -24571,15 +24570,15 @@ │ │ │ │ │ "16357": 2241, │ │ │ │ │ "16359": 2238, │ │ │ │ │ "16361": 2236, │ │ │ │ │ "16378": 2236, │ │ │ │ │ "16382": 2236, │ │ │ │ │ "16394": 2236, │ │ │ │ │ "16395": 2236, │ │ │ │ │ - "164": [2185, 2186, 2188, 2195, 2197, 2199, 2201, 2210, 2211], │ │ │ │ │ + "164": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2201, 2210, 2211], │ │ │ │ │ "16402": 2238, │ │ │ │ │ "16405": 2236, │ │ │ │ │ "16406": 2241, │ │ │ │ │ "16409": 2236, │ │ │ │ │ "16413": 2236, │ │ │ │ │ "16417": 2238, │ │ │ │ │ "16442": 2249, │ │ │ │ │ @@ -25104,15 +25103,15 @@ │ │ │ │ │ "18271": 2246, │ │ │ │ │ "18273": 2246, │ │ │ │ │ "182879": 2186, │ │ │ │ │ "18291": 2283, │ │ │ │ │ "18293": 2241, │ │ │ │ │ "182937": [2185, 2191, 2197], │ │ │ │ │ "18295": 2241, │ │ │ │ │ - "183": [2185, 2186, 2188, 2195, 2197, 2199, 2200, 2205, 2210, 2211, 2212], │ │ │ │ │ + "183": [2185, 2186, 2188, 2195, 2197, 2199, 2200, 2210, 2211, 2212], │ │ │ │ │ "18301": 2239, │ │ │ │ │ "18303": 2250, │ │ │ │ │ "18304": 2241, │ │ │ │ │ "183051": 2186, │ │ │ │ │ "183064": 2207, │ │ │ │ │ "18307": 2265, │ │ │ │ │ "18308": 2246, │ │ │ │ │ @@ -25369,15 +25368,15 @@ │ │ │ │ │ "19086": 2241, │ │ │ │ │ "19087": 2246, │ │ │ │ │ "1909": [2199, 2203, 2298], │ │ │ │ │ "190912": 2257, │ │ │ │ │ "190913": 2207, │ │ │ │ │ "19096": 2241, │ │ │ │ │ "190976": [2220, 2228, 2230], │ │ │ │ │ - "191": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2210, 2211], │ │ │ │ │ + "191": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211], │ │ │ │ │ "1910": [2203, 2298], │ │ │ │ │ "19101": 2241, │ │ │ │ │ "19107": 2241, │ │ │ │ │ "1911": [2203, 2298], │ │ │ │ │ "191120": 2186, │ │ │ │ │ "1912": [2203, 2298], │ │ │ │ │ "19124": 2241, │ │ │ │ │ @@ -25746,19 +25745,20 @@ │ │ │ │ │ "2021": [288, 296, 318, 639, 652, 673, 940, 943, 948, 957, 970, 997, 1542, 2201, 2207, 2213, 2277, 2289, 2294], │ │ │ │ │ "2022": [5, 22, 523, 525, 528, 537, 982, 1185, 1246, 1288, 1491, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1542, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1560, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1578, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1598, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1620, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1637, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1657, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1677, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1699, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1720, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1758, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1776, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1793, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1815, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1839, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1857, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1876, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1894, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1912, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1930, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1947, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1964, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1982, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 2000, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2018, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2036, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2054, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2108, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2127, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2145, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2186, 2203, 2213, 2227, 2298, 2302, 2307], │ │ │ │ │ "2022a": 2294, │ │ │ │ │ "2023": [34, 270, 298, 301, 320, 363, 511, 519, 526, 533, 543, 544, 545, 546, 547, 548, 549, 551, 554, 555, 556, 557, 558, 560, 563, 564, 565, 566, 567, 651, 894, 898, 954, 959, 960, 982, 984, 1000, 1001, 1003, 1004, 1005, 1011, 1016, 1020, 1021, 1024, 1122, 1141, 1147, 1157, 1170, 1171, 1176, 1180, 1185, 1195, 1197, 1206, 1214, 1227, 1228, 1233, 1239, 1245, 1246, 1256, 1258, 1268, 1271, 1273, 1274, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1287, 1288, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1501, 1620, 1930, 2090, 2127, 2145, 2213], │ │ │ │ │ "202380": 2207, │ │ │ │ │ "20239": [2241, 2265], │ │ │ │ │ "2024": [270, 544, 546, 555, 567, 894, 898, 2127, 2213], │ │ │ │ │ - "2025": [36, 544, 546, 555, 567, 894, 898, 2228], │ │ │ │ │ + "2025": [36, 544, 546, 555, 567, 894, 898], │ │ │ │ │ "20251": 2307, │ │ │ │ │ "2026": 2228, │ │ │ │ │ "202602": 2205, │ │ │ │ │ "202646": 2230, │ │ │ │ │ + "2027": 2228, │ │ │ │ │ "20271": 2241, │ │ │ │ │ "202872": [2184, 2214], │ │ │ │ │ "202946": 2207, │ │ │ │ │ "203": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211, 2231, 2253], │ │ │ │ │ "2030": 2265, │ │ │ │ │ "20303": 2265, │ │ │ │ │ "20306": 2302, │ │ │ │ │ @@ -26092,15 +26092,15 @@ │ │ │ │ │ "21459": 2246, │ │ │ │ │ "21469": 2246, │ │ │ │ │ "21470": 2243, │ │ │ │ │ "21471": 2243, │ │ │ │ │ "21484": 2243, │ │ │ │ │ "2149": 2264, │ │ │ │ │ "21494": 2243, │ │ │ │ │ - "215": [2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2210, 2211, 2254], │ │ │ │ │ + "215": [2185, 2186, 2188, 2191, 2195, 2197, 2199, 2210, 2211, 2254], │ │ │ │ │ "21508": 2246, │ │ │ │ │ "2151": 2264, │ │ │ │ │ "21510": 2249, │ │ │ │ │ "21517": 2277, │ │ │ │ │ "215202": 2207, │ │ │ │ │ "21521": 2249, │ │ │ │ │ "21524": 2243, │ │ │ │ │ @@ -26172,15 +26172,15 @@ │ │ │ │ │ "21770": 2246, │ │ │ │ │ "21775": 2265, │ │ │ │ │ "2178": 2246, │ │ │ │ │ "21781": 2246, │ │ │ │ │ "217815": 2191, │ │ │ │ │ "21785": 2244, │ │ │ │ │ "21789": 2246, │ │ │ │ │ - "218": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2210, 2211, 2220, 2231], │ │ │ │ │ + "218": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211, 2220, 2231], │ │ │ │ │ "21801": 2249, │ │ │ │ │ "21809": 2246, │ │ │ │ │ "21813": 2245, │ │ │ │ │ "21824": 2271, │ │ │ │ │ "2184": 2264, │ │ │ │ │ "21846": 2246, │ │ │ │ │ "218470": 2193, │ │ │ │ │ @@ -26221,15 +26221,15 @@ │ │ │ │ │ "219673": 15, │ │ │ │ │ "21978": 2246, │ │ │ │ │ "21980": 2246, │ │ │ │ │ "21997": 2246, │ │ │ │ │ "21998": 2246, │ │ │ │ │ "21st": 31, │ │ │ │ │ "22": [10, 15, 17, 18, 19, 22, 23, 25, 29, 30, 31, 32, 133, 144, 208, 213, 230, 345, 513, 515, 535, 708, 782, 788, 804, 993, 1010, 1019, 1259, 1274, 1397, 1430, 1498, 1598, 1657, 1677, 2184, 2185, 2186, 2188, 2190, 2191, 2192, 2193, 2194, 2195, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2217, 2218, 2219, 2220, 2222, 2223, 2226, 2227, 2228, 2230, 2231, 2232, 2235, 2238, 2241, 2242, 2246, 2249, 2265, 2271, 2277, 2283, 2294, 2298, 2302, 2307], │ │ │ │ │ - "220": [118, 132, 135, 159, 161, 175, 2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211, 2220, 2257], │ │ │ │ │ + "220": [118, 132, 135, 159, 161, 175, 2185, 2186, 2188, 2193, 2195, 2197, 2199, 2210, 2211, 2220, 2257], │ │ │ │ │ "2200": [2210, 2265], │ │ │ │ │ "22000": 150, │ │ │ │ │ "22001": 2246, │ │ │ │ │ "220026": 2207, │ │ │ │ │ "22004": 2246, │ │ │ │ │ "22005": 2246, │ │ │ │ │ "22015": 2246, │ │ │ │ │ @@ -26426,15 +26426,15 @@ │ │ │ │ │ "22981": 2246, │ │ │ │ │ "22984": 2246, │ │ │ │ │ "229864": 2207, │ │ │ │ │ "22988": 2246, │ │ │ │ │ "229938": 2207, │ │ │ │ │ "22994": 2246, │ │ │ │ │ "23": [15, 17, 18, 19, 24, 25, 26, 27, 29, 30, 31, 32, 213, 230, 259, 276, 277, 341, 345, 363, 511, 514, 516, 519, 522, 531, 532, 549, 561, 651, 676, 788, 804, 823, 836, 837, 838, 839, 840, 841, 842, 843, 844, 890, 902, 903, 924, 985, 1192, 1253, 1657, 2184, 2185, 2186, 2188, 2190, 2191, 2192, 2193, 2194, 2195, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2222, 2225, 2226, 2227, 2228, 2230, 2231, 2232, 2235, 2238, 2246, 2247, 2249, 2264, 2265, 2271, 2277, 2283, 2289, 2294, 2298, 2302, 2307], │ │ │ │ │ - "230": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2207, 2210, 2254], │ │ │ │ │ + "230": [2185, 2186, 2188, 2195, 2197, 2199, 2207, 2210, 2254], │ │ │ │ │ "23000": [2199, 2246], │ │ │ │ │ "230012": 23, │ │ │ │ │ "230066": 2191, │ │ │ │ │ "23009": 2246, │ │ │ │ │ "2301": 2217, │ │ │ │ │ "23011": 2249, │ │ │ │ │ "23013": 2249, │ │ │ │ │ @@ -27258,15 +27258,15 @@ │ │ │ │ │ "268413": 2207, │ │ │ │ │ "2685": 2221, │ │ │ │ │ "268520": [2184, 2195, 2214], │ │ │ │ │ "2686": 2215, │ │ │ │ │ "2687": 2215, │ │ │ │ │ "2689": 2215, │ │ │ │ │ "268968": 2207, │ │ │ │ │ - "269": [2186, 2188, 2193, 2195, 2197, 2199, 2210], │ │ │ │ │ + "269": [2186, 2188, 2195, 2197, 2199, 2210], │ │ │ │ │ "2690": 2215, │ │ │ │ │ "26916": 2249, │ │ │ │ │ "26919": 2283, │ │ │ │ │ "2692": 2215, │ │ │ │ │ "269219": [242, 817], │ │ │ │ │ "26934": 2249, │ │ │ │ │ "26939": 2265, │ │ │ │ │ @@ -27342,15 +27342,15 @@ │ │ │ │ │ "27250": 2249, │ │ │ │ │ "272593": 2230, │ │ │ │ │ "27261": 2251, │ │ │ │ │ "272673": 2207, │ │ │ │ │ "27283": 2265, │ │ │ │ │ "27292": 2265, │ │ │ │ │ "272968": 2195, │ │ │ │ │ - "273": [2186, 2188, 2195, 2197, 2199, 2202, 2210, 2257], │ │ │ │ │ + "273": [2186, 2188, 2193, 2195, 2197, 2199, 2202, 2210, 2257], │ │ │ │ │ "2730": 2199, │ │ │ │ │ "27309": 2249, │ │ │ │ │ "27311": 2265, │ │ │ │ │ "27315": 2277, │ │ │ │ │ "27321": 2249, │ │ │ │ │ "273290": 2207, │ │ │ │ │ "273322": 2207, │ │ │ │ │ @@ -27511,15 +27511,15 @@ │ │ │ │ │ "28115": 2265, │ │ │ │ │ "28118": 2265, │ │ │ │ │ "281247": [2185, 2191, 2197, 2199, 2202, 2204], │ │ │ │ │ "28130": 2265, │ │ │ │ │ "28139": 2265, │ │ │ │ │ "281461": 2191, │ │ │ │ │ "28147": 2251, │ │ │ │ │ - "281473243096784": 2246, │ │ │ │ │ + "281472639131568": 2246, │ │ │ │ │ "28150": 2265, │ │ │ │ │ "28156": 2271, │ │ │ │ │ "28163": 2265, │ │ │ │ │ "2817": 1344, │ │ │ │ │ "281885": 2186, │ │ │ │ │ "28189": 2271, │ │ │ │ │ "28192": 2265, │ │ │ │ │ @@ -28565,15 +28565,15 @@ │ │ │ │ │ "33463": 2283, │ │ │ │ │ "33469": [2289, 2298], │ │ │ │ │ "33473": 2271, │ │ │ │ │ "33484": 2289, │ │ │ │ │ "33494": 2277, │ │ │ │ │ "33498": 2271, │ │ │ │ │ "334984": 2199, │ │ │ │ │ - "335": [1433, 2186, 2197, 2199, 2210], │ │ │ │ │ + "335": [1433, 2186, 2193, 2197, 2199, 2210], │ │ │ │ │ "33530": 2277, │ │ │ │ │ "33539": 2271, │ │ │ │ │ "33548": 2277, │ │ │ │ │ "335486": 2207, │ │ │ │ │ "335505": 2230, │ │ │ │ │ "33552": 2271, │ │ │ │ │ "33558": 2283, │ │ │ │ │ @@ -29314,15 +29314,15 @@ │ │ │ │ │ "3717": 2218, │ │ │ │ │ "37172": 2283, │ │ │ │ │ "37173": 2277, │ │ │ │ │ "37174": 2275, │ │ │ │ │ "371900": 2186, │ │ │ │ │ "37194": 2277, │ │ │ │ │ "371983": 2195, │ │ │ │ │ - "372": [2186, 2193, 2197, 2199, 2210, 2219], │ │ │ │ │ + "372": [2186, 2197, 2199, 2210, 2219], │ │ │ │ │ "372077": 2204, │ │ │ │ │ "372171": 2207, │ │ │ │ │ "37218": 2277, │ │ │ │ │ "37220": 2275, │ │ │ │ │ "372216": 2207, │ │ │ │ │ "37222": 2298, │ │ │ │ │ "37245": 2275, │ │ │ │ │ @@ -29927,15 +29927,15 @@ │ │ │ │ │ "3me": 1344, │ │ │ │ │ "3min": [213, 788, 1192, 1253, 2210], │ │ │ │ │ "3n": [1508, 1526, 1544, 1562, 1581, 1602, 1622, 1639, 1660, 1681, 1702, 1723, 1743, 1761, 1778, 1795, 1817, 1842, 1859, 1879, 1897, 1915, 1932, 1949, 1967, 1984, 2002, 2021, 2039, 2057, 2075, 2092, 2110, 2129, 2147], │ │ │ │ │ "3rd": [2, 11, 34, 108, 205, 249, 590, 630, 778, 882, 1118, 2186, 2191, 2232, 2246, 2307, 2308, 2310], │ │ │ │ │ "3u": 2209, │ │ │ │ │ "4": [2, 4, 9, 10, 12, 13, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 50, 58, 59, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 77, 78, 79, 80, 82, 83, 84, 85, 86, 88, 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 116, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 134, 136, 138, 141, 144, 145, 146, 147, 152, 153, 154, 155, 156, 157, 158, 160, 162, 163, 164, 167, 168, 169, 170, 171, 172, 173, 174, 179, 180, 182, 184, 185, 186, 190, 191, 193, 194, 195, 196, 197, 199, 202, 203, 204, 205, 206, 209, 210, 212, 213, 215, 216, 217, 218, 220, 221, 222, 223, 224, 226, 228, 229, 231, 232, 233, 234, 235, 238, 240, 241, 244, 245, 248, 250, 252, 254, 255, 256, 257, 258, 261, 262, 263, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 279, 280, 281, 284, 285, 292, 294, 301, 306, 307, 317, 331, 332, 339, 341, 345, 346, 347, 348, 349, 350, 351, 352, 353, 358, 367, 370, 380, 383, 389, 393, 394, 398, 399, 401, 404, 414, 420, 421, 429, 434, 436, 437, 455, 459, 461, 469, 473, 475, 477, 483, 490, 494, 496, 499, 501, 532, 568, 577, 579, 580, 581, 582, 583, 591, 592, 593, 594, 595, 596, 599, 600, 601, 603, 604, 605, 611, 612, 616, 618, 619, 621, 625, 626, 627, 628, 629, 630, 632, 634, 635, 636, 640, 644, 646, 658, 659, 671, 682, 683, 686, 688, 692, 696, 697, 698, 700, 701, 702, 703, 704, 712, 713, 714, 715, 716, 717, 720, 724, 730, 731, 732, 733, 738, 741, 742, 746, 748, 750, 758, 760, 762, 766, 767, 768, 769, 770, 771, 776, 778, 783, 784, 787, 788, 789, 793, 798, 799, 806, 807, 808, 812, 815, 816, 821, 823, 824, 830, 833, 835, 845, 846, 849, 858, 859, 862, 863, 865, 866, 868, 874, 879, 881, 883, 885, 888, 889, 895, 896, 899, 900, 902, 904, 906, 907, 908, 912, 913, 920, 921, 938, 979, 1033, 1034, 1035, 1037, 1044, 1053, 1054, 1061, 1073, 1074, 1075, 1077, 1120, 1127, 1134, 1136, 1138, 1140, 1143, 1145, 1146, 1147, 1148, 1149, 1152, 1153, 1154, 1155, 1156, 1157, 1159, 1160, 1161, 1164, 1165, 1166, 1167, 1168, 1170, 1171, 1172, 1176, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1191, 1192, 1193, 1194, 1195, 1196, 1199, 1200, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1212, 1214, 1216, 1217, 1218, 1221, 1222, 1223, 1225, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1237, 1238, 1239, 1240, 1241, 1244, 1246, 1247, 1248, 1249, 1250, 1252, 1253, 1254, 1255, 1256, 1257, 1260, 1261, 1263, 1265, 1267, 1268, 1269, 1270, 1271, 1273, 1274, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1288, 1289, 1290, 1291, 1292, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1343, 1344, 1347, 1362, 1365, 1369, 1375, 1384, 1385, 1390, 1391, 1393, 1394, 1395, 1396, 1397, 1398, 1400, 1402, 1403, 1404, 1406, 1407, 1408, 1409, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1424, 1430, 1432, 1433, 1434, 1435, 1436, 1438, 1439, 1440, 1441, 1442, 1443, 1445, 1446, 1447, 1448, 1449, 1450, 1453, 1454, 1458, 1463, 1465, 1466, 1467, 1468, 1469, 1470, 1475, 1476, 1478, 1479, 1486, 1487, 1489, 1490, 1493, 1494, 1496, 1497, 1498, 1500, 1506, 1524, 1741, 1758, 1793, 1815, 1839, 1857, 1982, 2000, 2108, 2166, 2184, 2185, 2186, 2187, 2188, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2208, 2209, 2210, 2211, 2212, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2235, 2238, 2240, 2241, 2246, 2247, 2249, 2257, 2260, 2261, 2263, 2264, 2265, 2266, 2267, 2270, 2271, 2277, 2278, 2283, 2294, 2295, 2297, 2298, 2302, 2307], │ │ │ │ │ "40": [15, 17, 18, 19, 32, 68, 74, 80, 88, 188, 189, 213, 228, 234, 345, 577, 583, 592, 600, 764, 765, 788, 823, 1264, 1387, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2218, 2219, 2220, 2222, 2225, 2226, 2228, 2230, 2231, 2232, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2283, 2298], │ │ │ │ │ - "400": [15, 141, 212, 280, 303, 586, 655, 717, 787, 1280, 1433, 2185, 2186, 2197, 2199, 2200, 2201, 2207, 2210, 2226], │ │ │ │ │ + "400": [15, 141, 212, 280, 303, 586, 655, 717, 787, 1280, 1433, 2186, 2197, 2199, 2200, 2201, 2207, 2210, 2226], │ │ │ │ │ "4000": [10, 141, 717], │ │ │ │ │ "40000": [168, 1443, 2194, 2199, 2222], │ │ │ │ │ "400000": [2195, 2201, 2210, 2214], │ │ │ │ │ "40002": 2283, │ │ │ │ │ "40004": 2283, │ │ │ │ │ "40008": 2283, │ │ │ │ │ "40013": 2283, │ │ │ │ │ @@ -30047,15 +30047,15 @@ │ │ │ │ │ "40662": 2281, │ │ │ │ │ "406667": 2201, │ │ │ │ │ "40675": 2289, │ │ │ │ │ "40682": 2289, │ │ │ │ │ "40685": 2302, │ │ │ │ │ "40686": 2298, │ │ │ │ │ "4069": 2220, │ │ │ │ │ - "407": [2186, 2199, 2210], │ │ │ │ │ + "407": [2186, 2193, 2199, 2210], │ │ │ │ │ "4071": 2217, │ │ │ │ │ "40712": 2283, │ │ │ │ │ "40722": 2281, │ │ │ │ │ "40730": 2283, │ │ │ │ │ "40731": 2283, │ │ │ │ │ "40732": 2289, │ │ │ │ │ "40754": 2289, │ │ │ │ │ @@ -30085,15 +30085,15 @@ │ │ │ │ │ "40865": 2283, │ │ │ │ │ "4088": 2224, │ │ │ │ │ "408836": 1299, │ │ │ │ │ "408893": 2207, │ │ │ │ │ "4089": 2217, │ │ │ │ │ "40893": 2302, │ │ │ │ │ "40896": 2283, │ │ │ │ │ - "409": [2186, 2199, 2210, 2218], │ │ │ │ │ + "409": [2186, 2199, 2210], │ │ │ │ │ "4090": 2217, │ │ │ │ │ "40904": 2283, │ │ │ │ │ "40908": 2283, │ │ │ │ │ "40912316": [182, 760], │ │ │ │ │ "40918": 2283, │ │ │ │ │ "4092": 2217, │ │ │ │ │ "409204": 2219, │ │ │ │ │ @@ -30634,15 +30634,15 @@ │ │ │ │ │ "4327": 2230, │ │ │ │ │ "432707": [2220, 2228, 2230], │ │ │ │ │ "43274": 2286, │ │ │ │ │ "4328": 2218, │ │ │ │ │ "432893": 2218, │ │ │ │ │ "432911": 2199, │ │ │ │ │ "432980": 2184, │ │ │ │ │ - "433": [2186, 2199, 2205, 2210, 2298], │ │ │ │ │ + "433": [2186, 2199, 2210, 2298], │ │ │ │ │ "4330": 2218, │ │ │ │ │ "433000088": 2210, │ │ │ │ │ "43305": 2289, │ │ │ │ │ "43307": 2289, │ │ │ │ │ "43309": 2289, │ │ │ │ │ "43311": 2289, │ │ │ │ │ "43314": 2287, │ │ │ │ │ @@ -30676,15 +30676,15 @@ │ │ │ │ │ "433834": 2186, │ │ │ │ │ "43386": 2287, │ │ │ │ │ "433866e": 2191, │ │ │ │ │ "43392": 2289, │ │ │ │ │ "43394": 2289, │ │ │ │ │ "43396": 2289, │ │ │ │ │ "433985": 2230, │ │ │ │ │ - "434": [2186, 2193, 2199, 2210, 2298], │ │ │ │ │ + "434": [2186, 2199, 2210, 2298], │ │ │ │ │ "434000": [176, 179, 754, 757, 1242, 1243], │ │ │ │ │ "43401": 2286, │ │ │ │ │ "434027": 2199, │ │ │ │ │ "43404": 2289, │ │ │ │ │ "43406": 2289, │ │ │ │ │ "434160": 2207, │ │ │ │ │ "434191": 2235, │ │ │ │ │ @@ -32452,15 +32452,15 @@ │ │ │ │ │ "51856": 2302, │ │ │ │ │ "51858": 2302, │ │ │ │ │ "51861": 2302, │ │ │ │ │ "51873": 2302, │ │ │ │ │ "518736": 2197, │ │ │ │ │ "51895": 2300, │ │ │ │ │ "51896": 2302, │ │ │ │ │ - "519": [2194, 2199, 2201, 2203, 2238, 2283, 2294, 2307], │ │ │ │ │ + "519": [2193, 2194, 2199, 2201, 2203, 2238, 2283, 2294, 2307], │ │ │ │ │ "51903": 2302, │ │ │ │ │ "5191": 2218, │ │ │ │ │ "519133": 2207, │ │ │ │ │ "51921": 2302, │ │ │ │ │ "51922": 2302, │ │ │ │ │ "51929": 2307, │ │ │ │ │ "51936": 2302, │ │ │ │ │ @@ -33045,15 +33045,15 @@ │ │ │ │ │ "55069": 2308, │ │ │ │ │ "550787": 2207, │ │ │ │ │ "5508": 2218, │ │ │ │ │ "55080": 2305, │ │ │ │ │ "55084": 2307, │ │ │ │ │ "550854": 2207, │ │ │ │ │ "55088": 2306, │ │ │ │ │ - "551": 2199, │ │ │ │ │ + "551": [2199, 2205], │ │ │ │ │ "55106": 2304, │ │ │ │ │ "55108": 2307, │ │ │ │ │ "551115123125783e": 2199, │ │ │ │ │ "55113": 2307, │ │ │ │ │ "551225": 2193, │ │ │ │ │ "55137": 2306, │ │ │ │ │ "55138": 2304, │ │ │ │ │ @@ -33166,15 +33166,15 @@ │ │ │ │ │ "55677": 2307, │ │ │ │ │ "55678": 2307, │ │ │ │ │ "556787e": 2222, │ │ │ │ │ "55683": 2307, │ │ │ │ │ "556882": 2195, │ │ │ │ │ "5569": 2221, │ │ │ │ │ "55693": 2307, │ │ │ │ │ - "557": 2199, │ │ │ │ │ + "557": [2199, 2205], │ │ │ │ │ "55709": 2307, │ │ │ │ │ "55710": 2307, │ │ │ │ │ "557110": 2235, │ │ │ │ │ "55714": 2307, │ │ │ │ │ "55718": 2307, │ │ │ │ │ "55730": 2307, │ │ │ │ │ "55736": 2307, │ │ │ │ │ @@ -33452,14 +33452,15 @@ │ │ │ │ │ "573714": 2207, │ │ │ │ │ "573806": 2229, │ │ │ │ │ "574": [2194, 2199, 2201, 2203, 2232, 2283, 2294, 2298, 2302, 2307], │ │ │ │ │ "5740": 2220, │ │ │ │ │ "57418": 2308, │ │ │ │ │ "5742": 2219, │ │ │ │ │ "57429": 2308, │ │ │ │ │ + "574736": 2228, │ │ │ │ │ "574779": 2184, │ │ │ │ │ "574816": 2207, │ │ │ │ │ "5749": 2219, │ │ │ │ │ "575": [2194, 2199, 2201, 2203, 2232, 2283, 2294, 2302, 2307], │ │ │ │ │ "575010": 2191, │ │ │ │ │ "575170": 2184, │ │ │ │ │ "575189": 2199, │ │ │ │ │ @@ -33500,14 +33501,15 @@ │ │ │ │ │ "577569": 2195, │ │ │ │ │ "577585": [2184, 2214], │ │ │ │ │ "5776": 2192, │ │ │ │ │ "57761": 2309, │ │ │ │ │ "57762": 2309, │ │ │ │ │ "577693": 2207, │ │ │ │ │ "578": [2194, 2199, 2201, 2203, 2232, 2283, 2294, 2298, 2302, 2307], │ │ │ │ │ + "578044": 2228, │ │ │ │ │ "5786": 2229, │ │ │ │ │ "578615": 2207, │ │ │ │ │ "578798": 2210, │ │ │ │ │ "578900": 2207, │ │ │ │ │ "579": [2199, 2232], │ │ │ │ │ "5797": 2219, │ │ │ │ │ "58": [17, 19, 23, 213, 276, 345, 788, 902, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2249, 2271, 2307], │ │ │ │ │ @@ -33808,15 +33810,15 @@ │ │ │ │ │ "615556": 27, │ │ │ │ │ "615597": 2207, │ │ │ │ │ "615674": 2207, │ │ │ │ │ "615801": 2207, │ │ │ │ │ "615855": 2185, │ │ │ │ │ "615972": 2205, │ │ │ │ │ "615975": 2207, │ │ │ │ │ - "616": [2199, 2205, 2232], │ │ │ │ │ + "616": [2199, 2232], │ │ │ │ │ "616184": 2197, │ │ │ │ │ "6166": 2220, │ │ │ │ │ "6167": 2219, │ │ │ │ │ "616767": 2184, │ │ │ │ │ "6169": 2219, │ │ │ │ │ "617": [16, 17, 18, 19, 2199, 2203, 2232, 2235, 2298], │ │ │ │ │ "6171": 2219, │ │ │ │ │ @@ -33877,15 +33879,15 @@ │ │ │ │ │ "6240": 2220, │ │ │ │ │ "624607": 15, │ │ │ │ │ "624615": 2207, │ │ │ │ │ "624699e": 2191, │ │ │ │ │ "624747": 2199, │ │ │ │ │ "624938": 2191, │ │ │ │ │ "624988": 2230, │ │ │ │ │ - "625": [205, 778, 2199, 2203, 2205, 2298], │ │ │ │ │ + "625": [205, 778, 2199, 2203, 2298], │ │ │ │ │ "6252": 2220, │ │ │ │ │ "625210": 2207, │ │ │ │ │ "6254": 2220, │ │ │ │ │ "625415": 2207, │ │ │ │ │ "6255": 2192, │ │ │ │ │ "6256": [2192, 2202], │ │ │ │ │ "6257": 2192, │ │ │ │ │ @@ -34699,15 +34701,15 @@ │ │ │ │ │ "719369": 2195, │ │ │ │ │ "7195": 2221, │ │ │ │ │ "719541": 2228, │ │ │ │ │ "7196": 2221, │ │ │ │ │ "7198": 2220, │ │ │ │ │ "7199": 2220, │ │ │ │ │ "719915": 2207, │ │ │ │ │ - "72": [17, 31, 190, 193, 766, 768, 1189, 1250, 1433, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2223, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2271], │ │ │ │ │ + "72": [17, 31, 190, 193, 766, 768, 1189, 1250, 1433, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2223, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2271], │ │ │ │ │ "720": [69, 109, 129, 171, 173, 199, 204, 206, 215, 216, 217, 220, 221, 222, 244, 275, 1447, 2200, 2232], │ │ │ │ │ "7200": 2210, │ │ │ │ │ "720000": [2191, 2225], │ │ │ │ │ "720521": 2210, │ │ │ │ │ "720589": [2220, 2228, 2230, 2231], │ │ │ │ │ "7206": 2220, │ │ │ │ │ "7207": 2222, │ │ │ │ │ @@ -34956,15 +34958,14 @@ │ │ │ │ │ "7534": 2221, │ │ │ │ │ "753444": 2207, │ │ │ │ │ "753606": 2199, │ │ │ │ │ "753611": 2207, │ │ │ │ │ "753623": 2191, │ │ │ │ │ "753747": 2207, │ │ │ │ │ "7539": 2221, │ │ │ │ │ - "754": 2218, │ │ │ │ │ "7540": 2222, │ │ │ │ │ "754005": 2210, │ │ │ │ │ "7542": 2222, │ │ │ │ │ "7543": 2222, │ │ │ │ │ "754659": 2191, │ │ │ │ │ "755": [29, 2298], │ │ │ │ │ "7551": 2221, │ │ │ │ │ @@ -34995,15 +34996,15 @@ │ │ │ │ │ "759104": 2185, │ │ │ │ │ "7592": 2221, │ │ │ │ │ "759328": 2199, │ │ │ │ │ "759606": 2199, │ │ │ │ │ "759644": 2222, │ │ │ │ │ "7599": 2228, │ │ │ │ │ "75th": [107, 629, 1164, 1221], │ │ │ │ │ - "76": [18, 190, 193, 766, 768, 1433, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2223, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2271], │ │ │ │ │ + "76": [18, 190, 193, 766, 768, 1433, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2223, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2271], │ │ │ │ │ "760": [32, 2298], │ │ │ │ │ "7601": 2221, │ │ │ │ │ "760109": 2195, │ │ │ │ │ "7606": 2221, │ │ │ │ │ "760643": 2199, │ │ │ │ │ "7609": 2221, │ │ │ │ │ "760970": 2207, │ │ │ │ │ @@ -35407,23 +35408,23 @@ │ │ │ │ │ "8121": 2222, │ │ │ │ │ "812101": 2207, │ │ │ │ │ "8122": 2222, │ │ │ │ │ "812436": 2195, │ │ │ │ │ "812500": 18, │ │ │ │ │ "8128": 2222, │ │ │ │ │ "8129": 2222, │ │ │ │ │ - "813": [2193, 2199, 2200, 2298], │ │ │ │ │ + "813": [2199, 2200, 2298], │ │ │ │ │ "8131": 2222, │ │ │ │ │ "8132": 2222, │ │ │ │ │ "813266": 2257, │ │ │ │ │ "813360": 2199, │ │ │ │ │ "8138": 2241, │ │ │ │ │ "813850": [15, 2185, 2197, 2199, 2202, 2215, 2257], │ │ │ │ │ "813893": 2207, │ │ │ │ │ - "814": [2199, 2298], │ │ │ │ │ + "814": [2193, 2199, 2298], │ │ │ │ │ "8140": 2222, │ │ │ │ │ "8143": 2222, │ │ │ │ │ "814347": 2186, │ │ │ │ │ "814397": 2207, │ │ │ │ │ "814470": [2184, 2214], │ │ │ │ │ "814788": 2207, │ │ │ │ │ "814869": 2207, │ │ │ │ │ @@ -36626,15 +36627,14 @@ │ │ │ │ │ "989859": 2185, │ │ │ │ │ "99": [15, 22, 145, 163, 284, 532, 741, 912, 1447, 1456, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2207, 2208, 2209, 2210, 2211, 2218, 2222, 2226, 2230, 2232, 2235, 2246, 2294, 2307], │ │ │ │ │ "990": [2199, 2230], │ │ │ │ │ "9900": 2199, │ │ │ │ │ "990000": 1894, │ │ │ │ │ "990317": 2199, │ │ │ │ │ "990340": 2207, │ │ │ │ │ - "990496": 2228, │ │ │ │ │ "9905": 2226, │ │ │ │ │ "990582": [2184, 2195, 2214], │ │ │ │ │ "9907": 2228, │ │ │ │ │ "990810": 2235, │ │ │ │ │ "990921": 2204, │ │ │ │ │ "991": [2199, 2230], │ │ │ │ │ "9910": 2226, │ │ │ │ │ @@ -36642,15 +36642,14 @@ │ │ │ │ │ "991234": 2191, │ │ │ │ │ "991460": [2184, 2214], │ │ │ │ │ "991575": 2195, │ │ │ │ │ "991803": 1303, │ │ │ │ │ "991946": [2220, 2230], │ │ │ │ │ "991993": 2214, │ │ │ │ │ "992": [1343, 2199, 2205, 2230], │ │ │ │ │ - "992021": 2228, │ │ │ │ │ "992033": 2205, │ │ │ │ │ "992052": 2207, │ │ │ │ │ "9921": 2226, │ │ │ │ │ "9923": 2202, │ │ │ │ │ "9925": 2226, │ │ │ │ │ "9926": 2227, │ │ │ │ │ "9927": 2226, │ │ │ ├── ./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html │ │ │ │ @@ -1847,25 +1847,25 @@ │ │ │ │ In [141]: indexer = np.arange(10000) │ │ │ │ │ │ │ │ In [142]: random.shuffle(indexer) │ │ │ │ │ │ │ │ In [143]: %timeit arr[indexer] │ │ │ │ .....: %timeit arr.take(indexer, axis=0) │ │ │ │ .....: │ │ │ │ -196 us +- 1.28 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each) │ │ │ │ -89 us +- 400 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each) │ │ │ │ +193 us +- 1.42 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each) │ │ │ │ +91.9 us +- 228 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each) │ │ │ │ │ │ │ │ │ │ │ │
In [144]: ser = pd.Series(arr[:, 0])
│ │ │ │
│ │ │ │ In [145]: %timeit ser.iloc[indexer]
│ │ │ │ .....: %timeit ser.take(indexer)
│ │ │ │ .....:
│ │ │ │ -151 us +- 1.51 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ -124 us +- 2.66 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ +150 us +- 2.3 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ +121 us +- 1.05 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │
We have discussed MultiIndex
in the previous sections pretty extensively.
│ │ │ │ Documentation about DatetimeIndex
and PeriodIndex
are shown here,
│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -1245,23 +1245,23 @@
│ │ │ │ │ In [141]: indexer = np.arange(10000)
│ │ │ │ │
│ │ │ │ │ In [142]: random.shuffle(indexer)
│ │ │ │ │
│ │ │ │ │ In [143]: %timeit arr[indexer]
│ │ │ │ │ .....: %timeit arr.take(indexer, axis=0)
│ │ │ │ │ .....:
│ │ │ │ │ -196 us +- 1.28 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ -89 us +- 400 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ +193 us +- 1.42 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ +91.9 us +- 228 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ In [144]: ser = pd.Series(arr[:, 0])
│ │ │ │ │
│ │ │ │ │ In [145]: %timeit ser.iloc[indexer]
│ │ │ │ │ .....: %timeit ser.take(indexer)
│ │ │ │ │ .....:
│ │ │ │ │ -151 us +- 1.51 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ -124 us +- 2.66 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ +150 us +- 2.3 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ +121 us +- 1.05 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)
│ │ │ │ │ ********** IInnddeexx ttyyppeess_## **********
│ │ │ │ │ We have discussed MultiIndex in the previous sections pretty extensively.
│ │ │ │ │ Documentation about DatetimeIndex and PeriodIndex are shown _h_e_r_e, and
│ │ │ │ │ documentation about TimedeltaIndex is found _h_e_r_e.
│ │ │ │ │ In the following sub-sections we will highlight some other index types.
│ │ │ │ │ ******** CCaatteeggoorriiccaallIInnddeexx_## ********
│ │ │ │ │ _C_a_t_e_g_o_r_i_c_a_l_I_n_d_e_x is a type of index that is useful for supporting indexing with
│ │ │ ├── ./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html
│ │ │ │ @@ -592,31 +592,31 @@
│ │ │ │ ...: s += f(a + i * dx)
│ │ │ │ ...: return s * dx
│ │ │ │ ...:
│ │ │ │
│ │ │ │
│ │ │ │
We achieve our result by using DataFrame.apply()
(row-wise):
In [5]: %timeit df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]), axis=1)
│ │ │ │ -71 ms +- 2.76 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ +73.7 ms +- 9.68 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │
Let’s take a look and see where the time is spent during this operation │ │ │ │ using the prun ipython magic function:
│ │ │ │# most time consuming 4 calls
│ │ │ │ In [6]: %prun -l 4 df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]), axis=1) # noqa E999
│ │ │ │ - 605946 function calls (605928 primitive calls) in 0.218 seconds
│ │ │ │ + 605946 function calls (605928 primitive calls) in 0.407 seconds
│ │ │ │
│ │ │ │ Ordered by: internal time
│ │ │ │ List reduced from 159 to 4 due to restriction <4>
│ │ │ │
│ │ │ │ ncalls tottime percall cumtime percall filename:lineno(function)
│ │ │ │ - 1000 0.132 0.000 0.191 0.000 <ipython-input-4-c2a74e076cf0>:1(integrate_f)
│ │ │ │ - 552423 0.058 0.000 0.058 0.000 <ipython-input-3-c138bdd570e3>:1(f)
│ │ │ │ - 3000 0.004 0.000 0.017 0.000 series.py:1095(__getitem__)
│ │ │ │ - 3000 0.003 0.000 0.008 0.000 series.py:1220(_get_value)
│ │ │ │ + 1000 0.220 0.000 0.335 0.000 <ipython-input-4-c2a74e076cf0>:1(integrate_f)
│ │ │ │ + 552423 0.115 0.000 0.115 0.000 <ipython-input-3-c138bdd570e3>:1(f)
│ │ │ │ + 3000 0.019 0.000 0.040 0.000 series.py:1220(_get_value)
│ │ │ │ + 3000 0.011 0.000 0.011 0.000 base.py:3777(get_loc)
│ │ │ │
By far the majority of time is spend inside either integrate_f
or f
,
│ │ │ │ hence we’ll concentrate our efforts cythonizing these two functions.
In [9]: %timeit df.apply(lambda x: integrate_f_plain(x["a"], x["b"], x["N"]), axis=1)
│ │ │ │ -73.9 ms +- 269 us per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ +71 ms +- 34.8 us per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │
This has improved the performance compared to the pure Python approach by one-third.
│ │ │ │We can annotate the function variables and return types as well as use cdef
│ │ │ │ @@ -658,15 +658,15 @@
│ │ │ │ ....: for i in range(N):
│ │ │ │ ....: s += f_typed(a + i * dx)
│ │ │ │ ....: return s * dx
│ │ │ │ ....:
│ │ │ │
│ │ │ │
│ │ │ │
In [11]: %timeit df.apply(lambda x: integrate_f_typed(x["a"], x["b"], x["N"]), axis=1)
│ │ │ │ -8.72 ms +- 44.8 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +8.61 ms +- 78.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
Annotating the functions with C types yields an over ten times performance improvement compared to │ │ │ │ the original Python implementation.
│ │ │ │In [13]: %%cython
│ │ │ │ ....: cimport numpy as np
│ │ │ │ ....: import numpy as np
│ │ │ │ ....: cdef double f_typed(double x) except? -2:
│ │ │ │ ....: return x * (x - 1)
│ │ │ │ @@ -722,15 +722,15 @@
│ │ │ │
This implementation creates an array of zeros and inserts the result
│ │ │ │ of integrate_f_typed
applied over each row. Looping over an ndarray
is faster
│ │ │ │ in Cython than looping over a Series
object.
Since apply_integrate_f
is typed to accept an np.ndarray
, Series.to_numpy()
│ │ │ │ calls are needed to utilize this function.
In [14]: %timeit apply_integrate_f(df["a"].to_numpy(), df["b"].to_numpy(), df["N"].to_numpy())
│ │ │ │ -1.17 ms +- 215 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ +1.16 ms +- 519 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │
Performance has improved from the prior implementation by almost ten times.
│ │ │ │ │ │ │ │The majority of the time is now spent in apply_integrate_f
. Disabling Cython’s boundscheck
│ │ │ │ @@ -782,15 +782,15 @@
│ │ │ │ from /build/reproducible-path/pandas-2.2.3+dfsg/buildtmp/.cache/ipython/cython/_cython_magic_883da8958ecc60be73b28b7124368f9c7cc2d174.c:1251:
│ │ │ │ /usr/lib/aarch64-linux-gnu/python3-numpy/numpy/_core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
│ │ │ │ 17 | #warning "Using deprecated NumPy API, disable it with " \
│ │ │ │ | ^~~~~~~
│ │ │ │
In [17]: %timeit apply_integrate_f_wrap(df["a"].to_numpy(), df["b"].to_numpy(), df["N"].to_numpy())
│ │ │ │ -813 us +- 191 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ +814 us +- 273 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │
However, a loop indexer i
accessing an invalid location in an array would cause a segfault because memory access isn’t checked.
│ │ │ │ For more about boundscheck
and wraparound
, see the Cython docs on
│ │ │ │ compiler directives.
DataFrame
. This engine requires the
│ │ │ │ optional dependency numexpr
to be installed.
│ │ │ │ The 'python'
engine is generally not useful except for testing
│ │ │ │ other evaluation engines against it. You will achieve no performance
│ │ │ │ benefits using eval()
with engine='python'
and may
│ │ │ │ incur a performance hit.
In [40]: %timeit df1 + df2 + df3 + df4
│ │ │ │ -8.5 ms +- 139 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +8.51 ms +- 61.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
In [41]: %timeit pd.eval("df1 + df2 + df3 + df4", engine="python")
│ │ │ │ -10.9 ms +- 62.2 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +11 ms +- 167 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
DataFrame.eval()
method#In addition to the top level pandas.eval()
function you can also
│ │ │ │ evaluate an expression in the “context” of a DataFrame
.
In [58]: nrows, ncols = 20000, 100
│ │ │ │
│ │ │ │ In [59]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols)) for _ in range(4)]
│ │ │ │
DataFrame
arithmetic:
In [60]: %timeit df1 + df2 + df3 + df4
│ │ │ │ -8.54 ms +- 372 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +8.21 ms +- 164 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
In [61]: %timeit pd.eval("df1 + df2 + df3 + df4")
│ │ │ │ -7.36 ms +- 434 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +6.94 ms +- 67.2 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
DataFrame
comparison:
In [62]: %timeit (df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)
│ │ │ │ -10.8 ms +- 97.4 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +10.6 ms +- 127 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
In [63]: %timeit pd.eval("(df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)")
│ │ │ │ -12.2 ms +- 230 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +11.8 ms +- 155 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
DataFrame
arithmetic with unaligned axes.
In [64]: s = pd.Series(np.random.randn(50))
│ │ │ │
│ │ │ │ In [65]: %timeit df1 + df2 + df3 + df4 + s
│ │ │ │ -19.5 ms +- 94.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +19.8 ms +- 73 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
In [66]: %timeit pd.eval("df1 + df2 + df3 + df4 + s")
│ │ │ │ -9.5 ms +- 131 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ +8.54 ms +- 45 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │
Note
│ │ │ │Operations such as
│ │ │ │1 and 2 # would parse to 1 & 2, but should evaluate to 2
│ │ │ │ 3 or 4 # would parse to 3 | 4, but should evaluate to 3
│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -110,32 +110,32 @@
│ │ │ │ │ ...: dx = (b - a) / N
│ │ │ │ │ ...: for i in range(N):
│ │ │ │ │ ...: s += f(a + i * dx)
│ │ │ │ │ ...: return s * dx
│ │ │ │ │ ...:
│ │ │ │ │ We achieve our result by using _D_a_t_a_F_r_a_m_e_._a_p_p_l_y_(_) (row-wise):
│ │ │ │ │ In [5]: %timeit df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]), axis=1)
│ │ │ │ │ -71 ms +- 2.76 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ │ +73.7 ms +- 9.68 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ │ Let’s take a look and see where the time is spent during this operation using
│ │ │ │ │ the _p_r_u_n_ _i_p_y_t_h_o_n_ _m_a_g_i_c_ _f_u_n_c_t_i_o_n:
│ │ │ │ │ # most time consuming 4 calls
│ │ │ │ │ In [6]: %prun -l 4 df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]),
│ │ │ │ │ axis=1) # noqa E999
│ │ │ │ │ - 605946 function calls (605928 primitive calls) in 0.218 seconds
│ │ │ │ │ + 605946 function calls (605928 primitive calls) in 0.407 seconds
│ │ │ │ │
│ │ │ │ │ Ordered by: internal time
│ │ │ │ │ List reduced from 159 to 4 due to restriction <4>
│ │ │ │ │
│ │ │ │ │ ncalls tottime percall cumtime percall filename:lineno(function)
│ │ │ │ │ - 1000 0.132 0.000 0.191 0.000 :1
│ │ │ │ │ + 1000 0.220 0.000 0.335 0.000 :1
│ │ │ │ │ (integrate_f)
│ │ │ │ │ - 552423 0.058 0.000 0.058 0.000 :1
│ │ │ │ │ + 552423 0.115 0.000 0.115 0.000 :1
│ │ │ │ │ (f)
│ │ │ │ │ - 3000 0.004 0.000 0.017 0.000 series.py:1095(__getitem__)
│ │ │ │ │ - 3000 0.003 0.000 0.008 0.000 series.py:1220(_get_value)
│ │ │ │ │ + 3000 0.019 0.000 0.040 0.000 series.py:1220(_get_value)
│ │ │ │ │ + 3000 0.011 0.000 0.011 0.000 base.py:3777(get_loc)
│ │ │ │ │ By far the majority of time is spend inside either integrate_f or f, hence
│ │ │ │ │ we’ll concentrate our efforts cythonizing these two functions.
│ │ │ │ │ ******** PPllaaiinn CCyytthhoonn_## ********
│ │ │ │ │ First we’re going to need to import the Cython magic function to IPython:
│ │ │ │ │ In [7]: %load_ext Cython
│ │ │ │ │ Now, let’s simply copy our functions over to Cython:
│ │ │ │ │ In [8]: %%cython
│ │ │ │ │ @@ -146,15 +146,15 @@
│ │ │ │ │ ...: dx = (b - a) / N
│ │ │ │ │ ...: for i in range(N):
│ │ │ │ │ ...: s += f_plain(a + i * dx)
│ │ │ │ │ ...: return s * dx
│ │ │ │ │ ...:
│ │ │ │ │ In [9]: %timeit df.apply(lambda x: integrate_f_plain(x["a"], x["b"], x["N"]),
│ │ │ │ │ axis=1)
│ │ │ │ │ -73.9 ms +- 269 us per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ │ +71 ms +- 34.8 us per loop (mean +- std. dev. of 7 runs, 10 loops each)
│ │ │ │ │ This has improved the performance compared to the pure Python approach by one-
│ │ │ │ │ third.
│ │ │ │ │ ******** DDeeccllaarriinngg CC ttyyppeess_## ********
│ │ │ │ │ We can annotate the function variables and return types as well as use cdef and
│ │ │ │ │ cpdef to improve performance:
│ │ │ │ │ In [10]: %%cython
│ │ │ │ │ ....: cdef double f_typed(double x) except? -2:
│ │ │ │ │ @@ -166,15 +166,15 @@
│ │ │ │ │ ....: dx = (b - a) / N
│ │ │ │ │ ....: for i in range(N):
│ │ │ │ │ ....: s += f_typed(a + i * dx)
│ │ │ │ │ ....: return s * dx
│ │ │ │ │ ....:
│ │ │ │ │ In [11]: %timeit df.apply(lambda x: integrate_f_typed(x["a"], x["b"], x["N"]),
│ │ │ │ │ axis=1)
│ │ │ │ │ -8.72 ms +- 44.8 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +8.61 ms +- 78.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ Annotating the functions with C types yields an over ten times performance
│ │ │ │ │ improvement compared to the original Python implementation.
│ │ │ │ │ ******** UUssiinngg nnddaarrrraayy_## ********
│ │ │ │ │ When re-profiling, time is spent creating a _S_e_r_i_e_s from each row, and calling
│ │ │ │ │ __getitem__ from both the index and the series (three times for each row).
│ │ │ │ │ These Python function calls are expensive and can be improved by passing an
│ │ │ │ │ np.ndarray.
│ │ │ │ │ @@ -184,17 +184,17 @@
│ │ │ │ │
│ │ │ │ │ Ordered by: internal time
│ │ │ │ │ List reduced from 157 to 4 due to restriction <4>
│ │ │ │ │
│ │ │ │ │ ncalls tottime percall cumtime percall filename:lineno(function)
│ │ │ │ │ 3000 0.004 0.000 0.016 0.000 series.py:1095(__getitem__)
│ │ │ │ │ 3000 0.003 0.000 0.007 0.000 series.py:1220(_get_value)
│ │ │ │ │ - 3000 0.002 0.000 0.003 0.000 base.py:3777(get_loc)
│ │ │ │ │ 16098 0.002 0.000 0.003 0.000 {built-in method
│ │ │ │ │ builtins.isinstance}
│ │ │ │ │ + 3000 0.002 0.000 0.003 0.000 base.py:3777(get_loc)
│ │ │ │ │ In [13]: %%cython
│ │ │ │ │ ....: cimport numpy as np
│ │ │ │ │ ....: import numpy as np
│ │ │ │ │ ....: cdef double f_typed(double x) except? -2:
│ │ │ │ │ ....: return x * (x - 1)
│ │ │ │ │ ....: cpdef double integrate_f_typed(double a, double b, int N):
│ │ │ │ │ ....: cdef int i
│ │ │ │ │ @@ -235,15 +235,15 @@
│ │ │ │ │ This implementation creates an array of zeros and inserts the result of
│ │ │ │ │ integrate_f_typed applied over each row. Looping over an ndarray is faster in
│ │ │ │ │ Cython than looping over a _S_e_r_i_e_s object.
│ │ │ │ │ Since apply_integrate_f is typed to accept an np.ndarray, _S_e_r_i_e_s_._t_o___n_u_m_p_y_(_)
│ │ │ │ │ calls are needed to utilize this function.
│ │ │ │ │ In [14]: %timeit apply_integrate_f(df["a"].to_numpy(), df["b"].to_numpy(), df
│ │ │ │ │ ["N"].to_numpy())
│ │ │ │ │ -1.17 ms +- 215 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ │ +1.16 ms +- 519 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ │ Performance has improved from the prior implementation by almost ten times.
│ │ │ │ │ ******** DDiissaabblliinngg ccoommppiilleerr ddiirreeccttiivveess_## ********
│ │ │ │ │ The majority of the time is now spent in apply_integrate_f. Disabling Cython’s
│ │ │ │ │ boundscheck and wraparound checks can yield more performance.
│ │ │ │ │ In [15]: %prun -l 4 apply_integrate_f(df["a"].to_numpy(), df["b"].to_numpy(),
│ │ │ │ │ df["N"].to_numpy())
│ │ │ │ │ 78 function calls in 0.001 seconds
│ │ │ │ │ @@ -298,15 +298,15 @@
│ │ │ │ │ /usr/lib/aarch64-linux-gnu/python3-numpy/numpy/_core/include/numpy/
│ │ │ │ │ npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API,
│ │ │ │ │ disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
│ │ │ │ │ 17 | #warning "Using deprecated NumPy API, disable it with " \
│ │ │ │ │ | ^~~~~~~
│ │ │ │ │ In [17]: %timeit apply_integrate_f_wrap(df["a"].to_numpy(), df["b"].to_numpy(),
│ │ │ │ │ df["N"].to_numpy())
│ │ │ │ │ -813 us +- 191 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ │ +814 us +- 273 ns per loop (mean +- std. dev. of 7 runs, 1,000 loops each)
│ │ │ │ │ However, a loop indexer i accessing an invalid location in an array would cause
│ │ │ │ │ a segfault because memory access isn’t checked. For more about boundscheck and
│ │ │ │ │ wraparound, see the Cython docs on _c_o_m_p_i_l_e_r_ _d_i_r_e_c_t_i_v_e_s.
│ │ │ │ │ ********** NNuummbbaa ((JJIITT ccoommppiillaattiioonn))_## **********
│ │ │ │ │ An alternative to statically compiling Cython code is to use a dynamic just-in-
│ │ │ │ │ time (JIT) compiler with _N_u_m_b_a.
│ │ │ │ │ Numba allows you to write a pure Python function which can be JIT compiled to
│ │ │ │ │ @@ -609,17 +609,17 @@
│ │ │ │ │ The 'numexpr' engine is the more performant engine that can yield performance
│ │ │ │ │ improvements compared to standard Python syntax for large _D_a_t_a_F_r_a_m_e. This
│ │ │ │ │ engine requires the optional dependency numexpr to be installed.
│ │ │ │ │ The 'python' engine is generally nnoott useful except for testing other evaluation
│ │ │ │ │ engines against it. You will achieve nnoo performance benefits using _e_v_a_l_(_) with
│ │ │ │ │ engine='python' and may incur a performance hit.
│ │ │ │ │ In [40]: %timeit df1 + df2 + df3 + df4
│ │ │ │ │ -8.5 ms +- 139 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +8.51 ms +- 61.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ In [41]: %timeit pd.eval("df1 + df2 + df3 + df4", engine="python")
│ │ │ │ │ -10.9 ms +- 62.2 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +11 ms +- 167 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ ******** TThhee _DD_aa_tt_aa_FF_rr_aa_mm_ee_.._ee_vv_aa_ll_((_)) mmeetthhoodd_## ********
│ │ │ │ │ In addition to the top level _p_a_n_d_a_s_._e_v_a_l_(_) function you can also evaluate an
│ │ │ │ │ expression in the “context” of a _D_a_t_a_F_r_a_m_e.
│ │ │ │ │ In [42]: df = pd.DataFrame(np.random.randn(5, 2), columns=["a", "b"])
│ │ │ │ │
│ │ │ │ │ In [43]: df.eval("a + b")
│ │ │ │ │ Out[43]:
│ │ │ │ │ @@ -716,29 +716,29 @@
│ │ │ │ │ _p_a_n_d_a_s_._e_v_a_l_(_) works well with expressions containing large arrays.
│ │ │ │ │ In [58]: nrows, ncols = 20000, 100
│ │ │ │ │
│ │ │ │ │ In [59]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols)) for
│ │ │ │ │ _ in range(4)]
│ │ │ │ │ _D_a_t_a_F_r_a_m_e arithmetic:
│ │ │ │ │ In [60]: %timeit df1 + df2 + df3 + df4
│ │ │ │ │ -8.54 ms +- 372 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +8.21 ms +- 164 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ In [61]: %timeit pd.eval("df1 + df2 + df3 + df4")
│ │ │ │ │ -7.36 ms +- 434 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +6.94 ms +- 67.2 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ _D_a_t_a_F_r_a_m_e comparison:
│ │ │ │ │ In [62]: %timeit (df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)
│ │ │ │ │ -10.8 ms +- 97.4 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +10.6 ms +- 127 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ In [63]: %timeit pd.eval("(df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)")
│ │ │ │ │ -12.2 ms +- 230 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +11.8 ms +- 155 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ _D_a_t_a_F_r_a_m_e arithmetic with unaligned axes.
│ │ │ │ │ In [64]: s = pd.Series(np.random.randn(50))
│ │ │ │ │
│ │ │ │ │ In [65]: %timeit df1 + df2 + df3 + df4 + s
│ │ │ │ │ -19.5 ms +- 94.6 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +19.8 ms +- 73 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ In [66]: %timeit pd.eval("df1 + df2 + df3 + df4 + s")
│ │ │ │ │ -9.5 ms +- 131 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ +8.54 ms +- 45 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
│ │ │ │ │ Note
│ │ │ │ │ Operations such as
│ │ │ │ │ 1 and 2 # would parse to 1 & 2, but should evaluate to 2
│ │ │ │ │ 3 or 4 # would parse to 3 | 4, but should evaluate to 3
│ │ │ │ │ ~1 # this is okay, but slower when using eval
│ │ │ │ │ should be performed in Python. An exception will be raised if you try to
│ │ │ │ │ perform any boolean/bitwise operations with scalar operands that are not of
│ │ │ ├── ./usr/share/doc/python-pandas-doc/html/user_guide/scale.html
│ │ │ │ @@ -1086,16 +1086,16 @@
│ │ │ │ ....: files = pathlib.Path("data/timeseries/").glob("ts*.parquet")
│ │ │ │ ....: counts = pd.Series(dtype=int)
│ │ │ │ ....: for path in files:
│ │ │ │ ....: df = pd.read_parquet(path)
│ │ │ │ ....: counts = counts.add(df["name"].value_counts(), fill_value=0)
│ │ │ │ ....: counts.astype(int)
│ │ │ │ ....:
│ │ │ │ -CPU times: user 433 us, sys: 183 us, total: 616 us
│ │ │ │ -Wall time: 625 us
│ │ │ │ +CPU times: user 551 us, sys: 0 ns, total: 551 us
│ │ │ │ +Wall time: 557 us
│ │ │ │ Out[32]: Series([], dtype: int64)
│ │ │ │
Some readers, like pandas.read_csv()
, offer parameters to control the
│ │ │ │ chunksize
when reading a single file.
Manually chunking is an OK option for workflows that don’t
│ │ │ │ require too sophisticated of operations. Some operations, like pandas.DataFrame.groupby()
, are
│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -644,16 +644,16 @@
│ │ │ │ │ ....: files = pathlib.Path("data/timeseries/").glob("ts*.parquet")
│ │ │ │ │ ....: counts = pd.Series(dtype=int)
│ │ │ │ │ ....: for path in files:
│ │ │ │ │ ....: df = pd.read_parquet(path)
│ │ │ │ │ ....: counts = counts.add(df["name"].value_counts(), fill_value=0)
│ │ │ │ │ ....: counts.astype(int)
│ │ │ │ │ ....:
│ │ │ │ │ -CPU times: user 433 us, sys: 183 us, total: 616 us
│ │ │ │ │ -Wall time: 625 us
│ │ │ │ │ +CPU times: user 551 us, sys: 0 ns, total: 551 us
│ │ │ │ │ +Wall time: 557 us
│ │ │ │ │ Out[32]: Series([], dtype: int64)
│ │ │ │ │ Some readers, like _p_a_n_d_a_s_._r_e_a_d___c_s_v_(_), offer parameters to control the chunksize
│ │ │ │ │ when reading a single file.
│ │ │ │ │ Manually chunking is an OK option for workflows that don’t require too
│ │ │ │ │ sophisticated of operations. Some operations, like _p_a_n_d_a_s_._D_a_t_a_F_r_a_m_e_._g_r_o_u_p_b_y_(_),
│ │ │ │ │ are much harder to do chunkwise. In these cases, you may be better switching to
│ │ │ │ │ a different library that implements these out-of-core algorithms for you.
│ │ │ ├── ./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz
│ │ │ │ ├── style.ipynb
│ │ │ │ │ ├── Pretty-printed
│ │ │ │ │ │┄ Similarity: 0.9985610875706213%
│ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2026-05-02T10:47:19.790405Z', "
│ │ │ │ │ │┄ "'iopub.status.busy': '2026-05-02T10:47:19.789324Z', 'iopub.status.idle': "
│ │ │ │ │ │┄ "'2026-05-02T10:47:20.182832Z', 'shell.execute_reply': "
│ │ │ │ │ │┄ "'2026-05-02T10:47:20.181959Z'}}}, 3: {'metadata': {'execution': "
│ │ │ │ │ │┄ "{'iopub.execute_input': '2026-05-02T10:47:20.186367Z', 'iopub.status.busy': "
│ │ │ │ │ │┄ "'2026-05-02T10:47:20.186062Z', 'iopub.status.idle': '2026-05-02T10:47:2 […]
│ │ │ │ │ │ @@ -39,18 +39,18 @@
│ │ │ │ │ │ ]
│ │ │ │ │ │ },
│ │ │ │ │ │ {
│ │ │ │ │ │ "cell_type": "code",
│ │ │ │ │ │ "execution_count": 1,
│ │ │ │ │ │ "metadata": {
│ │ │ │ │ │ "execution": {
│ │ │ │ │ │ - "iopub.execute_input": "2025-03-30T03:09:13.873605Z",
│ │ │ │ │ │ - "iopub.status.busy": "2025-03-30T03:09:13.873129Z",
│ │ │ │ │ │ - "iopub.status.idle": "2025-03-30T03:09:14.282146Z",
│ │ │ │ │ │ - "shell.execute_reply": "2025-03-30T03:09:14.281127Z"
│ │ │ │ │ │ + "iopub.execute_input": "2026-05-02T10:47:19.790405Z",
│ │ │ │ │ │ + "iopub.status.busy": "2026-05-02T10:47:19.789324Z",
│ │ │ │ │ │ + "iopub.status.idle": "2026-05-02T10:47:20.182832Z",
│ │ │ │ │ │ + "shell.execute_reply": "2026-05-02T10:47:20.181959Z"
│ │ │ │ │ │ },
│ │ │ │ │ │ "nbsphinx": "hidden"
│ │ │ │ │ │ },
│ │ │ │ │ │ "outputs": [],
│ │ │ │ │ │ "source": [
│ │ │ │ │ │ "import matplotlib.pyplot\n",
│ │ │ │ │ │ "# We have this here to trigger matplotlib's font cache stuff.\n",
│ │ │ │ │ │ @@ -77,36 +77,36 @@
│ │ │ │ │ │ ]
│ │ │ │ │ │ },
│ │ │ │ │ │ {
│ │ │ │ │ │ "cell_type": "code",
│ │ │ │ │ │ "execution_count": 2,
│ │ │ │ │ │ "metadata": {
│ │ │ │ │ │ "execution": {
│ │ │ │ │ │ - "iopub.execute_input": "2025-03-30T03:09:14.286792Z",
│ │ │ │ │ │ - "iopub.status.busy": "2025-03-30T03:09:14.286462Z",
│ │ │ │ │ │ - "iopub.status.idle": "2025-03-30T03:09:14.585742Z",
│ │ │ │ │ │ - "shell.execute_reply": "2025-03-30T03:09:14.584821Z"
│ │ │ │ │ │ + "iopub.execute_input": "2026-05-02T10:47:20.186367Z",
│ │ │ │ │ │ + "iopub.status.busy": "2026-05-02T10:47:20.186062Z",
│ │ │ │ │ │ + "iopub.status.idle": "2026-05-02T10:47:20.536188Z",
│ │ │ │ │ │ + "shell.execute_reply": "2026-05-02T10:47:20.535267Z"
│ │ │ │ │ │ }
│ │ │ │ │ │ },
│ │ │ │ │ │ "outputs": [],
│ │ │ │ │ │ "source": [
│ │ │ │ │ │ "import pandas as pd\n",
│ │ │ │ │ │ "import numpy as np\n",
│ │ │ │ │ │ "import matplotlib as mpl\n"
│ │ │ │ │ │ ]
│ │ │ │ │ │ },
│ │ │ │ │ │ {
│ │ │ │ │ │ "cell_type": "code",
│ │ │ │ │ │ "execution_count": 3,
│ │ │ │ │ │ "metadata": {
│ │ │ │ │ │ "execution": {
│ │ │ │ │ │ - "iopub.execute_input": "2025-03-30T03:09:14.589457Z",
│ │ │ │ │ │ - "iopub.status.busy": "2025-03-30T03:09:14.589081Z",
│ │ │ │ │ │ - "iopub.status.idle": "2025-03-30T03:09:14.639517Z",
│ │ │ │ │ │ - "shell.execute_reply": "2025-03-30T03:09:14.638527Z"
│ │ │ │ │ │ + "iopub.execute_input": "2026-05-02T10:47:20.539667Z",
│ │ │ │ │ │ + "iopub.status.busy": "2026-05-02T10:47:20.539338Z",
│ │ │ │ │ │ + "iopub.status.idle": "2026-05-02T10:47:20.587331Z",
│ │ │ │ │ │ + "shell.execute_reply": "2026-05-02T10:47:20.586309Z"
│ │ │ │ │ │ },
│ │ │ │ │ │ "nbsphinx": "hidden"
│ │ │ │ │ │ },
│ │ │ │ │ │ "outputs": [],
│ │ │ │ │ │ "source": [
│ │ │ │ │ │ "# For reproducibility - this doesn't respect uuid_len or positionally-passed uuid but the places here that use that coincidentally bypass this anyway\n",
│ │ │ │ │ │ "from pandas.io.formats.style import Styler\n",
│ │ │ │ │ │ @@ -123,18 +123,18 @@
│ │ │ │ │ │ ]
│ │ │ │ │ │ },
│ │ │ │ │ │ {
│ │ │ │ │ │ "cell_type": "code",
│ │ │ │ │ │ "execution_count": 4,
│ │ │ │ │ │ "metadata": {
│ │ │ │ │ │ "execution": {
│ │ │ │ │ │ - "iopub.execute_input": "2025-03-30T03:09:14.643038Z",
│ │ │ │ │ │ - "iopub.status.busy": "2025-03-30T03:09:14.642710Z",
│ │ │ │ │ │ - "iopub.status.idle": "2025-03-30T03:09:14.652299Z",
│ │ │ │ │ │ - "shell.execute_reply": "2025-03-30T03:09:14.651583Z"
│ │ │ │ │ │ + "iopub.execute_input": "2026-05-02T10:47:20.590639Z",
│ │ │ │ │ │ + "iopub.status.busy": "2026-05-02T10:47:20.590316Z",
│ │ │ │ │ │ + "iopub.status.idle": "2026-05-02T10:47:20.600127Z",
│ │ │ │ │ │ + "shell.execute_reply": "2026-05-02T10:47:20.599165Z"
│ │ │ │ │ │ }
│ │ │ │ │ │ },
│ │ │ │ │ │ "outputs": [
│ │ │ │ │ │ {
│ │ │ │ │ │ "data": {
│ │ │ │ │ │ "text/html": [
│ │ │ │ │ │ "