Skip to content

Commit 61b9a1e

Browse files
committed
re-wrote examples/howto_debugging.ipynb
1 parent d09ace6 commit 61b9a1e

File tree

2 files changed

+69
-44
lines changed

2 files changed

+69
-44
lines changed

examples/howto/howto_debugging.ipynb

+53-37
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
"(howto_debugging)=\n",
88
"# How to debug a model\n",
99
"\n",
10-
":::{post} July 11, 2016\n",
11-
":tags: \n",
10+
":::{post} August 2, 2022\n",
11+
":tags: debugging, aesara\n",
1212
":category: beginner\n",
13-
":author: Thomas Wiecki\n",
13+
":author: Thomas Wiecki, Igor Kuvychko\n",
1414
":::"
1515
]
1616
},
@@ -54,7 +54,7 @@
5454
"metadata": {},
5555
"source": [
5656
"### How to print intermediate values of `Aesara` functions\n",
57-
"Since `Aesara` functions are compiled to C, you have to use `aesara.printing.Print` class to print intermediate values (imported below as `Print`). Python `print` function will not work. Below is a simple example of using `Print`."
57+
"Since `Aesara` functions are compiled to C, you have to use `aesara.printing.Print` class to print intermediate values (imported below as `Print`). Python `print` function will not work. Below is a simple example of using `Print`. For more information, see {ref}`Debugging Aesara <aesara:debug_faq>`."
5858
]
5959
},
6060
{
@@ -233,10 +233,10 @@
233233
"<path fill=\"none\" stroke=\"black\" d=\"M54.0122,-8C54.0122,-8 128.012,-8 128.012,-8 134.012,-8 140.012,-14 140.012,-20 140.012,-20 140.012,-109.953 140.012,-109.953 140.012,-115.953 134.012,-121.953 128.012,-121.953 128.012,-121.953 54.0122,-121.953 54.0122,-121.953 48.0122,-121.953 42.0122,-115.953 42.0122,-109.953 42.0122,-109.953 42.0122,-20 42.0122,-20 42.0122,-14 48.0122,-8 54.0122,-8\"/>\r\n",
234234
"<text text-anchor=\"middle\" x=\"121.512\" y=\"-15.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">100</text>\r\n",
235235
"</g>\r\n",
236-
"<!-- mu -->\r\n",
237-
"<g id=\"node1\" class=\"node\"><title>mu</title>\r\n",
236+
"<!-- sd -->\r\n",
237+
"<g id=\"node1\" class=\"node\"><title>sd</title>\r\n",
238238
"<ellipse fill=\"none\" stroke=\"black\" cx=\"41.0122\" cy=\"-187.43\" rx=\"41.0244\" ry=\"37.4533\"/>\r\n",
239-
"<text text-anchor=\"middle\" x=\"41.0122\" y=\"-198.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">mu</text>\r\n",
239+
"<text text-anchor=\"middle\" x=\"41.0122\" y=\"-198.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">sd</text>\r\n",
240240
"<text text-anchor=\"middle\" x=\"41.0122\" y=\"-183.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">~</text>\r\n",
241241
"<text text-anchor=\"middle\" x=\"41.0122\" y=\"-168.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Normal</text>\r\n",
242242
"</g>\r\n",
@@ -247,28 +247,28 @@
247247
"<text text-anchor=\"middle\" x=\"91.0122\" y=\"-72.7767\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">~</text>\r\n",
248248
"<text text-anchor=\"middle\" x=\"91.0122\" y=\"-57.7767\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Normal</text>\r\n",
249249
"</g>\r\n",
250-
"<!-- mu&#45;&gt;obs -->\r\n",
251-
"<g id=\"edge1\" class=\"edge\"><title>mu&#45;&gt;obs</title>\r\n",
250+
"<!-- sd&#45;&gt;obs -->\r\n",
251+
"<g id=\"edge1\" class=\"edge\"><title>sd&#45;&gt;obs</title>\r\n",
252252
"<path fill=\"none\" stroke=\"black\" d=\"M56.5584,-152.554C61.2146,-142.408 66.3839,-131.143 71.2721,-120.492\"/>\r\n",
253253
"<polygon fill=\"black\" stroke=\"black\" points=\"74.4857,-121.88 75.4756,-111.332 68.1236,-118.961 74.4857,-121.88\"/>\r\n",
254254
"</g>\r\n",
255-
"<!-- sd -->\r\n",
256-
"<g id=\"node2\" class=\"node\"><title>sd</title>\r\n",
255+
"<!-- mu -->\r\n",
256+
"<g id=\"node2\" class=\"node\"><title>mu</title>\r\n",
257257
"<ellipse fill=\"none\" stroke=\"black\" cx=\"141.012\" cy=\"-187.43\" rx=\"41.0244\" ry=\"37.4533\"/>\r\n",
258-
"<text text-anchor=\"middle\" x=\"141.012\" y=\"-198.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">sd</text>\r\n",
258+
"<text text-anchor=\"middle\" x=\"141.012\" y=\"-198.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">mu</text>\r\n",
259259
"<text text-anchor=\"middle\" x=\"141.012\" y=\"-183.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">~</text>\r\n",
260260
"<text text-anchor=\"middle\" x=\"141.012\" y=\"-168.73\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Normal</text>\r\n",
261261
"</g>\r\n",
262-
"<!-- sd&#45;&gt;obs -->\r\n",
263-
"<g id=\"edge2\" class=\"edge\"><title>sd&#45;&gt;obs</title>\r\n",
262+
"<!-- mu&#45;&gt;obs -->\r\n",
263+
"<g id=\"edge2\" class=\"edge\"><title>mu&#45;&gt;obs</title>\r\n",
264264
"<path fill=\"none\" stroke=\"black\" d=\"M125.466,-152.554C120.81,-142.408 115.641,-131.143 110.752,-120.492\"/>\r\n",
265265
"<polygon fill=\"black\" stroke=\"black\" points=\"113.901,-118.961 106.549,-111.332 107.539,-121.88 113.901,-118.961\"/>\r\n",
266266
"</g>\r\n",
267267
"</g>\r\n",
268268
"</svg>\r\n"
269269
],
270270
"text/plain": [
271-
"<graphviz.dot.Digraph at 0x283dd8b7a60>"
271+
"<graphviz.dot.Digraph at 0x1c8897bb7c0>"
272272
]
273273
},
274274
"execution_count": 8,
@@ -307,7 +307,7 @@
307307
"traceback": [
308308
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
309309
"\u001b[1;31mSamplingError\u001b[0m Traceback (most recent call last)",
310-
"Input \u001b[1;32mIn [9]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m model:\n\u001b[0;32m 2\u001b[0m step \u001b[38;5;241m=\u001b[39m pm\u001b[38;5;241m.\u001b[39mMetropolis()\n\u001b[1;32m----> 3\u001b[0m trace \u001b[38;5;241m=\u001b[39m \u001b[43mpm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msample\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtune\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchains\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprogressbar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n",
310+
"Input \u001b[1;32mIn [9]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m model:\n\u001b[0;32m 2\u001b[0m step \u001b[38;5;241m=\u001b[39m pm\u001b[38;5;241m.\u001b[39mMetropolis()\n\u001b[1;32m----> 3\u001b[0m trace \u001b[38;5;241m=\u001b[39m \u001b[43mpm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msample\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtune\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchains\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprogressbar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_seed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mRANDOM_SEED\u001b[49m\u001b[43m)\u001b[49m\n",
311311
"File \u001b[1;32mc:\\users\\igork\\pycharmprojects\\pymc\\pymc\\sampling.py:558\u001b[0m, in \u001b[0;36msample\u001b[1;34m(draws, step, init, n_init, initvals, trace, chain_idx, chains, cores, tune, progressbar, model, random_seed, discard_tuned_samples, compute_convergence_checks, callback, jitter_max_retries, return_inferencedata, idata_kwargs, mp_ctx, **kwargs)\u001b[0m\n\u001b[0;32m 556\u001b[0m \u001b[38;5;66;03m# One final check that shapes and logps at the starting points are okay.\u001b[39;00m\n\u001b[0;32m 557\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ip \u001b[38;5;129;01min\u001b[39;00m initial_points:\n\u001b[1;32m--> 558\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcheck_start_vals\u001b[49m\u001b[43m(\u001b[49m\u001b[43mip\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 559\u001b[0m _check_start_shape(model, ip)\n\u001b[0;32m 561\u001b[0m sample_args \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 562\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdraws\u001b[39m\u001b[38;5;124m\"\u001b[39m: draws,\n\u001b[0;32m 563\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstep\u001b[39m\u001b[38;5;124m\"\u001b[39m: step,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 573\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdiscard_tuned_samples\u001b[39m\u001b[38;5;124m\"\u001b[39m: discard_tuned_samples,\n\u001b[0;32m 574\u001b[0m }\n",
312312
"File \u001b[1;32mc:\\users\\igork\\pycharmprojects\\pymc\\pymc\\model.py:1794\u001b[0m, in \u001b[0;36mModel.check_start_vals\u001b[1;34m(self, start)\u001b[0m\n\u001b[0;32m 1791\u001b[0m initial_eval \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpoint_logps(point\u001b[38;5;241m=\u001b[39melem)\n\u001b[0;32m 1793\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m(np\u001b[38;5;241m.\u001b[39misfinite(v) \u001b[38;5;28;01mfor\u001b[39;00m v \u001b[38;5;129;01min\u001b[39;00m initial_eval\u001b[38;5;241m.\u001b[39mvalues()):\n\u001b[1;32m-> 1794\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SamplingError(\n\u001b[0;32m 1795\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInitial evaluation of model at starting point failed!\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1796\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mStarting values:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00melem\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1797\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInitial evaluation results:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00minitial_eval\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1798\u001b[0m )\n",
313313
"\u001b[1;31mSamplingError\u001b[0m: Initial evaluation of model at starting point failed!\nStarting values:\n{'mu': array(0.), 'sd': array(0.)}\n\nInitial evaluation results:\n{'mu': -0.92, 'sd': -0.92, 'obs': -inf}"
@@ -317,7 +317,7 @@
317317
"source": [
318318
"with model:\n",
319319
" step = pm.Metropolis()\n",
320-
" trace = pm.sample(5, step, tune=0, chains=1, progressbar=False)"
320+
" trace = pm.sample(5, step, tune=0, chains=1, progressbar=False, random_seed=RANDOM_SEED)"
321321
]
322322
},
323323
{
@@ -353,8 +353,8 @@
353353
"Sampling 1 chain for 0 tune and 10 draw iterations (0 + 10 draws total) took 1 seconds.\n",
354354
"The chain contains only diverging samples. The model is probably misspecified.\n",
355355
"The acceptance probability does not match the target. It is 0, but should be close to 0.8. Try to increase the number of tuning steps.\n",
356-
"C:\\Users\\igork\\AppData\\Local\\Temp\\ipykernel_12548\\4125900813.py:15: UserWarning: The number of samples is too small to check convergence reliably.\n",
357-
" trace = pm.sample(draws=10, tune=0, chains=1, progressbar=False)\n"
356+
"C:\\Users\\igork\\AppData\\Local\\Temp\\ipykernel_14804\\1992602661.py:15: UserWarning: The number of samples is too small to check convergence reliably.\n",
357+
" trace = pm.sample(draws=10, tune=0, chains=1, progressbar=False, random_seed=RANDOM_SEED)\n"
358358
]
359359
}
360360
],
@@ -373,7 +373,7 @@
373373
" obs = pm.Normal(\"obs\", mu=mu, sigma=sd_print, observed=y)\n",
374374
"\n",
375375
" # limiting number of samples and chains to simplify output\n",
376-
" trace = pm.sample(draws=10, tune=0, chains=1, progressbar=False)\n",
376+
" trace = pm.sample(draws=10, tune=0, chains=1, progressbar=False, random_seed=RANDOM_SEED)\n",
377377
"\n",
378378
"output = mystdout.getvalue()\n",
379379
"sys.stdout = old_stdout # setting sys.stdout back"
@@ -389,7 +389,7 @@
389389
{
390390
"data": {
391391
"text/plain": [
392-
"'Delta __str__ = -54.43199718112248\\nDelta __str__ = -1.1969066124438048\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.1620686409762864\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.1443040735926475\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.1590583329992397\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.144378279326371\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.155458856808919\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.1737988603166447\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.148830433726576\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.1600681329922873\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.13866055296973\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = -2.159313289903775\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\nDelta __str__ = 0.4722068705115302\\n'"
392+
"'Delta __str__ = -85.74093608165128\\nDelta __str__ = -9.182002291671038\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.315734173890055\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.312485782438435\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.314669656412736\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.31581619157038\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.315114719133609\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.31511040479387\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.314077394936474\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.313673830463395\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.31561025339713\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = -9.31526569370057\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\nDelta __str__ = 0.10737295473067673\\n'"
393393
]
394394
},
395395
"execution_count": 11,
@@ -438,15 +438,15 @@
438438
{
439439
"data": {
440440
"text/plain": [
441-
"array([-54.43199718, -1.19690661, 0.47220687, 0.47220687,\n",
442-
" 0.47220687, -2.16206864, 0.47220687, -2.14430407,\n",
443-
" 0.47220687, -2.15905833, 0.47220687, -2.14437828,\n",
444-
" 0.47220687, -2.15545886, 0.47220687, -2.17379886,\n",
445-
" 0.47220687, -2.14883043, 0.47220687, -2.16006813,\n",
446-
" 0.47220687, -2.13866055, 0.47220687, -2.15931329,\n",
447-
" 0.47220687, 0.47220687, 0.47220687, 0.47220687,\n",
448-
" 0.47220687, 0.47220687, 0.47220687, 0.47220687,\n",
449-
" 0.47220687, 0.47220687])"
441+
"array([-85.74093608, -9.18200229, 0.10737295, 0.10737295,\n",
442+
" 0.10737295, -9.31573417, 0.10737295, -9.31248578,\n",
443+
" 0.10737295, -9.31466966, 0.10737295, -9.31581619,\n",
444+
" 0.10737295, -9.31511472, 0.10737295, -9.3151104 ,\n",
445+
" 0.10737295, -9.31407739, 0.10737295, -9.31367383,\n",
446+
" 0.10737295, -9.31561025, 0.10737295, -9.31526569,\n",
447+
" 0.10737295, 0.10737295, 0.10737295, 0.10737295,\n",
448+
" 0.10737295, 0.10737295, 0.10737295, 0.10737295,\n",
449+
" 0.10737295, 0.10737295])"
450450
]
451451
},
452452
"execution_count": 13,
@@ -485,6 +485,23 @@
485485
"output.shape"
486486
]
487487
},
488+
{
489+
"cell_type": "markdown",
490+
"metadata": {},
491+
"source": [
492+
"## Authors\n",
493+
"\n",
494+
"* Authored by Thomas Wiecki in July, 2016\n",
495+
"* Updated by Igor Kuvychko in August, 2022 ([pymc#406] (https://github.com/pymc-devs/pymc-examples/pull/406))"
496+
]
497+
},
498+
{
499+
"cell_type": "markdown",
500+
"metadata": {},
501+
"source": [
502+
"## Watermark"
503+
]
504+
},
488505
{
489506
"cell_type": "code",
490507
"execution_count": 15,
@@ -494,24 +511,23 @@
494511
"name": "stdout",
495512
"output_type": "stream",
496513
"text": [
497-
"Last updated: Sat Jul 30 2022\n",
514+
"Last updated: Tue Aug 02 2022\n",
498515
"\n",
499516
"Python implementation: CPython\n",
500517
"Python version : 3.10.5\n",
501518
"IPython version : 8.4.0\n",
502519
"\n",
503520
"aesara: 2.7.5\n",
504521
"xarray: 2022.3.0\n",
505-
"patsy : 0.5.2\n",
506522
"\n",
523+
"matplotlib: 3.5.2\n",
507524
"aesara : 2.7.5\n",
508-
"pandas : 1.4.3\n",
509525
"numpy : 1.23.0\n",
510-
"pymc : 4.1.2\n",
511-
"sys : 3.10.5 | packaged by conda-forge | (main, Jun 14 2022, 06:57:19) [MSC v.1929 64 bit (AMD64)]\n",
512-
"matplotlib: 3.5.2\n",
513526
"arviz : 0.12.1\n",
527+
"sys : 3.10.5 | packaged by conda-forge | (main, Jun 14 2022, 06:57:19) [MSC v.1929 64 bit (AMD64)]\n",
514528
"re : 2.2.1\n",
529+
"pandas : 1.4.3\n",
530+
"pymc : 4.1.2\n",
515531
"\n",
516532
"Watermark: 2.3.1\n",
517533
"\n"
@@ -520,7 +536,7 @@
520536
],
521537
"source": [
522538
"%load_ext watermark\n",
523-
"%watermark -n -u -v -iv -w -p aesara,xarray,patsy"
539+
"%watermark -n -u -v -iv -w -p aesara,xarray"
524540
]
525541
},
526542
{

0 commit comments

Comments
 (0)