From f458ff80041e3975216cc7eea03d37f2c9b81a30 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 19 Nov 2023 19:27:22 +0000 Subject: [PATCH] add small squiggle_c makefile option, give some thoughts on squiggle(py) --- README.md | 16 ++++++--- squiggle.c/makefile | 11 ++++++ .../core/00_example_template/example.c | 1 - .../examples/core/01_one_sample/example.c | 1 - .../examples/core/02_time_to_botec/example | Bin 22000 -> 22016 bytes .../examples/core/02_time_to_botec/example.c | 33 +++--------------- .../core/03_gcc_nested_function/example.c | 1 - .../examples/core/04_gamma_beta/example.c | 1 - .../core/05_hundred_lognormals/example.c | 1 - .../more/00_example_template/example.c | 1 - .../more/01_sample_from_cdf/example.c | 1 - .../more/02_sample_from_cdf_beta/example | Bin 27520 -> 27520 bytes .../more/02_sample_from_cdf_beta/example.c | 1 - .../examples/more/03_ci_beta/example.c | 1 - .../examples/more/04_nuclear_war/example.c | 1 - .../examples/more/05_burn_10kg_fat/example.c | 1 - .../more/06_nuclear_recovery/example.c | 1 - .../examples/more/07_algebra/example.c | 1 - .../more/08_algebra_and_conversion/example.c | 1 - .../more/09_ergonomic_algebra/example.c | 1 - .../more/10_twitter_thread_example/example.c | 1 - .../11_billion_lognormals_paralell/example | Bin 27288 -> 27288 bytes .../11_billion_lognormals_paralell/example.c | 1 - .../more/12_time_to_botec_parallel/example | Bin 27448 -> 27448 bytes squiggle/makefile | 2 +- 25 files changed, 28 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 974b6a7d..7c21b712 100644 --- a/README.md +++ b/README.md @@ -77,17 +77,23 @@ Although the above paragraphs were written in the first person, the C code was w ### squiggle.c -squiggle.c is a minimalistic library focused on understandability and being self-contained. It grew from the initial C code in this repository. You can see the code for the library [here](https://git.nunosempere.com/personal/squiggle.c), and the code for the example we are discussing [here](https://git.nunosempere.com/personal/squiggle.c/src/branch/master/examples/02_many_samples_time_to_botec). +squiggle.c is a minimalistic library focused on understandability and being self-contained. I've put a bunch of thought into how to design this in a way which is clean and fast. It grew from the initial C code in this repository. You can see the code for the library [here](https://git.nunosempere.com/personal/squiggle.c), which contains a thoughful README which I recommend people doing Monte Carlo estimation stuff read. + +I like the [operator](http://duskos.org/#operator) section of [Dusk OS](http://duskos.org/): + +> Dusk OS doesn't have users, but operators. What's the difference? Control. You use a phone, you use a coffee machine, hell you even use a car these days. But you operate a bulldozer, you operate a crane, you operate a plane. ### NodeJS and Squiggle -Using [bun](https://bun.sh/) instead of node is actually a bit slower. Also, both the NodeJS and the Squiggle code use [stdlib](https://stdlib.io/) in their innards, which has a bunch of interleaved functions that make the code slower. It's possible that not using that external library could make the code faster. But at the same time, the js approach does seem to be to use external libraries whenever possible. +Using [bun](https://bun.sh/) instead of node is actually a bit slower. Also, both the NodeJS and the Squiggle code use [stdlib](https://stdlib.io/) in their innards, which has a bunch of interleaved functions that make the code slower. It's possible that not using that external library could make the code faster. But at the same time, the js approach does seem to be to use external libraries whenever possible. -I am not particularly sure that the Squiggle code is actually producing 1M samples, but I am also not in a rush to debug this. +I wasn't particularly sure that the Squiggle code was actually producing 1M samples, so I applied a [monkey patch](https://git.nunosempere.com/personal/time-to-botec/src/branch/master/squiggle/makefile#L14) to ensure this. In general, Squiggle tries to present a simple interface to the user, leading to "hiding the magic" and having a bunch of [bugs](https://github.com/quantified-uncertainty/squiggle/labels/Bug), whereas I think the right tradeoff for me is to have some simple interface that I can operate skillfully (i.e., squiggle.c). -### Python +### Python and Squigglepy -For the Python code, it's possible that the lack of speed is more a function of me not being as familiar with Python. It's also very possible that the code would run faster with [PyPy](https://doc.pypy.org). +For the Python code, it's possible that the lack of speed is more a function of me not being as familiar with Python. It's also very possible that the code would run faster with [PyPy](https://doc.pypy.org). + +In terms of complexity, SquigglePy seems to be between squiggle.c and the original squiggle. Like the original suqiggle, it also hides its stuff behind semi-magic wrappers, leading to e.g. ambiguities like around [correlated samples](https://git.nunosempere.com/personal/squiggle.c#correlated-samples) and generally having moving pieces that I don't understand. On the other hand, the code *is* short enough so that one person could read it in a few afternoons and roughly understand it. In terms of speed, SquigglePy seems slow. ### R diff --git a/squiggle.c/makefile b/squiggle.c/makefile index 4c79c003..b1fdbf33 100644 --- a/squiggle.c/makefile +++ b/squiggle.c/makefile @@ -14,3 +14,14 @@ build: time-linux: @echo "Running 100x and taking avg time: OMP_NUM_THREADS=16 $(OUTPUT)" @t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do OMP_NUM_THREADS=16 $(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 16 threads: |" | sed 's|$$|ms|' && echo + +install-small: + rm -r squiggle_c + git clone https://git.nunosempere.com/personal/squiggle.c + mv squiggle.c squiggle_c + sudo rm -r squiggle_c/.git + cp -r squiggle_c/examples/core/02_time_to_botec/example.c samples.c + sed -i 's|../../..|squiggle_c|' samples.c + +build-small: + gcc -O3 samples.c ./squiggle_c/squiggle.c -lm -o $(OUTPUT) diff --git a/squiggle.c/squiggle_c/examples/core/00_example_template/example.c b/squiggle.c/squiggle_c/examples/core/00_example_template/example.c index bcb38fda..41c7ef59 100644 --- a/squiggle.c/squiggle_c/examples/core/00_example_template/example.c +++ b/squiggle.c/squiggle_c/examples/core/00_example_template/example.c @@ -1,5 +1,4 @@ #include "../../../squiggle.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/core/01_one_sample/example.c b/squiggle.c/squiggle_c/examples/core/01_one_sample/example.c index 82480a93..ef3b90be 100644 --- a/squiggle.c/squiggle_c/examples/core/01_one_sample/example.c +++ b/squiggle.c/squiggle_c/examples/core/01_one_sample/example.c @@ -1,5 +1,4 @@ #include "../../../squiggle.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example b/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example index 93a714dec01ba37874c36897948b97e0a852437b..ec138993554c7190332f129336fe2510eb67417b 100755 GIT binary patch delta 1077 zcmZ8fUr5tY6ux(VD#dcY&3X4TskA>PSlgVSRFG?KQ(4PZ10!boV2sF`^bmvoIEY>% z&<-Iz1WHd)50hW7!ORzn0_(vZB5Dy)(Zg0f^bpdyzk3$A1G{JE`@Zv?bMIDq#HSwf z>Ak#nq5ZJ6p=wD!)S(t+rT#Bh7g^pR`D}-+*yp8aWgiD=_9{fl> zYcNYz!TX_jMDP=!g@m3YjgNYjlCd-dk-df`XHCp8q;O93ZJ0#%30BfSU)5WH`HYbvY}Liwwwu;uEL$>I5!)v!grgvi%t91`}CMT9+p0~9)D_) zd)C2hpQguAQ)%oZ9f8F@p=XHAH!1j}RpqNtMmB^#JLD_UYfvk@2Q6X2=cEH4 zhD2Dva@fOPLM|-yRdSqeRBE}SjL)X}Hx#jRBb1|pd*rEi;|#f9X}i)LBz+Kq5n+$Z z4Pe3I;whMn2>l$^8tNIngiSTEEX*T&le~N_3huyK#$9+Fk^9Q225>x=%?_RR-oJ>=(B4^M*I*IZT6{-&t2s@Hac zYBY=f|G!2CECPvsVNW8fZhp~J=g6_JP3gu-ehU`RaTbc`Xpm-^Pi`rHrN6 aLvCc^KQ{0Hq>=&t1!j`nd=ETNw*3R$#K7;kA zP-=(xT=bCLYuhaU{G2Kr$UgFQ-N^LaZ4Vy2Y+Sb&ci5Hz|G53IX85$P0Abwl$U1LW zh|NZq!y7g=xGA#Zefs_D+!qCIp35frYp z(t&Xr7m1G3$*i5NshvhhNO*uNy&>zS=h&Z!O}?^feIk2|O*p)x2ttbC8vPUJpQ+K; zEZrkYaW>%an<9vS7(Vf@e#>TdS&zRGZrx2Upi##QZ7RpXsV&%&lzJ!A*`Sh7+g0qw zL86W1(=2o$cotkL&f-*3!bQ^oLO4hJnDsn^D@hr>&7LK{%HL0Cb3JCg!n50k^T{T? z!s@zLW$otdkCx-AwcBy@h}0XX8`poj31XROl&IUL3ujHQUARazNz|M|yh+`%R|Rnr zp-<{LrfKdW$~2EXR6EHu%M%=8I%Cq@L#7K-$G2^ zb&j!K!FlTNEz=S1e}d@}ZV>&(^uAlktvti;W`_XSl9IYcU)K5$c=`?O5W+#C5vI-j z&8{%*!l{&mwCMmBa4sb~@|@|~sZx@hd5!gD_OHIzG_H{UJ*HW%8sw@Mmh)?j_O}{0 z`|p5rELRxG51o%2ZATrjolk|_)d`FYoT}0eoESJ)$MDk7xUn?w1h8V;Vib@6*a|T$ QWIEvkmNWZ6!!Mc0U$IZ9Hvj+t diff --git a/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example.c b/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example.c index 147a02fb..dd63ef35 100644 --- a/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example.c +++ b/squiggle.c/squiggle_c/examples/core/02_time_to_botec/example.c @@ -1,29 +1,7 @@ #include "../../../squiggle.h" -#include #include #include -// Estimate functions -double sample_0(uint64_t* seed) -{ - return 0; -} - -double sample_1(uint64_t* seed) -{ - return 1; -} - -double sample_few(uint64_t* seed) -{ - return sample_to(1, 3, seed); -} - -double sample_many(uint64_t* seed) -{ - return sample_to(2, 10, seed); -} - int main() { // set randomness seed @@ -34,6 +12,11 @@ int main() double p_b = 0.5; double p_c = p_a * p_b; + double sample_0(uint64_t* seed){ return 0; } + double sample_1(uint64_t* seed) { return 1; } + double sample_few(uint64_t* seed) { return sample_to(1, 3, seed); } + double sample_many(uint64_t* seed) { return sample_to(2, 10, seed); } + int n_dists = 4; double weights[] = { 1 - p_c, p_c / 2, p_c / 4, p_c / 4 }; double (*samplers[])(uint64_t*) = { sample_0, sample_1, sample_few, sample_many }; @@ -45,11 +28,5 @@ int main() } printf("Mean: %f\n", array_mean(result_many, n_samples)); - // printf("result_many: ["); - // for(int i=0; i<100; i++){ - // printf("%.2f, ", result_many[i]); - // } - // printf("]\n"); - free(seed); } diff --git a/squiggle.c/squiggle_c/examples/core/03_gcc_nested_function/example.c b/squiggle.c/squiggle_c/examples/core/03_gcc_nested_function/example.c index c8facb0d..54dcd0fd 100644 --- a/squiggle.c/squiggle_c/examples/core/03_gcc_nested_function/example.c +++ b/squiggle.c/squiggle_c/examples/core/03_gcc_nested_function/example.c @@ -1,5 +1,4 @@ #include "../../../squiggle.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/core/04_gamma_beta/example.c b/squiggle.c/squiggle_c/examples/core/04_gamma_beta/example.c index 979c1a86..024ab3ec 100644 --- a/squiggle.c/squiggle_c/examples/core/04_gamma_beta/example.c +++ b/squiggle.c/squiggle_c/examples/core/04_gamma_beta/example.c @@ -1,5 +1,4 @@ #include "../../../squiggle.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/core/05_hundred_lognormals/example.c b/squiggle.c/squiggle_c/examples/core/05_hundred_lognormals/example.c index 5b934213..eb8e07e4 100644 --- a/squiggle.c/squiggle_c/examples/core/05_hundred_lognormals/example.c +++ b/squiggle.c/squiggle_c/examples/core/05_hundred_lognormals/example.c @@ -1,5 +1,4 @@ #include "../../../squiggle.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/00_example_template/example.c b/squiggle.c/squiggle_c/examples/more/00_example_template/example.c index 8c3e1caa..9fa72f4d 100644 --- a/squiggle.c/squiggle_c/examples/more/00_example_template/example.c +++ b/squiggle.c/squiggle_c/examples/more/00_example_template/example.c @@ -1,6 +1,5 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/01_sample_from_cdf/example.c b/squiggle.c/squiggle_c/examples/more/01_sample_from_cdf/example.c index ffb7acc2..8f177908 100644 --- a/squiggle.c/squiggle_c/examples/more/01_sample_from_cdf/example.c +++ b/squiggle.c/squiggle_c/examples/more/01_sample_from_cdf/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/02_sample_from_cdf_beta/example b/squiggle.c/squiggle_c/examples/more/02_sample_from_cdf_beta/example index 1552b05a80b96659024ecd082564956ab04c52cb..ffb38833a6e98f19f36569b46f9b4949e7034167 100755 GIT binary patch delta 55 zcmZp;&e(9BaYF{Ph=ysBCKq?;E1!#I%g#@4PkXKG%D1_OnN5UIcXG3MKV#-*VF`Xl LM%~TIlCePmFF+C_ delta 55 zcmV-70LcG<*8zan0kCKT6mpXTdBwLhDF44SbK)IOzygP&F|&LF1{47 -#include #include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/03_ci_beta/example.c b/squiggle.c/squiggle_c/examples/more/03_ci_beta/example.c index 1dddc862..1ba8207a 100644 --- a/squiggle.c/squiggle_c/examples/more/03_ci_beta/example.c +++ b/squiggle.c/squiggle_c/examples/more/03_ci_beta/example.c @@ -1,6 +1,5 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/04_nuclear_war/example.c b/squiggle.c/squiggle_c/examples/more/04_nuclear_war/example.c index 11d961a1..90e9d4d2 100644 --- a/squiggle.c/squiggle_c/examples/more/04_nuclear_war/example.c +++ b/squiggle.c/squiggle_c/examples/more/04_nuclear_war/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/05_burn_10kg_fat/example.c b/squiggle.c/squiggle_c/examples/more/05_burn_10kg_fat/example.c index 728ca307..0914434b 100644 --- a/squiggle.c/squiggle_c/examples/more/05_burn_10kg_fat/example.c +++ b/squiggle.c/squiggle_c/examples/more/05_burn_10kg_fat/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/06_nuclear_recovery/example.c b/squiggle.c/squiggle_c/examples/more/06_nuclear_recovery/example.c index afc774bc..4caf57d3 100644 --- a/squiggle.c/squiggle_c/examples/more/06_nuclear_recovery/example.c +++ b/squiggle.c/squiggle_c/examples/more/06_nuclear_recovery/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/07_algebra/example.c b/squiggle.c/squiggle_c/examples/more/07_algebra/example.c index a6d30d09..65b5cd6d 100644 --- a/squiggle.c/squiggle_c/examples/more/07_algebra/example.c +++ b/squiggle.c/squiggle_c/examples/more/07_algebra/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/08_algebra_and_conversion/example.c b/squiggle.c/squiggle_c/examples/more/08_algebra_and_conversion/example.c index 0dfba6fb..3f2a2c73 100644 --- a/squiggle.c/squiggle_c/examples/more/08_algebra_and_conversion/example.c +++ b/squiggle.c/squiggle_c/examples/more/08_algebra_and_conversion/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/09_ergonomic_algebra/example.c b/squiggle.c/squiggle_c/examples/more/09_ergonomic_algebra/example.c index a9446835..0cd9adf6 100644 --- a/squiggle.c/squiggle_c/examples/more/09_ergonomic_algebra/example.c +++ b/squiggle.c/squiggle_c/examples/more/09_ergonomic_algebra/example.c @@ -1,7 +1,6 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" #include -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/10_twitter_thread_example/example.c b/squiggle.c/squiggle_c/examples/more/10_twitter_thread_example/example.c index 7d892e78..c7d8937e 100644 --- a/squiggle.c/squiggle_c/examples/more/10_twitter_thread_example/example.c +++ b/squiggle.c/squiggle_c/examples/more/10_twitter_thread_example/example.c @@ -1,6 +1,5 @@ #include "../../../squiggle.h" #include "../../../squiggle_more.h" -#include #include #include diff --git a/squiggle.c/squiggle_c/examples/more/11_billion_lognormals_paralell/example b/squiggle.c/squiggle_c/examples/more/11_billion_lognormals_paralell/example index 31ba715478ee9317737b88dd9ae76a7bb51ae396..81d03cddb59c518ae416fa7c5fb0276242283232 100755 GIT binary patch delta 2394 zcmZ8i4^)%a6@M=f3?d{D!j~^31V~5-h#^joc1nd3O{iFqzX2@PV#SqN=#EOeIc3;- z%rK{6cb;lDcW}y>q_z zyYK#c_uYHn`wm>82d>bdo=*0Q6N!1*Bs%iKskBj%zTx*($46f%?;zb5PPuG1zk2=1 zi8J9Hap_7Lfqs=hgW>*CW70<4^1Sjn z_=DC#-Ed8NoF0X}>3MV)98d40YRJ-A=RW^{u_<+v@{0oan<#4IySGoNHEyel^M(u1 z(|&kK*RFW@9~jj=Nh!?FI7HiEIKwjc%-6Ez3J13YjW91E+kpnRAy?Q!*FaEsSz*bC zk1}%S?z%6lGW$2GBX(4M8=lqM=3GXp+FS}%LMcs#h~7@m!K~hl!RkeuHU$;EuE>-+ zRgNn8t_{|TRdgR57Ojc5zLGt+!(YY1gmN1?O#vp_=n}9QD(DvIGFXMPd4#BYdlZCB zsn;c+#1)=Vc@o|>*l90ZGUTH6J%c$#K#BCTd$Pwguw>@Vo3V1`Cfr&Ygt|;Sy#_ln zKc$zT*_fGl-4YclCt#;hZ^*dI4KYfMoIyz$WoS%CA!IaT(IUp0tc6jN)Jm@88q0+Zk1yCOX$dLQP?IRm{S5u%QjWbmyG$(NlD>ei-FQ=IAmQ;0Y0%7 z(RxtjZP(s25HdJ}t$mtLUjKFJ6!hmksXK^#$vDo~8DtY_AyU#Yn9Q>!K8_NMT$ci7 zTQ5BVzqb9Hroa;WkCS>tLbj)&Z1GMwW6wxFrYFR8vC@Cb8(91<+^{#(XP_iMEAhS% z^^p7_Y|Q^N%?FcXFsT)Jvh6w;b-2>HG6<;*C|eMskx34)7EIE;peyX8dUzG*H{ot! zTfzsQV`M9!b^cl!fYAK)v$1kmKuKE>A!Q8}{*TM*EBtrM>dO2N>b-%YI%L;YIv#p= zkEGk%ox8s!GAFJOT^-9jGg7{e=;_SID)8&Bc$|G#)=U`h;GD5L|+`)MY{gQ*!Q{M zI%9hgM@AXDim1VJjUyIgrk2K|0pd%DAx!lNzWz5B6)`e~j+D5;7mU4v7(xsoX5VJ) zGGY(nIN}Imd;$iHZE8h~ATCcxLPKo-y~qf`{wE4)F$_J?NkiZ&7sPfvKB-F4>`^Eh zQ&bodE>Gb%02|7+j#ClF@JWjfF8K_gg^I|?bz9q@W9RCLX zQl3dKz!=Wspmba4W^lNj^Z+!u&B%Y*ZFZ9p6QTIo*i7Mc?8XdA?!Dtu;MB z3I7R^I1^3DZsI``{`^;>MmF4WSLq0*J11uAMGT?D2=yyh(@8kIas};z(Ur^S4477Z zM?r2t&8ioWHMFXbp1|1x8jp(3g6Of}KcmDWi2LwrHF9^IDcNnfoe{|kSe47L#bc&c z2zUg1jE{O&V@mIMJj$!L7*mF6(xv#s2wo&Uf*`J`qWbXn)^x`sjIK3PIs&xTNwdLK zD~Q!GJz1NOrAR2S7D3oh>%sr;TeaP^E1Xj|hf)nV>OC|FFV+i4`|H<>1BJ5L=9o2a z?KCtl1=_G4ABhbOPCR&jgCK_Rg7EPJ8AuN%M%ElcDSvDDSjv-&<5*0pfjbR6h{qcF z{FBDti5j!4@u)z*#UAEyUnf4CGLUsKDM^u*{@+u_5eKPgBC z^ftF*5Tnh4IBAj%R?0y3;6;+RPi+zKt~gqp_-Hk?c<3|X!!3}qe1`yW>L95Mg^ delta 2381 zcmZ8i4RBM(5x$cxBjF#(mSy=#){kvjvTO_40TMId#s-08Ffm|kOPF8-4$vlmlkgWH zgJK$jYD@%6W@sA*(Ui6f36n(46ha^}2@H_5artYZNw5oPo)b?kE2J@$%ymysWHP;( zci-Law|o0`_ukuomF~YvL-}-Ik1(RtT1aAOBiXc7mfKy_wkrOTaQRfl!DH8t9*uYJ z>pBzJnvyH0QP`u<(Lm&gVoWKNQ$oDKv)WMUxw4UYpEF~XszQn-)AhY^2_g)!A(KXq;A|0SE=1r1()3@Lr;fcr*@?*^FEAf zXVYw$mUntMa?=B+nb+bD=z~$%al%pwio@2Oief)8`?ex9a*!2vKzhWQ4?3i!(3c4&PCJ z5l-subT8b}7a=>%V9v6mM*PixB#%Wf(NL0+njrh}Xz>Dc8tilkb{RgSx8P?52IWXG z_vDu|*j@nMtZ0brE!I=o0dH8R(bwQBtCKzf`6U}P zY1q0a?qDmQ=94#gQ~VeXmCV*2(PJzX!;HO;Vj@n*m3V5e&8B<|6&SeI1TI@QjlkQs zebfXV`}64`fshS3sGGbSKC$Ozp2{br>QY1SOKKd_6X|Po4{V=;QAbryAdirSUip&VDL8ZN;?<|7AryjtSX2Tpi(7ju==kG_w%GjSJ;I(zAE*fzn;OEFxvYevs>tBkq|H+uQCo@t>$h&oz-_tzFc-c2+W3Er3 zQp);kxI$0gs7&|jS{r(6o^=vZ*HRz6R@Yn~{I+gkUGRRhx7XQ;;-&`2_ulQp3h~j% zUtABVAu3b9UAv2J3;dNaAA0Y)#MpVn5aJkO6fpzuMGVn`*m0S$Nr<5 zti8qtmKa=f8=vziTPBGJb}<>l#|j5#7_`-x$0vWJDa9P`gFnwO zV4n`*{3*!Y#ncB5w~OuszuS!R=iFw;80Pbdq#Zv+fjM1x18eakSpm;C^tm<0Vbn}T z&m_f2vn+ldG~s`M24tvV)ZM6!VcrXqwqC?HQIi49Gw09&I5hK7`~nQloJwzlan?jx zY!DXAT7#m#S>^P%I2VK3qo5)Po?8%ZsJ(H0)WlvX~! z(E59Um?g%80{sqqnEN46=hF$6|BL5rQfq;yeJ*_MLp~i1!3kW4VaVqa0#?b}NeRef zm|O0x7OMQZ`T_hx@!^tyEKX`;$&@{4&y`7eSA|4OR1B9}e(<)({|Ie|3;sXJVp`~4 zv;>0~T%;2QjFQ33 #include #include diff --git a/squiggle.c/squiggle_c/examples/more/12_time_to_botec_parallel/example b/squiggle.c/squiggle_c/examples/more/12_time_to_botec_parallel/example index 3507dd119afe523d361c6c98979225e176ab1209..6598573a53eb0cd360784278f623989c860dc6b9 100755 GIT binary patch delta 42 zcmV+_0M-Av)&aQI0kCKT6a?ms;hmYoXeJh4jgpbgOjV8Bma}{Vk30bivkX8iE2=>f A8vp