{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.Pn4zV0h3/b1/pandas_2.2.2+dfsg-3_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.Pn4zV0h3/b2/pandas_2.2.2+dfsg-3_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- c3636b038e8bbf3fcf8d1ae7d8ad022b 10511012 doc optional python-pandas-doc_2.2.2+dfsg-3_all.deb\n+ 2e8e6648bcdc6675a0bc80e17623ce1b 10511720 doc optional python-pandas-doc_2.2.2+dfsg-3_all.deb\n f060c08cf486b3293cd514fa56fc8775 62132032 debug optional python3-pandas-lib-dbgsym_2.2.2+dfsg-3_i386.deb\n db0b02fbbf22ea42e37e631a9fef513b 7562980 python optional python3-pandas-lib_2.2.2+dfsg-3_i386.deb\n 79841846609e9a58fb4ebe99b09ff8ac 3095376 python optional python3-pandas_2.2.2+dfsg-3_all.deb\n"}, {"source1": "python-pandas-doc_2.2.2+dfsg-3_all.deb", "source2": "python-pandas-doc_2.2.2+dfsg-3_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-05-06 13:47:52.000000 debian-binary\n--rw-r--r-- 0 0 0 147456 2024-05-06 13:47:52.000000 control.tar.xz\n--rw-r--r-- 0 0 0 10363364 2024-05-06 13:47:52.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 147460 2024-05-06 13:47:52.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 10364068 2024-05-06 13:47:52.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -6255,61 +6255,61 @@\n -rw-r--r-- 0 root (0) root (0) 206416 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/series.html\n -rw-r--r-- 0 root (0) root (0) 38771 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/style.html\n -rw-r--r-- 0 root (0) root (0) 38909 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/testing.html\n -rw-r--r-- 0 root (0) root (0) 43513 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/reference/window.html\n -rw-r--r-- 0 root (0) root (0) 244 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/release.html\n -rw-r--r-- 0 root (0) root (0) 269 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/reshaping.html\n -rw-r--r-- 0 root (0) root (0) 7370 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/search.html\n--rw-r--r-- 0 root (0) root (0) 2427808 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/searchindex.js\n+-rw-r--r-- 0 root (0) root (0) 2427832 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/searchindex.js\n -rw-r--r-- 0 root (0) root (0) 259 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/sparse.html\n -rw-r--r-- 0 root (0) root (0) 244 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/style.html\n -rw-r--r-- 0 root (0) root (0) 255 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/text.html\n -rw-r--r-- 0 root (0) root (0) 256 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/timedeltas.html\n -rw-r--r-- 0 root (0) root (0) 277 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/timeseries.html\n -rw-r--r-- 0 root (0) root (0) 272 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/tutorials.html\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/\n -rw-r--r-- 0 root (0) root (0) 161368 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/10min.html\n--rw-r--r-- 0 root (0) root (0) 274161 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html\n+-rw-r--r-- 0 root (0) root (0) 274163 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html\n -rw-r--r-- 0 root (0) root (0) 426416 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/basics.html\n -rw-r--r-- 0 root (0) root (0) 26009 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/boolean.html\n -rw-r--r-- 0 root (0) root (0) 207636 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/categorical.html\n -rw-r--r-- 0 root (0) root (0) 7710 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/cookbook.html\n -rw-r--r-- 0 root (0) root (0) 55657 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/copy_on_write.html\n -rw-r--r-- 0 root (0) root (0) 150189 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/dsintro.html\n -rw-r--r-- 0 root (0) root (0) 70826 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/duplicates.html\n--rw-r--r-- 0 root (0) root (0) 110986 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html\n+-rw-r--r-- 0 root (0) root (0) 110974 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html\n -rw-r--r-- 0 root (0) root (0) 99489 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/gotchas.html\n -rw-r--r-- 0 root (0) root (0) 291225 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/groupby.html\n -rw-r--r-- 0 root (0) root (0) 49266 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/index.html\n -rw-r--r-- 0 root (0) root (0) 383928 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/indexing.html\n -rw-r--r-- 0 root (0) root (0) 31200 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/integer_na.html\n -rw-r--r-- 0 root (0) root (0) 1138594 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/io.html\n -rw-r--r-- 0 root (0) root (0) 198947 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/merging.html\n -rw-r--r-- 0 root (0) root (0) 168482 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/missing_data.html\n -rw-r--r-- 0 root (0) root (0) 101657 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/options.html\n -rw-r--r-- 0 root (0) root (0) 136945 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/pyarrow.html\n -rw-r--r-- 0 root (0) root (0) 152685 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/reshaping.html\n -rw-r--r-- 0 root (0) root (0) 105028 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/scale.html\n -rw-r--r-- 0 root (0) root (0) 55406 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/sparse.html\n -rw-r--r-- 0 root (0) root (0) 688567 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.html\n--rw-r--r-- 0 root (0) root (0) 87767 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 87852 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz\n -rw-r--r-- 0 root (0) root (0) 154971 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/text.html\n -rw-r--r-- 0 root (0) root (0) 90572 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/timedeltas.html\n -rw-r--r-- 0 root (0) root (0) 477039 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/timeseries.html\n -rw-r--r-- 0 root (0) root (0) 192397 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/visualization.html\n -rw-r--r-- 0 root (0) root (0) 131481 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/user_guide/window.html\n -rw-r--r-- 0 root (0) root (0) 270 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/visualization.html\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/\n -rw-r--r-- 0 root (0) root (0) 97789 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/index.html\n -rw-r--r-- 0 root (0) root (0) 8694 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/index.html.gz\n -rw-r--r-- 0 root (0) root (0) 74137 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.10.0.html\n -rw-r--r-- 0 root (0) root (0) 56321 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.10.1.html\n -rw-r--r-- 0 root (0) root (0) 72353 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.11.0.html\n -rw-r--r-- 0 root (0) root (0) 93294 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.12.0.html\n--rw-r--r-- 0 root (0) root (0) 209198 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.0.html\n+-rw-r--r-- 0 root (0) root (0) 209197 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.0.html\n -rw-r--r-- 0 root (0) root (0) 78570 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.13.1.html\n -rw-r--r-- 0 root (0) root (0) 229824 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.14.0.html\n -rw-r--r-- 0 root (0) root (0) 71904 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.14.1.html\n -rw-r--r-- 0 root (0) root (0) 239384 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.0.html\n -rw-r--r-- 0 root (0) root (0) 57843 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.1.html\n -rw-r--r-- 0 root (0) root (0) 64214 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.15.2.html\n -rw-r--r-- 0 root (0) root (0) 133735 2024-05-06 13:47:52.000000 ./usr/share/doc/python-pandas-doc/html/whatsnew/v0.16.0.html\n"}, {"source1": "./usr/share/doc/python-pandas-doc/html/searchindex.js", "source2": "./usr/share/doc/python-pandas-doc/html/searchindex.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -21522,15 +21522,14 @@\n \"005000\": 2218,\n \"005361\": 2207,\n \"005383\": 2220,\n \"005446\": 2219,\n \"005462\": 2191,\n \"005977\": 2199,\n \"005979\": 2186,\n- \"006\": 2193,\n \"006123\": 2207,\n \"006154\": [2185, 2197, 2199, 2202, 2204, 2215, 2257],\n \"0062\": 2191,\n \"006349\": 2195,\n \"006438\": 2215,\n \"006549\": [182, 760],\n \"006695\": 2186,\n@@ -21610,22 +21609,22 @@\n \"014138\": 2191,\n \"014144\": [102, 1158],\n \"014648\": 2186,\n \"014752\": 2235,\n \"014805\": 2202,\n \"014871\": [2185, 2197, 2199, 2202],\n \"014888\": 2207,\n- \"015\": 2193,\n \"015083\": 2186,\n \"015420\": 2195,\n \"015458\": 2207,\n \"015696\": [2220, 2228, 2230],\n \"015906\": 2186,\n \"015962\": [2184, 2214],\n \"015988\": 2186,\n+ \"016\": 2193,\n \"016009\": 15,\n \"016287\": 2210,\n \"016331\": 2210,\n \"016424\": [16, 19],\n \"016543e\": 2195,\n \"016692\": [2184, 2195, 2214],\n \"01685762652715874\": [624, 1215],\n@@ -21674,15 +21673,15 @@\n \"021377\": 2207,\n \"021382\": 2184,\n \"021499\": 2186,\n \"02155\": 30,\n \"022070\": 2184,\n \"022196\": 2207,\n \"022777\": 2207,\n- \"023\": [1447, 2193, 2200, 2232],\n+ \"023\": [1447, 2200, 2232],\n \"023100\": 2195,\n \"023167\": 15,\n \"023202\": 2199,\n \"023526\": 2191,\n \"023640\": 2230,\n \"023688\": [15, 2185, 2191, 2197],\n \"0237\": 2204,\n@@ -21696,15 +21695,15 @@\n \"024580\": [2184, 2195, 2214],\n \"024738\": [102, 1158],\n \"024786\": 2207,\n \"024810\": 2207,\n \"0249\": [267, 896],\n \"024925\": 2195,\n \"024967\": 2207,\n- \"025\": [2186, 2222, 2227],\n+ \"025\": [2186, 2193, 2222, 2227],\n \"025054\": 2184,\n \"025270\": 2186,\n \"025363\": 2186,\n \"025367\": 2207,\n \"025747\": [2191, 2197, 2207],\n \"026036\": 2207,\n \"026158\": 2210,\n@@ -21956,15 +21955,15 @@\n \"059481\": 2207,\n \"059552\": 2207,\n \"059761\": 2207,\n \"059869e\": 2191,\n \"059881\": 2210,\n \"059904\": 2214,\n \"05t00\": 2261,\n- \"06\": [26, 27, 29, 30, 31, 36, 207, 213, 218, 230, 273, 292, 294, 332, 363, 526, 534, 536, 637, 644, 646, 688, 781, 788, 793, 804, 900, 969, 993, 1075, 1344, 1441, 1442, 1449, 1450, 1452, 1489, 1497, 1500, 1506, 1524, 1598, 1677, 2184, 2186, 2195, 2197, 2199, 2201, 2204, 2205, 2207, 2209, 2210, 2212, 2214, 2215, 2216, 2217, 2218, 2219, 2222, 2226, 2230, 2231, 2232, 2235, 2246, 2249, 2261, 2264, 2271, 2298, 2302],\n+ \"06\": [26, 27, 29, 30, 31, 36, 207, 213, 218, 230, 273, 292, 294, 332, 363, 526, 534, 536, 637, 644, 646, 688, 781, 788, 793, 804, 900, 969, 993, 1075, 1344, 1441, 1442, 1449, 1450, 1452, 1489, 1497, 1500, 1506, 1524, 1598, 1677, 2184, 2186, 2195, 2197, 2199, 2201, 2204, 2205, 2207, 2209, 2210, 2212, 2214, 2215, 2216, 2217, 2218, 2219, 2222, 2226, 2228, 2230, 2231, 2232, 2235, 2246, 2249, 2261, 2264, 2271, 2298, 2302],\n \"060015\": 2207,\n \"060074\": 2185,\n \"060603\": 2207,\n \"060654\": 2207,\n \"060777\": 2207,\n \"061019\": 2199,\n \"061068\": 2210,\n@@ -22244,20 +22243,20 @@\n \"0n\": [1489, 2298],\n \"0px\": 2207,\n \"0rc0\": 13,\n \"0th\": [26, 249, 882, 1202, 2185, 2197, 2199, 2235],\n \"0x00\": 2294,\n \"0x40\": 2294,\n \"0x7efd0c0b0690\": 3,\n- \"0xd9d13510\": 2199,\n- \"0xdc087478\": 2197,\n- \"0xdc375f48\": 2195,\n- \"0xe2d14840\": 2246,\n- \"0xe4591bd0\": 2230,\n- \"0xe6a033e8\": 2210,\n+ \"0xd9a9c798\": 2199,\n+ \"0xdbfe7c28\": 2197,\n+ \"0xdccfbe88\": 2195,\n+ \"0xe27522d0\": 2246,\n+ \"0xe4483b88\": 2230,\n+ \"0xe638f208\": 2210,\n \"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],\n \"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],\n \"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],\n \"1000\": [9, 10, 15, 16, 17, 18, 19, 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],\n \"10000\": [192, 1485, 2185, 2201, 2206, 2210, 2220, 2228, 2266],\n \"100000\": [1354, 1372, 2199, 2201, 2210],\n \"1000000\": [144, 2199, 2228],\n@@ -22806,15 +22805,15 @@\n \"11370\": 2230,\n \"11372\": 2229,\n \"11374\": 2229,\n \"11376\": 2229,\n \"1138\": 2192,\n \"11386\": [2230, 2241],\n \"1139\": 2192,\n- \"114\": [268, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2207, 2208, 2209, 2210, 2211, 2220, 2230, 2232, 2256],\n+ \"114\": [268, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2207, 2208, 2209, 2210, 2211, 2220, 2230, 2232, 2256],\n \"1140\": 2192,\n \"11402\": 2229,\n \"11405\": 2229,\n \"11406\": 2230,\n \"114060\": 2207,\n \"11408\": 2229,\n \"11411\": 2229,\n@@ -22881,15 +22880,15 @@\n \"115903\": 2214,\n \"11591\": 2230,\n \"11592\": 2235,\n \"11594\": 2231,\n \"11595\": 2229,\n \"11597\": 2230,\n \"11599\": 2229,\n- \"116\": [29, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2220, 2230, 2232],\n+ \"116\": [29, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2220, 2230, 2232],\n \"1160\": 2199,\n \"11600\": 2229,\n \"116015\": 2207,\n \"116018\": 2186,\n \"11603\": 2230,\n \"1161\": 2199,\n \"11610\": 2229,\n@@ -22932,15 +22931,15 @@\n \"1169\": 2199,\n \"11690\": 2230,\n \"11692\": 2230,\n \"11693\": 2230,\n \"11696\": 2230,\n \"11698\": 2230,\n \"11699\": 2230,\n- \"117\": [29, 268, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2221, 2222, 2230, 2232, 2241],\n+ \"117\": [29, 268, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2221, 2222, 2230, 2232, 2241],\n \"1170\": 2199,\n \"11704\": [2241, 2271],\n \"11708\": 2230,\n \"1171\": 2199,\n \"11711\": 2230,\n \"11713\": 2230,\n \"11718\": 2230,\n@@ -23044,15 +23043,15 @@\n \"11974\": 2230,\n \"11981\": 2232,\n \"11986\": 2230,\n \"11990\": 2230,\n \"11995\": 2230,\n \"11h\": 2210,\n \"12\": [15, 16, 17, 18, 19, 22, 24, 25, 26, 28, 29, 30, 31, 32, 69, 72, 73, 77, 78, 84, 88, 102, 107, 109, 111, 113, 129, 133, 134, 160, 162, 171, 173, 183, 187, 188, 189, 190, 193, 199, 202, 204, 206, 207, 208, 213, 215, 216, 217, 220, 221, 222, 244, 253, 259, 265, 275, 288, 292, 294, 296, 303, 308, 309, 313, 316, 318, 332, 333, 345, 362, 363, 420, 423, 509, 513, 514, 515, 516, 522, 524, 526, 530, 532, 535, 541, 557, 575, 586, 595, 600, 629, 635, 639, 644, 646, 652, 655, 660, 661, 666, 670, 673, 688, 689, 708, 738, 761, 763, 764, 765, 766, 768, 781, 782, 788, 799, 873, 886, 890, 893, 895, 923, 926, 940, 943, 948, 953, 976, 980, 987, 1017, 1075, 1154, 1158, 1162, 1164, 1169, 1189, 1192, 1195, 1205, 1219, 1221, 1226, 1250, 1253, 1256, 1267, 1274, 1276, 1290, 1292, 1336, 1344, 1392, 1431, 1433, 1452, 1482, 1487, 1497, 1498, 1560, 1578, 1598, 1620, 1637, 1657, 1677, 1699, 1720, 1758, 1793, 1815, 1839, 1876, 1894, 1912, 1930, 1964, 2018, 2127, 2145, 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, 2218, 2219, 2220, 2221, 2222, 2223, 2225, 2226, 2228, 2229, 2230, 2231, 2232, 2235, 2238, 2240, 2241, 2246, 2249, 2257, 2261, 2264, 2265, 2271, 2277, 2283, 2289, 2294, 2298, 2302, 2307],\n- \"120\": [15, 78, 162, 273, 359, 360, 587, 588, 900, 930, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2220, 2230, 2232],\n+ \"120\": [15, 78, 162, 273, 359, 360, 587, 588, 900, 930, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2208, 2209, 2210, 2211, 2220, 2230, 2232],\n \"12000\": [2185, 2188, 2220],\n \"12004\": 2265,\n \"120055\": 2228,\n \"12011\": [176, 179],\n \"12014\": 2230,\n \"12017\": 2230,\n \"12019\": 2230,\n@@ -23148,15 +23147,15 @@\n \"12244\": 2230,\n \"12258\": 2232,\n \"12259\": 2232,\n \"1226\": 2217,\n \"12290\": 2230,\n \"12292\": 2230,\n \"12299\": 2230,\n- \"123\": [3, 134, 825, 826, 833, 849, 853, 857, 861, 863, 868, 1017, 1403, 1404, 2166, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2204, 2207, 2208, 2209, 2210, 2211, 2214, 2218, 2225, 2228, 2229, 2232],\n+ \"123\": [3, 134, 825, 826, 833, 849, 853, 857, 861, 863, 868, 1017, 1403, 1404, 2166, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2204, 2207, 2208, 2209, 2210, 2211, 2214, 2218, 2225, 2228, 2229, 2232],\n \"12300\": 2230,\n \"123000\": 2199,\n \"123000000000\": 918,\n \"12301\": 2230,\n \"12307\": 2230,\n \"123083\": 2207,\n \"12309\": 2232,\n@@ -23820,15 +23819,15 @@\n \"13988\": 2232,\n \"13990\": 2232,\n \"13994\": 2232,\n \"139976\": 2186,\n \"13999\": 2232,\n \"139999\": 1372,\n \"14\": [3, 6, 15, 16, 17, 18, 19, 25, 26, 28, 29, 30, 31, 32, 133, 187, 190, 193, 197, 208, 213, 245, 268, 277, 345, 420, 632, 708, 718, 763, 766, 768, 782, 788, 799, 879, 903, 955, 956, 957, 958, 963, 964, 965, 966, 967, 968, 970, 973, 975, 976, 977, 978, 979, 980, 981, 992, 994, 995, 997, 999, 1009, 1013, 1014, 1018, 1023, 1025, 1195, 1256, 1292, 1336, 1433, 1437, 1438, 1439, 1598, 1657, 1677, 1815, 1876, 1894, 1912, 1964, 2018, 2054, 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, 2222, 2223, 2225, 2226, 2228, 2229, 2230, 2231, 2232, 2235, 2238, 2240, 2241, 2242, 2246, 2249, 2257, 2261, 2265, 2271, 2277, 2283, 2289, 2294, 2298, 2302, 2307],\n- \"140\": [213, 788, 1433, 2184, 2185, 2186, 2188, 2195, 2197, 2199, 2200, 2201, 2203, 2205, 2208, 2210, 2211, 2212, 2231, 2232, 2298],\n+ \"140\": [213, 788, 1433, 2184, 2185, 2186, 2188, 2195, 2197, 2199, 2200, 2201, 2203, 2208, 2210, 2211, 2212, 2231, 2232, 2298],\n \"14000\": [2185, 2220, 2232],\n \"14001\": 2238,\n \"140069\": 2229,\n \"14007\": 2241,\n \"14012\": 2232,\n \"14013\": 2241,\n \"14015\": 2235,\n@@ -23978,15 +23977,15 @@\n \"14461\": 2233,\n \"144646\": 2207,\n \"14477\": 2233,\n \"14478\": 2236,\n \"14484\": 2239,\n \"14487\": 2298,\n \"14496\": 2233,\n- \"145\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2210, 2211, 2218, 2232],\n+ \"145\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2210, 2211, 2232],\n \"145023\": 2207,\n \"14515\": 2234,\n \"14522\": 2235,\n \"145224193\": [926, 987, 2209, 2210],\n \"145245\": 2207,\n \"145250\": 2207,\n \"14529711373305115\": 2206,\n@@ -24363,15 +24362,15 @@\n \"15686\": 2271,\n \"15687\": 2235,\n \"1569\": 2262,\n \"15690\": 2238,\n \"15694\": 2235,\n \"15695\": 2283,\n \"15697\": 2246,\n- \"157\": [18, 2185, 2186, 2188, 2193, 2195, 2197, 2199, 2200, 2201, 2210, 2211],\n+ \"157\": [18, 2185, 2186, 2188, 2193, 2195, 2197, 2199, 2200, 2201, 2205, 2210, 2211],\n \"15701\": 2235,\n \"15704\": 2238,\n \"15707\": 2235,\n \"1571\": 2262,\n \"15713\": 2235,\n \"15714\": 2235,\n \"15716\": 2235,\n@@ -25229,15 +25228,15 @@\n \"18671\": 2241,\n \"18672\": 2241,\n \"186735\": 2207,\n \"186786\": 2229,\n \"18686\": 2241,\n \"186860\": 2199,\n \"18699\": 2241,\n- \"187\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2207, 2210, 2211, 2212, 2231, 2253],\n+ \"187\": [2185, 2186, 2188, 2195, 2197, 2199, 2207, 2210, 2211, 2212, 2231, 2253],\n \"1870\": 2232,\n \"18702\": 2302,\n \"18705\": [2289, 2298],\n \"1871\": 2263,\n \"18713\": 2241,\n \"187184\": 2207,\n \"18720\": 2265,\n@@ -25422,15 +25421,15 @@\n \"19274\": 2241,\n \"19276\": 2241,\n \"19283\": 2241,\n \"19289\": 2241,\n \"1929\": 2193,\n \"192944\": 2207,\n \"19296\": 2265,\n- \"193\": [15, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2210, 2211],\n+ \"193\": [15, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2210, 2211],\n \"193000\": 997,\n \"19301\": 2241,\n \"19303\": 2241,\n \"19320\": 2243,\n \"19322\": 2241,\n \"19329\": 2241,\n \"19333\": 2241,\n@@ -25470,15 +25469,15 @@\n \"19458\": 2241,\n \"19474\": 2241,\n \"194757\": 2199,\n \"19478\": 2241,\n \"194889\": 2197,\n \"194921\": 2191,\n \"19497\": 2241,\n- \"195\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2210, 2211],\n+ \"195\": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211],\n \"19506\": 2246,\n \"1951\": 2289,\n \"19521\": 2241,\n \"19522\": 2241,\n \"195246\": 2197,\n \"19526\": 2241,\n \"19538\": 2241,\n@@ -25736,18 +25735,17 @@\n \"2020q1\": 1008,\n \"2021\": [288, 296, 318, 639, 652, 673, 940, 943, 948, 957, 970, 997, 1542, 2201, 2207, 2213, 2277, 2289, 2294],\n \"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],\n \"2022a\": 2294,\n \"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],\n \"202380\": 2207,\n \"20239\": [2241, 2265],\n- \"2024\": [36, 270, 544, 546, 555, 567, 894, 898, 2127, 2213],\n+ \"2024\": [36, 270, 544, 546, 555, 567, 894, 898, 2127, 2213, 2228],\n \"2025\": [544, 546, 555, 567, 894, 898, 2228],\n \"20251\": 2307,\n- \"2026\": 2228,\n \"202602\": 2205,\n \"202646\": 2230,\n \"20271\": 2241,\n \"202872\": [2184, 2214],\n \"202946\": 2207,\n \"203\": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211, 2231, 2253],\n \"2030\": 2265,\n@@ -25964,15 +25962,15 @@\n \"21071\": 2242,\n \"21078\": 2242,\n \"21083\": 2242,\n \"2109\": 2264,\n \"21090\": 2271,\n \"210945\": 2195,\n \"21097\": 2242,\n- \"211\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2203, 2210, 2211, 2212, 2254],\n+ \"211\": [2185, 2186, 2188, 2195, 2197, 2199, 2203, 2210, 2211, 2212, 2254],\n \"2110\": 2264,\n \"21101\": 2242,\n \"21103\": 2242,\n \"21104\": 2243,\n \"211056\": 2197,\n \"21106\": 2242,\n \"21107\": 2242,\n@@ -26181,15 +26179,15 @@\n \"21867\": 2246,\n \"218745\": 2207,\n \"21877\": 2246,\n \"218792\": 2230,\n \"21891\": 2246,\n \"21892\": 2289,\n \"218983\": 2217,\n- \"219\": [2185, 2186, 2188, 2195, 2197, 2199, 2210, 2211],\n+ \"219\": [2185, 2186, 2188, 2193, 2195, 2197, 2199, 2210, 2211],\n \"219049\": 2207,\n \"219115\": 2184,\n \"219182\": 2205,\n \"219217\": [2185, 2197, 2199, 2202, 2204],\n \"21925\": 2246,\n \"219296\": 2207,\n \"2193\": 2246,\n@@ -27814,15 +27812,15 @@\n \"29773\": 2277,\n \"297780\": 2197,\n \"29787\": 2265,\n \"297879\": 2207,\n \"297894\": 2207,\n \"2979\": 2216,\n \"29791\": 2265,\n- \"298\": [81, 2186, 2197, 2199, 2210, 2227],\n+ \"298\": [81, 2186, 2193, 2197, 2199, 2210, 2227],\n \"29801\": 2265,\n \"29812\": [2265, 2298],\n \"29820\": 2265,\n \"298329\": 2197,\n \"29853\": 2265,\n \"29857\": 2265,\n \"298599\": 2186,\n@@ -28256,15 +28254,15 @@\n \"319829\": 2207,\n \"31988\": 2267,\n \"31991\": 2271,\n \"31st\": 541,\n \"31t010101\": 2210,\n \"31t23\": [575, 893, 2186, 2246],\n \"32\": [15, 17, 18, 19, 28, 81, 183, 213, 219, 268, 293, 295, 544, 546, 645, 647, 761, 788, 956, 957, 962, 970, 973, 983, 990, 995, 997, 999, 1002, 1006, 1007, 1008, 1009, 1013, 1014, 1018, 1095, 1323, 1394, 1433, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2216, 2217, 2218, 2219, 2220, 2222, 2223, 2225, 2226, 2228, 2230, 2231, 2232, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2283, 2287, 2293, 2294, 2298, 2301, 2302],\n- \"320\": [111, 633, 2186, 2197, 2199, 2205, 2206, 2210],\n+ \"320\": [111, 633, 2186, 2197, 2199, 2206, 2210],\n \"320020\": 2207,\n \"320034\": 2201,\n \"32013\": 2271,\n \"32023\": 2271,\n \"3204\": 2199,\n \"320422\": 2191,\n \"320444\": 2207,\n@@ -28384,15 +28382,15 @@\n \"32668\": 2271,\n \"326687\": 15,\n \"32669\": 2271,\n \"32670\": 2271,\n \"32682\": 2271,\n \"32684\": 2271,\n \"32685\": 2268,\n- \"327\": [29, 2184, 2185, 2186, 2197, 2199, 2205, 2210, 2246, 2255],\n+ \"327\": [29, 2184, 2186, 2197, 2199, 2205, 2210, 2246, 2255],\n \"32727\": 2294,\n \"327364\": 2230,\n \"32747\": 2271,\n \"32749\": 2283,\n \"3275\": 2216,\n \"32755\": 2271,\n \"32761\": 2277,\n@@ -29414,15 +29412,15 @@\n \"37748\": 2277,\n \"37750\": 2289,\n \"377535\": 2186,\n \"37755\": 2276,\n \"37758\": 2277,\n \"377642\": 2210,\n \"37768\": 2277,\n- \"3777\": 2218,\n+ \"3777\": [2193, 2218],\n \"37782\": 2302,\n \"377887\": 2207,\n \"37799\": 2277,\n \"378\": [2186, 2197, 2199, 2207, 2210, 2231],\n \"3780\": 2222,\n \"37804\": 2283,\n \"378163\": 2207,\n@@ -29458,35 +29456,34 @@\n \"37983\": 2277,\n \"37984\": 2277,\n \"37996\": 2289,\n \"37999\": [2277, 2298],\n \"37ea63d540fd27274cad6585082c91b1283f963d\": 1491,\n \"38\": [15, 17, 18, 19, 23, 25, 28, 176, 179, 213, 788, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2217, 2218, 2219, 2220, 2222, 2225, 2226, 2228, 2230, 2231, 2232, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2283, 2298],\n \"380\": [3, 134, 2186, 2197, 2199, 2210],\n+ \"3801744976\": 2246,\n \"380204\": 2207,\n \"38028\": 2277,\n \"38032\": 2283,\n \"38038\": 2276,\n \"380396\": [2185, 2191, 2197, 2202, 2204],\n \"3804\": [2185, 2191, 2194, 2217],\n \"38041\": 2276,\n- \"3804690144\": 2246,\n \"3805\": [2185, 2191, 2194],\n \"38051\": 2277,\n- \"3805280448\": 2246,\n \"38053\": 2277,\n \"3806\": [2185, 2191, 2194],\n \"3807\": [2185, 2191, 2194],\n \"38071\": 2277,\n \"3808\": [2185, 2191, 2194],\n \"380863\": [2204, 2257],\n \"380871\": 2191,\n \"3809\": [2185, 2191, 2194],\n \"38098\": 2277,\n- \"381\": [2186, 2197, 2199, 2210, 2255],\n+ \"381\": [2186, 2197, 2199, 2205, 2210, 2255],\n \"3810\": [2185, 2191, 2194],\n \"38100\": 2289,\n \"3811\": [2185, 2191, 2194],\n \"38111\": 2277,\n \"381137\": 2207,\n \"381160\": 2191,\n \"3812\": [2185, 2191, 2194],\n@@ -29513,14 +29510,15 @@\n \"382242\": 2199,\n \"38225\": 2277,\n \"382263\": 2207,\n \"38227\": 2277,\n \"38234\": 2277,\n \"382459\": 2184,\n \"38247\": 2277,\n+ \"3825344832\": 2246,\n \"38254\": 2283,\n \"38268\": 2277,\n \"38271\": 2277,\n \"38274\": 2277,\n \"38278\": 2283,\n \"38282\": 2277,\n \"38286\": 2276,\n@@ -30088,15 +30086,15 @@\n \"40865\": 2283,\n \"4088\": 2224,\n \"408836\": 1299,\n \"408893\": 2207,\n \"4089\": 2217,\n \"40893\": 2302,\n \"40896\": 2283,\n- \"409\": [2186, 2193, 2199, 2210],\n+ \"409\": [2186, 2199, 2210],\n \"4090\": 2217,\n \"40904\": 2283,\n \"40908\": 2283,\n \"40912316\": [182, 760],\n \"40918\": 2283,\n \"4092\": 2217,\n \"409204\": 2219,\n@@ -30137,15 +30135,15 @@\n \"410599\": 2207,\n \"41062\": 2294,\n \"41069\": 2283,\n \"41074\": 2282,\n \"410835\": [2185, 2197, 2199, 2202, 2215, 2257],\n \"41090\": 2302,\n \"41098\": 2283,\n- \"411\": [2186, 2199, 2207, 2210],\n+ \"411\": [2186, 2193, 2199, 2207, 2210],\n \"4110\": 2219,\n \"411013\": 2191,\n \"41108\": 2283,\n \"41111\": 2283,\n \"41118\": 2298,\n \"4112\": 2218,\n \"411202\": 2199,\n@@ -31019,15 +31017,15 @@\n \"44752\": 2289,\n \"44764\": 2294,\n \"44766\": 2289,\n \"44772\": 2289,\n \"44779\": 2257,\n \"44787\": 2294,\n \"44793\": 2289,\n- \"448\": [2199, 2210, 2249],\n+ \"448\": [2193, 2199, 2210, 2249],\n \"4480\": 2218,\n \"44802\": 2294,\n \"44818\": 2289,\n \"4482\": 2218,\n \"44821\": 2289,\n \"44826\": 2289,\n \"4486\": 2218,\n@@ -31108,15 +31106,15 @@\n \"45162\": 2294,\n \"45170\": 2289,\n \"45174\": 2289,\n \"45180\": 2289,\n \"451849\": 2199,\n \"4519\": 2218,\n \"451921\": 2207,\n- \"452\": [2193, 2199, 2207, 2210, 2249],\n+ \"452\": [2199, 2207, 2210, 2249],\n \"4520\": [176, 179, 2218],\n \"452012\": 2207,\n \"45218\": 2294,\n \"452214\": 2199,\n \"45224\": 2294,\n \"45227\": 2289,\n \"45236\": 2294,\n@@ -31297,15 +31295,15 @@\n \"45967\": 2294,\n \"45981\": 2298,\n \"459855\": 2207,\n \"45986\": [2294, 2298],\n \"45991\": 2294,\n \"45999\": 2294,\n \"46\": [17, 19, 23, 29, 278, 331, 686, 904, 1323, 2184, 2185, 2186, 2188, 2190, 2191, 2193, 2194, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2277, 2283, 2297, 2302],\n- \"460\": [2199, 2205, 2210],\n+ \"460\": [2193, 2199, 2210],\n \"46001\": 2294,\n \"4601\": 2218,\n \"46015\": 2294,\n \"46018\": 2291,\n \"46026\": 2294,\n \"46037\": 2291,\n \"4604\": 2218,\n@@ -31412,15 +31410,15 @@\n \"46471\": 2298,\n \"46476\": [2294, 2298],\n \"464776\": 2210,\n \"46479\": 2294,\n \"4648\": [2199, 2218],\n \"464804\": 2207,\n \"46485\": 2294,\n- \"465\": [2199, 2205, 2210],\n+ \"465\": [2199, 2210],\n \"4651\": 2218,\n \"46518\": [2294, 2298],\n \"46519\": 2294,\n \"465222\": 2199,\n \"46527\": 2294,\n \"46551\": 2294,\n \"465520\": 2207,\n@@ -32166,15 +32164,15 @@\n \"50361\": 2298,\n \"503656\": 2207,\n \"50369\": 2298,\n \"50370\": 2298,\n \"503712\": 2207,\n \"503789\": 2207,\n \"50395\": 2307,\n- \"504\": 2199,\n+ \"504\": [2193, 2199],\n \"50405\": 2302,\n \"504067\": 2207,\n \"50411\": 2298,\n \"50413\": 2298,\n \"50417\": 2298,\n \"504292\": 2207,\n \"50430\": 2298,\n@@ -32402,15 +32400,15 @@\n \"5156\": [2192, 2197, 2218],\n \"5157\": [2192, 2197],\n \"51574\": 2302,\n \"51575\": 2302,\n \"5158\": [2192, 2197],\n \"51583\": 2298,\n \"5159\": [2192, 2197],\n- \"516\": [2194, 2199, 2201, 2203, 2283, 2294, 2307],\n+ \"516\": [2193, 2194, 2199, 2201, 2203, 2283, 2294, 2307],\n \"5160\": [2192, 2197],\n \"51609\": 2302,\n \"5161\": [2192, 2197],\n \"51612\": 2302,\n \"516278\": 2207,\n \"51629\": 2302,\n \"51630\": 2302,\n@@ -32843,15 +32841,15 @@\n \"53746\": 2302,\n \"53747\": 2302,\n \"53767\": 2302,\n \"5377\": 2271,\n \"53786\": 2302,\n \"537874\": 2207,\n \"53792\": 2302,\n- \"538\": [2191, 2199],\n+ \"538\": [2191, 2199, 2205],\n \"53806\": 2302,\n \"53811\": 2302,\n \"53831\": 2302,\n \"53832\": 2302,\n \"53846\": 2304,\n \"538468\": 2210,\n \"53854\": 2302,\n@@ -32939,15 +32937,15 @@\n \"54341\": 2302,\n \"54346\": 2302,\n \"5436\": 2224,\n \"5437\": 2218,\n \"54371\": 2302,\n \"54379\": 2302,\n \"54383\": 2302,\n- \"544\": 2199,\n+ \"544\": [2199, 2205],\n \"5441\": 2218,\n \"5443\": 2219,\n \"54430\": 2302,\n \"54443\": 2302,\n \"54459\": 2307,\n \"54466\": 2308,\n \"54467\": 2307,\n@@ -34261,15 +34259,15 @@\n \"6681\": 2220,\n \"668149\": 2199,\n \"668157\": 2207,\n \"6685\": 2220,\n \"668777\": 2207,\n \"6689\": 2220,\n \"668909\": 2207,\n- \"669\": 2199,\n+ \"669\": [2199, 2218],\n \"669046\": 1198,\n \"669052\": [2184, 2214],\n \"669567\": 2207,\n \"669692\": 2197,\n \"6697\": 2298,\n \"669700\": 2207,\n \"669934\": 2216,\n@@ -34285,14 +34283,15 @@\n \"6710\": 2235,\n \"671233\": 2199,\n \"671496\": 2207,\n \"6715\": 2220,\n \"6716\": 2220,\n \"671824\": 2207,\n \"6719\": 2220,\n+ \"672\": 2193,\n \"672808\": 2201,\n \"672848\": 2207,\n \"673145\": 2215,\n \"6732\": 2220,\n \"6733\": 2220,\n \"6734\": 2220,\n \"6736\": 2226,\n@@ -34543,15 +34542,15 @@\n \"6999\": 2220,\n \"6em\": 2207,\n \"6f\": [1309, 1326],\n \"6h\": 1497,\n \"6me\": 2195,\n \"6th\": 2298,\n \"7\": [10, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 63, 65, 68, 72, 73, 74, 89, 92, 106, 108, 111, 113, 120, 122, 133, 136, 137, 141, 160, 163, 169, 185, 186, 193, 196, 197, 202, 203, 208, 212, 213, 219, 228, 234, 240, 248, 259, 265, 267, 273, 278, 280, 284, 346, 353, 384, 392, 395, 400, 414, 415, 568, 577, 583, 586, 601, 603, 616, 628, 632, 635, 697, 708, 712, 717, 738, 741, 758, 762, 768, 771, 782, 787, 788, 794, 807, 816, 846, 881, 890, 895, 896, 900, 904, 907, 912, 982, 984, 1073, 1075, 1103, 1147, 1150, 1151, 1153, 1157, 1163, 1165, 1170, 1171, 1173, 1176, 1180, 1185, 1188, 1191, 1193, 1197, 1199, 1200, 1205, 1206, 1209, 1210, 1212, 1214, 1220, 1222, 1227, 1228, 1233, 1239, 1246, 1249, 1252, 1254, 1258, 1260, 1261, 1265, 1267, 1268, 1269, 1270, 1273, 1277, 1278, 1279, 1284, 1288, 1293, 1295, 1297, 1304, 1318, 1320, 1321, 1334, 1335, 1337, 1343, 1347, 1369, 1384, 1397, 1406, 1416, 1430, 1433, 1440, 1446, 1447, 1448, 1454, 1456, 1463, 1478, 1479, 1490, 1699, 1720, 2166, 2184, 2185, 2186, 2187, 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, 2221, 2222, 2223, 2224, 2225, 2226, 2228, 2229, 2230, 2231, 2232, 2235, 2238, 2239, 2240, 2241, 2242, 2243, 2245, 2246, 2247, 2248, 2249, 2264, 2265, 2271, 2277, 2278, 2283, 2286, 2289, 2294, 2298, 2302, 2307],\n- \"70\": [15, 17, 19, 74, 188, 189, 583, 764, 765, 1198, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2271],\n+ \"70\": [15, 17, 19, 74, 188, 189, 583, 764, 765, 1198, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2271],\n \"700\": [74, 583, 2199, 2261],\n \"70000\": 2201,\n \"700000\": [1320, 2201],\n \"700301\": 2207,\n \"701\": 2199,\n \"701025\": 2207,\n \"7011\": 2220,\n@@ -34766,15 +34765,15 @@\n \"729\": [16, 17, 18, 19, 2197, 2199, 2231, 2235],\n \"729161\": 2199,\n \"7292\": 2241,\n \"7297\": 2221,\n \"7299\": 2221,\n \"729907\": 2186,\n \"72hr\": 234,\n- \"73\": [15, 17, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2271],\n+ \"73\": [15, 17, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2204, 2205, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2238, 2241, 2246, 2271],\n \"730\": [16, 17, 18, 19, 2199, 2235],\n \"7300\": 2221,\n \"730057\": 2195,\n \"7302\": 2221,\n \"7306\": 2221,\n \"7308\": 2294,\n \"730951\": 2257,\n@@ -34996,15 +34995,15 @@\n \"759104\": 2185,\n \"7592\": 2221,\n \"759328\": 2199,\n \"759606\": 2199,\n \"759644\": 2222,\n \"7599\": 2228,\n \"75th\": [107, 629, 1164, 1221],\n- \"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],\n+ \"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],\n \"760\": [32, 2298],\n \"7601\": 2221,\n \"760109\": 2195,\n \"7606\": 2221,\n \"760643\": 2199,\n \"7609\": 2221,\n \"760970\": 2207,\n@@ -35406,25 +35405,27 @@\n \"811999\": 2207,\n \"812\": [2200, 2283],\n \"8121\": 2222,\n \"812101\": 2207,\n \"8122\": 2222,\n \"812436\": 2195,\n \"812500\": 18,\n+ \"812513\": 2228,\n \"8128\": 2222,\n \"8129\": 2222,\n \"813\": [2199, 2200, 2298],\n \"8131\": 2222,\n \"8132\": 2222,\n \"813266\": 2257,\n \"813360\": 2199,\n+ \"813469\": 2228,\n \"8138\": 2241,\n \"813850\": [15, 2185, 2197, 2199, 2202, 2215, 2257],\n \"813893\": 2207,\n- \"814\": [2199, 2298],\n+ \"814\": [2193, 2199, 2298],\n \"8140\": 2222,\n \"8143\": 2222,\n \"814347\": 2186,\n \"814397\": 2207,\n \"814470\": [2184, 2214],\n \"814788\": 2207,\n \"814869\": 2207,\n@@ -35948,15 +35949,15 @@\n \"889\": [24, 25, 32, 2199],\n \"8890\": [2224, 2225],\n \"889157\": 2235,\n \"889273\": 2235,\n \"889493\": 2186,\n \"889659\": 2186,\n \"889987\": 2205,\n- \"89\": [207, 781, 1433, 2184, 2185, 2186, 2188, 2191, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2298],\n+ \"89\": [207, 781, 1433, 2184, 2185, 2186, 2188, 2191, 2193, 2195, 2197, 2199, 2200, 2201, 2202, 2203, 2204, 2207, 2208, 2209, 2210, 2211, 2212, 2218, 2220, 2222, 2226, 2228, 2230, 2232, 2235, 2241, 2246, 2298],\n \"890\": [24, 25, 32, 2197, 2199],\n \"8904\": 2224,\n \"890546\": 2186,\n \"890819\": 2206,\n \"8909\": 2224,\n \"891\": [24, 25, 28, 32, 2197, 2199],\n \"8910\": [2243, 2246],\n@@ -36605,15 +36606,14 @@\n \"986248\": 15,\n \"986678\": 2204,\n \"987\": 2205,\n \"987309\": 2210,\n \"987349\": 2186,\n \"9874\": 2226,\n \"987713\": 2207,\n- \"987795\": 2228,\n \"988\": 2205,\n \"988045\": 2199,\n \"988138\": 2235,\n \"9882\": 2228,\n \"988387\": [2191, 2197],\n \"9885\": 2226,\n \"988537\": 2207,\n@@ -36645,15 +36645,14 @@\n \"991946\": [2220, 2230],\n \"991993\": 2214,\n \"992\": [1343, 2199, 2205, 2230],\n \"992033\": 2205,\n \"992052\": 2207,\n \"9921\": 2226,\n \"9923\": 2202,\n- \"992478\": 2228,\n \"9925\": 2226,\n \"9926\": 2227,\n \"9927\": 2226,\n \"993\": [2185, 2199, 2230],\n \"9930\": 2235,\n \"993103\": 18,\n \"993865\": 2191,\n@@ -37724,15 +37723,15 @@\n \"barboursvil\": 2199,\n \"bare\": [2, 2199, 2222, 2241, 2277],\n \"barf\": 2217,\n \"barh\": [26, 186, 188, 762, 764, 1188, 1249, 2211, 2220, 2221, 2228, 2260, 2294],\n \"bark\": 1365,\n \"barplot\": 2222,\n \"barycentr\": [146, 720, 1280, 2201, 2218],\n- \"base\": [1, 3, 4, 5, 10, 11, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 31, 32, 34, 49, 65, 83, 84, 88, 107, 111, 112, 121, 127, 136, 137, 138, 141, 142, 144, 147, 157, 160, 184, 187, 212, 213, 218, 224, 240, 248, 253, 276, 278, 279, 285, 286, 288, 296, 318, 328, 331, 345, 352, 415, 433, 445, 459, 478, 540, 568, 573, 594, 595, 600, 629, 633, 639, 652, 673, 686, 696, 703, 712, 714, 717, 718, 732, 738, 754, 757, 763, 787, 788, 793, 816, 823, 836, 837, 838, 839, 840, 841, 842, 843, 844, 881, 886, 902, 904, 905, 913, 938, 940, 943, 948, 952, 1031, 1040, 1052, 1068, 1073, 1075, 1119, 1125, 1141, 1148, 1149, 1164, 1173, 1193, 1207, 1208, 1221, 1242, 1243, 1254, 1265, 1269, 1270, 1286, 1342, 1343, 1398, 1423, 1431, 1444, 1453, 1467, 1470, 1474, 1475, 1498, 1519, 1537, 1556, 1574, 1593, 1614, 1633, 1650, 1672, 1693, 1715, 1736, 1754, 1772, 1789, 1808, 1830, 1853, 1870, 1890, 1908, 1926, 1943, 1960, 1978, 1995, 2013, 2032, 2050, 2068, 2086, 2103, 2121, 2141, 2159, 2163, 2166, 2183, 2184, 2185, 2187, 2188, 2191, 2192, 2194, 2195, 2196, 2199, 2200, 2201, 2203, 2207, 2208, 2210, 2211, 2212, 2213, 2214, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2226, 2228, 2229, 2230, 2231, 2232, 2235, 2236, 2238, 2240, 2241, 2246, 2249, 2253, 2255, 2261, 2264, 2265, 2274, 2277, 2283, 2291, 2298, 2302],\n+ \"base\": [1, 3, 4, 5, 10, 11, 13, 16, 17, 18, 19, 20, 21, 22, 23, 25, 31, 32, 34, 49, 65, 83, 84, 88, 107, 111, 112, 121, 127, 136, 137, 138, 141, 142, 144, 147, 157, 160, 184, 187, 212, 213, 218, 224, 240, 248, 253, 276, 278, 279, 285, 286, 288, 296, 318, 328, 331, 345, 352, 415, 433, 445, 459, 478, 540, 568, 573, 594, 595, 600, 629, 633, 639, 652, 673, 686, 696, 703, 712, 714, 717, 718, 732, 738, 754, 757, 763, 787, 788, 793, 816, 823, 836, 837, 838, 839, 840, 841, 842, 843, 844, 881, 886, 902, 904, 905, 913, 938, 940, 943, 948, 952, 1031, 1040, 1052, 1068, 1073, 1075, 1119, 1125, 1141, 1148, 1149, 1164, 1173, 1193, 1207, 1208, 1221, 1242, 1243, 1254, 1265, 1269, 1270, 1286, 1342, 1343, 1398, 1423, 1431, 1444, 1453, 1467, 1470, 1474, 1475, 1498, 1519, 1537, 1556, 1574, 1593, 1614, 1633, 1650, 1672, 1693, 1715, 1736, 1754, 1772, 1789, 1808, 1830, 1853, 1870, 1890, 1908, 1926, 1943, 1960, 1978, 1995, 2013, 2032, 2050, 2068, 2086, 2103, 2121, 2141, 2159, 2163, 2166, 2183, 2184, 2185, 2187, 2188, 2191, 2192, 2193, 2194, 2195, 2196, 2199, 2200, 2201, 2203, 2207, 2208, 2210, 2211, 2212, 2213, 2214, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2226, 2228, 2229, 2230, 2231, 2232, 2235, 2236, 2238, 2240, 2241, 2246, 2249, 2253, 2255, 2261, 2264, 2265, 2274, 2277, 2283, 2291, 2298, 2302],\n \"base_dtyp\": 2199,\n \"base_pars\": 2199,\n \"base_typ\": [2194, 2201, 2203, 2294, 2302, 2307],\n \"basebal\": [15, 2186, 2191, 2197, 2227, 2231],\n \"baseblockmanag\": [2197, 2199, 2298],\n \"basebooleanreducetest\": 2307,\n \"basebuff\": [16, 17, 18, 19, 2199, 2235],\n@@ -40259,15 +40258,15 @@\n \"get_indexer_non_uniqu\": [379, 2192, 2197, 2238, 2243, 2246, 2249, 2265, 2277, 2289],\n \"get_indexer_nonuniqu\": 2302,\n \"get_ipython\": 2193,\n \"get_item\": [2191, 2194],\n \"get_jit_argu\": 2212,\n \"get_letter_typ\": 2195,\n \"get_level_valu\": [1416, 2185, 2218, 2220, 2228, 2232, 2241, 2246, 2253, 2256],\n- \"get_loc\": [2, 362, 383, 426, 492, 2185, 2191, 2194, 2197, 2225, 2228, 2231, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2273, 2277, 2283, 2289, 2298, 2299],\n+ \"get_loc\": [2, 362, 383, 426, 492, 2185, 2191, 2193, 2194, 2197, 2225, 2228, 2231, 2235, 2238, 2241, 2246, 2249, 2265, 2271, 2273, 2277, 2283, 2289, 2298, 2299],\n \"get_loc_level\": 2246,\n \"get_local\": 2265,\n \"get_local_scop\": 2193,\n \"get_method\": [16, 17, 18, 19, 2199, 2235],\n \"get_near_stock_pric\": [2216, 2223],\n \"get_offset\": [2265, 2298],\n \"get_offset_nam\": [2230, 2238],\n"}]}, {"source1": "./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html", "source2": "./usr/share/doc/python-pandas-doc/html/user_guide/advanced.html", "unified_diff": "@@ -1849,25 +1849,25 @@\n In [141]: indexer = np.arange(10000)\n \n In [142]: random.shuffle(indexer)\n \n In [143]: %timeit arr[indexer]\n .....: %timeit arr.take(indexer, axis=0)\n .....: \n-167 us +- 327 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n-58.6 us +- 4.49 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+225 us +- 39.1 us per loop (mean +- std. dev. of 7 runs, 1,000 loops each)\n+78.7 us +- 1.88 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n \n \n
In [144]: ser = pd.Series(arr[:, 0])\n \n In [145]: %timeit ser.iloc[indexer]\n .....: %timeit ser.take(indexer)\n .....: \n-73 us +- 191 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n-68.9 us +- 3.01 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+106 us +- 2.42 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+98.1 us +- 5.56 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n
We have discussed MultiIndex
in the previous sections pretty extensively.\n Documentation about DatetimeIndex
and PeriodIndex
are shown here,\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1257,23 +1257,23 @@\n In [141]: indexer = np.arange(10000)\n \n In [142]: random.shuffle(indexer)\n \n In [143]: %timeit arr[indexer]\n .....: %timeit arr.take(indexer, axis=0)\n .....:\n-167 us +- 327 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n-58.6 us +- 4.49 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+225 us +- 39.1 us per loop (mean +- std. dev. of 7 runs, 1,000 loops each)\n+78.7 us +- 1.88 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n In [144]: ser = pd.Series(arr[:, 0])\n \n In [145]: %timeit ser.iloc[indexer]\n .....: %timeit ser.take(indexer)\n .....:\n-73 us +- 191 ns per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n-68.9 us +- 3.01 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+106 us +- 2.42 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n+98.1 us +- 5.56 us per loop (mean +- std. dev. of 7 runs, 10,000 loops each)\n *\b**\b**\b**\b**\b* I\bIn\bnd\bde\bex\bx t\bty\byp\bpe\bes\bs_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n We have discussed MultiIndex in the previous sections pretty extensively.\n Documentation about DatetimeIndex and PeriodIndex are shown _\bh_\be_\br_\be, and\n documentation about TimedeltaIndex is found _\bh_\be_\br_\be.\n In the following sub-sections we will highlight some other index types.\n *\b**\b**\b**\b* C\bCa\bat\bte\beg\bgo\bor\bri\bic\bca\bal\blI\bIn\bnd\bde\bex\bx_\b?\b\u00b6 *\b**\b**\b**\b*\n _\bC_\ba_\bt_\be_\bg_\bo_\br_\bi_\bc_\ba_\bl_\bI_\bn_\bd_\be_\bx is a type of index that is useful for supporting indexing with\n"}]}, {"source1": "./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html", "source2": "./usr/share/doc/python-pandas-doc/html/user_guide/enhancingperf.html", "unified_diff": "@@ -529,30 +529,30 @@\n ...: s += f(a + i * dx)\n ...: return s * dx\n ...: \n \n \n
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)\n-80.4 ms +- 120 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+80.7 ms +- 1.59 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)\n
Let\u2019s take a look and see where the time is spent during this operation\n using the prun ipython magic function:
\n# most time consuming 4 calls\n In [6]: %prun -l 4 df.apply(lambda x: integrate_f(x["a"], x["b"], x["N"]), axis=1) # noqa E999\n- 605946 function calls (605928 primitive calls) in 0.211 seconds\n+ 605946 function calls (605928 primitive calls) in 0.219 seconds\n \n Ordered by: internal time\n List reduced from 159 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 1000 0.117 0.000 0.187 0.000 <ipython-input-4-c2a74e076cf0>:1(integrate_f)\n+ 1000 0.123 0.000 0.193 0.000 <ipython-input-4-c2a74e076cf0>:1(integrate_f)\n 552423 0.070 0.000 0.070 0.000 <ipython-input-3-c138bdd570e3>:1(f)\n- 3000 0.004 0.000 0.015 0.000 series.py:1095(__getitem__)\n+ 3000 0.004 0.000 0.017 0.000 series.py:1095(__getitem__)\n 3000 0.003 0.000 0.007 0.000 series.py:1220(_get_value)\n
By far the majority of time is spend inside either integrate_f
or f
,\n hence we\u2019ll 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)\n-61 ms +- 67.1 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+70.6 ms +- 8.46 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)\n
This has improved the performance compared to the pure Python approach by one-third.
\nWe can annotate the function variables and return types as well as use cdef
\n@@ -595,36 +595,36 @@\n ....: for i in range(N):\n ....: s += f_typed(a + i * dx)\n ....: return s * dx\n ....: \n \n \n
In [11]: %timeit df.apply(lambda x: integrate_f_typed(x["a"], x["b"], x["N"]), axis=1)\n-7.76 ms +- 8.4 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+9.8 ms +- 1.55 ms per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
Annotating the functions with C types yields an over ten times performance improvement compared to\n the original Python implementation.
\nWhen re-profiling, time is spent creating a Series
from each row, and calling __getitem__
from both\n the index and the series (three times for each row). These Python function calls are expensive and\n can be improved by passing an np.ndarray
.
In [12]: %prun -l 4 df.apply(lambda x: integrate_f_typed(x["a"], x["b"], x["N"]), axis=1)\n- 52523 function calls (52505 primitive calls) in 0.023 seconds\n+ 52523 function calls (52505 primitive calls) in 0.025 seconds\n \n Ordered by: internal time\n List reduced from 157 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 3000 0.004 0.000 0.015 0.000 series.py:1095(__getitem__)\n- 3000 0.003 0.000 0.006 0.000 series.py:1220(_get_value)\n- 16098 0.002 0.000 0.003 0.000 {built-in method builtins.isinstance}\n- 1000 0.002 0.000 0.017 0.000 <string>:1(<lambda>)\n+ 3000 0.004 0.000 0.016 0.000 series.py:1095(__getitem__)\n+ 3000 0.003 0.000 0.007 0.000 series.py:1220(_get_value)\n+ 16098 0.003 0.000 0.003 0.000 {built-in method builtins.isinstance}\n+ 3000 0.002 0.000 0.003 0.000 base.py:3777(get_loc)\n
In [13]: %%cython\n ....: cimport numpy as np\n ....: import numpy as np\n ....: cdef double f_typed(double x) except? -2:\n ....: return x * (x - 1)\n@@ -659,33 +659,33 @@\n
This implementation creates an array of zeros and inserts the result\n of integrate_f_typed
applied over each row. Looping over an ndarray
is faster\n in Cython than looping over a Series
object.
Since apply_integrate_f
is typed to accept an np.ndarray
, Series.to_numpy()
\n 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())\n-1.57 ms +- 5.64 us per loop (mean +- std. dev. of 7 runs, 1,000 loops each)\n+2.48 ms +- 221 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
Performance has improved from the prior implementation by almost ten times.
\n \nThe majority of the time is now spent in apply_integrate_f
. Disabling Cython\u2019s boundscheck
\n 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())\n- 78 function calls in 0.002 seconds\n+ 78 function calls in 0.003 seconds\n \n Ordered by: internal time\n List reduced from 21 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 1 0.002 0.002 0.002 0.002 <string>:1(<module>)\n+ 1 0.003 0.003 0.003 0.003 <string>:1(<module>)\n 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n- 1 0.000 0.000 0.002 0.002 {built-in method builtins.exec}\n+ 1 0.000 0.000 0.003 0.003 {built-in method builtins.exec}\n 3 0.000 0.000 0.000 0.000 frame.py:4062(__getitem__)\n
In [16]: %%cython\n ....: cimport cython\n ....: cimport numpy as np\n ....: import numpy as np\n@@ -1117,19 +1117,19 @@\n compared to standard Python syntax for large DataFrame
. This engine requires the\n optional dependency numexpr
to be installed.\n The 'python'
engine is generally not useful except for testing\n other evaluation engines against it. You will achieve no performance\n benefits using eval()
with engine='python'
and may\n incur a performance hit.
\n In [40]: %timeit df1 + df2 + df3 + df4\n-7.61 ms +- 195 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+10 ms +- 411 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n In [41]: %timeit pd.eval("df1 + df2 + df3 + df4", engine="python")\n-8.1 ms +- 114 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+10.7 ms +- 672 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n \n \n The DataFrame.eval()
method\u00b6
\n In addition to the top level pandas.eval()
function you can also\n evaluate an expression in the \u201ccontext\u201d of a DataFrame
.
\n@@ -1244,39 +1244,39 @@\n In [58]: nrows, ncols = 20000, 100\n \n In [59]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols)) for _ in range(4)]\n
\n \n DataFrame
arithmetic:
\n In [60]: %timeit df1 + df2 + df3 + df4\n-7.61 ms +- 221 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+9.31 ms +- 516 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n In [61]: %timeit pd.eval("df1 + df2 + df3 + df4")\n-3.73 ms +- 80.7 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+5.89 ms +- 504 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n DataFrame
comparison:
\n In [62]: %timeit (df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)\n-17.5 ms +- 409 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+16.6 ms +- 460 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n In [63]: %timeit pd.eval("(df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)")\n-5.19 ms +- 32 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+8.36 ms +- 298 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n DataFrame
arithmetic with unaligned axes.
\n In [64]: s = pd.Series(np.random.randn(50))\n \n In [65]: %timeit df1 + df2 + df3 + df4 + s\n-23.8 ms +- 452 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+22.2 ms +- 814 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n
\n \n In [66]: %timeit pd.eval("df1 + df2 + df3 + df4 + s")\n-4.47 ms +- 116 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+6.48 ms +- 448 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n
\n \n \n Note
\n Operations such as
\n 1 and 2 # would parse to 1 & 2, but should evaluate to 2\n 3 or 4 # would parse to 3 | 4, but should evaluate to 3\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -113,31 +113,31 @@\n ...: dx = (b - a) / N\n ...: for i in range(N):\n ...: s += f(a + i * dx)\n ...: return s * dx\n ...:\n We achieve our result by using _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be_\b._\ba_\bp_\bp_\bl_\by_\b(_\b) (row-wise):\n In [5]: %timeit df.apply(lambda x: integrate_f(x[\"a\"], x[\"b\"], x[\"N\"]), axis=1)\n-80.4 ms +- 120 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+80.7 ms +- 1.59 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)\n Let\u2019s take a look and see where the time is spent during this operation using\n the _\bp_\br_\bu_\bn_\b _\bi_\bp_\by_\bt_\bh_\bo_\bn_\b _\bm_\ba_\bg_\bi_\bc_\b _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn:\n # most time consuming 4 calls\n In [6]: %prun -l 4 df.apply(lambda x: integrate_f(x[\"a\"], x[\"b\"], x[\"N\"]),\n axis=1) # noqa E999\n- 605946 function calls (605928 primitive calls) in 0.211 seconds\n+ 605946 function calls (605928 primitive calls) in 0.219 seconds\n \n Ordered by: internal time\n List reduced from 159 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 1000 0.117 0.000 0.187 0.000 :1\n+ 1000 0.123 0.000 0.193 0.000 :1\n (integrate_f)\n 552423 0.070 0.000 0.070 0.000 :1\n (f)\n- 3000 0.004 0.000 0.015 0.000 series.py:1095(__getitem__)\n+ 3000 0.004 0.000 0.017 0.000 series.py:1095(__getitem__)\n 3000 0.003 0.000 0.007 0.000 series.py:1220(_get_value)\n By far the majority of time is spend inside either integrate_f or f, hence\n we\u2019ll concentrate our efforts cythonizing these two functions.\n *\b**\b**\b**\b* P\bPl\bla\bai\bin\bn C\bCy\byt\bth\bho\bon\bn_\b?\b\u00b6 *\b**\b**\b**\b*\n First we\u2019re going to need to import the Cython magic function to IPython:\n In [7]: %load_ext Cython\n Now, let\u2019s simply copy our functions over to Cython:\n@@ -149,15 +149,15 @@\n ...: dx = (b - a) / N\n ...: for i in range(N):\n ...: s += f_plain(a + i * dx)\n ...: return s * dx\n ...:\n In [9]: %timeit df.apply(lambda x: integrate_f_plain(x[\"a\"], x[\"b\"], x[\"N\"]),\n axis=1)\n-61 ms +- 67.1 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+70.6 ms +- 8.46 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)\n This has improved the performance compared to the pure Python approach by one-\n third.\n *\b**\b**\b**\b* D\bDe\bec\bcl\bla\bar\bri\bin\bng\bg C\bC t\bty\byp\bpe\bes\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n We can annotate the function variables and return types as well as use cdef and\n cpdef to improve performance:\n In [10]: %%cython\n ....: cdef double f_typed(double x) except? -2:\n@@ -169,35 +169,35 @@\n ....: dx = (b - a) / N\n ....: for i in range(N):\n ....: s += f_typed(a + i * dx)\n ....: return s * dx\n ....:\n In [11]: %timeit df.apply(lambda x: integrate_f_typed(x[\"a\"], x[\"b\"], x[\"N\"]),\n axis=1)\n-7.76 ms +- 8.4 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+9.8 ms +- 1.55 ms per loop (mean +- std. dev. of 7 runs, 100 loops each)\n Annotating the functions with C types yields an over ten times performance\n improvement compared to the original Python implementation.\n *\b**\b**\b**\b* U\bUs\bsi\bin\bng\bg n\bnd\bda\bar\brr\bra\bay\by_\b?\b\u00b6 *\b**\b**\b**\b*\n When re-profiling, time is spent creating a _\bS_\be_\br_\bi_\be_\bs from each row, and calling\n __getitem__ from both the index and the series (three times for each row).\n These Python function calls are expensive and can be improved by passing an\n np.ndarray.\n In [12]: %prun -l 4 df.apply(lambda x: integrate_f_typed(x[\"a\"], x[\"b\"], x\n [\"N\"]), axis=1)\n- 52523 function calls (52505 primitive calls) in 0.023 seconds\n+ 52523 function calls (52505 primitive calls) in 0.025 seconds\n \n Ordered by: internal time\n List reduced from 157 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 3000 0.004 0.000 0.015 0.000 series.py:1095(__getitem__)\n- 3000 0.003 0.000 0.006 0.000 series.py:1220(_get_value)\n- 16098 0.002 0.000 0.003 0.000 {built-in method\n+ 3000 0.004 0.000 0.016 0.000 series.py:1095(__getitem__)\n+ 3000 0.003 0.000 0.007 0.000 series.py:1220(_get_value)\n+ 16098 0.003 0.000 0.003 0.000 {built-in method\n builtins.isinstance}\n- 1000 0.002 0.000 0.017 0.000 :1()\n+ 3000 0.002 0.000 0.003 0.000 base.py:3777(get_loc)\n In [13]: %%cython\n ....: cimport numpy as np\n ....: import numpy as np\n ....: cdef double f_typed(double x) except? -2:\n ....: return x * (x - 1)\n ....: cpdef double integrate_f_typed(double a, double b, int N):\n ....: cdef int i\n@@ -238,31 +238,31 @@\n This implementation creates an array of zeros and inserts the result of\n integrate_f_typed applied over each row. Looping over an ndarray is faster in\n Cython than looping over a _\bS_\be_\br_\bi_\be_\bs object.\n Since apply_integrate_f is typed to accept an np.ndarray, _\bS_\be_\br_\bi_\be_\bs_\b._\bt_\bo_\b__\bn_\bu_\bm_\bp_\by_\b(_\b)\n calls are needed to utilize this function.\n In [14]: %timeit apply_integrate_f(df[\"a\"].to_numpy(), df[\"b\"].to_numpy(), df\n [\"N\"].to_numpy())\n-1.57 ms +- 5.64 us per loop (mean +- std. dev. of 7 runs, 1,000 loops each)\n+2.48 ms +- 221 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n Performance has improved from the prior implementation by almost ten times.\n *\b**\b**\b**\b* D\bDi\bis\bsa\bab\bbl\bli\bin\bng\bg c\bco\bom\bmp\bpi\bil\ble\ber\br d\bdi\bir\bre\bec\bct\bti\biv\bve\bes\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n The majority of the time is now spent in apply_integrate_f. Disabling Cython\u2019s\n boundscheck and wraparound checks can yield more performance.\n In [15]: %prun -l 4 apply_integrate_f(df[\"a\"].to_numpy(), df[\"b\"].to_numpy(),\n df[\"N\"].to_numpy())\n- 78 function calls in 0.002 seconds\n+ 78 function calls in 0.003 seconds\n \n Ordered by: internal time\n List reduced from 21 to 4 due to restriction <4>\n \n ncalls tottime percall cumtime percall filename:lineno(function)\n- 1 0.002 0.002 0.002 0.002 :1()\n+ 1 0.003 0.003 0.003 0.003 :1()\n 1 0.000 0.000 0.000 0.000 {method 'disable' of\n '_lsprof.Profiler' objects}\n- 1 0.000 0.000 0.002 0.002 {built-in method builtins.exec}\n+ 1 0.000 0.000 0.003 0.003 {built-in method builtins.exec}\n 3 0.000 0.000 0.000 0.000 frame.py:4062(__getitem__)\n In [16]: %%cython\n ....: cimport cython\n ....: cimport numpy as np\n ....: import numpy as np\n ....: cdef np.float64_t f_typed(np.float64_t x) except? -2:\n ....: return x * (x - 1)\n@@ -649,17 +649,17 @@\n The 'numexpr' engine is the more performant engine that can yield performance\n improvements compared to standard Python syntax for large _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be. This\n engine requires the optional dependency numexpr to be installed.\n The 'python' engine is generally n\bno\bot\bt useful except for testing other evaluation\n engines against it. You will achieve n\bno\bo performance benefits using _\be_\bv_\ba_\bl_\b(_\b) with\n engine='python' and may incur a performance hit.\n In [40]: %timeit df1 + df2 + df3 + df4\n-7.61 ms +- 195 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+10 ms +- 411 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n In [41]: %timeit pd.eval(\"df1 + df2 + df3 + df4\", engine=\"python\")\n-8.1 ms +- 114 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+10.7 ms +- 672 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n *\b**\b**\b**\b* T\bTh\bhe\be _\bD\bD_\ba\ba_\bt\bt_\ba\ba_\bF\bF_\br\br_\ba\ba_\bm\bm_\be\be_\b.\b._\be\be_\bv\bv_\ba\ba_\bl\bl_\b(\b(_\b)\b) m\bme\bet\bth\bho\bod\bd_\b?\b\u00b6 *\b**\b**\b**\b*\n In addition to the top level _\bp_\ba_\bn_\bd_\ba_\bs_\b._\be_\bv_\ba_\bl_\b(_\b) function you can also evaluate an\n expression in the \u201ccontext\u201d of a _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be.\n In [42]: df = pd.DataFrame(np.random.randn(5, 2), columns=[\"a\", \"b\"])\n \n In [43]: df.eval(\"a + b\")\n Out[43]:\n@@ -756,29 +756,29 @@\n _\bp_\ba_\bn_\bd_\ba_\bs_\b._\be_\bv_\ba_\bl_\b(_\b) works well with expressions containing large arrays.\n In [58]: nrows, ncols = 20000, 100\n \n In [59]: df1, df2, df3, df4 = [pd.DataFrame(np.random.randn(nrows, ncols)) for\n _ in range(4)]\n _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be arithmetic:\n In [60]: %timeit df1 + df2 + df3 + df4\n-7.61 ms +- 221 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+9.31 ms +- 516 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n In [61]: %timeit pd.eval(\"df1 + df2 + df3 + df4\")\n-3.73 ms +- 80.7 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+5.89 ms +- 504 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be comparison:\n In [62]: %timeit (df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)\n-17.5 ms +- 409 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+16.6 ms +- 460 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n In [63]: %timeit pd.eval(\"(df1 > 0) & (df2 > 0) & (df3 > 0) & (df4 > 0)\")\n-5.19 ms +- 32 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+8.36 ms +- 298 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n _\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be arithmetic with unaligned axes.\n In [64]: s = pd.Series(np.random.randn(50))\n \n In [65]: %timeit df1 + df2 + df3 + df4 + s\n-23.8 ms +- 452 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n+22.2 ms +- 814 us per loop (mean +- std. dev. of 7 runs, 10 loops each)\n In [66]: %timeit pd.eval(\"df1 + df2 + df3 + df4 + s\")\n-4.47 ms +- 116 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n+6.48 ms +- 448 us per loop (mean +- std. dev. of 7 runs, 100 loops each)\n Note\n Operations such as\n 1 and 2 # would parse to 1 & 2, but should evaluate to 2\n 3 or 4 # would parse to 3 | 4, but should evaluate to 3\n ~1 # this is okay, but slower when using eval\n should be performed in Python. An exception will be raised if you try to\n perform any boolean/bitwise operations with scalar operands that are not of\n"}]}, {"source1": "./usr/share/doc/python-pandas-doc/html/user_guide/scale.html", "source2": "./usr/share/doc/python-pandas-doc/html/user_guide/scale.html", "unified_diff": "@@ -916,16 +916,16 @@\n ....: files = pathlib.Path("data/timeseries/").glob("ts*.parquet")\n ....: counts = pd.Series(dtype=int)\n ....: for path in files:\n ....: df = pd.read_parquet(path)\n ....: counts = counts.add(df["name"].value_counts(), fill_value=0)\n ....: counts.astype(int)\n ....: \n-CPU times: user 320 us, sys: 140 us, total: 460 us\n-Wall time: 465 us\n+CPU times: user 381 us, sys: 157 us, total: 538 us\n+Wall time: 544 us\n Out[32]: Series([], dtype: int32)\n
\n \n Some readers, like pandas.read_csv()
, offer parameters to control the\n chunksize
when reading a single file.
\n Manually chunking is an OK option for workflows that don\u2019t\n require too sophisticated of operations. Some operations, like pandas.DataFrame.groupby()
, are\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -633,16 +633,16 @@\n ....: files = pathlib.Path(\"data/timeseries/\").glob(\"ts*.parquet\")\n ....: counts = pd.Series(dtype=int)\n ....: for path in files:\n ....: df = pd.read_parquet(path)\n ....: counts = counts.add(df[\"name\"].value_counts(), fill_value=0)\n ....: counts.astype(int)\n ....:\n-CPU times: user 320 us, sys: 140 us, total: 460 us\n-Wall time: 465 us\n+CPU times: user 381 us, sys: 157 us, total: 538 us\n+Wall time: 544 us\n Out[32]: Series([], dtype: int32)\n Some readers, like _\bp_\ba_\bn_\bd_\ba_\bs_\b._\br_\be_\ba_\bd_\b__\bc_\bs_\bv_\b(_\b), offer parameters to control the chunksize\n when reading a single file.\n Manually chunking is an OK option for workflows that don\u2019t require too\n sophisticated of operations. Some operations, like _\bp_\ba_\bn_\bd_\ba_\bs_\b._\bD_\ba_\bt_\ba_\bF_\br_\ba_\bm_\be_\b._\bg_\br_\bo_\bu_\bp_\bb_\by_\b(_\b),\n are much harder to do chunkwise. In these cases, you may be better switching to\n a different library that implements these out-of-core algorithms for you.\n"}]}, {"source1": "./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz", "source2": "./usr/share/doc/python-pandas-doc/html/user_guide/style.ipynb.gz", "unified_diff": null, "details": [{"source1": "style.ipynb", "source2": "style.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9985610875706213%", "Differences: {\"'cells'\": \"{1: {'metadata': {'execution': {'iopub.execute_input': '2024-07-05T11:18:40.329317Z', \"", " \"'iopub.status.busy': '2024-07-05T11:18:40.328473Z', 'iopub.status.idle': \"", " \"'2024-07-05T11:18:40.785996Z', 'shell.execute_reply': \"", " \"'2024-07-05T11:18:40.785066Z'}}}, 3: {'metadata': {'execution': \"", " \"{'iopub.execute_input': '2024-07-05T11:18:40.789989Z', 'iopub.status.busy': \"", " \"'2024-07-05T11:18:40.789578Z', 'iopub.status.idle': '2024-07-05T11:18:4 [\u2026]"], "unified_diff": "@@ -39,18 +39,18 @@\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {\n \"execution\": {\n- \"iopub.execute_input\": \"2025-08-07T19:04:07.043106Z\",\n- \"iopub.status.busy\": \"2025-08-07T19:04:07.042934Z\",\n- \"iopub.status.idle\": \"2025-08-07T19:04:07.369252Z\",\n- \"shell.execute_reply\": \"2025-08-07T19:04:07.368634Z\"\n+ \"iopub.execute_input\": \"2024-07-05T11:18:40.329317Z\",\n+ \"iopub.status.busy\": \"2024-07-05T11:18:40.328473Z\",\n+ \"iopub.status.idle\": \"2024-07-05T11:18:40.785996Z\",\n+ \"shell.execute_reply\": \"2024-07-05T11:18:40.785066Z\"\n },\n \"nbsphinx\": \"hidden\"\n },\n \"outputs\": [],\n \"source\": [\n \"import matplotlib.pyplot\\n\",\n \"# We have this here to trigger matplotlib's font cache stuff.\\n\",\n@@ -77,36 +77,36 @@\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 2,\n \"metadata\": {\n \"execution\": {\n- \"iopub.execute_input\": \"2025-08-07T19:04:07.371916Z\",\n- \"iopub.status.busy\": \"2025-08-07T19:04:07.371665Z\",\n- \"iopub.status.idle\": \"2025-08-07T19:04:07.545046Z\",\n- \"shell.execute_reply\": \"2025-08-07T19:04:07.544568Z\"\n+ \"iopub.execute_input\": \"2024-07-05T11:18:40.789989Z\",\n+ \"iopub.status.busy\": \"2024-07-05T11:18:40.789578Z\",\n+ \"iopub.status.idle\": \"2024-07-05T11:18:41.021266Z\",\n+ \"shell.execute_reply\": \"2024-07-05T11:18:41.020263Z\"\n }\n },\n \"outputs\": [],\n \"source\": [\n \"import pandas as pd\\n\",\n \"import numpy as np\\n\",\n \"import matplotlib as mpl\\n\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 3,\n \"metadata\": {\n \"execution\": {\n- \"iopub.execute_input\": \"2025-08-07T19:04:07.547438Z\",\n- \"iopub.status.busy\": \"2025-08-07T19:04:07.547199Z\",\n- \"iopub.status.idle\": \"2025-08-07T19:04:07.589008Z\",\n- \"shell.execute_reply\": \"2025-08-07T19:04:07.588608Z\"\n+ \"iopub.execute_input\": \"2024-07-05T11:18:41.025312Z\",\n+ \"iopub.status.busy\": \"2024-07-05T11:18:41.024796Z\",\n+ \"iopub.status.idle\": \"2024-07-05T11:18:41.101839Z\",\n+ \"shell.execute_reply\": \"2024-07-05T11:18:41.100911Z\"\n },\n \"nbsphinx\": \"hidden\"\n },\n \"outputs\": [],\n \"source\": [\n \"# For reproducibility - this doesn't respect uuid_len or positionally-passed uuid but the places here that use that coincidentally bypass this anyway\\n\",\n \"from pandas.io.formats.style import Styler\\n\",\n@@ -123,18 +123,18 @@\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 4,\n \"metadata\": {\n \"execution\": {\n- \"iopub.execute_input\": \"2025-08-07T19:04:07.591123Z\",\n- \"iopub.status.busy\": \"2025-08-07T19:04:07.590776Z\",\n- \"iopub.status.idle\": \"2025-08-07T19:04:07.597645Z\",\n- \"shell.execute_reply\": \"2025-08-07T19:04:07.597315Z\"\n+ \"iopub.execute_input\": \"2024-07-05T11:18:41.105554Z\",\n+ \"iopub.status.busy\": \"2024-07-05T11:18:41.104973Z\",\n+ \"iopub.status.idle\": \"2024-07-05T11:18:41.117852Z\",\n+ \"shell.execute_reply\": \"2024-07-05T11:18:41.117131Z\"\n }\n },\n \"outputs\": [\n {\n \"data\": {\n \"text/html\": [\n \"